Source/JavaScriptCore: Implement ES6 spread operator
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):
(JSC::ASTBuilder::createSpreadExpression):
(JSC::::lex):
- parser/NodeConstructors.h:
(JSC::SpreadExpressionNode::SpreadExpressionNode):
(JSC::ExpressionNode::isSpreadExpression):
(JSC::SpreadExpressionNode::expression):
(JSC::::parseArrayLiteral):
(JSC::::parseArguments):
(JSC::::parseMemberExpression):
(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: