<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[203953] trunk/Source/JavaScriptCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/203953">203953</a></dd>
<dt>Author</dt> <dd>utatane.tea@gmail.com</dd>
<dt>Date</dt> <dd>2016-07-31 00:04:57 -0700 (Sun, 31 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[ES6] Module binding can be exported by multiple names
https://bugs.webkit.org/show_bug.cgi?id=160343

Reviewed by Saam Barati.

ES6 Module can export the same local binding by using multiple names.
For example,

    ```
    var value = 42;

    export { value };
    export { value as value2 };
    ```

Currently, we only allowed one local binding to be exported with one name. So, in the above case,
the local binding &quot;value&quot; is exported as &quot;value2&quot; and &quot;value&quot; name is not exported. This is wrong.

To fix this issue, we collect the correspondence (local name =&gt; exported name) to the local bindings
in the parser. Previously, we only maintained the exported local bindings in the parser. And utilize
this information when creating the export entries in ModuleAnalyzer.

And this patch also moves ModuleScopeData from the Scope object to the Parser class since exported
names should be managed per-module, not per-scope.

This change fixes several test262 failures.

* JavaScriptCore.xcodeproj/project.pbxproj:
* parser/ModuleAnalyzer.cpp:
(JSC::ModuleAnalyzer::exportVariable):
(JSC::ModuleAnalyzer::analyze):
(JSC::ModuleAnalyzer::exportedBinding): Deleted.
(JSC::ModuleAnalyzer::declareExportAlias): Deleted.
* parser/ModuleAnalyzer.h:
* parser/ModuleScopeData.h: Copied from Source/JavaScriptCore/parser/ModuleAnalyzer.h.
(JSC::ModuleScopeData::create):
(JSC::ModuleScopeData::exportedBindings):
(JSC::ModuleScopeData::exportName):
(JSC::ModuleScopeData::exportBinding):
* parser/Nodes.cpp:
(JSC::ProgramNode::ProgramNode):
(JSC::ModuleProgramNode::ModuleProgramNode):
(JSC::EvalNode::EvalNode):
(JSC::FunctionNode::FunctionNode):
* parser/Nodes.h:
(JSC::ModuleProgramNode::moduleScopeData):
* parser/NodesAnalyzeModule.cpp:
(JSC::ExportDefaultDeclarationNode::analyzeModule):
(JSC::ExportNamedDeclarationNode::analyzeModule): Deleted.
* parser/Parser.cpp:
(JSC::Parser&lt;LexerType&gt;::Parser):
(JSC::Parser&lt;LexerType&gt;::parseModuleSourceElements):
(JSC::Parser&lt;LexerType&gt;::parseVariableDeclarationList):
(JSC::Parser&lt;LexerType&gt;::createBindingPattern):
(JSC::Parser&lt;LexerType&gt;::parseFunctionDeclaration):
(JSC::Parser&lt;LexerType&gt;::parseClassDeclaration):
(JSC::Parser&lt;LexerType&gt;::parseExportSpecifier):
(JSC::Parser&lt;LexerType&gt;::parseExportDeclaration):
* parser/Parser.h:
(JSC::Parser::exportName):
(JSC::Parser&lt;LexerType&gt;::parse):
(JSC::ModuleScopeData::create): Deleted.
(JSC::ModuleScopeData::exportedBindings): Deleted.
(JSC::ModuleScopeData::exportName): Deleted.
(JSC::ModuleScopeData::exportBinding): Deleted.
(JSC::Scope::Scope): Deleted.
(JSC::Scope::setSourceParseMode): Deleted.
(JSC::Scope::moduleScopeData): Deleted.
(JSC::Scope::setIsModule): Deleted.
* tests/modules/aliased-names.js: Added.
* tests/modules/aliased-names/main.js: Added.
(change):
* tests/stress/modules-syntax-error-with-names.js:
(export.Cocoa):
(SyntaxError.Cannot.export.a.duplicate.name):
* tests/test262.yaml:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserModuleAnalyzercpp">trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserModuleAnalyzerh">trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodescpp">trunk/Source/JavaScriptCore/parser/Nodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodesh">trunk/Source/JavaScriptCore/parser/Nodes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodesAnalyzeModulecpp">trunk/Source/JavaScriptCore/parser/NodesAnalyzeModule.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParsercpp">trunk/Source/JavaScriptCore/parser/Parser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserh">trunk/Source/JavaScriptCore/parser/Parser.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressmodulessyntaxerrorwithnamesjs">trunk/Source/JavaScriptCore/tests/stress/modules-syntax-error-with-names.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreteststest262yaml">trunk/Source/JavaScriptCore/tests/test262.yaml</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreparserModuleScopeDatah">trunk/Source/JavaScriptCore/parser/ModuleScopeData.h</a></li>
<li>trunk/Source/JavaScriptCore/tests/modules/aliased-names/</li>
<li><a href="#trunkSourceJavaScriptCoretestsmodulesaliasednamesmainjs">trunk/Source/JavaScriptCore/tests/modules/aliased-names/main.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsmodulesaliasednamesjs">trunk/Source/JavaScriptCore/tests/modules/aliased-names.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -1,3 +1,82 @@
</span><ins>+2016-07-31  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [ES6] Module binding can be exported by multiple names
+        https://bugs.webkit.org/show_bug.cgi?id=160343
+
+        Reviewed by Saam Barati.
+
+        ES6 Module can export the same local binding by using multiple names.
+        For example,
+
+            ```
+            var value = 42;
+
+            export { value };
+            export { value as value2 };
+            ```
+
+        Currently, we only allowed one local binding to be exported with one name. So, in the above case,
+        the local binding &quot;value&quot; is exported as &quot;value2&quot; and &quot;value&quot; name is not exported. This is wrong.
+
+        To fix this issue, we collect the correspondence (local name =&gt; exported name) to the local bindings
+        in the parser. Previously, we only maintained the exported local bindings in the parser. And utilize
+        this information when creating the export entries in ModuleAnalyzer.
+
+        And this patch also moves ModuleScopeData from the Scope object to the Parser class since exported
+        names should be managed per-module, not per-scope.
+
+        This change fixes several test262 failures.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * parser/ModuleAnalyzer.cpp:
+        (JSC::ModuleAnalyzer::exportVariable):
+        (JSC::ModuleAnalyzer::analyze):
+        (JSC::ModuleAnalyzer::exportedBinding): Deleted.
+        (JSC::ModuleAnalyzer::declareExportAlias): Deleted.
+        * parser/ModuleAnalyzer.h:
+        * parser/ModuleScopeData.h: Copied from Source/JavaScriptCore/parser/ModuleAnalyzer.h.
+        (JSC::ModuleScopeData::create):
+        (JSC::ModuleScopeData::exportedBindings):
+        (JSC::ModuleScopeData::exportName):
+        (JSC::ModuleScopeData::exportBinding):
+        * parser/Nodes.cpp:
+        (JSC::ProgramNode::ProgramNode):
+        (JSC::ModuleProgramNode::ModuleProgramNode):
+        (JSC::EvalNode::EvalNode):
+        (JSC::FunctionNode::FunctionNode):
+        * parser/Nodes.h:
+        (JSC::ModuleProgramNode::moduleScopeData):
+        * parser/NodesAnalyzeModule.cpp:
+        (JSC::ExportDefaultDeclarationNode::analyzeModule):
+        (JSC::ExportNamedDeclarationNode::analyzeModule): Deleted.
+        * parser/Parser.cpp:
+        (JSC::Parser&lt;LexerType&gt;::Parser):
+        (JSC::Parser&lt;LexerType&gt;::parseModuleSourceElements):
+        (JSC::Parser&lt;LexerType&gt;::parseVariableDeclarationList):
+        (JSC::Parser&lt;LexerType&gt;::createBindingPattern):
+        (JSC::Parser&lt;LexerType&gt;::parseFunctionDeclaration):
+        (JSC::Parser&lt;LexerType&gt;::parseClassDeclaration):
+        (JSC::Parser&lt;LexerType&gt;::parseExportSpecifier):
+        (JSC::Parser&lt;LexerType&gt;::parseExportDeclaration):
+        * parser/Parser.h:
+        (JSC::Parser::exportName):
+        (JSC::Parser&lt;LexerType&gt;::parse):
+        (JSC::ModuleScopeData::create): Deleted.
+        (JSC::ModuleScopeData::exportedBindings): Deleted.
+        (JSC::ModuleScopeData::exportName): Deleted.
+        (JSC::ModuleScopeData::exportBinding): Deleted.
+        (JSC::Scope::Scope): Deleted.
+        (JSC::Scope::setSourceParseMode): Deleted.
+        (JSC::Scope::moduleScopeData): Deleted.
+        (JSC::Scope::setIsModule): Deleted.
+        * tests/modules/aliased-names.js: Added.
+        * tests/modules/aliased-names/main.js: Added.
+        (change):
+        * tests/stress/modules-syntax-error-with-names.js:
+        (export.Cocoa):
+        (SyntaxError.Cannot.export.a.duplicate.name):
+        * tests/test262.yaml:
+
</ins><span class="cx"> 2016-07-30  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Assertion failure while setting the length of an ArrayClass array.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -2130,6 +2130,7 @@
</span><span class="cx">                 FED94F2E171E3E2300BE77A4 /* Watchdog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FED94F2B171E3E2300BE77A4 /* Watchdog.cpp */; };
</span><span class="cx">                 FED94F2F171E3E2300BE77A4 /* Watchdog.h in Headers */ = {isa = PBXBuildFile; fileRef = FED94F2C171E3E2300BE77A4 /* Watchdog.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 FEF040511AAE662D00BD28B0 /* CompareAndSwapTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF040501AAE662D00BD28B0 /* CompareAndSwapTest.cpp */; };
</span><ins>+                A79D3ED9C5064DD0A8466A3A /* ModuleScopeData.h in Headers */ = {isa = PBXBuildFile; fileRef = 000BEAF0DF604481AF6AB68C /* ModuleScopeData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx"> /* End PBXBuildFile section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXContainerItemProxy section */
</span><span class="lines">@@ -4417,6 +4418,7 @@
</span><span class="cx">                 FEDA50D51B97F4D9009A3B4F /* PingPongStackOverflowTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PingPongStackOverflowTest.h; path = API/tests/PingPongStackOverflowTest.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 FEF040501AAE662D00BD28B0 /* CompareAndSwapTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CompareAndSwapTest.cpp; path = API/tests/CompareAndSwapTest.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 FEF040521AAEC4ED00BD28B0 /* CompareAndSwapTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CompareAndSwapTest.h; path = API/tests/CompareAndSwapTest.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                000BEAF0DF604481AF6AB68C /* ModuleScopeData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModuleScopeData.h; path = ModuleScopeData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx"> /* End PBXFileReference section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXFrameworksBuildPhase section */
</span><span class="lines">@@ -5582,6 +5584,7 @@
</span><span class="cx">                                 A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */,
</span><span class="cx">                                 79EE0BFD1B4AFB85000385C9 /* VariableEnvironment.cpp */,
</span><span class="cx">                                 79EE0BFE1B4AFB85000385C9 /* VariableEnvironment.h */,
</span><ins>+                                000BEAF0DF604481AF6AB68C /* ModuleScopeData.h */,
</ins><span class="cx">                         );
</span><span class="cx">                         path = parser;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -8229,6 +8232,7 @@
</span><span class="cx">                                 86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */,
</span><span class="cx">                                 262D85B71C0D650F006ACB61 /* AirFixPartialRegisterStalls.h in Headers */,
</span><span class="cx">                                 86704B4312DB8A8100A9FE7B /* YarrSyntaxChecker.h in Headers */,
</span><ins>+                                A79D3ED9C5064DD0A8466A3A /* ModuleScopeData.h in Headers */,
</ins><span class="cx">                         );
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="cx">                 };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserModuleAnalyzercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.cpp (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.cpp        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.cpp        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;JSCellInlines.h&quot;
</span><span class="cx"> #include &quot;JSGlobalObject.h&quot;
</span><span class="cx"> #include &quot;JSModuleRecord.h&quot;
</span><ins>+#include &quot;ModuleScopeData.h&quot;
</ins><span class="cx"> #include &quot;StrongInlines.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -42,21 +43,8 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Identifier ModuleAnalyzer::exportedBinding(const RefPtr&lt;UniquedStringImpl&gt;&amp; ident)
</del><ins>+void ModuleAnalyzer::exportVariable(ModuleProgramNode&amp; moduleProgramNode, const RefPtr&lt;UniquedStringImpl&gt;&amp; localName, const VariableEnvironmentEntry&amp; variable)
</ins><span class="cx"> {
</span><del>-    const auto iterator = m_aliasMap.find(ident);
-    if (iterator != m_aliasMap.end())
-        return iterator-&gt;value;
-    return Identifier::fromUid(&amp;vm(), ident.get());
-}
-
-void ModuleAnalyzer::declareExportAlias(const Identifier&amp; localName, const Identifier&amp; exportName)
-{
-    m_aliasMap.add(localName.impl(), exportName);
-}
-
-void ModuleAnalyzer::exportVariable(const RefPtr&lt;UniquedStringImpl&gt;&amp; localName, const VariableEnvironmentEntry&amp; variable)
-{
</del><span class="cx">     // In the parser, we already marked the variables as Exported and Imported.
</span><span class="cx">     // By leveraging this information, we collect the information that is needed
</span><span class="cx">     // to construct the module environment.
</span><span class="lines">@@ -74,11 +62,10 @@
</span><span class="cx">     if (!variable.isExported())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    const Identifier exportName = exportedBinding(localName);
-
</del><span class="cx">     // Exported module local variable.
</span><span class="cx">     if (!variable.isImported()) {
</span><del>-        moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createLocal(exportName, Identifier::fromUid(m_vm, localName.get())));
</del><ins>+        for (auto&amp; exportName : moduleProgramNode.moduleScopeData().exportedBindings().get(localName.get()))
+            moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createLocal(Identifier::fromUid(m_vm, exportName.get()), Identifier::fromUid(m_vm, localName.get())));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -89,7 +76,8 @@
</span><span class="cx">         //
</span><span class="cx">         // Sec 15.2.1.16.1 step 11-a-ii-2-b https://tc39.github.io/ecma262/#sec-parsemodule
</span><span class="cx">         // Namespace export is handled as local export since a namespace object binding itself is implemented as a local binding.
</span><del>-        moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createLocal(exportName, Identifier::fromUid(m_vm, localName.get())));
</del><ins>+        for (auto&amp; exportName : moduleProgramNode.moduleScopeData().exportedBindings().get(localName.get()))
+            moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createLocal(Identifier::fromUid(m_vm, exportName.get()), Identifier::fromUid(m_vm, localName.get())));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -99,7 +87,8 @@
</span><span class="cx">     Optional&lt;JSModuleRecord::ImportEntry&gt; optionalImportEntry = moduleRecord()-&gt;tryGetImportEntry(localName.get());
</span><span class="cx">     ASSERT(optionalImportEntry);
</span><span class="cx">     const JSModuleRecord::ImportEntry&amp; importEntry = *optionalImportEntry;
</span><del>-    moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createIndirect(exportName, importEntry.importName, importEntry.moduleRequest));
</del><ins>+    for (auto&amp; exportName : moduleProgramNode.moduleScopeData().exportedBindings().get(localName.get()))
+        moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createIndirect(Identifier::fromUid(m_vm, exportName.get()), importEntry.importName, importEntry.moduleRequest));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -148,10 +137,10 @@
</span><span class="cx">     //
</span><span class="cx">     //     export * from &quot;mod&quot;
</span><span class="cx">     for (const auto&amp; pair : m_moduleRecord-&gt;declaredVariables())
</span><del>-        exportVariable(pair.key, pair.value);
</del><ins>+        exportVariable(moduleProgramNode, pair.key, pair.value);
</ins><span class="cx"> 
</span><span class="cx">     for (const auto&amp; pair : m_moduleRecord-&gt;lexicalVariables())
</span><del>-        exportVariable(pair.key, pair.value);
</del><ins>+        exportVariable(moduleProgramNode, pair.key, pair.value);
</ins><span class="cx"> 
</span><span class="cx">     if (Options::dumpModuleRecord())
</span><span class="cx">         m_moduleRecord-&gt;dump();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserModuleAnalyzerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.h (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.h        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.h        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -44,18 +44,11 @@
</span><span class="cx"> 
</span><span class="cx">     JSModuleRecord* moduleRecord() { return m_moduleRecord.get(); }
</span><span class="cx"> 
</span><del>-    void declareExportAlias(const Identifier&amp; localName, const Identifier&amp; exportName);
-
</del><span class="cx"> private:
</span><del>-    typedef HashMap&lt;RefPtr&lt;UniquedStringImpl&gt;, Identifier, IdentifierRepHash, HashTraits&lt;RefPtr&lt;UniquedStringImpl&gt;&gt;&gt; IdentifierAliasMap;
</del><ins>+    void exportVariable(ModuleProgramNode&amp;, const RefPtr&lt;UniquedStringImpl&gt;&amp;, const VariableEnvironmentEntry&amp;);
</ins><span class="cx"> 
</span><del>-    void exportVariable(const RefPtr&lt;UniquedStringImpl&gt;&amp;, const VariableEnvironmentEntry&amp;);
-
-    Identifier exportedBinding(const RefPtr&lt;UniquedStringImpl&gt;&amp; ident);
-
</del><span class="cx">     VM* m_vm;
</span><span class="cx">     Strong&lt;JSModuleRecord&gt; m_moduleRecord;
</span><del>-    IdentifierAliasMap m_aliasMap;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserModuleScopeDatahfromrev203952trunkSourceJavaScriptCoreparserModuleAnalyzerh"></a>
<div class="copfile"><h4>Copied: trunk/Source/JavaScriptCore/parser/ModuleScopeData.h (from rev 203952, trunk/Source/JavaScriptCore/parser/ModuleAnalyzer.h) (0 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ModuleScopeData.h                                (rev 0)
+++ trunk/Source/JavaScriptCore/parser/ModuleScopeData.h        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2016 Yusuke Suzuki &lt;utatane.tea@gmail.com&gt;
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &quot;Identifier.h&quot;
+#include &lt;wtf/RefPtr.h&gt;
+
+namespace JSC {
+
+class ModuleScopeData : public RefCounted&lt;ModuleScopeData&gt; {
+WTF_MAKE_NONCOPYABLE(ModuleScopeData);
+WTF_MAKE_FAST_ALLOCATED;
+public:
+    typedef HashMap&lt;RefPtr&lt;UniquedStringImpl&gt;, IdentifierSet, IdentifierRepHash, HashTraits&lt;RefPtr&lt;UniquedStringImpl&gt;&gt;&gt; IdentifierAliasMap;
+
+    static Ref&lt;ModuleScopeData&gt; create() { return adoptRef(*new ModuleScopeData); }
+
+    const IdentifierAliasMap&amp; exportedBindings() const { return m_exportedBindings; }
+
+    bool exportName(const Identifier&amp; exportedName)
+    {
+        return m_exportedNames.add(exportedName.impl()).isNewEntry;
+    }
+
+    void exportBinding(const Identifier&amp; localName, const Identifier&amp; exportedName)
+    {
+        m_exportedBindings.add(localName.impl(), IdentifierSet()).iterator-&gt;value.add(exportedName.impl());
+    }
+
+    void exportBinding(const Identifier&amp; localName)
+    {
+        exportBinding(localName, localName);
+    }
+
+private:
+    ModuleScopeData() = default;
+
+    IdentifierSet m_exportedNames { };
+    IdentifierAliasMap m_exportedBindings { };
+};
+
+} // namespace
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.cpp (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.cpp        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/Nodes.cpp        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ ProgramNode -----------------------------
</span><span class="cx"> 
</span><del>-ProgramNode::ProgramNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants)
</del><ins>+ProgramNode::ProgramNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, source, children, varEnvironment, WTFMove(funcStack), lexicalVariables, WTFMove(sloppyModeHoistedFunctions), features, innerArrowFunctionCodeFeatures, numConstants)
</span><span class="cx">     , m_startColumn(startColumn)
</span><span class="cx">     , m_endColumn(endColumn)
</span><span class="lines">@@ -126,16 +126,17 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ ModuleProgramNode -----------------------------
</span><span class="cx"> 
</span><del>-ModuleProgramNode::ModuleProgramNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants)
</del><ins>+ModuleProgramNode::ModuleProgramNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp; moduleScopeData)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, source, children, varEnvironment, WTFMove(funcStack), lexicalVariables, WTFMove(sloppyModeHoistedFunctions), features, innerArrowFunctionCodeFeatures, numConstants)
</span><span class="cx">     , m_startColumn(startColumn)
</span><span class="cx">     , m_endColumn(endColumn)
</span><ins>+    , m_moduleScopeData(*WTFMove(moduleScopeData))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ EvalNode -----------------------------
</span><span class="cx"> 
</span><del>-EvalNode::EvalNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants)
</del><ins>+EvalNode::EvalNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, source, children, varEnvironment, WTFMove(funcStack), lexicalVariables, WTFMove(sloppyModeHoistedFunctions), features, innerArrowFunctionCodeFeatures, numConstants)
</span><span class="cx">     , m_endColumn(endColumn)
</span><span class="cx"> {
</span><span class="lines">@@ -181,7 +182,7 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ FunctionNode -----------------------------
</span><span class="cx"> 
</span><del>-FunctionNode::FunctionNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters* parameters, const SourceCode&amp; sourceCode, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants)
</del><ins>+FunctionNode::FunctionNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp;&amp; funcStack, VariableEnvironment&amp; lexicalVariables, UniquedStringImplPtrSet&amp;&amp; sloppyModeHoistedFunctions, FunctionParameters* parameters, const SourceCode&amp; sourceCode, CodeFeatures features, InnerArrowFunctionCodeFeatures innerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, sourceCode, children, varEnvironment, WTFMove(funcStack), lexicalVariables, WTFMove(sloppyModeHoistedFunctions), features, innerArrowFunctionCodeFeatures, numConstants)
</span><span class="cx">     , m_parameters(parameters)
</span><span class="cx">     , m_startColumn(startColumn)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.h (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.h        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/Nodes.h        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -52,6 +52,7 @@
</span><span class="cx">     class JSScope;
</span><span class="cx">     class ScopeNode;
</span><span class="cx">     class ModuleAnalyzer;
</span><ins>+    class ModuleScopeData;
</ins><span class="cx"> 
</span><span class="cx">     typedef SmallPtrSet&lt;UniquedStringImpl*&gt; UniquedStringImplPtrSet;
</span><span class="cx"> 
</span><span class="lines">@@ -1644,7 +1645,7 @@
</span><span class="cx"> 
</span><span class="cx">     class ProgramNode : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        ProgramNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants);
</del><ins>+        ProgramNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">         unsigned startColumn() const { return m_startColumn; }
</span><span class="cx">         unsigned endColumn() const { return m_endColumn; }
</span><span class="lines">@@ -1659,7 +1660,7 @@
</span><span class="cx"> 
</span><span class="cx">     class EvalNode : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        EvalNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants);
</del><ins>+        EvalNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE unsigned startColumn() const { return 0; }
</span><span class="cx">         unsigned endColumn() const { return m_endColumn; }
</span><span class="lines">@@ -1674,7 +1675,7 @@
</span><span class="cx"> 
</span><span class="cx">     class ModuleProgramNode : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        ModuleProgramNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants);
</del><ins>+        ModuleProgramNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">         unsigned startColumn() const { return m_startColumn; }
</span><span class="cx">         unsigned endColumn() const { return m_endColumn; }
</span><span class="lines">@@ -1681,10 +1682,16 @@
</span><span class="cx"> 
</span><span class="cx">         static const bool scopeIsFunction = false;
</span><span class="cx"> 
</span><ins>+        ModuleScopeData&amp; moduleScopeData()
+        {
+            return m_moduleScopeData;
+        }
+
</ins><span class="cx">     private:
</span><span class="cx">         void emitBytecode(BytecodeGenerator&amp;, RegisterID* = 0) override;
</span><span class="cx">         unsigned m_startColumn;
</span><span class="cx">         unsigned m_endColumn;
</span><ins>+        Ref&lt;ModuleScopeData&gt; m_moduleScopeData;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     class ModuleNameNode : public Node {
</span><span class="lines">@@ -1915,7 +1922,7 @@
</span><span class="cx"> 
</span><span class="cx">     class FunctionNode final : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        FunctionNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants);
</del><ins>+        FunctionNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;&amp;, VariableEnvironment&amp;, UniquedStringImplPtrSet&amp;&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr&lt;ModuleScopeData&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">         FunctionParameters* parameters() const { return m_parameters; }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesAnalyzeModulecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/NodesAnalyzeModule.cpp (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/NodesAnalyzeModule.cpp        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/NodesAnalyzeModule.cpp        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -65,9 +65,8 @@
</span><span class="cx">     analyzer.moduleRecord()-&gt;addStarExportEntry(m_moduleName-&gt;moduleName());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ExportDefaultDeclarationNode::analyzeModule(ModuleAnalyzer&amp; analyzer)
</del><ins>+void ExportDefaultDeclarationNode::analyzeModule(ModuleAnalyzer&amp;)
</ins><span class="cx"> {
</span><del>-    analyzer.declareExportAlias(m_localName, analyzer.vm().propertyNames-&gt;defaultKeyword);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ExportLocalDeclarationNode::analyzeModule(ModuleAnalyzer&amp;)
</span><span class="lines">@@ -86,11 +85,7 @@
</span><span class="cx">             // In this case, no local variable names are imported into the current module.
</span><span class="cx">             // &quot;v&quot; indirectly points the binding in &quot;mod&quot;.
</span><span class="cx">             analyzer.moduleRecord()-&gt;addExportEntry(JSModuleRecord::ExportEntry::createIndirect(specifier-&gt;exportedName(), specifier-&gt;localName(), m_moduleName-&gt;moduleName()));
</span><del>-            continue;
</del><span class="cx">         }
</span><del>-
-        if (specifier-&gt;localName() != specifier-&gt;exportedName())
-            analyzer.declareExportAlias(specifier-&gt;localName(), specifier-&gt;exportedName());
</del><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.cpp (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.cpp        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/Parser.cpp        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -234,6 +234,9 @@
</span><span class="cx">     if (strictMode == JSParserStrictMode::Strict)
</span><span class="cx">         scope-&gt;setStrictMode();
</span><span class="cx"> 
</span><ins>+    if (parseMode == SourceParseMode::ModuleAnalyzeMode || parseMode == SourceParseMode::ModuleEvaluateMode)
+        m_moduleScopeData = ModuleScopeData::create();
+
</ins><span class="cx">     next();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -476,7 +479,8 @@
</span><span class="cx"> 
</span><span class="cx">     propagateError();
</span><span class="cx"> 
</span><del>-    for (const auto&amp; uid : currentScope()-&gt;moduleScopeData().exportedBindings()) {
</del><ins>+    for (const auto&amp; pair : m_moduleScopeData-&gt;exportedBindings()) {
+        const auto&amp; uid = pair.key;
</ins><span class="cx">         if (currentScope()-&gt;hasDeclaredVariable(uid)) {
</span><span class="cx">             currentScope()-&gt;declaredVariables().markVariableAsExported(uid);
</span><span class="cx">             continue;
</span><span class="lines">@@ -708,7 +712,7 @@
</span><span class="cx">             }
</span><span class="cx">             if (exportType == ExportType::Exported) {
</span><span class="cx">                 semanticFailIfFalse(exportName(*name), &quot;Cannot export a duplicate name '&quot;, name-&gt;impl(), &quot;'&quot;);
</span><del>-                currentScope()-&gt;moduleScopeData().exportBinding(*name);
</del><ins>+                m_moduleScopeData-&gt;exportBinding(*name);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if (hasInitializer) {
</span><span class="lines">@@ -828,7 +832,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (exportType == ExportType::Exported) {
</span><span class="cx">         semanticFailIfFalse(exportName(name), &quot;Cannot export a duplicate name '&quot;, name.impl(), &quot;'&quot;);
</span><del>-        currentScope()-&gt;moduleScopeData().exportBinding(name);
</del><ins>+        m_moduleScopeData-&gt;exportBinding(name);
</ins><span class="cx">     }
</span><span class="cx">     return context.createBindingLocation(token.m_location, name, token.m_startPosition, token.m_endPosition, bindingContext);
</span><span class="cx"> }
</span><span class="lines">@@ -2229,7 +2233,7 @@
</span><span class="cx">         internalFailWithMessage(false, &quot;Cannot declare a function that shadows a let/const/class/function variable '&quot;, functionInfo.name-&gt;impl(), &quot;' in strict mode&quot;);
</span><span class="cx">     if (exportType == ExportType::Exported) {
</span><span class="cx">         semanticFailIfFalse(exportName(*functionInfo.name), &quot;Cannot export a duplicate function name: '&quot;, functionInfo.name-&gt;impl(), &quot;'&quot;);
</span><del>-        currentScope()-&gt;moduleScopeData().exportBinding(*functionInfo.name);
</del><ins>+        m_moduleScopeData-&gt;exportBinding(*functionInfo.name);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     TreeStatement result = context.createFuncDeclStatement(location, functionInfo);
</span><span class="lines">@@ -2255,7 +2259,7 @@
</span><span class="cx">         internalFailWithMessage(false, &quot;Cannot declare a class twice: '&quot;, info.className-&gt;impl(), &quot;'&quot;);
</span><span class="cx">     if (exportType == ExportType::Exported) {
</span><span class="cx">         semanticFailIfFalse(exportName(*info.className), &quot;Cannot export a duplicate class name: '&quot;, info.className-&gt;impl(), &quot;'&quot;);
</span><del>-        currentScope()-&gt;moduleScopeData().exportBinding(*info.className);
</del><ins>+        m_moduleScopeData-&gt;exportBinding(*info.className);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JSTextPosition classEnd = lastTokenEndPosition();
</span><span class="lines">@@ -2786,7 +2790,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><del>-template &lt;class TreeBuilder&gt; typename TreeBuilder::ExportSpecifier Parser&lt;LexerType&gt;::parseExportSpecifier(TreeBuilder&amp; context, Vector&lt;const Identifier*&gt;&amp; maybeLocalNames, bool&amp; hasKeywordForLocalBindings)
</del><ins>+template &lt;class TreeBuilder&gt; typename TreeBuilder::ExportSpecifier Parser&lt;LexerType&gt;::parseExportSpecifier(TreeBuilder&amp; context, Vector&lt;std::pair&lt;const Identifier*, const Identifier*&gt;&gt;&amp; maybeExportedLocalNames, bool&amp; hasKeywordForLocalBindings)
</ins><span class="cx"> {
</span><span class="cx">     // ExportSpecifier :
</span><span class="cx">     // IdentifierName
</span><span class="lines">@@ -2808,7 +2812,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     semanticFailIfFalse(exportName(*exportedName), &quot;Cannot export a duplicate name '&quot;, exportedName-&gt;impl(), &quot;'&quot;);
</span><del>-    maybeLocalNames.append(localName);
</del><ins>+    maybeExportedLocalNames.append(std::make_pair(localName, exportedName));
</ins><span class="cx">     return context.createExportSpecifier(specifierLocation, *localName, *exportedName);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2896,7 +2900,7 @@
</span><span class="cx">         failIfFalse(result, &quot;Cannot parse the declaration&quot;);
</span><span class="cx"> 
</span><span class="cx">         semanticFailIfFalse(exportName(m_vm-&gt;propertyNames-&gt;defaultKeyword), &quot;Only one 'default' export is allowed&quot;);
</span><del>-        currentScope()-&gt;moduleScopeData().exportBinding(*localName);
</del><ins>+        m_moduleScopeData-&gt;exportBinding(*localName, m_vm-&gt;propertyNames-&gt;defaultKeyword);
</ins><span class="cx">         return context.createExportDefaultDeclaration(exportLocation, result, *localName);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -2916,12 +2920,12 @@
</span><span class="cx">         next();
</span><span class="cx"> 
</span><span class="cx">         auto specifierList = context.createExportSpecifierList();
</span><del>-        Vector&lt;const Identifier*&gt; maybeLocalNames;
</del><ins>+        Vector&lt;std::pair&lt;const Identifier*, const Identifier*&gt;&gt; maybeExportedLocalNames;
</ins><span class="cx"> 
</span><span class="cx">         bool hasKeywordForLocalBindings = false;
</span><span class="cx">         while (!match(CLOSEBRACE)) {
</span><span class="cx">             failIfFalse(matchIdentifierOrKeyword(), &quot;Expected a variable name for the export declaration&quot;);
</span><del>-            auto specifier = parseExportSpecifier(context, maybeLocalNames, hasKeywordForLocalBindings);
</del><ins>+            auto specifier = parseExportSpecifier(context, maybeExportedLocalNames, hasKeywordForLocalBindings);
</ins><span class="cx">             failIfFalse(specifier, &quot;Cannot parse the named export&quot;);
</span><span class="cx">             context.appendExportSpecifier(specifierList, specifier);
</span><span class="cx">             if (!consume(COMMA))
</span><span class="lines">@@ -2947,8 +2951,11 @@
</span><span class="cx">             // does not have effect on the current module's scope. But,
</span><span class="cx">             //   export { A, B, C as D }
</span><span class="cx">             // will reference the current module's bindings.
</span><del>-            for (const Identifier* localName : maybeLocalNames)
-                currentScope()-&gt;moduleScopeData().exportBinding(*localName);
</del><ins>+            for (const auto&amp; pair : maybeExportedLocalNames) {
+                const Identifier* localName = pair.first;
+                const Identifier* exportedName = pair.second;
+                m_moduleScopeData-&gt;exportBinding(*localName, *exportedName);
+            }
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return context.createExportNamedDeclaration(exportLocation, specifierList, moduleName);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.h (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.h        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/parser/Parser.h        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> #include &quot;Executable.h&quot;
</span><span class="cx"> #include &quot;JSGlobalObject.h&quot;
</span><span class="cx"> #include &quot;Lexer.h&quot;
</span><ins>+#include &quot;ModuleScopeData.h&quot;
</ins><span class="cx"> #include &quot;Nodes.h&quot;
</span><span class="cx"> #include &quot;ParserArena.h&quot;
</span><span class="cx"> #include &quot;ParserError.h&quot;
</span><span class="lines">@@ -128,27 +129,6 @@
</span><span class="cx">     return token.m_type == IDENT || token.m_type &amp; KeywordTokenFlag;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class ModuleScopeData : public RefCounted&lt;ModuleScopeData&gt; {
-public:
-    static Ref&lt;ModuleScopeData&gt; create() { return adoptRef(*new ModuleScopeData); }
-
-    const IdentifierSet&amp; exportedBindings() const { return m_exportedBindings; }
-
-    bool exportName(const Identifier&amp; exportedName)
-    {
-        return m_exportedNames.add(exportedName.impl()).isNewEntry;
-    }
-
-    void exportBinding(const Identifier&amp; localName)
-    {
-        m_exportedBindings.add(localName.impl());
-    }
-
-private:
-    IdentifierSet m_exportedNames { };
-    IdentifierSet m_exportedBindings { };
-};
-
</del><span class="cx"> struct Scope {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(Scope);
</span><span class="cx"> 
</span><span class="lines">@@ -216,7 +196,6 @@
</span><span class="cx">         , m_lexicalVariables(WTFMove(other.m_lexicalVariables))
</span><span class="cx">         , m_usedVariables(WTFMove(other.m_usedVariables))
</span><span class="cx">         , m_closedVariableCandidates(WTFMove(other.m_closedVariableCandidates))
</span><del>-        , m_moduleScopeData(WTFMove(other.m_moduleScopeData))
</del><span class="cx">         , m_functionDeclarations(WTFMove(other.m_functionDeclarations))
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="lines">@@ -277,11 +256,8 @@
</span><span class="cx">             break;
</span><span class="cx"> 
</span><span class="cx">         case SourceParseMode::ProgramMode:
</span><del>-            break;
-
</del><span class="cx">         case SourceParseMode::ModuleAnalyzeMode:
</span><span class="cx">         case SourceParseMode::ModuleEvaluateMode:
</span><del>-            setIsModule();
</del><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -313,12 +289,6 @@
</span><span class="cx">         return m_lexicalVariables;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ModuleScopeData&amp; moduleScopeData() const
-    {
-        ASSERT(m_moduleScopeData);
-        return *m_moduleScopeData;
-    }
-
</del><span class="cx">     void computeLexicallyCapturedVariablesAndPurgeCandidates()
</span><span class="cx">     {
</span><span class="cx">         // Because variables may be defined at any time in the range of a lexical scope, we must
</span><span class="lines">@@ -731,11 +701,6 @@
</span><span class="cx">         m_isArrowFunction = true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setIsModule()
-    {
-        m_moduleScopeData = ModuleScopeData::create();
-    }
-
</del><span class="cx">     const VM* m_vm;
</span><span class="cx">     bool m_shadowsArguments;
</span><span class="cx">     bool m_usesEval;
</span><span class="lines">@@ -771,7 +736,6 @@
</span><span class="cx">     Vector&lt;UniquedStringImplPtrSet, 6&gt; m_usedVariables;
</span><span class="cx">     UniquedStringImplPtrSet m_sloppyModeHoistableFunctionCandidates;
</span><span class="cx">     HashSet&lt;UniquedStringImpl*&gt; m_closedVariableCandidates;
</span><del>-    RefPtr&lt;ModuleScopeData&gt; m_moduleScopeData;
</del><span class="cx">     DeclarationStacks::FunctionStack m_functionDeclarations;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -1176,7 +1140,8 @@
</span><span class="cx">     bool exportName(const Identifier&amp; ident)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(currentScope().index() == 0);
</span><del>-        return currentScope()-&gt;moduleScopeData().exportName(ident);
</del><ins>+        ASSERT(m_moduleScopeData);
+        return m_moduleScopeData-&gt;exportName(ident);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ScopeStack m_scopeStack;
</span><span class="lines">@@ -1442,7 +1407,7 @@
</span><span class="cx">     template &lt;class TreeBuilder&gt; typename TreeBuilder::ImportSpecifier parseImportClauseItem(TreeBuilder&amp;, ImportSpecifierType);
</span><span class="cx">     template &lt;class TreeBuilder&gt; typename TreeBuilder::ModuleName parseModuleName(TreeBuilder&amp;);
</span><span class="cx">     template &lt;class TreeBuilder&gt; TreeStatement parseImportDeclaration(TreeBuilder&amp;);
</span><del>-    template &lt;class TreeBuilder&gt; typename TreeBuilder::ExportSpecifier parseExportSpecifier(TreeBuilder&amp; context, Vector&lt;const Identifier*&gt;&amp; maybeLocalNames, bool&amp; hasKeywordForLocalBindings);
</del><ins>+    template &lt;class TreeBuilder&gt; typename TreeBuilder::ExportSpecifier parseExportSpecifier(TreeBuilder&amp; context, Vector&lt;std::pair&lt;const Identifier*, const Identifier*&gt;&gt;&amp; maybeExportedLocalNames, bool&amp; hasKeywordForLocalBindings);
</ins><span class="cx">     template &lt;class TreeBuilder&gt; TreeStatement parseExportDeclaration(TreeBuilder&amp;);
</span><span class="cx"> 
</span><span class="cx">     enum class FunctionDefinitionType { Expression, Declaration, Method };
</span><span class="lines">@@ -1623,6 +1588,7 @@
</span><span class="cx">     ExpressionErrorClassifier* m_expressionErrorClassifier;
</span><span class="cx">     bool m_isEvalContext;
</span><span class="cx">     bool m_immediateParentAllowsFunctionDeclarationInStatement;
</span><ins>+    RefPtr&lt;ModuleScopeData&gt; m_moduleScopeData;
</ins><span class="cx">     
</span><span class="cx">     struct DepthManager {
</span><span class="cx">         DepthManager(int* depth)
</span><span class="lines">@@ -1697,7 +1663,8 @@
</span><span class="cx">                                     *m_source,
</span><span class="cx">                                     m_features,
</span><span class="cx">                                     currentScope()-&gt;innerArrowFunctionFeatures(),
</span><del>-                                    m_numConstants);
</del><ins>+                                    m_numConstants,
+                                    WTFMove(m_moduleScopeData));
</ins><span class="cx">         result-&gt;setLoc(m_source-&gt;firstLine(), m_lexer-&gt;lineNumber(), m_lexer-&gt;currentOffset(), m_lexer-&gt;currentLineStartOffset());
</span><span class="cx">         result-&gt;setEndOffset(m_lexer-&gt;currentOffset());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsmodulesaliasednamesmainjs"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/modules/aliased-names/main.js (0 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/modules/aliased-names/main.js                                (rev 0)
+++ trunk/Source/JavaScriptCore/tests/modules/aliased-names/main.js        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+var a = 42;
+
+function change(value)
+{
+    a = value;
+}
+
+export { a }
+export { a as b }
+export { change }
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsmodulesaliasednamesjs"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/modules/aliased-names.js (0 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/modules/aliased-names.js                                (rev 0)
+++ trunk/Source/JavaScriptCore/tests/modules/aliased-names.js        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+import { a, b, change } from 'aliased-names/main.js'
+import { shouldBe, shouldThrow } from &quot;./resources/assert.js&quot;;
+
+shouldBe(a, 42);
+shouldBe(b, 42);
+change(400);
+shouldBe(a, 400);
+shouldBe(b, 400);
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressmodulessyntaxerrorwithnamesjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/stress/modules-syntax-error-with-names.js (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/modules-syntax-error-with-names.js        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/tests/stress/modules-syntax-error-with-names.js        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -192,28 +192,63 @@
</span><span class="cx"> export default 20;
</span><span class="cx"> `, `SyntaxError: Only one 'default' export is allowed.:4`);
</span><span class="cx"> 
</span><ins>+checkModuleSyntaxError(String.raw`
+var a = 42;
+var b = 55;
+export { a as Cocoa, b as Cocoa };
+`, `SyntaxError: Cannot export a duplicate name 'Cocoa'.:4`);
+
+checkModuleSyntaxError(String.raw`
+var a = 42;
+var b = 55;
+export { a as Cocoa, b as Cocoa };
+`, `SyntaxError: Cannot export a duplicate name 'Cocoa'.:4`);
+
+checkModuleSyntaxError(String.raw`
+var Cocoa = 42;
+var b = 55;
+export { Cocoa, b as Cocoa };
+`, `SyntaxError: Cannot export a duplicate name 'Cocoa'.:4`);
+
+checkModuleSyntaxError(String.raw`
+export var Cocoa = 42;
+var b = 55;
+export { b as Cocoa };
+`, `SyntaxError: Cannot export a duplicate name 'Cocoa'.:4`);
+
+checkModuleSyntaxError(String.raw`
+var a = 42;
+export { a as Cocoa };
+export function Cocoa() { }
+`, `SyntaxError: Cannot export a duplicate function name: 'Cocoa'.:5`);
+
+checkModuleSyntaxError(String.raw`
+var a = 42;
+export { a as Cocoa };
+export class Cocoa { }
+`, `SyntaxError: Cannot export a duplicate class name: 'Cocoa'.:5`);
+
</ins><span class="cx"> // FIXME: These tests also should be passed. But now, var and lexical declared names can be co-exist on Script / Module top level scope.
</span><span class="cx"> // This will be fixed when this issue is fixed for Script environment.
</span><span class="cx"> // http://www.ecma-international.org/ecma-262/6.0/#sec-scripts-static-semantics-early-errors
</span><span class="cx"> // http://www.ecma-international.org/ecma-262/6.0/#sec-module-semantics-static-semantics-early-errors
</span><del>-//
</del><ins>+checkModuleSyntaxError(String.raw`
+import A from &quot;Cocoa&quot;
+var A = 20;
+`, `SyntaxError: Cannot declare a var variable that shadows a let/const/class variable: 'A'.:3`);
+
</ins><span class="cx"> // checkModuleSyntaxError(String.raw`
</span><del>-// import A from &quot;Cocoa&quot;
</del><span class="cx"> // var A = 20;
</span><del>-// `, ``);
-//
-// checkModuleSyntaxError(String.raw`
-// var A = 20;
</del><span class="cx"> // import A from &quot;Cocoa&quot;
</span><span class="cx"> // `, ``);
</span><del>-//
</del><ins>+
+checkModuleSyntaxError(String.raw`
+import A from &quot;Cocoa&quot;
+var A = 20;
+`, `SyntaxError: Cannot declare a var variable that shadows a let/const/class variable: 'A'.:3`);
+
</ins><span class="cx"> // checkModuleSyntaxError(String.raw`
</span><del>-// import A from &quot;Cocoa&quot;
</del><span class="cx"> // var A = 20;
</span><del>-// `, ``);
-//
-// checkModuleSyntaxError(String.raw`
-// var A = 20;
</del><span class="cx"> // import A from &quot;Cocoa&quot;
</span><span class="cx"> // `, ``);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreteststest262yaml"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/test262.yaml (203952 => 203953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/test262.yaml        2016-07-31 01:08:37 UTC (rev 203952)
+++ trunk/Source/JavaScriptCore/tests/test262.yaml        2016-07-31 07:04:57 UTC (rev 203953)
</span><span class="lines">@@ -71230,7 +71230,7 @@
</span><span class="cx"> - path: test262/test/language/module-code/instn-star-props-nrml-star_FIXTURE.js
</span><span class="cx">   cmd: prepareTest262Fixture
</span><span class="cx"> - path: test262/test/language/module-code/instn-star-props-nrml.js
</span><del>-  cmd: runTest262 :fail, &quot;NoException&quot;, [&quot;../../../harness/assert.js&quot;, &quot;../../../harness/sta.js&quot;], [:module]
</del><ins>+  cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../harness/assert.js&quot;, &quot;../../../harness/sta.js&quot;], [:module]
</ins><span class="cx"> - path: test262/test/language/module-code/instn-star-star-cycle-2_FIXTURE.js
</span><span class="cx">   cmd: prepareTest262Fixture
</span><span class="cx"> - path: test262/test/language/module-code/instn-star-star-cycle-indirect-x_FIXTURE.js
</span><span class="lines">@@ -71256,11 +71256,11 @@
</span><span class="cx"> - path: test262/test/language/module-code/namespace/Symbol.iterator/this-val-not-ns.js
</span><span class="cx">   cmd: runTest262 :fail, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</span><span class="cx"> - path: test262/test/language/module-code/namespace/Symbol.iterator/values-binding-types.js
</span><del>-  cmd: runTest262 :fail, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</del><ins>+  cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</ins><span class="cx"> - path: test262/test/language/module-code/namespace/Symbol.iterator/values-binding-types_.js
</span><span class="cx">   cmd: prepareTest262Fixture
</span><span class="cx"> - path: test262/test/language/module-code/namespace/Symbol.iterator/values-order.js
</span><del>-  cmd: runTest262 :fail, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</del><ins>+  cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</ins><span class="cx"> - path: test262/test/language/module-code/namespace/Symbol.toStringTag.js
</span><span class="cx">   cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../harness/assert.js&quot;, &quot;../../../../harness/sta.js&quot;], [:module]
</span><span class="cx"> - path: test262/test/language/module-code/namespace/internals/define-own-property.js
</span><span class="lines">@@ -71308,11 +71308,11 @@
</span><span class="cx"> - path: test262/test/language/module-code/namespace/internals/is-extensible.js
</span><span class="cx">   cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</span><span class="cx"> - path: test262/test/language/module-code/namespace/internals/own-property-keys-binding-types.js
</span><del>-  cmd: runTest262 :fail, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</del><ins>+  cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</ins><span class="cx"> - path: test262/test/language/module-code/namespace/internals/own-property-keys-binding-types_FIXTURE.js
</span><span class="cx">   cmd: prepareTest262Fixture
</span><span class="cx"> - path: test262/test/language/module-code/namespace/internals/own-property-keys-sort.js
</span><del>-  cmd: runTest262 :fail, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</del><ins>+  cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</ins><span class="cx"> - path: test262/test/language/module-code/namespace/internals/prevent-extensions.js
</span><span class="cx">   cmd: runTest262 :normal, &quot;NoException&quot;, [&quot;../../../../../harness/assert.js&quot;, &quot;../../../../../harness/sta.js&quot;], [:module]
</span><span class="cx"> - path: test262/test/language/module-code/namespace/internals/set-prototype-of.js
</span></span></pre>
</div>
</div>

</body>
</html>