Changeset 198928 in webkit


Ignore:
Timestamp:
Mar 31, 2016 4:07:39 PM (8 years ago)
Author:
sbarati@apple.com
Message:

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

Reviewed by Mark Lam.

Source/JavaScriptCore:

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:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r198927 r198928  
     12016-03-31  Saam barati  <sbarati@apple.com>
     2
     3        [ES6] Disallow var assignments in for-in loops
     4        https://bugs.webkit.org/show_bug.cgi?id=155451
     5
     6        Reviewed by Mark Lam.
     7
     8        * js/parser-syntax-check-expected.txt:
     9        * js/script-tests/parser-syntax-check.js:
     10
    1112016-03-31  Saam barati  <sbarati@apple.com>
    212
  • trunk/LayoutTests/js/parser-syntax-check-expected.txt

    r198927 r198928  
    505505PASS Valid:   "for (var a in b in c) break" with ReferenceError
    506506PASS Valid:   "function f() { for (var a in b in c) break }"
    507 PASS Valid:   "for (var a = 5 += 6 in b) break" with ReferenceError
    508 PASS Valid:  "function f() { for (var a = 5 += 6 in b) break }"
    509 PASS Valid:   "for (var a = debug('should not be hit') in b) break" with ReferenceError
    510 PASS Valid:  "function f() { for (var a = debug('should not be hit') in b) break }"
     507PASS Invalid: "for (var a = 5 += 6 in b) break"
     508PASS Invalid: "function f() { for (var a = 5 += 6 in b) break }"
     509PASS Invalid: "for (var a = debug('should not be hit') in b) break"
     510PASS Invalid: "function f() { for (var a = debug('should not be hit') in b) break }"
    511511PASS Invalid: "for (var a += 5 in b) break"
    512512PASS Invalid: "function f() { for (var a += 5 in b) break }"
     
    519519PASS Invalid: "for (var a, b = 8 in b) break"
    520520PASS Invalid: "function f() { for (var a, b = 8 in b) break }"
    521 PASS Valid:   "for (var a = (b in c) in d) break" with ReferenceError
    522 PASS Valid:  "function f() { for (var a = (b in c) in d) break }"
     521PASS Invalid: "for (var a = (b in c) in d) break"
     522PASS Invalid: "function f() { for (var a = (b in c) in d) break }"
    523523PASS Invalid: "for (var a = (b in c in d) break"
    524524PASS Invalid: "function f() { for (var a = (b in c in d) break }"
     
    533533PASS Invalid: "for (var {a} = 20 in b) { }"
    534534PASS Invalid: "function f() { for (var {a} = 20 in b) { } }"
    535 PASS Valid:   "for (var i = 20 in b) { }" with ReferenceError
    536 PASS Valid:  "function f() { for (var i = 20 in b) { } }"
     535PASS Invalid: "for (var i = 20 in b) { }"
     536PASS Invalid: "function f() { for (var i = 20 in b) { } }"
    537537PASS Invalid: "for (var i = 20 of b) { }"
    538538PASS Invalid: "function f() { for (var i = 20 of b) { } }"
  • trunk/LayoutTests/js/script-tests/parser-syntax-check.js

    r198927 r198928  
    334334valid  ("for ((a ? b : c) in c) break");
    335335valid  ("for (var a in b in c) break");
    336 valid("for (var a = 5 += 6 in b) break");
    337 valid("for (var a = debug('should not be hit') in b) break");
     336invalid("for (var a = 5 += 6 in b) break");
     337invalid("for (var a = debug('should not be hit') in b) break");
    338338invalid("for (var a += 5 in b) break");
    339339invalid("for (var a = in b) break");
     
    341341invalid("for (var a = -6, b in b) break");
    342342invalid("for (var a, b = 8 in b) break");
    343 valid("for (var a = (b in c) in d) break");
     343invalid("for (var a = (b in c) in d) break");
    344344invalid("for (var a = (b in c in d) break");
    345345invalid("for (var (a) in b) { }");
     
    348348invalid("for (var {a} = 20 of b) { }");
    349349invalid("for (var {a} = 20 in b) { }");
    350 valid("for (var i = 20 in b) { }");
     350invalid("for (var i = 20 in b) { }");
    351351invalid("for (var i = 20 of b) { }");
    352352invalid("for (var {i} = 20 of b) { }");
  • trunk/Source/JavaScriptCore/ChangeLog

    r198927 r198928  
     12016-03-31  Saam barati  <sbarati@apple.com>
     2
     3        [ES6] Disallow var assignments in for-in loops
     4        https://bugs.webkit.org/show_bug.cgi?id=155451
     5
     6        Reviewed by Mark Lam.
     7
     8        We're doing this in its own patch instead of the patch for https://bugs.webkit.org/show_bug.cgi?id=155384
     9        because last time we made this change it broke some websites. Lets try making
     10        it again because it's what the ES6 mandates. If it still breaks things we will
     11        roll it out.
     12
     13        * parser/Parser.cpp:
     14        (JSC::Parser<LexerType>::parseForStatement):
     15
    1162016-03-31  Saam barati  <sbarati@apple.com>
    217
  • trunk/Source/JavaScriptCore/parser/Parser.cpp

    r198927 r198928  
    11691169            if (isOfEnumeration)
    11701170                internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-of loop header");
    1171             if (strictMode() || (isLetDeclaration || isConstDeclaration) || !context.isBindingNode(forInTarget))
    1172                 internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-in loop header");
     1171            internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-in loop header");
    11731172        }
    11741173        TreeExpression expr = parseExpression(context);
Note: See TracChangeset for help on using the changeset viewer.