Title: [205969] trunk
Revision
205969
Author
commit-qu...@webkit.org
Date
2016-09-15 08:40:55 -0700 (Thu, 15 Sep 2016)

Log Message

test262: Should be a SyntaxError for duplicate parameter names in function with default parameters
https://bugs.webkit.org/show_bug.cgi?id=162013

Patch by Joseph Pecoraro <pecor...@apple.com> on 2016-09-15
Reviewed by Saam Barati.

JSTests:

* stress/es6-default-parameters.js:
* test262.yaml:

Source/_javascript_Core:

https://tc39.github.io/ecma262/#sec-function-definitions-static-semantics-early-errors
It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
false and BoundNames of FormalParameterList contains any duplicate elements.

Non-simple parameter lists include rest parameters, destructuring,
and default parameters.

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseFormalParameters):
Previously, we were not failing if there were default parameters
early in the parameter list that were not yet identified as duplicates
and simple parameters later were duplicates. Now, we fail if there
are default parameters anywhere in the parameter list with a duplicate.

Modified Paths

Diff

Modified: trunk/JSTests/ChangeLog (205968 => 205969)


--- trunk/JSTests/ChangeLog	2016-09-15 15:30:00 UTC (rev 205968)
+++ trunk/JSTests/ChangeLog	2016-09-15 15:40:55 UTC (rev 205969)
@@ -1,3 +1,13 @@
+2016-09-15  Joseph Pecoraro  <pecor...@apple.com>
+
+        test262: Should be a SyntaxError for duplicate parameter names in function with default parameters
+        https://bugs.webkit.org/show_bug.cgi?id=162013
+
+        Reviewed by Saam Barati.
+
+        * stress/es6-default-parameters.js:
+        * test262.yaml:
+
 2016-09-14  Joseph Pecoraro  <pecor...@apple.com>
 
         ASSERT_NOT_REACHED when using spread inside an array literal with Function.prototype.apply

Modified: trunk/JSTests/stress/es6-default-parameters.js (205968 => 205969)


--- trunk/JSTests/stress/es6-default-parameters.js	2016-09-15 15:30:00 UTC (rev 205968)
+++ trunk/JSTests/stress/es6-default-parameters.js	2016-09-15 15:40:55 UTC (rev 205969)
@@ -277,5 +277,8 @@
 shouldThrowSyntaxError("function b(a = 20, a = 40) {}");
 shouldThrowSyntaxError("function b(aaaaa = 20,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v, aaaaa = 40) {}");
 shouldThrowSyntaxError("function b(a = 20, {a}) {}");
+shouldThrowSyntaxError("function b(a = 20, a) {}");
+shouldThrowSyntaxError("function b(a, a = 20) {}");
+shouldThrowSyntaxError("function b(a, a, b = 20) {}");
 shouldThrowSyntaxError("function b({a, a} = 20) {}");
 shouldThrowSyntaxError("function b({a, a} = 20) {}");

Modified: trunk/JSTests/test262.yaml (205968 => 205969)


--- trunk/JSTests/test262.yaml	2016-09-15 15:30:00 UTC (rev 205968)
+++ trunk/JSTests/test262.yaml	2016-09-15 15:40:55 UTC (rev 205969)
@@ -54068,7 +54068,7 @@
 - path: test262/test/language/expressions/arrow-function/params-dflt-arg-val-undefined.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/arrow-function/params-dflt-duplicates.js
-  cmd: runTest262 :fail, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
+  cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/expressions/arrow-function/params-dflt-duplicates.js
   cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/arrow-function/params-dflt-ref-later.js
@@ -62176,7 +62176,7 @@
 - path: test262/test/language/expressions/function/params-dflt-args-unmapped.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/function/params-dflt-duplicates.js
-  cmd: runTest262 :fail, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
+  cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/expressions/function/params-dflt-duplicates.js
   cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/function/params-dflt-ref-arguments.js
@@ -62998,7 +62998,7 @@
 - path: test262/test/language/expressions/generators/params-dflt-args-unmapped.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/generators/params-dflt-duplicates.js
-  cmd: runTest262 :fail, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
+  cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/expressions/generators/params-dflt-duplicates.js
   cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/expressions/generators/params-dflt-ref-arguments.js
@@ -83352,7 +83352,7 @@
 - path: test262/test/language/statements/function/params-dflt-args-unmapped.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/statements/function/params-dflt-duplicates.js
-  cmd: runTest262 :fail, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
+  cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/statements/function/params-dflt-duplicates.js
   cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/statements/function/params-dflt-ref-arguments.js
@@ -84162,7 +84162,7 @@
 - path: test262/test/language/statements/generators/params-dflt-args-unmapped.js
   cmd: runTest262 :normal, "NoException", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/statements/generators/params-dflt-duplicates.js
-  cmd: runTest262 :fail, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
+  cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], []
 - path: test262/test/language/statements/generators/params-dflt-duplicates.js
   cmd: runTest262 :normal, "SyntaxError", ["../../../../harness/assert.js", "../../../../harness/sta.js"], [:strict]
 - path: test262/test/language/statements/generators/params-dflt-ref-arguments.js

Modified: trunk/Source/_javascript_Core/ChangeLog (205968 => 205969)


--- trunk/Source/_javascript_Core/ChangeLog	2016-09-15 15:30:00 UTC (rev 205968)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-09-15 15:40:55 UTC (rev 205969)
@@ -1,3 +1,24 @@
+2016-09-15  Joseph Pecoraro  <pecor...@apple.com>
+
+        test262: Should be a SyntaxError for duplicate parameter names in function with default parameters
+        https://bugs.webkit.org/show_bug.cgi?id=162013
+
+        Reviewed by Saam Barati.
+
+        https://tc39.github.io/ecma262/#sec-function-definitions-static-semantics-early-errors
+        It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+        false and BoundNames of FormalParameterList contains any duplicate elements.
+
+        Non-simple parameter lists include rest parameters, destructuring,
+        and default parameters.
+
+        * parser/Parser.cpp:
+        (JSC::Parser<LexerType>::parseFormalParameters):
+        Previously, we were not failing if there were default parameters
+        early in the parameter list that were not yet identified as duplicates
+        and simple parameters later were duplicates. Now, we fail if there
+        are default parameters anywhere in the parameter list with a duplicate.
+
 2016-09-14  Joseph Pecoraro  <pecor...@apple.com>
 
         ASSERT_NOT_REACHED when using spread inside an array literal with Function.prototype.apply

Modified: trunk/Source/_javascript_Core/parser/Parser.cpp (205968 => 205969)


--- trunk/Source/_javascript_Core/parser/Parser.cpp	2016-09-15 15:30:00 UTC (rev 205968)
+++ trunk/Source/_javascript_Core/parser/Parser.cpp	2016-09-15 15:40:55 UTC (rev 205969)
@@ -1748,11 +1748,12 @@
 {
 #define failIfDuplicateIfViolation() \
     if (duplicateParameter) {\
-        semanticFailIfTrue(defaultValue, "Duplicate parameter '", duplicateParameter->impl(), "' not allowed in function with default parameter values");\
+        semanticFailIfTrue(hasDefaultParameterValues, "Duplicate parameter '", duplicateParameter->impl(), "' not allowed in function with default parameter values");\
         semanticFailIfTrue(hasDestructuringPattern, "Duplicate parameter '", duplicateParameter->impl(), "' not allowed in function with destructuring parameters");\
         semanticFailIfTrue(isRestParameter, "Duplicate parameter '", duplicateParameter->impl(), "' not allowed in function with a rest parameter");\
     }
 
+    bool hasDefaultParameterValues = false;
     bool hasDestructuringPattern = false;
     bool isRestParameter = false;
     const Identifier* duplicateParameter = nullptr;
@@ -1773,8 +1774,11 @@
         } else
             parameter = parseDestructuringPattern(context, DestructuringKind::DestructureToParameters, ExportType::NotExported, &duplicateParameter, &hasDestructuringPattern);
         failIfFalse(parameter, "Cannot parse parameter pattern");
-        if (!isRestParameter)
+        if (!isRestParameter) {
             defaultValue = parseDefaultValueForDestructuringPattern(context);
+            if (defaultValue)
+                hasDefaultParameterValues = true;
+        }
         propagateError();
         failIfDuplicateIfViolation();
         if (isRestParameter || defaultValue || hasDestructuringPattern)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to