Ignore:
Timestamp:
Mar 24, 2014, 6:54:01 PM (11 years ago)
Author:
[email protected]
Message:

Strict mode destructuring assignment crashes the parser.
https://bugs.webkit.org/show_bug.cgi?id=130538

Reviewed by Michael Saboff.

Source/JavaScriptCore:

The SyntaxChecker mode always return 1 for success, except
for a small subset of functions where we needed exact information.
This ends up just being a poor design decision as it means
the parser can get confused between a function return 1, and
the Resolve constant which was also 1. So we now use a unique
type for every creation method.

  • parser/SyntaxChecker.h:

(JSC::SyntaxChecker::createSourceElements):
(JSC::SyntaxChecker::createFunctionBody):
(JSC::SyntaxChecker::createArguments):
(JSC::SyntaxChecker::createSpreadExpression):
(JSC::SyntaxChecker::createArgumentsList):
(JSC::SyntaxChecker::createPropertyList):
(JSC::SyntaxChecker::createElementList):
(JSC::SyntaxChecker::createFormalParameterList):
(JSC::SyntaxChecker::createClause):
(JSC::SyntaxChecker::createClauseList):
(JSC::SyntaxChecker::createFuncDeclStatement):
(JSC::SyntaxChecker::createBlockStatement):
(JSC::SyntaxChecker::createExprStatement):
(JSC::SyntaxChecker::createIfStatement):
(JSC::SyntaxChecker::createForLoop):
(JSC::SyntaxChecker::createForInLoop):
(JSC::SyntaxChecker::createForOfLoop):
(JSC::SyntaxChecker::createEmptyStatement):
(JSC::SyntaxChecker::createVarStatement):
(JSC::SyntaxChecker::createReturnStatement):
(JSC::SyntaxChecker::createBreakStatement):
(JSC::SyntaxChecker::createContinueStatement):
(JSC::SyntaxChecker::createTryStatement):
(JSC::SyntaxChecker::createSwitchStatement):
(JSC::SyntaxChecker::createWhileStatement):
(JSC::SyntaxChecker::createWithStatement):
(JSC::SyntaxChecker::createDoWhileStatement):
(JSC::SyntaxChecker::createLabelStatement):
(JSC::SyntaxChecker::createThrowStatement):
(JSC::SyntaxChecker::createDebugger):
(JSC::SyntaxChecker::createConstStatement):
(JSC::SyntaxChecker::appendConstDecl):
(JSC::SyntaxChecker::combineCommaNodes):
(JSC::SyntaxChecker::operatorStackPop):

LayoutTests:

Add tests

  • js/parser-syntax-check-expected.txt:
  • js/script-tests/parser-syntax-check.js:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r166201 r166216  
     12014-03-24  Oliver Hunt  <[email protected]>
     2
     3        Strict mode destructuring assignment crashes the parser.
     4        https://bugs.webkit.org/show_bug.cgi?id=130538
     5
     6        Reviewed by Michael Saboff.
     7
     8        The SyntaxChecker mode always return 1 for success, except
     9        for a small subset of functions where we needed exact information.
     10        This ends up just being a poor design decision as it means
     11        the parser can get confused between a function return 1, and
     12        the Resolve constant which was also 1. So we now use a unique
     13        type for every creation method.
     14
     15        * parser/SyntaxChecker.h:
     16        (JSC::SyntaxChecker::createSourceElements):
     17        (JSC::SyntaxChecker::createFunctionBody):
     18        (JSC::SyntaxChecker::createArguments):
     19        (JSC::SyntaxChecker::createSpreadExpression):
     20        (JSC::SyntaxChecker::createArgumentsList):
     21        (JSC::SyntaxChecker::createPropertyList):
     22        (JSC::SyntaxChecker::createElementList):
     23        (JSC::SyntaxChecker::createFormalParameterList):
     24        (JSC::SyntaxChecker::createClause):
     25        (JSC::SyntaxChecker::createClauseList):
     26        (JSC::SyntaxChecker::createFuncDeclStatement):
     27        (JSC::SyntaxChecker::createBlockStatement):
     28        (JSC::SyntaxChecker::createExprStatement):
     29        (JSC::SyntaxChecker::createIfStatement):
     30        (JSC::SyntaxChecker::createForLoop):
     31        (JSC::SyntaxChecker::createForInLoop):
     32        (JSC::SyntaxChecker::createForOfLoop):
     33        (JSC::SyntaxChecker::createEmptyStatement):
     34        (JSC::SyntaxChecker::createVarStatement):
     35        (JSC::SyntaxChecker::createReturnStatement):
     36        (JSC::SyntaxChecker::createBreakStatement):
     37        (JSC::SyntaxChecker::createContinueStatement):
     38        (JSC::SyntaxChecker::createTryStatement):
     39        (JSC::SyntaxChecker::createSwitchStatement):
     40        (JSC::SyntaxChecker::createWhileStatement):
     41        (JSC::SyntaxChecker::createWithStatement):
     42        (JSC::SyntaxChecker::createDoWhileStatement):
     43        (JSC::SyntaxChecker::createLabelStatement):
     44        (JSC::SyntaxChecker::createThrowStatement):
     45        (JSC::SyntaxChecker::createDebugger):
     46        (JSC::SyntaxChecker::createConstStatement):
     47        (JSC::SyntaxChecker::appendConstDecl):
     48        (JSC::SyntaxChecker::combineCommaNodes):
     49        (JSC::SyntaxChecker::operatorStackPop):
     50
    1512014-03-24  Brent Fulgham  <[email protected]>
    252
Note: See TracChangeset for help on using the changeset viewer.