Skip to content
  • oliver@apple.com's avatar
    Support for-of syntax · 20a9bf08
    oliver@apple.com authored
    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):
    * parser/Parser.h:
    (JSC::Parser::isofToken):
    * parser/SyntaxChecker.h:
    (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):
    * runtime/JSCJSValue.cpp:
    (JSC::JSValue::dumpInContext):
    * runtime/JSGlobalObject.cpp:
    (JSC::JSGlobalObject::reset):
    * runtime/JSObject.cpp:
    (JSC::JSObject::putDirectNativeFunction):
    * runtime/PrivateName.h:
    (JSC::PrivateName::PrivateName):
    * runtime/PropertyName.h:
    (JSC::PropertyName::PropertyName):
    
    Source/WTF:
    
    Update assertions and add a helper function to StringImpl
    to save repeated unique or identifier calls.
    
    * wtf/text/StringImpl.h:
    (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):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156910 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    20a9bf08