Skip to content
  • oliver@apple.com's avatar
    Source/JavaScriptCore: Implement ES6 spread operator · 72f8a820
    oliver@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=122911
    
    Reviewed by Michael Saboff.
    
    Implement the ES6 spread operator
    
    This has a little bit of refactoring to move the enumeration logic out ForOfNode
    and into BytecodeGenerator, and then adds the logic to make it nicely callback
    driven.
    
    The rest of the logic is just the addition of the SpreadExpressionNode, the parsing,
    and actually handling the spread.
    
    * bytecompiler/BytecodeGenerator.cpp:
    (JSC::BytecodeGenerator::emitNewArray):
    (JSC::BytecodeGenerator::emitCall):
    (JSC::BytecodeGenerator::emitEnumeration):
    * bytecompiler/BytecodeGenerator.h:
    * bytecompiler/NodesCodegen.cpp:
    (JSC::ArrayNode::emitBytecode):
    (JSC::ForOfNode::emitBytecode):
    (JSC::SpreadExpressionNode::emitBytecode):
    * parser/ASTBuilder.h:
    (JSC::ASTBuilder::createSpreadExpression):
    * parser/Lexer.cpp:
    (JSC::::lex):
    * parser/NodeConstructors.h:
    (JSC::SpreadExpressionNode::SpreadExpressionNode):
    * parser/Nodes.h:
    (JSC::ExpressionNode::isSpreadExpression):
    (JSC::SpreadExpressionNode::expression):
    * parser/Parser.cpp:
    (JSC::::parseArrayLiteral):
    (JSC::::parseArguments):
    (JSC::::parseMemberExpression):
    * parser/Parser.h:
    (JSC::Parser::getTokenName):
    (JSC::Parser::updateErrorMessageSpecialCase):
    * parser/ParserTokens.h:
    * parser/SyntaxChecker.h:
    (JSC::SyntaxChecker::createSpreadExpression):
    
    LayoutTests: Implement spread
    https://bugs.webkit.org/show_bug.cgi?id=122911
    
    Reviewed by Michael Saboff.
    
    Add testcases
    
    * js/basic-spread-expected.txt: Added.
    * js/basic-spread.html: Added.
    * js/parser-syntax-check-expected.txt:
    * js/script-tests/basic-spread.js: Added.
    (f):
    (o.f.o.f.o.f.o.f.h.eval.o.h.o.h.o.h.o.h.g):
    * js/script-tests/parser-syntax-check.js:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157545 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    72f8a820