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