• marja@chromium.org's avatar
    Implement handling of arrow functions in the parser · e5991fc3
    marja@chromium.org authored
    Arrow functions are parsed from ParseAssignmentExpression(). Handling the
    parameter list is done by letting ParseConditionalExpression() parse a comma
    separated list of identifiers, and it returns a tree of BinaryOperation nodes
    with VariableProxy leaves, or a single VariableProxy if there is only one
    parameter. When the arrow token "=>" is found, the VariableProxy nodes are
    passed to ParseArrowFunctionLiteral(), which will then skip parsing the
    paramaeter list. This avoids having to rewind when the arrow is found and
    restart parsing the parameter list.
    
    Note that the empty parameter list "()" is handled directly in
    ParsePrimaryExpression(): after is has consumed the opening parenthesis,
    if a closing parenthesis follows, then the only valid input is an arrow
    function. In this case, ParsePrimaryExpression() directly calls
    ParseArrowFunctionLiteral(), to avoid needing to return a sentinel value
    to signal the empty parameter list. Because it will consume the body of
    the arrow function, ParseAssignmentExpression() will not see the arrow
    "=>" token as next, and return the already-parser expression.
    
    The implementation is done in ParserBase, so it was needed to do some
    additions to ParserBase, ParserTraits and PreParserTraits. Some of the
    glue code can be removed later on when more more functionality is moved
    to ParserBase.
    
    Additionally, this adds a runtime flag "harmony_arrow_functions"
    (disabled by default); enabling "harmony" will enable it as well.
    
    BUG=v8:2700
    LOG=N
    R=marja@chromium.org
    
    Review URL: https://codereview.chromium.org/385553003
    
    Patch from Adrián Pérez de Castro <aperez@igalia.com>.
    
    git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22320 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    e5991fc3
Name
Last commit
Last update
benchmarks Loading commit data...
build Loading commit data...
include Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
tools Loading commit data...
.DEPS.git Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
Makefile.nacl Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...