Title: [198928] trunk
Revision
198928
Author
[email protected]
Date
2016-03-31 16:07:39 -0700 (Thu, 31 Mar 2016)

Log Message

[ES6] Disallow var assignments in for-in loops
https://bugs.webkit.org/show_bug.cgi?id=155451

Reviewed by Mark Lam.

Source/_javascript_Core:

We're doing this in its own patch instead of the patch for https://bugs.webkit.org/show_bug.cgi?id=155384
because last time we made this change it broke some websites. Lets try making
it again because it's what the ES6 mandates. If it still breaks things we will
roll it out.

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseForStatement):

LayoutTests:

* js/parser-syntax-check-expected.txt:
* js/script-tests/parser-syntax-check.js:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (198927 => 198928)


--- trunk/LayoutTests/ChangeLog	2016-03-31 23:01:29 UTC (rev 198927)
+++ trunk/LayoutTests/ChangeLog	2016-03-31 23:07:39 UTC (rev 198928)
@@ -1,5 +1,15 @@
 2016-03-31  Saam barati  <[email protected]>
 
+        [ES6] Disallow var assignments in for-in loops
+        https://bugs.webkit.org/show_bug.cgi?id=155451
+
+        Reviewed by Mark Lam.
+
+        * js/parser-syntax-check-expected.txt:
+        * js/script-tests/parser-syntax-check.js:
+
+2016-03-31  Saam barati  <[email protected]>
+
         parsing arrow function expressions slows down the parser by 8% lets recoup some loss
         https://bugs.webkit.org/show_bug.cgi?id=155988
 

Modified: trunk/LayoutTests/js/parser-syntax-check-expected.txt (198927 => 198928)


--- trunk/LayoutTests/js/parser-syntax-check-expected.txt	2016-03-31 23:01:29 UTC (rev 198927)
+++ trunk/LayoutTests/js/parser-syntax-check-expected.txt	2016-03-31 23:07:39 UTC (rev 198928)
@@ -504,10 +504,10 @@
 PASS Valid:   "function f() { for ((a ? b : c) in c) break }"
 PASS Valid:   "for (var a in b in c) break" with ReferenceError
 PASS Valid:   "function f() { for (var a in b in c) break }"
-PASS Valid:   "for (var a = 5 += 6 in b) break" with ReferenceError
-PASS Valid:   "function f() { for (var a = 5 += 6 in b) break }"
-PASS Valid:   "for (var a = debug('should not be hit') in b) break" with ReferenceError
-PASS Valid:   "function f() { for (var a = debug('should not be hit') in b) break }"
+PASS Invalid: "for (var a = 5 += 6 in b) break"
+PASS Invalid: "function f() { for (var a = 5 += 6 in b) break }"
+PASS Invalid: "for (var a = debug('should not be hit') in b) break"
+PASS Invalid: "function f() { for (var a = debug('should not be hit') in b) break }"
 PASS Invalid: "for (var a += 5 in b) break"
 PASS Invalid: "function f() { for (var a += 5 in b) break }"
 PASS Invalid: "for (var a = in b) break"
@@ -518,8 +518,8 @@
 PASS Invalid: "function f() { for (var a = -6, b in b) break }"
 PASS Invalid: "for (var a, b = 8 in b) break"
 PASS Invalid: "function f() { for (var a, b = 8 in b) break }"
-PASS Valid:   "for (var a = (b in c) in d) break" with ReferenceError
-PASS Valid:   "function f() { for (var a = (b in c) in d) break }"
+PASS Invalid: "for (var a = (b in c) in d) break"
+PASS Invalid: "function f() { for (var a = (b in c) in d) break }"
 PASS Invalid: "for (var a = (b in c in d) break"
 PASS Invalid: "function f() { for (var a = (b in c in d) break }"
 PASS Invalid: "for (var (a) in b) { }"
@@ -532,8 +532,8 @@
 PASS Invalid: "function f() { for (var {a} = 20 of b) { } }"
 PASS Invalid: "for (var {a} = 20 in b) { }"
 PASS Invalid: "function f() { for (var {a} = 20 in b) { } }"
-PASS Valid:   "for (var i = 20 in b) { }" with ReferenceError
-PASS Valid:   "function f() { for (var i = 20 in b) { } }"
+PASS Invalid: "for (var i = 20 in b) { }"
+PASS Invalid: "function f() { for (var i = 20 in b) { } }"
 PASS Invalid: "for (var i = 20 of b) { }"
 PASS Invalid: "function f() { for (var i = 20 of b) { } }"
 PASS Invalid: "for (var {i} = 20 of b) { }"

Modified: trunk/LayoutTests/js/script-tests/parser-syntax-check.js (198927 => 198928)


--- trunk/LayoutTests/js/script-tests/parser-syntax-check.js	2016-03-31 23:01:29 UTC (rev 198927)
+++ trunk/LayoutTests/js/script-tests/parser-syntax-check.js	2016-03-31 23:07:39 UTC (rev 198928)
@@ -333,21 +333,21 @@
 invalid("for (a ? b : c in c) break");
 valid  ("for ((a ? b : c) in c) break");
 valid  ("for (var a in b in c) break");
-valid("for (var a = 5 += 6 in b) break");
-valid("for (var a = debug('should not be hit') in b) break");
+invalid("for (var a = 5 += 6 in b) break");
+invalid("for (var a = debug('should not be hit') in b) break");
 invalid("for (var a += 5 in b) break");
 invalid("for (var a = in b) break");
 invalid("for (var a, b in b) break");
 invalid("for (var a = -6, b in b) break");
 invalid("for (var a, b = 8 in b) break");
-valid("for (var a = (b in c) in d) break");
+invalid("for (var a = (b in c) in d) break");
 invalid("for (var a = (b in c in d) break");
 invalid("for (var (a) in b) { }");
 valid  ("for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {}");
 invalid("for (var {a} = 20 in b) { }");
 invalid("for (var {a} = 20 of b) { }");
 invalid("for (var {a} = 20 in b) { }");
-valid("for (var i = 20 in b) { }");
+invalid("for (var i = 20 in b) { }");
 invalid("for (var i = 20 of b) { }");
 invalid("for (var {i} = 20 of b) { }");
 invalid("for (var [i] = 20 of b) { }");

Modified: trunk/Source/_javascript_Core/ChangeLog (198927 => 198928)


--- trunk/Source/_javascript_Core/ChangeLog	2016-03-31 23:01:29 UTC (rev 198927)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-03-31 23:07:39 UTC (rev 198928)
@@ -1,5 +1,20 @@
 2016-03-31  Saam barati  <[email protected]>
 
+        [ES6] Disallow var assignments in for-in loops
+        https://bugs.webkit.org/show_bug.cgi?id=155451
+
+        Reviewed by Mark Lam.
+
+        We're doing this in its own patch instead of the patch for https://bugs.webkit.org/show_bug.cgi?id=155384
+        because last time we made this change it broke some websites. Lets try making
+        it again because it's what the ES6 mandates. If it still breaks things we will
+        roll it out.
+
+        * parser/Parser.cpp:
+        (JSC::Parser<LexerType>::parseForStatement):
+
+2016-03-31  Saam barati  <[email protected]>
+
         parsing arrow function expressions slows down the parser by 8% lets recoup some loss
         https://bugs.webkit.org/show_bug.cgi?id=155988
 

Modified: trunk/Source/_javascript_Core/parser/Parser.cpp (198927 => 198928)


--- trunk/Source/_javascript_Core/parser/Parser.cpp	2016-03-31 23:01:29 UTC (rev 198927)
+++ trunk/Source/_javascript_Core/parser/Parser.cpp	2016-03-31 23:07:39 UTC (rev 198928)
@@ -1168,8 +1168,7 @@
         if (hasAnyAssignments) {
             if (isOfEnumeration)
                 internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-of loop header");
-            if (strictMode() || (isLetDeclaration || isConstDeclaration) || !context.isBindingNode(forInTarget))
-                internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-in loop header");
+            internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-in loop header");
         }
         TreeExpression expr = parseExpression(context);
         failIfFalse(expr, "Expected _expression_ to enumerate");
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to