Changeset 266326 in webkit for trunk/Source/JavaScriptCore


Ignore:
Timestamp:
Aug 29, 2020, 12:06:45 PM (5 years ago)
Author:
[email protected]
Message:

[JSC] for-of uses AssignmentExpression while for-in uses Expression
https://bugs.webkit.org/show_bug.cgi?id=215975

Reviewed by Ross Kirsling.

JSTests:

  • test262/expectations.yaml:

Source/JavaScriptCore:

While for-in uses Expression, for-of and for-await-of use AssignmentExpression which does not accept comma-expression.
We should align our implementation to that.

for (LeftHandSideExpression in Expression) Statement
for (LeftHandSideExpression of AssignmentExpression) Statement
for await(LeftHandSideExpression of AssignmentExpression) Statement

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::parseForStatement):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r266324 r266326  
     12020-08-29  Yusuke Suzuki  <[email protected]>
     2
     3        [JSC] for-of uses AssignmentExpression while for-in uses Expression
     4        https://bugs.webkit.org/show_bug.cgi?id=215975
     5
     6        Reviewed by Ross Kirsling.
     7
     8        While for-in uses Expression, for-of and for-await-of use AssignmentExpression which does not accept comma-expression.
     9        We should align our implementation to that.
     10
     11            for (LeftHandSideExpression in Expression) Statement
     12            for (LeftHandSideExpression of AssignmentExpression) Statement
     13            for await(LeftHandSideExpression of AssignmentExpression) Statement
     14
     15        * parser/Parser.cpp:
     16        (JSC::Parser<LexerType>::parseForStatement):
     17
    1182020-08-28  Yusuke Suzuki  <[email protected]>
    219
  • trunk/Source/JavaScriptCore/parser/Parser.cpp

    r266324 r266326  
    14191419                internalFailWithMessage(false, "Cannot assign to the loop variable inside a for-in loop header");
    14201420        }
    1421         TreeExpression expr = parseExpression(context);
     1421
     1422        // While for-in uses Expression, for-of / for-await-of use AssignmentExpression.
     1423        // https://tc39.es/ecma262/#sec-for-in-and-for-of-statements
     1424        TreeExpression expr = 0;
     1425        if (isOfEnumeration)
     1426            expr = parseAssignmentExpression(context);
     1427        else
     1428            expr = parseExpression(context);
    14221429        failIfFalse(expr, "Expected expression to enumerate");
    14231430        recordPauseLocation(context.breakpointLocation(expr));
     
    15171524    }
    15181525
    1519     TreeExpression expr = parseExpression(context);
     1526    // While for-in uses Expression, for-of / for-await-of use AssignmentExpression.
     1527    // https://tc39.es/ecma262/#sec-for-in-and-for-of-statements
     1528    TreeExpression expr = 0;
     1529    if (isOfEnumeration)
     1530        expr = parseAssignmentExpression(context);
     1531    else
     1532        expr = parseExpression(context);
    15201533    failIfFalse(expr, "Cannot parse subject for-", isOfEnumeration ? "of" : "in", " statement");
    15211534    recordPauseLocation(context.breakpointLocation(expr));
Note: See TracChangeset for help on using the changeset viewer.