Support for-of syntax
https://bugs.webkit.org/show_bug.cgi?id=122339
Reviewed by Geoffrey Garen.
Source/JavaScriptCore:
Add support for for-of syntax to JSC. As part of doing this I had to make
us support unique empty strings as identifiers. In a follow on patch i'm
going to remove the distinction entirely as it's purely a complicating
separation.
Otherwise the logic here is fairly self-explanatory.
- bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::addConstant):
(JSC::BytecodeGenerator::emitCall):
- bytecompiler/BytecodeGenerator.h:
- bytecompiler/NodesCodegen.cpp:
(JSC::CallArguments::CallArguments):
(JSC::ForOfNode::emitBytecode):
- jit/JITOperations.cpp:
- parser/ASTBuilder.h:
(JSC::ASTBuilder::createForOfLoop):
- parser/NodeConstructors.h:
(JSC::EnumerationNode::EnumerationNode):
(JSC::ForInNode::ForInNode):
(JSC::ForOfNode::ForOfNode):
- parser/Nodes.h:
- parser/Parser.cpp:
(JSC::::parseVarDeclarationList):
(JSC::::parseForStatement):
(JSC::Parser::isofToken):
(JSC::SyntaxChecker::createForOfLoop):
- runtime/ArrayIteratorPrototype.cpp:
(JSC::ArrayIteratorPrototype::finishCreation):
(JSC::arrayIteratorPrototypeIterate):
- runtime/ArrayPrototype.cpp:
(JSC::ArrayPrototype::create):
(JSC::ArrayPrototype::finishCreation):
- runtime/ArrayPrototype.h:
- runtime/CommonIdentifiers.cpp:
(JSC::CommonIdentifiers::CommonIdentifiers):
- runtime/CommonIdentifiers.h:
- runtime/Identifier.h:
(JSC::Identifier::from):
(JSC::JSValue::dumpInContext):
- runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::reset):
(JSC::JSObject::putDirectNativeFunction):
(JSC::PrivateName::PrivateName):
(JSC::PropertyName::PropertyName):
Source/WTF:
Update assertions and add a helper function to StringImpl
to save repeated unique or identifier calls.
(WTF::StringImpl::isIdentifierOrUnique):
(WTF::StringImpl::setIsIdentifier):
(WTF::StringImpl::setIsAtomic):
LayoutTests:
Add test cases for the one type that supports for-of so far
- js/basic-for-of-expected.txt: Added.
- js/basic-for-of.html: Added.
- js/regress/for-of-iterate-array-entries.html: Added.
- js/regress/for-of-iterate-array-keys.html: Added.
- js/regress/for-of-iterate-array-values.html: Added.
- js/regress/script-tests/for-of-iterate-array-entries.js: Added.
(foo):
- js/regress/script-tests/for-of-iterate-array-keys.js: Added.
(foo):
- js/regress/script-tests/for-of-iterate-array-values.js: Added.
(foo):