Title: [215687] trunk
Revision
215687
Author
commit-qu...@webkit.org
Date
2017-04-24 10:59:49 -0700 (Mon, 24 Apr 2017)

Log Message

test262: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-arrow.js
https://bugs.webkit.org/show_bug.cgi?id=171160

Patch by Joseph Pecoraro <pecor...@apple.com> on 2017-04-24
Reviewed by JF Bastien.

JSTests:

* stress/inferred-names.js:
* test262.yaml:

Source/_javascript_Core:

* parser/ASTBuilder.h:
(JSC::ASTBuilder::tryInferNameInPattern):
(JSC::ASTBuilder::tryInferNameInPatternWithIdentifier):
We supported getting the name from a BindingNode.
We extend this to support getting the name from a
ResolveNode inside of an AssignmentElementNode.

* parser/Nodes.h:
(JSC::DestructuringPatternNode::isAssignmentElementNode):
(JSC::AssignmentElementNode::isAssignmentElementNode):
Make it possible to identify an assignment element node.

Modified Paths

Diff

Modified: trunk/JSTests/ChangeLog (215686 => 215687)


--- trunk/JSTests/ChangeLog	2017-04-24 17:31:05 UTC (rev 215686)
+++ trunk/JSTests/ChangeLog	2017-04-24 17:59:49 UTC (rev 215687)
@@ -1,5 +1,15 @@
 2017-04-24  Joseph Pecoraro  <pecor...@apple.com>
 
+        test262: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-arrow.js
+        https://bugs.webkit.org/show_bug.cgi?id=171160
+
+        Reviewed by JF Bastien.
+
+        * stress/inferred-names.js:
+        * test262.yaml:
+
+2017-04-24  Joseph Pecoraro  <pecor...@apple.com>
+
         test262: test262/test/language/expressions/generators/yield-as-label.js
         https://bugs.webkit.org/show_bug.cgi?id=170979
 

Modified: trunk/JSTests/stress/inferred-names.js (215686 => 215687)


--- trunk/JSTests/stress/inferred-names.js	2017-04-24 17:31:05 UTC (rev 215686)
+++ trunk/JSTests/stress/inferred-names.js	2017-04-24 17:59:49 UTC (rev 215687)
@@ -46,6 +46,24 @@
 assert(arrClass.name === "arrClass");
 assert(objClass.name === "objClass");
 
+for ([ forArrFunc1 = function(){} ] of [[]])
+    assert(forArrFunc1.name === "forArrFunc1");
+for ([ forArrFunc2 = function*(){} ] of [[]])
+    assert(forArrFunc2.name === "forArrFunc2");
+for ([ forArrFunc3 = ()=>{} ] of [[]])
+    assert(forArrFunc3.name === "forArrFunc3");
+for ([ forArrClass = class{} ] of [[]])
+    assert(forArrClass.name === "forArrClass");
+
+for ({ forObjFunc1 = function(){} } of [{}])
+    assert(forObjFunc1.name === "forObjFunc1");
+for ({ forObjFunc2 = function*(){} } of [{}])
+    assert(forObjFunc2.name === "forObjFunc2");
+for ({ forObjFunc3 = ()=>{} } of [{}])
+    assert(forObjFunc3.name === "forObjFunc3");
+for ({ forObjClass = class{} } of [{}])
+    assert(forObjClass.name === "forObjClass");
+
 // Global variable assignment.
 assert( (globalFunc = function(){}).name === "globalFunc" );
 assert( (globalFunc = function*(){}).name === "globalFunc" );

Modified: trunk/JSTests/test262.yaml (215686 => 215687)


--- trunk/JSTests/test262.yaml	2017-04-24 17:31:05 UTC (rev 215686)
+++ trunk/JSTests/test262.yaml	2017-04-24 17:59:49 UTC (rev 215687)
@@ -54432,25 +54432,25 @@
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-evaluation.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-in.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/expressions/assignment/dstr-array-elem-init-in.js
@@ -55154,25 +55154,25 @@
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-evaluation.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-in.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/expressions/assignment/dstr-obj-prop-elem-init-in.js
@@ -79598,25 +79598,25 @@
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-evaluation.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-in.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/statements/for-of/dstr-array-elem-init-in.js
@@ -81016,25 +81016,25 @@
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-evaluation.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-arrow.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-cover.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-fn.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], []
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-gen.js
-  cmd: runTest262 :fail, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
+  cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js", "../../../../harness/propertyHelper.js"], [:strict]
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-in.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/statements/for-of/dstr-obj-prop-elem-init-in.js

Modified: trunk/Source/_javascript_Core/ChangeLog (215686 => 215687)


--- trunk/Source/_javascript_Core/ChangeLog	2017-04-24 17:31:05 UTC (rev 215686)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-04-24 17:59:49 UTC (rev 215687)
@@ -1,3 +1,22 @@
+2017-04-24  Joseph Pecoraro  <pecor...@apple.com>
+
+        test262: test262/test/language/statements/for-of/dstr-array-elem-init-fn-name-arrow.js
+        https://bugs.webkit.org/show_bug.cgi?id=171160
+
+        Reviewed by JF Bastien.
+
+        * parser/ASTBuilder.h:
+        (JSC::ASTBuilder::tryInferNameInPattern):
+        (JSC::ASTBuilder::tryInferNameInPatternWithIdentifier):
+        We supported getting the name from a BindingNode.
+        We extend this to support getting the name from a
+        ResolveNode inside of an AssignmentElementNode.
+
+        * parser/Nodes.h:
+        (JSC::DestructuringPatternNode::isAssignmentElementNode):
+        (JSC::AssignmentElementNode::isAssignmentElementNode):
+        Make it possible to identify an assignment element node.
+
 2017-04-24  Alex Christensen  <achristen...@webkit.org>
 
         Reduce copies and allocations in SharedBuffer::append

Modified: trunk/Source/_javascript_Core/parser/ASTBuilder.h (215686 => 215687)


--- trunk/Source/_javascript_Core/parser/ASTBuilder.h	2017-04-24 17:31:05 UTC (rev 215686)
+++ trunk/Source/_javascript_Core/parser/ASTBuilder.h	2017-04-24 17:59:49 UTC (rev 215687)
@@ -1074,11 +1074,20 @@
         if (!defaultValue)
             return;
 
-        if (!pattern->isBindingNode())
-            return;
+        if (pattern->isBindingNode()) {
+            const Identifier& ident = static_cast<BindingNode*>(pattern)->boundProperty();
+            tryInferNameInPatternWithIdentifier(ident, defaultValue);
+        } else if (pattern->isAssignmentElementNode()) {
+            const ExpressionNode* assignmentTarget = static_cast<AssignmentElementNode*>(pattern)->assignmentTarget();
+            if (assignmentTarget->isResolveNode()) {
+                const Identifier& ident = static_cast<const ResolveNode*>(assignmentTarget)->identifier();
+                tryInferNameInPatternWithIdentifier(ident, defaultValue);
+            }
+        }
+    }
 
-        const Identifier& ident = static_cast<const BindingNode*>(pattern)->boundProperty();
-
+    void tryInferNameInPatternWithIdentifier(const Identifier& ident, ExpressionNode* defaultValue)
+    {
         if (defaultValue->isBaseFuncExprNode()) {
             auto metadata = static_cast<BaseFuncExprNode*>(defaultValue)->metadata();
             metadata->setEcmaName(ident);

Modified: trunk/Source/_javascript_Core/parser/Nodes.h (215686 => 215687)


--- trunk/Source/_javascript_Core/parser/Nodes.h	2017-04-24 17:31:05 UTC (rev 215686)
+++ trunk/Source/_javascript_Core/parser/Nodes.h	2017-04-24 17:59:49 UTC (rev 215687)
@@ -2089,6 +2089,7 @@
         virtual void toString(StringBuilder&) const = 0;
 
         virtual bool isBindingNode() const { return false; }
+        virtual bool isAssignmentElementNode() const { return false; }
         virtual bool isRestParameter() const { return false; }
         virtual RegisterID* emitDirectBinding(BytecodeGenerator&, RegisterID*, ExpressionNode*) { return 0; }
         
@@ -2166,7 +2167,7 @@
         Vector<Entry> m_targetPatterns;
     };
 
-    class BindingNode : public DestructuringPatternNode {
+    class BindingNode final: public DestructuringPatternNode {
     public:
         BindingNode(const Identifier& boundProperty, const JSTextPosition& start, const JSTextPosition& end, AssignmentContext);
         const Identifier& boundProperty() const { return m_boundProperty; }
@@ -2187,7 +2188,7 @@
         AssignmentContext m_bindingContext;
     };
 
-    class RestParameterNode : public DestructuringPatternNode {
+    class RestParameterNode final : public DestructuringPatternNode {
     public:
         RestParameterNode(DestructuringPatternNode*, unsigned numParametersToSkip);
 
@@ -2204,7 +2205,7 @@
         unsigned m_numParametersToSkip;
     };
 
-    class AssignmentElementNode : public DestructuringPatternNode {
+    class AssignmentElementNode final : public DestructuringPatternNode {
     public:
         AssignmentElementNode(ExpressionNode* assignmentTarget, const JSTextPosition& start, const JSTextPosition& end);
         const ExpressionNode* assignmentTarget() { return m_assignmentTarget; }
@@ -2217,6 +2218,8 @@
         void bindValue(BytecodeGenerator&, RegisterID*) const override;
         void toString(StringBuilder&) const override;
 
+        bool isAssignmentElementNode() const override { return true; }
+
         JSTextPosition m_divotStart;
         JSTextPosition m_divotEnd;
         ExpressionNode* m_assignmentTarget;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to