<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[192935] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/192935">192935</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2015-12-01 17:37:19 -0800 (Tue, 01 Dec 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/192914">r192914</a>.
https://bugs.webkit.org/show_bug.cgi?id=151734
JSC tests for this change are failing on 32 and 64-bit bots
(Requested by ryanhaddad on #webkit).
Reverted changeset:
"[ES6] Implement LLInt/Baseline Support for ES6 Generators and
enable this feature"
https://bugs.webkit.org/show_bug.cgi?id=150792
http://trac.webkit.org/changeset/192914</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkChangeLog">trunk/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSScriptRefcpp">trunk/Source/JavaScriptCore/API/JSScriptRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceJavaScriptCoreDerivedSourcesmake">trunk/Source/JavaScriptCore/DerivedSources.make</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp">trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeBasicBlockcpp">trunk/Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeListjson">trunk/Source/JavaScriptCore/bytecode/BytecodeList.json</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeLivenessAnalysiscpp">trunk/Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeUseDefh">trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockh">trunk/Source/JavaScriptCore/bytecode/CodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeEvalCodeCacheh">trunk/Source/JavaScriptCore/bytecode/EvalCodeCache.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeExecutableInfoh">trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePreciseJumpTargetscpp">trunk/Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutablecpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutableh">trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerNodesCodegencpp">trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp">trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGForAllKillsh">trunk/Source/JavaScriptCore/dfg/DFGForAllKills.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGGraphh">trunk/Source/JavaScriptCore/dfg/DFGGraph.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGOSREntrypointCreationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGVariableEventStreamcpp">trunk/Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLForOSREntryJITCodecpp">trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLForOSREntryJITCodeh">trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLOSREntrycpp">trunk/Source/JavaScriptCore/ftl/FTLOSREntry.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLStatecpp">trunk/Source/JavaScriptCore/ftl/FTLState.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMarkedBlockh">trunk/Source/JavaScriptCore/heap/MarkedBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterInterpretercpp">trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITcpp">trunk/Source/JavaScriptCore/jit/JIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITh">trunk/Source/JavaScriptCore/jit/JIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodescpp">trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationsh">trunk/Source/JavaScriptCore/jit/JITOperations.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntEntrypointcpp">trunk/Source/JavaScriptCore/llint/LLIntEntrypoint.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathsh">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterasm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserASTBuilderh">trunk/Source/JavaScriptCore/parser/ASTBuilder.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodescpp">trunk/Source/JavaScriptCore/parser/Nodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodesh">trunk/Source/JavaScriptCore/parser/Nodes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParsercpp">trunk/Source/JavaScriptCore/parser/Parser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserh">trunk/Source/JavaScriptCore/parser/Parser.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserModesh">trunk/Source/JavaScriptCore/parser/ParserModes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSyntaxCheckerh">trunk/Source/JavaScriptCore/parser/SyntaxChecker.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCachecpp">trunk/Source/JavaScriptCore/runtime/CodeCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCacheh">trunk/Source/JavaScriptCore/runtime/CodeCache.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonIdentifiersh">trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonSlowPathscpp">trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonSlowPathsh">trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCompletioncpp">trunk/Source/JavaScriptCore/runtime/Completion.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutablecpp">trunk/Source/JavaScriptCore/runtime/Executable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutableh">trunk/Source/JavaScriptCore/runtime/Executable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorh">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjecth">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeModuleLoaderObjectcpp">trunk/Source/JavaScriptCore/runtime/ModuleLoaderObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMcpp">trunk/Source/JavaScriptCore/runtime/VM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMh">trunk/Source/JavaScriptCore/runtime/VM.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6generators_yield_star_generic_iterablesjs">trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_generic_iterables.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6generators_yield_star_instances_of_iterablesjs">trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_instances_of_iterables.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6generators_yield_star_iterator_closingjs">trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6generators_yield_star_iterator_closing_via_throwjs">trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing_via_throw.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6yaml">trunk/Source/JavaScriptCore/tests/es6.yaml</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfFastBitVectorh">trunk/Source/WTF/wtf/FastBitVector.h</a></li>
<li><a href="#trunkSourceWTFwtfFeatureDefinesh">trunk/Source/WTF/wtf/FeatureDefines.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourcecmakeOptionsWincmake">trunk/Source/cmake/OptionsWin.cmake</a></li>
<li><a href="#trunkSourcecmakeWebKitFeaturescmake">trunk/Source/cmake/WebKitFeatures.cmake</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptswebkitperlFeatureListpm">trunk/Tools/Scripts/webkitperl/FeatureList.pm</a></li>
<li><a href="#trunkWebKitLibrariesChangeLog">trunk/WebKitLibraries/ChangeLog</a></li>
<li><a href="#trunkWebKitLibrarieswintoolsvspropsFeatureDefinesprops">trunk/WebKitLibraries/win/tools/vsprops/FeatureDefines.props</a></li>
<li><a href="#trunkWebKitLibrarieswintoolsvspropsFeatureDefinesCairoprops">trunk/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.props</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCorebuiltinsGeneratorPrototypejs">trunk/Source/JavaScriptCore/builtins/GeneratorPrototype.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceCodeKeyh">trunk/Source/JavaScriptCore/parser/SourceCodeKey.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorFramecpp">trunk/Source/JavaScriptCore/runtime/GeneratorFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorFrameh">trunk/Source/JavaScriptCore/runtime/GeneratorFrame.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorFunctionConstructorcpp">trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorFunctionConstructorh">trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorFunctionPrototypecpp">trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorFunctionPrototypeh">trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorPrototypecpp">trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorPrototypeh">trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGeneratorThisModeh">trunk/Source/JavaScriptCore/runtime/GeneratorThisMode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGeneratorFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGeneratorFunctionh">trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorargumentsfromfunctionjs">trunk/Source/JavaScriptCore/tests/stress/generator-arguments-from-function.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorargumentsjs">trunk/Source/JavaScriptCore/tests/stress/generator-arguments.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorclassmethodssyntaxjs">trunk/Source/JavaScriptCore/tests/stress/generator-class-methods-syntax.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorclassmethodsjs">trunk/Source/JavaScriptCore/tests/stress/generator-class-methods.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorevalthisjs">trunk/Source/JavaScriptCore/tests/stress/generator-eval-this.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorfunctionconstructorjs">trunk/Source/JavaScriptCore/tests/stress/generator-function-constructor.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorfunctionnamejs">trunk/Source/JavaScriptCore/tests/stress/generator-function-name.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratormethodswithnongeneratorjs">trunk/Source/JavaScriptCore/tests/stress/generator-methods-with-non-generator.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorrelationsjs">trunk/Source/JavaScriptCore/tests/stress/generator-relations.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorreturnbeforefirstcalljs">trunk/Source/JavaScriptCore/tests/stress/generator-return-before-first-call.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorreturnjs">trunk/Source/JavaScriptCore/tests/stress/generator-return.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorthisjs">trunk/Source/JavaScriptCore/tests/stress/generator-this.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorthrowbeforefirstcalljs">trunk/Source/JavaScriptCore/tests/stress/generator-throw-before-first-call.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorthrowjs">trunk/Source/JavaScriptCore/tests/stress/generator-throw.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorwithnewtargetjs">trunk/Source/JavaScriptCore/tests/stress/generator-with-new-target.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratorwithsuperjs">trunk/Source/JavaScriptCore/tests/stress/generator-with-super.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressgeneratoryieldstarjs">trunk/Source/JavaScriptCore/tests/stress/generator-yield-star.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Yusuke Suzuki <utatane.tea@gmail.com>
</span><span class="cx">
</span><span class="cx"> [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSScriptRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSScriptRef.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> {
</span><span class="cx"> return !!JSC::parse<JSC::ProgramNode>(
</span><span class="cx"> vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</span><del>- JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, SuperBinding::NotNeeded,
</del><ins>+ JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode,
</ins><span class="cx"> error);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -576,10 +576,6 @@
</span><span class="cx"> runtime/FunctionHasExecutedCache.cpp
</span><span class="cx"> runtime/FunctionPrototype.cpp
</span><span class="cx"> runtime/FunctionRareData.cpp
</span><del>- runtime/GeneratorFrame.cpp
- runtime/GeneratorFunctionConstructor.cpp
- runtime/GeneratorFunctionPrototype.cpp
- runtime/GeneratorPrototype.cpp
</del><span class="cx"> runtime/GetterSetter.cpp
</span><span class="cx"> runtime/Identifier.cpp
</span><span class="cx"> runtime/IndexingType.cpp
</span><span class="lines">@@ -619,7 +615,6 @@
</span><span class="cx"> runtime/JSDateMath.cpp
</span><span class="cx"> runtime/JSEnvironmentRecord.cpp
</span><span class="cx"> runtime/JSFunction.cpp
</span><del>- runtime/JSGeneratorFunction.cpp
</del><span class="cx"> runtime/JSGlobalLexicalEnvironment.cpp
</span><span class="cx"> runtime/JSGlobalObject.cpp
</span><span class="cx"> runtime/JSGlobalObjectDebuggable.cpp
</span><span class="lines">@@ -755,7 +750,6 @@
</span><span class="cx"> runtime/DateConstructor.cpp
</span><span class="cx"> runtime/DatePrototype.cpp
</span><span class="cx"> runtime/ErrorPrototype.cpp
</span><del>- runtime/GeneratorPrototype.cpp
</del><span class="cx"> runtime/InspectorInstrumentationObject.cpp
</span><span class="cx"> runtime/IntlCollatorConstructor.cpp
</span><span class="cx"> runtime/IntlCollatorPrototype.cpp
</span><span class="lines">@@ -1215,7 +1209,6 @@
</span><span class="cx"> ${JAVASCRIPTCORE_DIR}/builtins/ArrayIteratorPrototype.js
</span><span class="cx"> ${JAVASCRIPTCORE_DIR}/builtins/ArrayPrototype.js
</span><span class="cx"> ${JAVASCRIPTCORE_DIR}/builtins/FunctionPrototype.js
</span><del>- ${JAVASCRIPTCORE_DIR}/builtins/GeneratorPrototype.js
</del><span class="cx"> ${JAVASCRIPTCORE_DIR}/builtins/GlobalObject.js
</span><span class="cx"> ${JAVASCRIPTCORE_DIR}/builtins/InspectorInstrumentationObject.js
</span><span class="cx"> ${JAVASCRIPTCORE_DIR}/builtins/InternalPromiseConstructor.js
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Caitlin Potter <caitpotter88@gmail.com>
</span><span class="cx">
</span><span class="cx"> [JSC] support CoverInitializedName in nested AssignmentPatterns
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
</span><span class="cx"> ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
</span><span class="cx"> ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
</span><del>-ENABLE_ES6_GENERATORS = ENABLE_ES6_GENERATORS;
</del><ins>+ENABLE_ES6_GENERATORS = ;
</ins><span class="cx"> ENABLE_ES6_MODULES = ;
</span><span class="cx"> ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
</span><span class="cx"> ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/DerivedSources.make (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/DerivedSources.make        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/DerivedSources.make        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -84,7 +84,6 @@
</span><span class="cx"> $(JavaScriptCore)/builtins/ArrayIteratorPrototype.js \
</span><span class="cx"> $(JavaScriptCore)/builtins/ArrayPrototype.js \
</span><span class="cx"> $(JavaScriptCore)/builtins/FunctionPrototype.js \
</span><del>- $(JavaScriptCore)/builtins/GeneratorPrototype.js \
</del><span class="cx"> $(JavaScriptCore)/builtins/GlobalObject.js \
</span><span class="cx"> $(JavaScriptCore)/builtins/InspectorInstrumentationObject.js \
</span><span class="cx"> $(JavaScriptCore)/builtins/InternalPromiseConstructor.js \
</span><span class="lines">@@ -120,7 +119,6 @@
</span><span class="cx"> DateConstructor.lut.h \
</span><span class="cx"> DatePrototype.lut.h \
</span><span class="cx"> ErrorPrototype.lut.h \
</span><del>- GeneratorPrototype.lut.h \
</del><span class="cx"> InspectorInstrumentationObject.lut.h \
</span><span class="cx"> IntlCollatorConstructor.lut.h \
</span><span class="cx"> IntlCollatorPrototype.lut.h \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -758,10 +758,6 @@
</span><span class="cx"> <ClCompile Include="..\runtime\FunctionHasExecutedCache.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\FunctionPrototype.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\FunctionRareData.cpp" />
</span><del>- <ClCompile Include="..\runtime\GeneratorFrame.cpp" />
- <ClCompile Include="..\runtime\GeneratorFunctionConstructor.cpp" />
- <ClCompile Include="..\runtime\GeneratorFunctionPrototype.cpp" />
- <ClCompile Include="..\runtime\GeneratorPrototype.cpp" />
</del><span class="cx"> <ClCompile Include="..\runtime\GetterSetter.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\Identifier.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\IndexingType.cpp" />
</span><span class="lines">@@ -801,7 +797,6 @@
</span><span class="cx"> <ClCompile Include="..\runtime\JSDataViewPrototype.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSDateMath.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSFunction.cpp" />
</span><del>- <ClCompile Include="..\runtime\JSGeneratorFunction.cpp" />
</del><span class="cx"> <ClCompile Include="..\runtime\JSGlobalObject.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSGlobalObjectFunctions.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSGlobalLexicalEnvironment.cpp" />
</span><span class="lines">@@ -952,7 +947,6 @@
</span><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\DateConstructor.lut.h" />
</span><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\DatePrototype.lut.h" />
</span><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\ErrorPrototype.lut.h" />
</span><del>- <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\GeneratorPrototype.lut.h" />
</del><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\HeaderDetection.h" />
</span><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\InjectedScriptSource.h" />
</span><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\InspectorBackendDispatchers.h" />
</span><span class="lines">@@ -1527,7 +1521,6 @@
</span><span class="cx"> <ClInclude Include="..\parser\ParserTokens.h" />
</span><span class="cx"> <ClInclude Include="..\parser\ResultType.h" />
</span><span class="cx"> <ClInclude Include="..\parser\SourceCode.h" />
</span><del>- <ClInclude Include="..\parser\SourceCodeKey.h" />
</del><span class="cx"> <ClInclude Include="..\parser\SourceProvider.h" />
</span><span class="cx"> <ClInclude Include="..\parser\SourceProviderCache.h" />
</span><span class="cx"> <ClInclude Include="..\parser\SourceProviderCacheItem.h" />
</span><span class="lines">@@ -1614,11 +1607,6 @@
</span><span class="cx"> <ClInclude Include="..\runtime\FunctionHasExecutedCache.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\FunctionPrototype.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\FunctionRareData.h" />
</span><del>- <ClInclude Include="..\runtime\GeneratorFrame.h" />
- <ClInclude Include="..\runtime\GeneratorFunctionConstructor.h" />
- <ClInclude Include="..\runtime\GeneratorFunctionPrototype.h" />
- <ClInclude Include="..\runtime\GeneratorPrototype.h" />
- <ClInclude Include="..\runtime\GeneratorThisMode.h" />
</del><span class="cx"> <ClInclude Include="..\runtime\GenericArguments.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\GenericArgumentsInlines.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\GenericOffset.h" />
</span><span class="lines">@@ -1678,7 +1666,6 @@
</span><span class="cx"> <ClInclude Include="..\runtime\JSFloat32Array.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSFloat64Array.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSFunction.h" />
</span><del>- <ClInclude Include="..\runtime\JSGeneratorFunction.h" />
</del><span class="cx"> <ClInclude Include="..\runtime\JSGenericTypedArrayView.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSGenericTypedArrayViewConstructor.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSGenericTypedArrayViewConstructorInlines.h" />
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -669,18 +669,6 @@
</span><span class="cx"> <ClCompile Include="..\runtime\FunctionRareData.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><del>- <ClCompile Include="..\runtime\GeneratorFrame.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
- <ClCompile Include="..\runtime\GeneratorFunctionConstructor.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
- <ClCompile Include="..\runtime\GeneratorFunctionPrototype.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
- <ClCompile Include="..\runtime\GeneratorPrototype.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
</del><span class="cx"> <ClCompile Include="..\runtime\GetterSetter.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><span class="lines">@@ -762,9 +750,6 @@
</span><span class="cx"> <ClCompile Include="..\runtime\JSFunction.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><del>- <ClCompile Include="..\runtime\JSGeneratorFunction.cpp">
- <Filter>runtime</Filter>
- </ClCompile>
</del><span class="cx"> <ClCompile Include="..\runtime\JSGlobalObject.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><span class="lines">@@ -2639,9 +2624,6 @@
</span><span class="cx"> <ClInclude Include="..\parser\SourceCode.h">
</span><span class="cx"> <Filter>parser</Filter>
</span><span class="cx"> </ClInclude>
</span><del>- <ClInclude Include="..\parser\SourceCodeKey.h">
- <Filter>parser</Filter>
- </ClInclude>
</del><span class="cx"> <ClInclude Include="..\parser\SourceProvider.h">
</span><span class="cx"> <Filter>parser</Filter>
</span><span class="cx"> </ClInclude>
</span><span class="lines">@@ -2843,21 +2825,6 @@
</span><span class="cx"> <ClInclude Include="..\runtime\FunctionRareData.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><del>- <ClInclude Include="..\runtime\GeneratorFrame.h">
- <Filter>runtime</Filter>
- </ClInclude>
- <ClInclude Include="..\runtime\GeneratorFunctionConstructor.h">
- <Filter>runtime</Filter>
- </ClInclude>
- <ClInclude Include="..\runtime\GeneratorFunctionPrototype.h">
- <Filter>runtime</Filter>
- </ClInclude>
- <ClInclude Include="..\runtime\GeneratorPrototype.h">
- <Filter>runtime</Filter>
- </ClInclude>
- <ClInclude Include="..\runtime\GeneratorThisMode.h">
- <Filter>runtime</Filter>
- </ClInclude>
</del><span class="cx"> <ClInclude Include="..\runtime\GetPutInfo.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><span class="lines">@@ -2963,9 +2930,6 @@
</span><span class="cx"> <ClInclude Include="..\runtime\JSFunction.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><del>- <ClInclude Include="..\runtime\JSGeneratorFunction.h">
- <Filter>runtime</Filter>
- </ClInclude>
</del><span class="cx"> <ClInclude Include="..\runtime\JSGlobalObject.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><span class="lines">@@ -3330,9 +3294,6 @@
</span><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\ErrorPrototype.lut.h">
</span><span class="cx"> <Filter>Derived Sources</Filter>
</span><span class="cx"> </ClInclude>
</span><del>- <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\GeneratorPrototype.lut.h">
- <Filter>Derived Sources</Filter>
- </ClInclude>
</del><span class="cx"> <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\HeaderDetection.h">
</span><span class="cx"> <Filter>Derived Sources</Filter>
</span><span class="cx"> </ClInclude>
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1208,19 +1208,6 @@
</span><span class="cx">                 709FB86B1AE335C60039D069 /* WeakSetPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 709FB8651AE335C60039D069 /* WeakSetPrototype.cpp */; };
</span><span class="cx">                 709FB86C1AE335C60039D069 /* WeakSetPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 709FB8661AE335C60039D069 /* WeakSetPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 70B0A9D11A9B66460001306A /* RuntimeFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B0A9D01A9B66200001306A /* RuntimeFlags.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                70B791911C024A13002481E2 /* SourceCodeKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B7918E1C0244C9002481E2 /* SourceCodeKey.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B791921C024A23002481E2 /* GeneratorFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70B791831C024432002481E2 /* GeneratorFrame.cpp */; };
-                70B791931C024A28002481E2 /* GeneratorFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B791841C024432002481E2 /* GeneratorFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B791941C024A28002481E2 /* GeneratorFunctionConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70B791851C024432002481E2 /* GeneratorFunctionConstructor.cpp */; };
-                70B791951C024A28002481E2 /* GeneratorFunctionConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B791861C024432002481E2 /* GeneratorFunctionConstructor.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B791961C024A28002481E2 /* GeneratorFunctionPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70B791871C024432002481E2 /* GeneratorFunctionPrototype.cpp */; };
-                70B791971C024A29002481E2 /* GeneratorFunctionPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B791881C024432002481E2 /* GeneratorFunctionPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B791981C024A29002481E2 /* GeneratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70B791891C024432002481E2 /* GeneratorPrototype.cpp */; };
-                70B791991C024A29002481E2 /* GeneratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B7918A1C024432002481E2 /* GeneratorPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B7919A1C024A29002481E2 /* GeneratorThisMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B7918B1C024432002481E2 /* GeneratorThisMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B7919B1C024A46002481E2 /* JSGeneratorFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70B7918C1C024462002481E2 /* JSGeneratorFunction.cpp */; };
-                70B7919C1C024A49002481E2 /* JSGeneratorFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B7918D1C024462002481E2 /* JSGeneratorFunction.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                70B7919D1C024A56002481E2 /* GeneratorPrototype.lut.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B791901C0246CE002481E2 /* GeneratorPrototype.lut.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">                 70DC3E091B2DF2C700054299 /* IteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70DC3E071B2DF2C700054299 /* IteratorPrototype.cpp */; };
</span><span class="cx">                 70DC3E0A1B2DF2C700054299 /* IteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DC3E081B2DF2C700054299 /* IteratorPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 70DE9A091BE7D69E005D89D9 /* LLIntAssembly.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DE9A081BE7D670005D89D9 /* LLIntAssembly.h */; };
</span><span class="lines">@@ -3300,20 +3287,6 @@
</span><span class="cx">                 709FB8651AE335C60039D069 /* WeakSetPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeakSetPrototype.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 709FB8661AE335C60039D069 /* WeakSetPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakSetPrototype.h; sourceTree = "<group>"; };
</span><span class="cx">                 70B0A9D01A9B66200001306A /* RuntimeFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuntimeFlags.h; sourceTree = "<group>"; };
</span><del>-                70B791831C024432002481E2 /* GeneratorFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneratorFrame.cpp; sourceTree = "<group>"; };
-                70B791841C024432002481E2 /* GeneratorFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratorFrame.h; sourceTree = "<group>"; };
-                70B791851C024432002481E2 /* GeneratorFunctionConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneratorFunctionConstructor.cpp; sourceTree = "<group>"; };
-                70B791861C024432002481E2 /* GeneratorFunctionConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratorFunctionConstructor.h; sourceTree = "<group>"; };
-                70B791871C024432002481E2 /* GeneratorFunctionPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneratorFunctionPrototype.cpp; sourceTree = "<group>"; };
-                70B791881C024432002481E2 /* GeneratorFunctionPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratorFunctionPrototype.h; sourceTree = "<group>"; };
-                70B791891C024432002481E2 /* GeneratorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneratorPrototype.cpp; sourceTree = "<group>"; };
-                70B7918A1C024432002481E2 /* GeneratorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratorPrototype.h; sourceTree = "<group>"; };
-                70B7918B1C024432002481E2 /* GeneratorThisMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratorThisMode.h; sourceTree = "<group>"; };
-                70B7918C1C024462002481E2 /* JSGeneratorFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSGeneratorFunction.cpp; sourceTree = "<group>"; };
-                70B7918D1C024462002481E2 /* JSGeneratorFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGeneratorFunction.h; sourceTree = "<group>"; };
-                70B7918E1C0244C9002481E2 /* SourceCodeKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceCodeKey.h; sourceTree = "<group>"; };
-                70B7918F1C0244EC002481E2 /* GeneratorPrototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = GeneratorPrototype.js; sourceTree = "<group>"; };
-                70B791901C0246CE002481E2 /* GeneratorPrototype.lut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratorPrototype.lut.h; sourceTree = "<group>"; };
</del><span class="cx">                 70DC3E071B2DF2C700054299 /* IteratorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IteratorPrototype.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 70DC3E081B2DF2C700054299 /* IteratorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorPrototype.h; sourceTree = "<group>"; };
</span><span class="cx">                 70DE9A081BE7D670005D89D9 /* LLIntAssembly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLIntAssembly.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -5143,7 +5116,6 @@
</span><span class="cx">                                 996B73081BD9FA2C00331B84 /* DateConstructor.lut.h */,
</span><span class="cx">                                 BCD203E70E1718F4002C7E82 /* DatePrototype.lut.h */,
</span><span class="cx">                                 996B73091BD9FA2C00331B84 /* ErrorPrototype.lut.h */,
</span><del>-                                70B791901C0246CE002481E2 /* GeneratorPrototype.lut.h */,
</del><span class="cx">                                 6514F21818B3E1670098FF8B /* InitBytecodes.asm */,
</span><span class="cx">                                 A513E5C6185F9436007E95AD /* InjectedScriptSource.h */,
</span><span class="cx">                                 A5EA710D19F6DF810098F5EC /* InspectorAlternateBackendDispatchers.h */,
</span><span class="lines">@@ -5272,7 +5244,6 @@
</span><span class="cx">                                 869EBCB60E8C6D4A008722CC /* ResultType.h */,
</span><span class="cx">                                 0F8F2B9D17306C8B007DBDA5 /* SourceCode.cpp */,
</span><span class="cx">                                 65E866EE0DD59AFA00A2B2A1 /* SourceCode.h */,
</span><del>-                                70B7918E1C0244C9002481E2 /* SourceCodeKey.h */,
</del><span class="cx">                                 0F493AF816D0CAD10084508B /* SourceProvider.cpp */,
</span><span class="cx">                                 65E866ED0DD59AFA00A2B2A1 /* SourceProvider.h */,
</span><span class="cx">                                 E49DC15512EF277200184A1F /* SourceProviderCache.cpp */,
</span><span class="lines">@@ -5402,15 +5373,6 @@
</span><span class="cx">                                 F692A85D0255597D01FF60F7 /* FunctionPrototype.h */,
</span><span class="cx">                                 62D2D38D1ADF103F000206C1 /* FunctionRareData.cpp */,
</span><span class="cx">                                 62D2D38E1ADF103F000206C1 /* FunctionRareData.h */,
</span><del>-                                70B791831C024432002481E2 /* GeneratorFrame.cpp */,
-                                70B791841C024432002481E2 /* GeneratorFrame.h */,
-                                70B791851C024432002481E2 /* GeneratorFunctionConstructor.cpp */,
-                                70B791861C024432002481E2 /* GeneratorFunctionConstructor.h */,
-                                70B791871C024432002481E2 /* GeneratorFunctionPrototype.cpp */,
-                                70B791881C024432002481E2 /* GeneratorFunctionPrototype.h */,
-                                70B791891C024432002481E2 /* GeneratorPrototype.cpp */,
-                                70B7918A1C024432002481E2 /* GeneratorPrototype.h */,
-                                70B7918B1C024432002481E2 /* GeneratorThisMode.h */,
</del><span class="cx">                                 0FE050111AA9091100D33B33 /* GenericArguments.h */,
</span><span class="cx">                                 0FE050121AA9091100D33B33 /* GenericArgumentsInlines.h */,
</span><span class="cx">                                 0FE050131AA9091100D33B33 /* GenericOffset.h */,
</span><span class="lines">@@ -5510,8 +5472,6 @@
</span><span class="cx">                                 F692A85E0255597D01FF60F7 /* JSFunction.cpp */,
</span><span class="cx">                                 F692A85F0255597D01FF60F7 /* JSFunction.h */,
</span><span class="cx">                                 A72028B91797603D0098028C /* JSFunctionInlines.h */,
</span><del>-                                70B7918C1C024462002481E2 /* JSGeneratorFunction.cpp */,
-                                70B7918D1C024462002481E2 /* JSGeneratorFunction.h */,
</del><span class="cx">                                 0F2B66C317B6B5AB00A7AE3F /* JSGenericTypedArrayView.h */,
</span><span class="cx">                                 0F2B66C417B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h */,
</span><span class="cx">                                 0F2B66C517B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h */,
</span><span class="lines">@@ -6626,7 +6586,6 @@
</span><span class="cx">                                 A75EE9B018AAB7E200AAD043 /* BuiltinNames.h */,
</span><span class="cx">                                 41DEA1311B9F3154006D65DD /* BuiltinUtils.h */,
</span><span class="cx">                                 A7A979C418BE8D9E002C3733 /* FunctionPrototype.js */,
</span><del>-                                70B7918F1C0244EC002481E2 /* GeneratorPrototype.js */,
</del><span class="cx">                                 7CF9BC5A1B65D9A3009DB1EF /* GlobalObject.js */,
</span><span class="cx">                                 E35E03611B7AB4850073AD2A /* InspectorInstrumentationObject.js */,
</span><span class="cx">                                 E33F50881B844A1A00413856 /* InternalPromiseConstructor.js */,
</span><span class="lines">@@ -7043,7 +7002,6 @@
</span><span class="cx">                                 A737810E1799EA2E00817533 /* DFGNaturalLoops.h in Headers */,
</span><span class="cx">                                 86ECA3EA132DEF1C002B2AD7 /* DFGNode.h in Headers */,
</span><span class="cx">                                 0FFB921B16D02F010055A5DB /* DFGNodeAllocator.h in Headers */,
</span><del>-                                70B791931C024A28002481E2 /* GeneratorFrame.h in Headers */,
</del><span class="cx">                                 0FA581BB150E953000B9A2D9 /* DFGNodeFlags.h in Headers */,
</span><span class="cx">                                 0F300B7818AB051100A6D72E /* DFGNodeOrigin.h in Headers */,
</span><span class="cx">                                 0FA581BC150E953000B9A2D9 /* DFGNodeType.h in Headers */,
</span><span class="lines">@@ -7094,7 +7052,6 @@
</span><span class="cx">                                 0F50AF3C193E8B3900674EE8 /* DFGStructureClobberState.h in Headers */,
</span><span class="cx">                                 0F79085619A290B200F6310C /* DFGStructureRegistrationPhase.h in Headers */,
</span><span class="cx">                                 0F2FCCFF18A60070001A27F8 /* DFGThreadData.h in Headers */,
</span><del>-                                70B791991C024A29002481E2 /* GeneratorPrototype.h in Headers */,
</del><span class="cx">                                 0FC097A2146B28CC00CF2442 /* DFGThunks.h in Headers */,
</span><span class="cx">                                 0FD8A32817D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.h in Headers */,
</span><span class="cx">                                 0FD8A32A17D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.h in Headers */,
</span><span class="lines">@@ -7316,7 +7273,6 @@
</span><span class="cx">                                 A50E4B6218809DD50068A46D /* InspectorRuntimeAgent.h in Headers */,
</span><span class="cx">                                 A593CF831840377100BFCE27 /* InspectorValues.h in Headers */,
</span><span class="cx">                                 969A07990ED1D3AE00F1F681 /* Instruction.h in Headers */,
</span><del>-                                70B791911C024A13002481E2 /* SourceCodeKey.h in Headers */,
</del><span class="cx">                                 A7A8AF3B17ADB5F3005AB174 /* Int16Array.h in Headers */,
</span><span class="cx">                                 A7A8AF3C17ADB5F3005AB174 /* Int32Array.h in Headers */,
</span><span class="cx">                                 A7A8AF3A17ADB5F3005AB174 /* Int8Array.h in Headers */,
</span><span class="lines">@@ -7344,7 +7300,6 @@
</span><span class="cx">                                 70113D4C1A8DB093003848C4 /* IteratorOperations.h in Headers */,
</span><span class="cx">                                 70DC3E0A1B2DF2C700054299 /* IteratorPrototype.h in Headers */,
</span><span class="cx">                                 BC18C4130E16F5CD00B34460 /* JavaScript.h in Headers */,
</span><del>-                                70B791971C024A29002481E2 /* GeneratorFunctionPrototype.h in Headers */,
</del><span class="cx">                                 A503FA1A188E0FB000110F14 /* JavaScriptCallFrame.h in Headers */,
</span><span class="cx">                                 BC18C4140E16F5CD00B34460 /* JavaScriptCore.h in Headers */,
</span><span class="cx">                                 BC18C4150E16F5CD00B34460 /* JavaScriptCorePrefix.h in Headers */,
</span><span class="lines">@@ -7488,7 +7443,6 @@
</span><span class="cx">                                 1A28D4A8177B71C80007FA3C /* JSStringRefPrivate.h in Headers */,
</span><span class="cx">                                 0F919D0D157EE0A2004A4E7D /* JSSymbolTableObject.h in Headers */,
</span><span class="cx">                                 70ECA6061AFDBEA200449739 /* JSTemplateRegistryKey.h in Headers */,
</span><del>-                                70B7919C1C024A49002481E2 /* JSGeneratorFunction.h in Headers */,
</del><span class="cx">                                 BC18C42A0E16F5CD00B34460 /* JSType.h in Headers */,
</span><span class="cx">                                 0F2B66FB17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h in Headers */,
</span><span class="cx">                                 0F2B66FD17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h in Headers */,
</span><span class="lines">@@ -7525,7 +7479,6 @@
</span><span class="cx">                                 FE187A021BFBE5610038BBCA /* JITMulGenerator.h in Headers */,
</span><span class="cx">                                 86D3B3C310159D7F002865E7 /* LinkBuffer.h in Headers */,
</span><span class="cx">                                 0F431738146BAC69007E3890 /* ListableHandler.h in Headers */,
</span><del>-                                70B791951C024A28002481E2 /* GeneratorFunctionConstructor.h in Headers */,
</del><span class="cx">                                 A7E2EA6B0FB460CF00601F06 /* LiteralParser.h in Headers */,
</span><span class="cx">                                 FE3913551B794F8A00EDAF71 /* LiveObjectData.h in Headers */,
</span><span class="cx">                                 FE3913561B794F8F00EDAF71 /* LiveObjectList.h in Headers */,
</span><span class="lines">@@ -7699,7 +7652,6 @@
</span><span class="cx">                                 A55D93A6185012A800400DED /* ScriptFunctionCall.h in Headers */,
</span><span class="cx">                                 A54CF2FA184EAEDA00237F19 /* ScriptObject.h in Headers */,
</span><span class="cx">                                 A54CF2F6184EAB2400237F19 /* ScriptValue.h in Headers */,
</span><del>-                                70B7919D1C024A56002481E2 /* GeneratorPrototype.lut.h in Headers */,
</del><span class="cx">                                 A7299DA617D12858005F5FF9 /* SetConstructor.h in Headers */,
</span><span class="cx">                                 A790DD6E182F499700588807 /* SetIteratorPrototype.h in Headers */,
</span><span class="cx">                                 A7299DA217D12848005F5FF9 /* SetPrototype.h in Headers */,
</span><span class="lines">@@ -7732,7 +7684,6 @@
</span><span class="cx">                                 BC18C46A0E16F5CD00B34460 /* StringPrototype.h in Headers */,
</span><span class="cx">                                 0FB3878E1BFBC44D00E3AB1E /* AirBlockWorklist.h in Headers */,
</span><span class="cx">                                 142E313B134FF0A600AFADB5 /* Strong.h in Headers */,
</span><del>-                                70B7919A1C024A29002481E2 /* GeneratorThisMode.h in Headers */,
</del><span class="cx">                                 145722861437E140005FDE26 /* StrongInlines.h in Headers */,
</span><span class="cx">                                 BCDE3AB80E6C82F5001453A7 /* Structure.h in Headers */,
</span><span class="cx">                                 7E4EE7090EBB7963005934AA /* StructureChain.h in Headers */,
</span><span class="lines">@@ -8754,7 +8705,6 @@
</span><span class="cx">                                 A1B9E23D1B4E0D6700BC7FED /* IntlCollatorPrototype.cpp in Sources */,
</span><span class="cx">                                 A1587D6D1B4DC14100D69849 /* IntlDateTimeFormat.cpp in Sources */,
</span><span class="cx">                                 A1587D6F1B4DC14100D69849 /* IntlDateTimeFormatConstructor.cpp in Sources */,
</span><del>-                                70B7919B1C024A46002481E2 /* JSGeneratorFunction.cpp in Sources */,
</del><span class="cx">                                 A1587D711B4DC14100D69849 /* IntlDateTimeFormatPrototype.cpp in Sources */,
</span><span class="cx">                                 A1D792FC1B43864B004516F5 /* IntlNumberFormat.cpp in Sources */,
</span><span class="cx">                                 A1D792FE1B43864B004516F5 /* IntlNumberFormatConstructor.cpp in Sources */,
</span><span class="lines">@@ -8781,7 +8731,6 @@
</span><span class="cx">                                 0F766D2815A8CC1E008F363E /* JITStubRoutine.cpp in Sources */,
</span><span class="cx">                                 0F766D2B15A8CC38008F363E /* JITStubRoutineSet.cpp in Sources */,
</span><span class="cx">                                 FE4238901BE18C3C00514737 /* JITSubGenerator.cpp in Sources */,
</span><del>-                                70B791941C024A28002481E2 /* GeneratorFunctionConstructor.cpp in Sources */,
</del><span class="cx">                                 0F5EF91E16878F7A003E5C25 /* JITThunks.cpp in Sources */,
</span><span class="cx">                                 0FC712E217CD8791008CC93C /* JITToDFGDeferredCompilationCallback.cpp in Sources */,
</span><span class="cx">                                 140566C4107EC255005DBC8D /* JSAPIValueWrapper.cpp in Sources */,
</span><span class="lines">@@ -8919,7 +8868,6 @@
</span><span class="cx">                                 142D6F0813539A2800B02E86 /* MarkedBlock.cpp in Sources */,
</span><span class="cx">                                 14D2F3DA139F4BE200491031 /* MarkedSpace.cpp in Sources */,
</span><span class="cx">                                 142D6F1113539A4100B02E86 /* MarkStack.cpp in Sources */,
</span><del>-                                70B791981C024A29002481E2 /* GeneratorPrototype.cpp in Sources */,
</del><span class="cx">                                 4340A4841A9051AF00D73CCA /* MathCommon.cpp in Sources */,
</span><span class="cx">                                 0F37308C1C0BD29100052BFA /* B3PhiChildren.cpp in Sources */,
</span><span class="cx">                                 14469DDF107EC7E700650446 /* MathObject.cpp in Sources */,
</span><span class="lines">@@ -9068,7 +9016,6 @@
</span><span class="cx">                                 0FF42745158EBE91004CB9FF /* udis86_syn-att.c in Sources */,
</span><span class="cx">                                 0FF42746158EBE91004CB9FF /* udis86_syn-intel.c in Sources */,
</span><span class="cx">                                 0FF42747158EBE91004CB9FF /* udis86_syn.c in Sources */,
</span><del>-                                70B791961C024A28002481E2 /* GeneratorFunctionPrototype.cpp in Sources */,
</del><span class="cx">                                 0FF42732158EBD58004CB9FF /* UDis86Disassembler.cpp in Sources */,
</span><span class="cx">                                 A76F279415F13C9600517D67 /* UnlinkedCodeBlock.cpp in Sources */,
</span><span class="cx">                                 14142E551B7973C000F4BF4B /* UnlinkedFunctionExecutable.cpp in Sources */,
</span><span class="lines">@@ -9077,7 +9024,6 @@
</span><span class="cx">                                 79EE0BFF1B4AFB85000385C9 /* VariableEnvironment.cpp in Sources */,
</span><span class="cx">                                 0F6C73501AC9F99F00BE1682 /* VariableWriteFireDetail.cpp in Sources */,
</span><span class="cx">                                 0FE0502C1AA9095600D33B33 /* VarOffset.cpp in Sources */,
</span><del>-                                70B791921C024A23002481E2 /* GeneratorFrame.cpp in Sources */,
</del><span class="cx">                                 0F20C2591A8013AB00DA3229 /* VirtualRegister.cpp in Sources */,
</span><span class="cx">                                 E18E3A590DF9278C00D90B34 /* VM.cpp in Sources */,
</span><span class="cx">                                 FE5932A7183C5A2600A1ECCC /* VMEntryScope.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx"> RefPtr<SourceProvider> sourceOverride = isParsingDefaultConstructor ? source.provider() : nullptr;
</span><span class="cx"> std::unique_ptr<ProgramNode> program = parse<ProgramNode>(
</span><span class="cx"> &vm, source, Identifier(), builtinMode,
</span><del>- JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, error,
</del><ins>+ JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, error,
</ins><span class="cx"> &positionBeforeLastNewline, constructorKind);
</span><span class="cx">
</span><span class="cx"> if (!program) {
</span><span class="lines">@@ -115,7 +115,7 @@
</span><span class="cx"> }
</span><span class="cx"> metadata->overrideName(name);
</span><span class="cx"> VariableEnvironment dummyTDZVariables;
</span><del>- UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, metadata, kind, constructAbility, GeneratorThisMode::NonEmpty, dummyTDZVariables, WTF::move(sourceOverride));
</del><ins>+ UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, metadata, kind, constructAbility, dummyTDZVariables, WTF::move(sourceOverride));
</ins><span class="cx"> functionExecutable->setNameValue(vm, jsString(&vm, name.string()));
</span><span class="cx"> return functionExecutable;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsGeneratorPrototypejs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/builtins/GeneratorPrototype.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/GeneratorPrototype.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/builtins/GeneratorPrototype.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,93 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// 25.3.3.3 GeneratorResume ( generator, value )
-// 25.3.3.4 GeneratorResumeAbrupt(generator, abruptCompletion)
-function generatorResume(generator, sentValue, resumeMode)
-{
- "use strict";
-
- // GeneratorState.
- const Completed = -1;
- const Executing = -2;
-
- // ResumeMode.
- const NormalMode = 0;
- const ReturnMode = 1;
- const ThrowMode = 2;
-
- let state = generator.@generatorState;
- let done = false;
- let value = undefined;
-
- if (typeof state !== 'number')
- throw new @TypeError("|this| should be a generator");
-
- if (state === Executing)
- throw new @TypeError("Generator is executing");
-
- if (state === Completed) {
- if (resumeMode === ThrowMode)
- throw sentValue;
-
- done = true;
- if (resumeMode === ReturnMode)
- value = sentValue;
- } else {
- try {
- generator.@generatorState = Executing;
- value = generator.@generatorNext.@call(generator.@generatorThis, generator, state, sentValue, resumeMode);
- if (generator.@generatorState === Executing) {
- generator.@generatorState = Completed;
- done = true;
- }
- } catch (error) {
- generator.@generatorState = Completed;
- throw error;
- }
- }
- return { done, value };
-}
-
-function next(value)
-{
- "use strict";
-
- return @generatorResume(this, value, /* NormalMode */ 0);
-}
-
-function return(value)
-{
- "use strict";
-
- return @generatorResume(this, value, /* ReturnMode */ 1);
-}
-
-function throw(exception)
-{
- "use strict";
-
- return @generatorResume(this, exception, /* ThrowMode */ 2);
-}
</del></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeBasicBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -59,7 +59,6 @@
</span><span class="cx"> case op_switch_char:
</span><span class="cx"> case op_switch_string:
</span><span class="cx"> case op_check_has_instance:
</span><del>- case op_save:
</del><span class="cx"> return true;
</span><span class="cx"> default:
</span><span class="cx"> return false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeListjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeList.json (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -90,8 +90,6 @@
</span><span class="cx"> { "name" : "op_switch_string", "length" : 4 },
</span><span class="cx"> { "name" : "op_new_func", "length" : 4 },
</span><span class="cx"> { "name" : "op_new_func_exp", "length" : 4 },
</span><del>- { "name" : "op_new_generator_func", "length" : 4 },
- { "name" : "op_new_generator_func_exp", "length" : 4 },
</del><span class="cx"> { "name" : "op_new_arrow_func_exp", "length" : 5 },
</span><span class="cx"> { "name" : "op_call", "length" : 9 },
</span><span class="cx"> { "name" : "op_tail_call", "length" : 9 },
</span><span class="lines">@@ -132,9 +130,7 @@
</span><span class="cx"> { "name" : "op_load_arrowfunction_this", "length" : 2 },
</span><span class="cx"> { "name" : "op_assert", "length" : 3 },
</span><span class="cx"> { "name" : "op_copy_rest", "length": 4 },
</span><del>- { "name" : "op_get_rest_length", "length": 3 },
- { "name" : "op_save", "length" : 4 },
- { "name" : "op_resume", "length" : 3 }
</del><ins>+ { "name" : "op_get_rest_length", "length": 3 }
</ins><span class="cx"> ]
</span><span class="cx"> },
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeLivenessAnalysiscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> // Simplified interface to bytecode use/def, which determines defs first and then uses, and includes
</span><span class="cx"> // exception handlers in the uses.
</span><span class="cx"> template<typename UseFunctor, typename DefFunctor>
</span><del>-static void stepOverInstruction(CodeBlock* codeBlock, BytecodeBasicBlock* block, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks, unsigned bytecodeOffset, const UseFunctor& use, const DefFunctor& def)
</del><ins>+static void stepOverInstruction(CodeBlock* codeBlock, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks, unsigned bytecodeOffset, const UseFunctor& use, const DefFunctor& def)
</ins><span class="cx"> {
</span><span class="cx"> // This abstractly execute the instruction in reverse. Instructions logically first use operands and
</span><span class="cx"> // then define operands. This logical ordering is necessary for operations that use and def the same
</span><span class="lines">@@ -116,19 +116,19 @@
</span><span class="cx"> // first add it to the out set (the use), and then we'd remove it (the def).
</span><span class="cx">
</span><span class="cx"> computeDefsForBytecodeOffset(
</span><del>- codeBlock, block, bytecodeOffset,
</del><ins>+ codeBlock, bytecodeOffset,
</ins><span class="cx"> [&] (CodeBlock* codeBlock, Instruction*, OpcodeID, int operand) {
</span><span class="cx"> if (isValidRegisterForLiveness(codeBlock, operand))
</span><span class="cx"> def(VirtualRegister(operand).toLocal());
</span><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> computeUsesForBytecodeOffset(
</span><del>- codeBlock, block, bytecodeOffset,
</del><ins>+ codeBlock, bytecodeOffset,
</ins><span class="cx"> [&] (CodeBlock* codeBlock, Instruction*, OpcodeID, int operand) {
</span><span class="cx"> if (isValidRegisterForLiveness(codeBlock, operand))
</span><span class="cx"> use(VirtualRegister(operand).toLocal());
</span><span class="cx"> });
</span><del>-
</del><ins>+
</ins><span class="cx"> // If we have an exception handler, we want the live-in variables of the
</span><span class="cx"> // exception handler block to be included in the live-in of this particular bytecode.
</span><span class="cx"> if (HandlerInfo* handler = codeBlock->handlerForBytecodeOffset(bytecodeOffset)) {
</span><span class="lines">@@ -138,10 +138,10 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static void stepOverInstruction(CodeBlock* codeBlock, BytecodeBasicBlock* block, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks, unsigned bytecodeOffset, FastBitVector& out)
</del><ins>+static void stepOverInstruction(CodeBlock* codeBlock, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks, unsigned bytecodeOffset, FastBitVector& out)
</ins><span class="cx"> {
</span><span class="cx"> stepOverInstruction(
</span><del>- codeBlock, block, basicBlocks, bytecodeOffset,
</del><ins>+ codeBlock, basicBlocks, bytecodeOffset,
</ins><span class="cx"> [&] (unsigned bitIndex) {
</span><span class="cx"> // This is the use functor, so we set the bit.
</span><span class="cx"> out.set(bitIndex);
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx"> if (targetOffset > bytecodeOffset)
</span><span class="cx"> break;
</span><span class="cx">
</span><del>- stepOverInstruction(codeBlock, block, basicBlocks, bytecodeOffset, out);
</del><ins>+ stepOverInstruction(codeBlock, basicBlocks, bytecodeOffset, out);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> result.set(out);
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx"> void BytecodeLivenessAnalysis::runLivenessFixpoint()
</span><span class="cx"> {
</span><span class="cx"> UnlinkedCodeBlock* unlinkedCodeBlock = m_codeBlock->unlinkedCodeBlock();
</span><del>- unsigned numberOfVariables = unlinkedCodeBlock->m_numCalleeLocals;
</del><ins>+ unsigned numberOfVariables = unlinkedCodeBlock->m_numCalleeRegisters;
</ins><span class="cx">
</span><span class="cx"> for (unsigned i = 0; i < m_basicBlocks.size(); i++) {
</span><span class="cx"> BytecodeBasicBlock* block = m_basicBlocks[i].get();
</span><span class="lines">@@ -248,7 +248,7 @@
</span><span class="cx">
</span><span class="cx"> for (unsigned i = block->bytecodeOffsets().size(); i--;) {
</span><span class="cx"> unsigned bytecodeOffset = block->bytecodeOffsets()[i];
</span><del>- stepOverInstruction(m_codeBlock, block, m_basicBlocks, bytecodeOffset, out);
</del><ins>+ stepOverInstruction(m_codeBlock, m_basicBlocks, bytecodeOffset, out);
</ins><span class="cx"> result.m_map[bytecodeOffset] = out;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -271,7 +271,7 @@
</span><span class="cx"> for (unsigned i = block->bytecodeOffsets().size(); i--;) {
</span><span class="cx"> unsigned bytecodeOffset = block->bytecodeOffsets()[i];
</span><span class="cx"> stepOverInstruction(
</span><del>- m_codeBlock, block, m_basicBlocks, bytecodeOffset,
</del><ins>+ m_codeBlock, m_basicBlocks, bytecodeOffset,
</ins><span class="cx"> [&] (unsigned index) {
</span><span class="cx"> // This is for uses.
</span><span class="cx"> if (out.get(index))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeUseDefh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx">
</span><span class="cx"> template<typename Functor>
</span><span class="cx"> void computeUsesForBytecodeOffset(
</span><del>- CodeBlock* codeBlock, BytecodeBasicBlock* block, unsigned bytecodeOffset, const Functor& functor)
</del><ins>+ CodeBlock* codeBlock, unsigned bytecodeOffset, const Functor& functor)
</ins><span class="cx"> {
</span><span class="cx"> Interpreter* interpreter = codeBlock->vm()->interpreter;
</span><span class="cx"> Instruction* instructionsBegin = codeBlock->instructions().begin();
</span><span class="lines">@@ -71,8 +71,7 @@
</span><span class="cx"> case op_jeq_null:
</span><span class="cx"> case op_jneq_null:
</span><span class="cx"> case op_dec:
</span><del>- case op_inc:
- case op_resume: {
</del><ins>+ case op_inc: {
</ins><span class="cx"> functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="lines">@@ -126,7 +125,6 @@
</span><span class="cx"> case op_get_property_enumerator:
</span><span class="cx"> case op_get_enumerable_length:
</span><span class="cx"> case op_new_func_exp:
</span><del>- case op_new_generator_func_exp:
</del><span class="cx"> case op_new_arrow_func_exp:
</span><span class="cx"> case op_to_index_string:
</span><span class="cx"> case op_create_lexical_environment:
</span><span class="lines">@@ -155,7 +153,6 @@
</span><span class="cx"> case op_del_by_id:
</span><span class="cx"> case op_unsigned:
</span><span class="cx"> case op_new_func:
</span><del>- case op_new_generator_func:
</del><span class="cx"> case op_get_parent_scope:
</span><span class="cx"> case op_create_scoped_arguments:
</span><span class="cx"> case op_get_from_arguments: {
</span><span class="lines">@@ -237,22 +234,6 @@
</span><span class="cx"> functor(codeBlock, instruction, opcodeID, lastArg + i);
</span><span class="cx"> return;
</span><span class="cx"> }
</span><del>- case op_save: {
- functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
- unsigned mergePointBytecodeOffset = bytecodeOffset + instruction[3].u.operand;
- BytecodeBasicBlock* mergePointBlock = nullptr;
- for (BytecodeBasicBlock* successor : block->successors()) {
- if (successor->leaderBytecodeOffset() == mergePointBytecodeOffset) {
- mergePointBlock = successor;
- break;
- }
- }
- ASSERT(mergePointBlock);
- mergePointBlock->in().forEachSetBit([&](unsigned local) {
- functor(codeBlock, instruction, opcodeID, virtualRegisterForLocal(local).offset());
- });
- return;
- }
</del><span class="cx"> default:
</span><span class="cx"> RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx"> break;
</span><span class="lines">@@ -260,7 +241,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename Functor>
</span><del>-void computeDefsForBytecodeOffset(CodeBlock* codeBlock, BytecodeBasicBlock* block, unsigned bytecodeOffset, const Functor& functor)
</del><ins>+void computeDefsForBytecodeOffset(CodeBlock* codeBlock, unsigned bytecodeOffset, const Functor& functor)
</ins><span class="cx"> {
</span><span class="cx"> Interpreter* interpreter = codeBlock->vm()->interpreter;
</span><span class="cx"> Instruction* instructionsBegin = codeBlock->instructions().begin();
</span><span class="lines">@@ -275,7 +256,6 @@
</span><span class="cx"> case op_profile_did_call:
</span><span class="cx"> case op_throw:
</span><span class="cx"> case op_throw_static_error:
</span><del>- case op_save:
</del><span class="cx"> case op_assert:
</span><span class="cx"> case op_debug:
</span><span class="cx"> case op_ret:
</span><span class="lines">@@ -336,8 +316,6 @@
</span><span class="cx"> case op_new_regexp:
</span><span class="cx"> case op_new_func:
</span><span class="cx"> case op_new_func_exp:
</span><del>- case op_new_generator_func:
- case op_new_generator_func_exp:
</del><span class="cx"> case op_new_arrow_func_exp:
</span><span class="cx"> case op_call_varargs:
</span><span class="cx"> case op_tail_call_varargs:
</span><span class="lines">@@ -414,15 +392,7 @@
</span><span class="cx"> for (unsigned i = codeBlock->m_numVars; i--;)
</span><span class="cx"> functor(codeBlock, instruction, opcodeID, virtualRegisterForLocal(i).offset());
</span><span class="cx"> return;
</span><del>- }
- case op_resume: {
- RELEASE_ASSERT(block->successors().size() == 1);
- block->successors()[0]->in().forEachSetBit([&](unsigned local) {
- functor(codeBlock, instruction, opcodeID, virtualRegisterForLocal(local).offset());
- });
- return;
- }
- }
</del><ins>+ } }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -585,7 +585,7 @@
</span><span class="cx"> ": %lu m_instructions; %lu bytes; %d parameter(s); %d callee register(s); %d variable(s)",
</span><span class="cx"> static_cast<unsigned long>(instructions().size()),
</span><span class="cx"> static_cast<unsigned long>(instructions().size() * sizeof(Instruction)),
</span><del>- m_numParameters, m_numCalleeLocals, m_numVars);
</del><ins>+ m_numParameters, m_numCalleeRegisters, m_numVars);
</ins><span class="cx"> if (needsActivation() && codeType() == FunctionCode)
</span><span class="cx"> out.printf("; lexical environment in r%d", activationRegister().offset());
</span><span class="cx"> out.printf("\n");
</span><span class="lines">@@ -680,18 +680,6 @@
</span><span class="cx"> } while (i < m_rareData->m_stringSwitchJumpTables.size());
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (m_rareData && !m_rareData->m_liveCalleeLocalsAtYield.isEmpty()) {
- out.printf("\nLive Callee Locals:\n");
- unsigned i = 0;
- do {
- const FastBitVector& liveness = m_rareData->m_liveCalleeLocalsAtYield[i];
- out.printf(" live%1u = ", i);
- liveness.dump(out);
- out.printf("\n");
- ++i;
- } while (i < m_rareData->m_liveCalleeLocalsAtYield.size());
- }
-
</del><span class="cx"> out.printf("\n");
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1315,14 +1303,6 @@
</span><span class="cx"> out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case op_new_generator_func: {
- int r0 = (++it)->u.operand;
- int r1 = (++it)->u.operand;
- int f0 = (++it)->u.operand;
- printLocationAndOp(out, exec, location, it, "new_generator_func");
- out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
- break;
- }
</del><span class="cx"> case op_new_arrow_func_exp: {
</span><span class="cx"> int r0 = (++it)->u.operand;
</span><span class="cx"> int r1 = (++it)->u.operand;
</span><span class="lines">@@ -1340,14 +1320,6 @@
</span><span class="cx"> out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case op_new_generator_func_exp: {
- int r0 = (++it)->u.operand;
- int r1 = (++it)->u.operand;
- int f0 = (++it)->u.operand;
- printLocationAndOp(out, exec, location, it, "new_generator_func_exp");
- out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
- break;
- }
</del><span class="cx"> case op_call: {
</span><span class="cx"> printCallOp(out, exec, location, it, "call", DumpCaches, hasPrintedProfiling, callLinkInfos);
</span><span class="cx"> break;
</span><span class="lines">@@ -1536,27 +1508,6 @@
</span><span class="cx"> out.printf("%s, %d", debugHookName(debugHookID), hasBreakpointFlag);
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- case op_save: {
- int generator = (++it)->u.operand;
- unsigned liveCalleeLocalsIndex = (++it)->u.unsignedValue;
- int offset = (++it)->u.operand;
- const FastBitVector& liveness = m_rareData->m_liveCalleeLocalsAtYield[liveCalleeLocalsIndex];
- printLocationAndOp(out, exec, location, it, "save");
- out.printf("%s, ", registerName(generator).data());
- liveness.dump(out);
- out.printf("(@live%1u), %d(->%d)", liveCalleeLocalsIndex, offset, location + offset);
- break;
- }
- case op_resume: {
- int generator = (++it)->u.operand;
- unsigned liveCalleeLocalsIndex = (++it)->u.unsignedValue;
- const FastBitVector& liveness = m_rareData->m_liveCalleeLocalsAtYield[liveCalleeLocalsIndex];
- printLocationAndOp(out, exec, location, it, "resume");
- out.printf("%s, ", registerName(generator).data());
- liveness.dump(out);
- out.printf("(@live%1u)", liveCalleeLocalsIndex);
- break;
- }
</del><span class="cx"> case op_assert: {
</span><span class="cx"> int condition = (++it)->u.operand;
</span><span class="cx"> int line = (++it)->u.operand;
</span><span class="lines">@@ -1721,7 +1672,7 @@
</span><span class="cx"> : JSCell(*vm, structure)
</span><span class="cx"> , m_globalObject(other.m_globalObject)
</span><span class="cx"> , m_heap(other.m_heap)
</span><del>- , m_numCalleeLocals(other.m_numCalleeLocals)
</del><ins>+ , m_numCalleeRegisters(other.m_numCalleeRegisters)
</ins><span class="cx"> , m_numVars(other.m_numVars)
</span><span class="cx"> , m_isConstructor(other.m_isConstructor)
</span><span class="cx"> , m_shouldAlwaysBeInlined(true)
</span><span class="lines">@@ -1778,7 +1729,6 @@
</span><span class="cx"> m_rareData->m_constantBuffers = other.m_rareData->m_constantBuffers;
</span><span class="cx"> m_rareData->m_switchJumpTables = other.m_rareData->m_switchJumpTables;
</span><span class="cx"> m_rareData->m_stringSwitchJumpTables = other.m_rareData->m_stringSwitchJumpTables;
</span><del>- m_rareData->m_liveCalleeLocalsAtYield = other.m_rareData->m_liveCalleeLocalsAtYield;
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> m_heap->m_codeBlocks.add(this);
</span><span class="lines">@@ -1789,7 +1739,7 @@
</span><span class="cx"> : JSCell(*vm, structure)
</span><span class="cx"> , m_globalObject(scope->globalObject()->vm(), this, scope->globalObject())
</span><span class="cx"> , m_heap(&m_globalObject->vm().heap)
</span><del>- , m_numCalleeLocals(unlinkedCodeBlock->m_numCalleeLocals)
</del><ins>+ , m_numCalleeRegisters(unlinkedCodeBlock->m_numCalleeRegisters)
</ins><span class="cx"> , m_numVars(unlinkedCodeBlock->m_numVars)
</span><span class="cx"> , m_isConstructor(unlinkedCodeBlock->isConstructor())
</span><span class="cx"> , m_shouldAlwaysBeInlined(true)
</span><span class="lines">@@ -1959,9 +1909,6 @@
</span><span class="cx"> // Bookkeep the strongly referenced module environments.
</span><span class="cx"> HashSet<JSModuleEnvironment*> stronglyReferencedModuleEnvironments;
</span><span class="cx">
</span><del>- // Bookkeep the merge point bytecode offsets.
- Vector<size_t> mergePointBytecodeOffsets;
-
</del><span class="cx"> RefCountedArray<Instruction> instructions(instructionCount);
</span><span class="cx">
</span><span class="cx"> for (unsigned i = 0; !instructionReader.atEnd(); ) {
</span><span class="lines">@@ -2250,15 +2197,6 @@
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- case op_save: {
- unsigned liveCalleeLocalsIndex = pc[2].u.index;
- int offset = pc[3].u.operand;
- if (liveCalleeLocalsIndex >= mergePointBytecodeOffsets.size())
- mergePointBytecodeOffsets.resize(liveCalleeLocalsIndex + 1);
- mergePointBytecodeOffsets[liveCalleeLocalsIndex] = i + offset;
- break;
- }
-
</del><span class="cx"> default:
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="lines">@@ -2270,20 +2208,6 @@
</span><span class="cx">
</span><span class="cx"> m_instructions = WTF::move(instructions);
</span><span class="cx">
</span><del>- // Perform bytecode liveness analysis to determine which locals are live and should be resumed when executing op_resume.
- if (unlinkedCodeBlock->parseMode() == SourceParseMode::GeneratorBodyMode) {
- if (size_t count = mergePointBytecodeOffsets.size()) {
- createRareDataIfNecessary();
- BytecodeLivenessAnalysis liveness(this);
- m_rareData->m_liveCalleeLocalsAtYield.grow(count);
- size_t liveCalleeLocalsIndex = 0;
- for (size_t bytecodeOffset : mergePointBytecodeOffsets) {
- m_rareData->m_liveCalleeLocalsAtYield[liveCalleeLocalsIndex] = liveness.getLivenessInfoAtBytecodeOffset(bytecodeOffset);
- ++liveCalleeLocalsIndex;
- }
- }
- }
-
</del><span class="cx"> // Set optimization thresholds only after m_instructions is initialized, since these
</span><span class="cx"> // rely on the instruction count (and are in theory permitted to also inspect the
</span><span class="cx"> // instruction stream to more accurate assess the cost of tier-up).
</span><span class="lines">@@ -2307,7 +2231,7 @@
</span><span class="cx"> : JSCell(*vm, structure)
</span><span class="cx"> , m_globalObject(globalObject->vm(), this, globalObject)
</span><span class="cx"> , m_heap(&m_globalObject->vm().heap)
</span><del>- , m_numCalleeLocals(0)
</del><ins>+ , m_numCalleeRegisters(0)
</ins><span class="cx"> , m_numVars(0)
</span><span class="cx"> , m_isConstructor(false)
</span><span class="cx"> , m_shouldAlwaysBeInlined(false)
</span><span class="lines">@@ -3134,7 +3058,6 @@
</span><span class="cx"> if (m_rareData) {
</span><span class="cx"> m_rareData->m_switchJumpTables.shrinkToFit();
</span><span class="cx"> m_rareData->m_stringSwitchJumpTables.shrinkToFit();
</span><del>- m_rareData->m_liveCalleeLocalsAtYield.shrinkToFit();
</del><span class="cx"> }
</span><span class="cx"> } // else don't shrink these, because we would have already pointed pointers into these tables.
</span><span class="cx"> }
</span><span class="lines">@@ -4106,7 +4029,7 @@
</span><span class="cx">
</span><span class="cx"> FastBitVector liveAtHead = liveness.getLivenessInfoAtBytecodeOffset(0);
</span><span class="cx">
</span><del>- if (liveAtHead.numBits() != static_cast<size_t>(m_numCalleeLocals)) {
</del><ins>+ if (liveAtHead.numBits() != static_cast<size_t>(m_numCalleeRegisters)) {
</ins><span class="cx"> beginValidationDidFail();
</span><span class="cx"> dataLog(" Wrong number of bits in result!\n");
</span><span class="cx"> dataLog(" Result: ", liveAtHead, "\n");
</span><span class="lines">@@ -4114,7 +4037,7 @@
</span><span class="cx"> endValidationDidFail();
</span><span class="cx"> }
</span><span class="cx">
</span><del>- for (unsigned i = m_numCalleeLocals; i--;) {
</del><ins>+ for (unsigned i = m_numCalleeRegisters; i--;) {
</ins><span class="cx"> VirtualRegister reg = virtualRegisterForLocal(i);
</span><span class="cx">
</span><span class="cx"> if (liveAtHead.get(i)) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -69,7 +69,6 @@
</span><span class="cx"> #include "VirtualRegister.h"
</span><span class="cx"> #include "Watchpoint.h"
</span><span class="cx"> #include <wtf/Bag.h>
</span><del>-#include <wtf/FastBitVector.h>
</del><span class="cx"> #include <wtf/FastMalloc.h>
</span><span class="cx"> #include <wtf/RefCountedArray.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="lines">@@ -142,8 +141,6 @@
</span><span class="cx"> int numParameters() const { return m_numParameters; }
</span><span class="cx"> void setNumParameters(int newValue);
</span><span class="cx">
</span><del>- int numCalleeLocals() const { return m_numCalleeLocals; }
-
</del><span class="cx"> int* addressOfNumParameters() { return &m_numParameters; }
</span><span class="cx"> static ptrdiff_t offsetOfNumParameters() { return OBJECT_OFFSETOF(CodeBlock, m_numParameters); }
</span><span class="cx">
</span><span class="lines">@@ -657,18 +654,6 @@
</span><span class="cx"> StringJumpTable& addStringSwitchJumpTable() { createRareDataIfNecessary(); m_rareData->m_stringSwitchJumpTables.append(StringJumpTable()); return m_rareData->m_stringSwitchJumpTables.last(); }
</span><span class="cx"> StringJumpTable& stringSwitchJumpTable(int tableIndex) { RELEASE_ASSERT(m_rareData); return m_rareData->m_stringSwitchJumpTables[tableIndex]; }
</span><span class="cx">
</span><del>- // Live callee registers at yield points.
- const FastBitVector& liveCalleeLocalsAtYield(unsigned index) const
- {
- RELEASE_ASSERT(m_rareData);
- return m_rareData->m_liveCalleeLocalsAtYield[index];
- }
- FastBitVector& liveCalleeLocalsAtYield(unsigned index)
- {
- RELEASE_ASSERT(m_rareData);
- return m_rareData->m_liveCalleeLocalsAtYield[index];
- }
-
</del><span class="cx"> EvalCodeCache& evalCodeCache() { createRareDataIfNecessary(); return m_rareData->m_evalCodeCache; }
</span><span class="cx">
</span><span class="cx"> enum ShrinkMode {
</span><span class="lines">@@ -870,7 +855,7 @@
</span><span class="cx"> // FIXME: Make these remaining members private.
</span><span class="cx">
</span><span class="cx"> int m_numLocalRegistersForCalleeSaves;
</span><del>- int m_numCalleeLocals;
</del><ins>+ int m_numCalleeRegisters;
</ins><span class="cx"> int m_numVars;
</span><span class="cx"> bool m_isConstructor : 1;
</span><span class="cx">
</span><span class="lines">@@ -915,8 +900,6 @@
</span><span class="cx"> Vector<SimpleJumpTable> m_switchJumpTables;
</span><span class="cx"> Vector<StringJumpTable> m_stringSwitchJumpTables;
</span><span class="cx">
</span><del>- Vector<FastBitVector> m_liveCalleeLocalsAtYield;
-
</del><span class="cx"> EvalCodeCache m_evalCodeCache;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeEvalCodeCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/EvalCodeCache.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/EvalCodeCache.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/EvalCodeCache.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> #include "JSScope.h"
</span><span class="cx"> #include "Options.h"
</span><span class="cx"> #include "SourceCode.h"
</span><del>-#include "SourceCodeKey.h"
</del><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> #include <wtf/text/StringHash.h>
</span><span class="lines">@@ -45,29 +44,23 @@
</span><span class="cx">
</span><span class="cx"> class EvalCodeCache {
</span><span class="cx"> public:
</span><del>- EvalExecutable* tryGet(bool inStrictContext, const SourceCode& evalSource, ThisTDZMode thisTDZMode, JSScope* scope)
</del><ins>+ EvalExecutable* tryGet(bool inStrictContext, const String& evalSource, JSScope* scope)
</ins><span class="cx"> {
</span><del>- if (isCacheable(inStrictContext, evalSource, scope)) {
- ASSERT(!inStrictContext);
- SourceCodeKey sourceCodeKey(evalSource, String(), SourceCodeKey::EvalType, JSParserBuiltinMode::NotBuiltin, JSParserStrictMode::NotStrict, thisTDZMode);
- return m_cacheMap.get(sourceCodeKey).get();
- }
- return nullptr;
</del><ins>+ if (isCacheable(inStrictContext, evalSource, scope))
+ return m_cacheMap.get(evalSource.impl()).get();
+ return 0;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- EvalExecutable* getSlow(ExecState* exec, JSCell* owner, bool inStrictContext, ThisTDZMode thisTDZMode, const SourceCode& evalSource, JSScope* scope)
</del><ins>+ EvalExecutable* getSlow(ExecState* exec, JSCell* owner, bool inStrictContext, ThisTDZMode thisTDZMode, const String& evalSource, JSScope* scope)
</ins><span class="cx"> {
</span><span class="cx"> VariableEnvironment variablesUnderTDZ;
</span><span class="cx"> JSScope::collectVariablesUnderTDZ(scope, variablesUnderTDZ);
</span><del>- EvalExecutable* evalExecutable = EvalExecutable::create(exec, evalSource, inStrictContext, thisTDZMode, &variablesUnderTDZ);
</del><ins>+ EvalExecutable* evalExecutable = EvalExecutable::create(exec, makeSource(evalSource), inStrictContext, thisTDZMode, &variablesUnderTDZ);
</ins><span class="cx"> if (!evalExecutable)
</span><del>- return nullptr;
</del><ins>+ return 0;
</ins><span class="cx">
</span><del>- if (isCacheable(inStrictContext, evalSource, scope) && m_cacheMap.size() < maxCacheEntries) {
- ASSERT(!inStrictContext);
- SourceCodeKey sourceCodeKey(evalSource, String(), SourceCodeKey::EvalType, JSParserBuiltinMode::NotBuiltin, JSParserStrictMode::NotStrict, thisTDZMode);
- m_cacheMap.set(sourceCodeKey, WriteBarrier<EvalExecutable>(exec->vm(), owner, evalExecutable));
- }
</del><ins>+ if (isCacheable(inStrictContext, evalSource, scope) && m_cacheMap.size() < maxCacheEntries)
+ m_cacheMap.set(evalSource.impl(), WriteBarrier<EvalExecutable>(exec->vm(), owner, evalExecutable));
</ins><span class="cx">
</span><span class="cx"> return evalExecutable;
</span><span class="cx"> }
</span><span class="lines">@@ -87,17 +80,17 @@
</span><span class="cx"> return scope->isGlobalLexicalEnvironment() || scope->isFunctionNameScopeObject() || scope->isVarScope();
</span><span class="cx"> }
</span><span class="cx">
</span><del>- ALWAYS_INLINE bool isCacheable(bool inStrictContext, const SourceCode& evalSource, JSScope* scope)
</del><ins>+ ALWAYS_INLINE bool isCacheable(bool inStrictContext, const String& evalSource, JSScope* scope)
</ins><span class="cx"> {
</span><span class="cx"> // If eval() is called and it has access to a lexical scope, we can't soundly cache it.
</span><span class="cx"> // If the eval() only has access to the "var" scope, then we can cache it.
</span><span class="cx"> return !inStrictContext
</span><del>- && static_cast<size_t>(evalSource.length()) < Options::maximumEvalCacheableSourceLength()
</del><ins>+ && evalSource.length() < Options::maximumEvalCacheableSourceLength()
</ins><span class="cx"> && isCacheableScope(scope);
</span><span class="cx"> }
</span><span class="cx"> static const int maxCacheEntries = 64;
</span><span class="cx">
</span><del>- typedef HashMap<SourceCodeKey, WriteBarrier<EvalExecutable>, SourceCodeKeyHash, SourceCodeKeyHashTraits> EvalCacheMap;
</del><ins>+ typedef HashMap<RefPtr<StringImpl>, WriteBarrier<EvalExecutable>> EvalCacheMap;
</ins><span class="cx"> EvalCacheMap m_cacheMap;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeExecutableInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -26,28 +26,21 @@
</span><span class="cx"> #ifndef ExecutableInfo_h
</span><span class="cx"> #define ExecutableInfo_h
</span><span class="cx">
</span><del>-#include "GeneratorThisMode.h"
</del><span class="cx"> #include "ParserModes.h"
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><del>-// FIXME: These flags, ParserModes and propagation to XXXCodeBlocks should be reorganized.
-// https://bugs.webkit.org/show_bug.cgi?id=151547
</del><span class="cx"> struct ExecutableInfo {
</span><del>- ExecutableInfo(bool needsActivation, bool usesEval, bool isStrictMode, bool isConstructor, bool isBuiltinFunction, ConstructorKind constructorKind, GeneratorThisMode generatorThisMode, SuperBinding superBinding, SourceParseMode parseMode)
</del><ins>+ ExecutableInfo(bool needsActivation, bool usesEval, bool isStrictMode, bool isConstructor, bool isBuiltinFunction, ConstructorKind constructorKind, bool isArrowFunction)
</ins><span class="cx"> : m_needsActivation(needsActivation)
</span><span class="cx"> , m_usesEval(usesEval)
</span><span class="cx"> , m_isStrictMode(isStrictMode)
</span><span class="cx"> , m_isConstructor(isConstructor)
</span><span class="cx"> , m_isBuiltinFunction(isBuiltinFunction)
</span><del>- , m_generatorThisMode(static_cast<unsigned>(generatorThisMode))
</del><span class="cx"> , m_constructorKind(static_cast<unsigned>(constructorKind))
</span><del>- , m_superBinding(static_cast<unsigned>(superBinding))
- , m_parseMode(parseMode)
</del><ins>+ , m_isArrowFunction(isArrowFunction)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(m_constructorKind == static_cast<unsigned>(constructorKind));
</span><del>- ASSERT(m_superBinding == static_cast<unsigned>(superBinding));
- ASSERT(m_generatorThisMode == static_cast<unsigned>(generatorThisMode));
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool needsActivation() const { return m_needsActivation; }
</span><span class="lines">@@ -55,10 +48,8 @@
</span><span class="cx"> bool isStrictMode() const { return m_isStrictMode; }
</span><span class="cx"> bool isConstructor() const { return m_isConstructor; }
</span><span class="cx"> bool isBuiltinFunction() const { return m_isBuiltinFunction; }
</span><del>- GeneratorThisMode generatorThisMode() const { return static_cast<GeneratorThisMode>(m_generatorThisMode); }
</del><span class="cx"> ConstructorKind constructorKind() const { return static_cast<ConstructorKind>(m_constructorKind); }
</span><del>- SuperBinding superBinding() const { return static_cast<SuperBinding>(m_superBinding); }
- SourceParseMode parseMode() const { return m_parseMode; }
</del><ins>+ bool isArrowFunction() const { return m_isArrowFunction; }
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> unsigned m_needsActivation : 1;
</span><span class="lines">@@ -66,10 +57,8 @@
</span><span class="cx"> unsigned m_isStrictMode : 1;
</span><span class="cx"> unsigned m_isConstructor : 1;
</span><span class="cx"> unsigned m_isBuiltinFunction : 1;
</span><del>- unsigned m_generatorThisMode : 1;
</del><span class="cx"> unsigned m_constructorKind : 2;
</span><del>- unsigned m_superBinding : 1;
- SourceParseMode m_parseMode;
</del><ins>+ unsigned m_isArrowFunction : 1;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePreciseJumpTargetscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -54,7 +54,6 @@
</span><span class="cx"> case op_jnlesseq:
</span><span class="cx"> case op_jngreater:
</span><span class="cx"> case op_jngreatereq:
</span><del>- case op_save: // The jump of op_save is purely for calculating liveness.
</del><span class="cx"> out.append(bytecodeOffset + current[3].u.operand);
</span><span class="cx"> break;
</span><span class="cx"> case op_switch_imm:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx"> UnlinkedCodeBlock::UnlinkedCodeBlock(VM* vm, Structure* structure, CodeType codeType, const ExecutableInfo& info)
</span><span class="cx"> : Base(*vm, structure)
</span><span class="cx"> , m_numVars(0)
</span><del>- , m_numCalleeLocals(0)
</del><ins>+ , m_numCalleeRegisters(0)
</ins><span class="cx"> , m_numParameters(0)
</span><span class="cx"> , m_vm(vm)
</span><span class="cx"> , m_globalObjectRegister(VirtualRegister())
</span><span class="lines">@@ -65,12 +65,10 @@
</span><span class="cx"> , m_hasCapturedVariables(false)
</span><span class="cx"> , m_isBuiltinFunction(info.isBuiltinFunction())
</span><span class="cx"> , m_constructorKind(static_cast<unsigned>(info.constructorKind()))
</span><del>- , m_generatorThisMode(static_cast<unsigned>(info.generatorThisMode()))
- , m_superBinding(static_cast<unsigned>(info.superBinding()))
</del><ins>+ , m_isArrowFunction(info.isArrowFunction())
</ins><span class="cx"> , m_firstLine(0)
</span><span class="cx"> , m_lineCount(0)
</span><span class="cx"> , m_endColumn(UINT_MAX)
</span><del>- , m_parseMode(info.parseMode())
</del><span class="cx"> , m_features(0)
</span><span class="cx"> , m_codeType(codeType)
</span><span class="cx"> , m_arrayProfileCount(0)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> #include "CodeType.h"
</span><span class="cx"> #include "ConstructAbility.h"
</span><span class="cx"> #include "ExpressionRangeInfo.h"
</span><del>-#include "GeneratorThisMode.h"
</del><span class="cx"> #include "HandlerInfo.h"
</span><span class="cx"> #include "Identifier.h"
</span><span class="cx"> #include "JSCell.h"
</span><span class="lines">@@ -42,7 +41,6 @@
</span><span class="cx"> #include "UnlinkedFunctionExecutable.h"
</span><span class="cx"> #include "VariableEnvironment.h"
</span><span class="cx"> #include "VirtualRegister.h"
</span><del>-#include <wtf/FastBitVector.h>
</del><span class="cx"> #include <wtf/RefCountedArray.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx">
</span><span class="lines">@@ -118,7 +116,7 @@
</span><span class="cx"> bool isConstructor() const { return m_isConstructor; }
</span><span class="cx"> bool isStrictMode() const { return m_isStrictMode; }
</span><span class="cx"> bool usesEval() const { return m_usesEval; }
</span><del>- SourceParseMode parseMode() const { return m_parseMode; }
</del><ins>+ bool isArrowFunction() const { return m_isArrowFunction; }
</ins><span class="cx">
</span><span class="cx"> bool needsFullScopeChain() const { return m_needsFullScopeChain; }
</span><span class="cx">
</span><span class="lines">@@ -204,8 +202,6 @@
</span><span class="cx"> bool isBuiltinFunction() const { return m_isBuiltinFunction; }
</span><span class="cx">
</span><span class="cx"> ConstructorKind constructorKind() const { return static_cast<ConstructorKind>(m_constructorKind); }
</span><del>- GeneratorThisMode generatorThisMode() const { return static_cast<GeneratorThisMode>(m_generatorThisMode); }
- SuperBinding superBinding() const { return static_cast<SuperBinding>(m_superBinding); }
</del><span class="cx">
</span><span class="cx"> void shrinkToFit()
</span><span class="cx"> {
</span><span class="lines">@@ -236,7 +232,7 @@
</span><span class="cx">
</span><span class="cx"> int m_numVars;
</span><span class="cx"> int m_numCapturedVars;
</span><del>- int m_numCalleeLocals;
</del><ins>+ int m_numCalleeRegisters;
</ins><span class="cx">
</span><span class="cx"> // Jump Tables
</span><span class="cx">
</span><span class="lines">@@ -391,14 +387,12 @@
</span><span class="cx"> unsigned m_hasCapturedVariables : 1;
</span><span class="cx"> unsigned m_isBuiltinFunction : 1;
</span><span class="cx"> unsigned m_constructorKind : 2;
</span><del>- unsigned m_generatorThisMode : 1;
- unsigned m_superBinding : 1;
</del><ins>+ unsigned m_isArrowFunction : 1;
</ins><span class="cx">
</span><span class="cx"> unsigned m_firstLine;
</span><span class="cx"> unsigned m_lineCount;
</span><span class="cx"> unsigned m_endColumn;
</span><span class="cx">
</span><del>- SourceParseMode m_parseMode;
</del><span class="cx"> CodeFeatures m_features;
</span><span class="cx"> CodeType m_codeType;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -50,13 +50,13 @@
</span><span class="cx"> static UnlinkedFunctionCodeBlock* generateUnlinkedFunctionCodeBlock(
</span><span class="cx"> VM& vm, UnlinkedFunctionExecutable* executable, const SourceCode& source,
</span><span class="cx"> CodeSpecializationKind kind, DebuggerMode debuggerMode, ProfilerMode profilerMode,
</span><del>- UnlinkedFunctionKind functionKind, ParserError& error, SourceParseMode parseMode)
</del><ins>+ UnlinkedFunctionKind functionKind, ParserError& error, bool isArrowFunction)
</ins><span class="cx"> {
</span><span class="cx"> JSParserBuiltinMode builtinMode = executable->isBuiltinFunction() ? JSParserBuiltinMode::Builtin : JSParserBuiltinMode::NotBuiltin;
</span><span class="cx"> JSParserStrictMode strictMode = executable->isInStrictContext() ? JSParserStrictMode::Strict : JSParserStrictMode::NotStrict;
</span><span class="cx"> ASSERT(isFunctionParseMode(executable->parseMode()));
</span><span class="cx"> std::unique_ptr<FunctionNode> function = parse<FunctionNode>(
</span><del>- &vm, source, executable->name(), builtinMode, strictMode, executable->parseMode(), executable->superBinding(), error, nullptr);
</del><ins>+ &vm, source, executable->name(), builtinMode, strictMode, executable->parseMode(), error, nullptr);
</ins><span class="cx">
</span><span class="cx"> if (!function) {
</span><span class="cx"> ASSERT(error.isValid());
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> executable->recordParse(function->features(), function->hasCapturedVariables());
</span><span class="cx">
</span><span class="cx"> UnlinkedFunctionCodeBlock* result = UnlinkedFunctionCodeBlock::create(&vm, FunctionCode,
</span><del>- ExecutableInfo(function->needsActivation(), function->usesEval(), function->isStrictMode(), kind == CodeForConstruct, functionKind == UnlinkedBuiltinFunction, executable->constructorKind(), executable->generatorThisMode(), executable->superBinding(), parseMode));
</del><ins>+ ExecutableInfo(function->needsActivation(), function->usesEval(), function->isStrictMode(), kind == CodeForConstruct, functionKind == UnlinkedBuiltinFunction, executable->constructorKind(), isArrowFunction));
</ins><span class="cx"> auto generator(std::make_unique<BytecodeGenerator>(vm, function.get(), result, debuggerMode, profilerMode, executable->parentScopeTDZVariables()));
</span><span class="cx"> error = generator->generate();
</span><span class="cx"> if (error.isValid())
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, GeneratorThisMode generatorThisMode, VariableEnvironment& parentScopeTDZVariables)
</del><ins>+UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, VariableEnvironment& parentScopeTDZVariables)
</ins><span class="cx"> : Base(*vm, structure)
</span><span class="cx"> , m_name(node->ident())
</span><span class="cx"> , m_inferredName(node->inferredName())
</span><span class="lines">@@ -99,8 +99,7 @@
</span><span class="cx"> , m_constructAbility(static_cast<unsigned>(constructAbility))
</span><span class="cx"> , m_constructorKind(static_cast<unsigned>(node->constructorKind()))
</span><span class="cx"> , m_functionMode(node->functionMode())
</span><del>- , m_generatorThisMode(static_cast<unsigned>(generatorThisMode))
- , m_superBinding(static_cast<unsigned>(node->superBinding()))
</del><ins>+ , m_isArrowFunction(node->isArrowFunction())
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(m_constructorKind == static_cast<unsigned>(node->constructorKind()));
</span><span class="cx"> m_parentScopeTDZVariables.swap(parentScopeTDZVariables);
</span><span class="lines">@@ -181,7 +180,7 @@
</span><span class="cx">
</span><span class="cx"> UnlinkedFunctionCodeBlock* UnlinkedFunctionExecutable::unlinkedCodeBlockFor(
</span><span class="cx"> VM& vm, const SourceCode& source, CodeSpecializationKind specializationKind,
</span><del>- DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error, SourceParseMode parseMode)
</del><ins>+ DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error, bool isArrowFunction)
</ins><span class="cx"> {
</span><span class="cx"> switch (specializationKind) {
</span><span class="cx"> case CodeForCall:
</span><span class="lines">@@ -197,7 +196,7 @@
</span><span class="cx"> UnlinkedFunctionCodeBlock* result = generateUnlinkedFunctionCodeBlock(
</span><span class="cx"> vm, this, source, specializationKind, debuggerMode, profilerMode,
</span><span class="cx"> isBuiltinFunction() ? UnlinkedBuiltinFunction : UnlinkedNormalFunction,
</span><del>- error, parseMode);
</del><ins>+ error, isArrowFunction);
</ins><span class="cx">
</span><span class="cx"> if (error.isValid())
</span><span class="cx"> return nullptr;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> #include "CodeType.h"
</span><span class="cx"> #include "ConstructAbility.h"
</span><span class="cx"> #include "ExpressionRangeInfo.h"
</span><del>-#include "GeneratorThisMode.h"
</del><span class="cx"> #include "HandlerInfo.h"
</span><span class="cx"> #include "Identifier.h"
</span><span class="cx"> #include "JSCell.h"
</span><span class="lines">@@ -66,10 +65,10 @@
</span><span class="cx"> typedef JSCell Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal;
</span><span class="cx">
</span><del>- static UnlinkedFunctionExecutable* create(VM* vm, const SourceCode& source, FunctionMetadataNode* node, UnlinkedFunctionKind unlinkedFunctionKind, ConstructAbility constructAbility, GeneratorThisMode generatorThisMode, VariableEnvironment& parentScopeTDZVariables, RefPtr<SourceProvider>&& sourceOverride = nullptr)
</del><ins>+ static UnlinkedFunctionExecutable* create(VM* vm, const SourceCode& source, FunctionMetadataNode* node, UnlinkedFunctionKind unlinkedFunctionKind, ConstructAbility constructAbility, VariableEnvironment& parentScopeTDZVariables, RefPtr<SourceProvider>&& sourceOverride = nullptr)
</ins><span class="cx"> {
</span><span class="cx"> UnlinkedFunctionExecutable* instance = new (NotNull, allocateCell<UnlinkedFunctionExecutable>(vm->heap))
</span><del>- UnlinkedFunctionExecutable(vm, vm->unlinkedFunctionExecutableStructure.get(), source, WTF::move(sourceOverride), node, unlinkedFunctionKind, constructAbility, generatorThisMode, parentScopeTDZVariables);
</del><ins>+ UnlinkedFunctionExecutable(vm, vm->unlinkedFunctionExecutableStructure.get(), source, WTF::move(sourceOverride), node, unlinkedFunctionKind, constructAbility, parentScopeTDZVariables);
</ins><span class="cx"> instance->finishCreation(*vm);
</span><span class="cx"> return instance;
</span><span class="cx"> }
</span><span class="lines">@@ -83,8 +82,6 @@
</span><span class="cx"> bool isInStrictContext() const { return m_isInStrictContext; }
</span><span class="cx"> FunctionMode functionMode() const { return static_cast<FunctionMode>(m_functionMode); }
</span><span class="cx"> ConstructorKind constructorKind() const { return static_cast<ConstructorKind>(m_constructorKind); }
</span><del>- GeneratorThisMode generatorThisMode() const { return static_cast<GeneratorThisMode>(m_generatorThisMode); }
- SuperBinding superBinding() const { return static_cast<SuperBinding>(m_superBinding); }
</del><span class="cx">
</span><span class="cx"> unsigned unlinkedFunctionNameStart() const { return m_unlinkedFunctionNameStart; }
</span><span class="cx"> unsigned unlinkedBodyStartColumn() const { return m_unlinkedBodyStartColumn; }
</span><span class="lines">@@ -98,7 +95,7 @@
</span><span class="cx">
</span><span class="cx"> UnlinkedFunctionCodeBlock* unlinkedCodeBlockFor(
</span><span class="cx"> VM&, const SourceCode&, CodeSpecializationKind, DebuggerMode, ProfilerMode,
</span><del>- ParserError&, SourceParseMode);
</del><ins>+ ParserError&, bool);
</ins><span class="cx">
</span><span class="cx"> static UnlinkedFunctionExecutable* fromGlobalCode(
</span><span class="cx"> const Identifier&, ExecState&, const SourceCode&, JSObject*& exception,
</span><span class="lines">@@ -128,9 +125,10 @@
</span><span class="cx"> ConstructAbility constructAbility() const { return static_cast<ConstructAbility>(m_constructAbility); }
</span><span class="cx"> bool isClassConstructorFunction() const { return constructorKind() != ConstructorKind::None; }
</span><span class="cx"> const VariableEnvironment* parentScopeTDZVariables() const { return &m_parentScopeTDZVariables; }
</span><ins>+ bool isArrowFunction() const { return m_isArrowFunction; }
</ins><span class="cx">
</span><span class="cx"> private:
</span><del>- UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode*, UnlinkedFunctionKind, ConstructAbility, GeneratorThisMode, VariableEnvironment&);
</del><ins>+ UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode*, UnlinkedFunctionKind, ConstructAbility, VariableEnvironment&);
</ins><span class="cx"> WriteBarrier<UnlinkedFunctionCodeBlock> m_unlinkedCodeBlockForCall;
</span><span class="cx"> WriteBarrier<UnlinkedFunctionCodeBlock> m_unlinkedCodeBlockForConstruct;
</span><span class="cx">
</span><span class="lines">@@ -160,8 +158,7 @@
</span><span class="cx"> unsigned m_constructAbility: 1;
</span><span class="cx"> unsigned m_constructorKind : 2;
</span><span class="cx"> unsigned m_functionMode : 1; // FunctionMode
</span><del>- unsigned m_generatorThisMode : 1;
- unsigned m_superBinding : 1;
</del><ins>+ unsigned m_isArrowFunction : 1;
</ins><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> void finishCreation(VM& vm)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -32,10 +32,8 @@
</span><span class="cx"> #include "BytecodeGenerator.h"
</span><span class="cx">
</span><span class="cx"> #include "BuiltinExecutables.h"
</span><del>-#include "BytecodeLivenessAnalysis.h"
</del><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JSFunction.h"
</span><del>-#include "JSGeneratorFunction.h"
</del><span class="cx"> #include "JSLexicalEnvironment.h"
</span><span class="cx"> #include "JSTemplateRegistryKey.h"
</span><span class="cx"> #include "LowLevelInterpreter.h"
</span><span class="lines">@@ -229,33 +227,9 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- SourceParseMode parseMode = codeBlock->parseMode();
</del><span class="cx"> bool shouldCaptureSomeOfTheThings = m_shouldEmitDebugHooks || m_codeBlock->needsFullScopeChain();
</span><span class="cx"> bool shouldCaptureAllOfTheThings = m_shouldEmitDebugHooks || codeBlock->usesEval();
</span><span class="cx"> bool needsArguments = functionNode->usesArguments() || codeBlock->usesEval();
</span><del>-
- // Generator never provides "arguments". "arguments" reference will be resolved in an upper generator function scope.
- if (parseMode == SourceParseMode::GeneratorBodyMode)
- needsArguments = false;
-
- if (parseMode == SourceParseMode::GeneratorWrapperFunctionMode && needsArguments) {
- // Generator does not provide "arguments". Instead, wrapping GeneratorFunction provides "arguments".
- // This is because arguments of a generator should be evaluated before starting it.
- // To workaround it, we evaluate these arguments as arguments of a wrapping generator function, and reference it from a generator.
- //
- // function *gen(a, b = hello())
- // {
- // return {
- // @generatorNext: function (@generator, @generatorState, @generatorValue, @generatorResumeMode)
- // {
- // arguments; // This `arguments` should reference to the gen's arguments.
- // ...
- // }
- // }
- // }
- shouldCaptureSomeOfTheThings = true;
- }
-
</del><span class="cx"> if (shouldCaptureAllOfTheThings)
</span><span class="cx"> functionNode->varDeclarations().markAllVariablesAsCaptured();
</span><span class="cx">
</span><span class="lines">@@ -280,33 +254,14 @@
</span><span class="cx"> allocateAndEmitScope();
</span><span class="cx">
</span><span class="cx"> m_calleeRegister.setIndex(JSStack::Callee);
</span><del>-
- initializeParameters(parameters);
-
- // Before emitting a scope creation, emit a generator prologue that contains jump based on a generator's state.
- if (parseMode == SourceParseMode::GeneratorBodyMode) {
- m_generatorRegister = &m_parameters[1];
- if (generatorThisMode() == GeneratorThisMode::Empty)
- emitMoveEmptyValue(&m_thisRegister);
-
- // Jump with switch_imm based on @generatorState. We don't take the coroutine styled generator implementation.
- // When calling `next()`, we would like to enter the same prologue instead of jumping based on the saved instruction pointer.
- // It's suitale for inlining, because it just inlines one `next` function implementation.
-
- beginGenerator(generatorStateRegister());
-
- // Initial state.
- emitGeneratorStateLabel();
- }
-
</del><ins>+
</ins><span class="cx"> if (functionNameIsInScope(functionNode->ident(), functionNode->functionMode())) {
</span><del>- ASSERT(parseMode != SourceParseMode::GeneratorBodyMode);
</del><span class="cx"> bool isDynamicScope = functionNameScopeIsDynamic(codeBlock->usesEval(), codeBlock->isStrictMode());
</span><span class="cx"> bool isFunctionNameCaptured = captures(functionNode->ident().impl());
</span><span class="cx"> bool markAsCaptured = isDynamicScope || isFunctionNameCaptured;
</span><span class="cx"> emitPushFunctionNameScope(functionNode->ident(), &m_calleeRegister, markAsCaptured);
</span><span class="cx"> }
</span><del>-
</del><ins>+
</ins><span class="cx"> if (shouldCaptureSomeOfTheThings) {
</span><span class="cx"> m_lexicalEnvironmentRegister = addVar();
</span><span class="cx"> // We can allocate the "var" environment if we don't have default parameter expressions. If we have
</span><span class="lines">@@ -316,6 +271,19 @@
</span><span class="cx"> initializeVarLexicalEnvironment(symbolTableConstantIndex);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ // Make sure the code block knows about all of our parameters, and make sure that parameters
+ // needing destructuring are noted.
+ m_parameters.grow(parameters.size() + 1); // reserve space for "this"
+ m_thisRegister.setIndex(initializeNextParameter()->index()); // this
+ for (unsigned i = 0; i < parameters.size(); ++i) {
+ auto pattern = parameters.at(i).first;
+ if (pattern->isRestParameter()) {
+ RELEASE_ASSERT(!m_restParameter);
+ m_restParameter = static_cast<RestParameterNode*>(pattern);
+ } else
+ initializeNextParameter();
+ }
+
</ins><span class="cx"> // Figure out some interesting facts about our arguments.
</span><span class="cx"> bool capturesAnyArgumentByName = false;
</span><span class="cx"> if (functionNode->hasCapturedVariables()) {
</span><span class="lines">@@ -508,36 +476,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> m_newTargetRegister = addVar();
</span><del>- switch (parseMode) {
- case SourceParseMode::ArrowFunctionMode: {
- if (functionNode->usesThis() || codeBlock->usesEval())
- emitLoadArrowFunctionThis(&m_thisRegister);
- break;
- }
-
- case SourceParseMode::GeneratorWrapperFunctionMode: {
- m_generatorRegister = addVar();
-
- // FIXME: Emit to_this only when Generator uses it.
- // https://bugs.webkit.org/show_bug.cgi?id=151586
- m_codeBlock->addPropertyAccessInstruction(instructions().size());
- emitOpcode(op_to_this);
- instructions().append(kill(&m_thisRegister));
- instructions().append(0);
- instructions().append(0);
-
- emitMove(m_generatorRegister, &m_calleeRegister);
- emitCreateThis(m_generatorRegister);
- break;
- }
-
- case SourceParseMode::GeneratorBodyMode: {
- // |this| is already filled correctly before here.
- emitLoad(m_newTargetRegister, jsUndefined());
- break;
- }
-
- default: {
</del><ins>+ if (!codeBlock->isArrowFunction()) {
</ins><span class="cx"> if (isConstructor()) {
</span><span class="cx"> emitMove(m_newTargetRegister, &m_thisRegister);
</span><span class="cx"> if (constructorKind() == ConstructorKind::Derived)
</span><span class="lines">@@ -553,9 +492,10 @@
</span><span class="cx"> instructions().append(0);
</span><span class="cx"> instructions().append(0);
</span><span class="cx"> }
</span><del>- break;
</del><ins>+ } else {
+ if (functionNode->usesThis() || codeBlock->usesEval())
+ emitLoadArrowFunctionThis(&m_thisRegister);
</ins><span class="cx"> }
</span><del>- }
</del><span class="cx">
</span><span class="cx"> // All "addVar()"s needs to happen before "initializeDefaultParameterValuesAndSetupFunctionScopeStack()" is called
</span><span class="cx"> // because a function's default parameter ExpressionNodes will use temporary registers.
</span><span class="lines">@@ -859,22 +799,6 @@
</span><span class="cx"> return &parameter;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void BytecodeGenerator::initializeParameters(FunctionParameters& parameters)
-{
- // Make sure the code block knows about all of our parameters, and make sure that parameters
- // needing destructuring are noted.
- m_parameters.grow(parameters.size() + 1); // reserve space for "this"
- m_thisRegister.setIndex(initializeNextParameter()->index()); // this
- for (unsigned i = 0; i < parameters.size(); ++i) {
- auto pattern = parameters.at(i).first;
- if (pattern->isRestParameter()) {
- RELEASE_ASSERT(!m_restParameter);
- m_restParameter = static_cast<RestParameterNode*>(pattern);
- } else
- initializeNextParameter();
- }
-}
-
</del><span class="cx"> void BytecodeGenerator::initializeVarLexicalEnvironment(int symbolTableConstantIndex)
</span><span class="cx"> {
</span><span class="cx"> RELEASE_ASSERT(m_lexicalEnvironmentRegister);
</span><span class="lines">@@ -902,17 +826,17 @@
</span><span class="cx">
</span><span class="cx"> RegisterID* BytecodeGenerator::newRegister()
</span><span class="cx"> {
</span><del>- m_calleeLocals.append(virtualRegisterForLocal(m_calleeLocals.size()));
- int numCalleeLocals = max<int>(m_codeBlock->m_numCalleeLocals, m_calleeLocals.size());
- numCalleeLocals = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), numCalleeLocals);
- m_codeBlock->m_numCalleeLocals = numCalleeLocals;
- return &m_calleeLocals.last();
</del><ins>+ m_calleeRegisters.append(virtualRegisterForLocal(m_calleeRegisters.size()));
+ int numCalleeRegisters = max<int>(m_codeBlock->m_numCalleeRegisters, m_calleeRegisters.size());
+ numCalleeRegisters = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), numCalleeRegisters);
+ m_codeBlock->m_numCalleeRegisters = numCalleeRegisters;
+ return &m_calleeRegisters.last();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void BytecodeGenerator::reclaimFreeRegisters()
</span><span class="cx"> {
</span><del>- while (m_calleeLocals.size() && !m_calleeLocals.last().refCount())
- m_calleeLocals.removeLast();
</del><ins>+ while (m_calleeRegisters.size() && !m_calleeRegisters.last().refCount())
+ m_calleeRegisters.removeLast();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RegisterID* BytecodeGenerator::newBlockScopeVariable()
</span><span class="lines">@@ -1991,7 +1915,7 @@
</span><span class="cx"> varOffset = VarOffset(symbolTable->takeNextScopeOffset(locker));
</span><span class="cx"> else {
</span><span class="cx"> ASSERT(varKind == VarKind::Stack);
</span><del>- varOffset = VarOffset(virtualRegisterForLocal(m_calleeLocals.size()));
</del><ins>+ varOffset = VarOffset(virtualRegisterForLocal(m_calleeRegisters.size()));
</ins><span class="cx"> }
</span><span class="cx"> SymbolTableEntry newEntry(varOffset, 0);
</span><span class="cx"> symbolTable->add(locker, property.impl(), newEntry);
</span><span class="lines">@@ -2388,12 +2312,12 @@
</span><span class="cx"> RegisterID* BytecodeGenerator::emitCreateThis(RegisterID* dst)
</span><span class="cx"> {
</span><span class="cx"> size_t begin = instructions().size();
</span><del>- m_staticPropertyAnalyzer.createThis(dst->index(), begin + 3);
</del><ins>+ m_staticPropertyAnalyzer.createThis(m_thisRegister.index(), begin + 3);
</ins><span class="cx">
</span><span class="cx"> m_codeBlock->addPropertyAccessInstruction(instructions().size());
</span><span class="cx"> emitOpcode(op_create_this);
</span><del>- instructions().append(dst->index());
- instructions().append(dst->index());
</del><ins>+ instructions().append(m_thisRegister.index());
+ instructions().append(m_thisRegister.index());
</ins><span class="cx"> instructions().append(0);
</span><span class="cx"> instructions().append(0);
</span><span class="cx"> return dst;
</span><span class="lines">@@ -2557,6 +2481,20 @@
</span><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+RegisterID* BytecodeGenerator::emitNewFunction(RegisterID* dst, FunctionMetadataNode* function)
+{
+ return emitNewFunctionInternal(dst, m_codeBlock->addFunctionDecl(makeFunction(function)));
+}
+
+RegisterID* BytecodeGenerator::emitNewFunctionInternal(RegisterID* dst, unsigned index)
+{
+ emitOpcode(op_new_func);
+ instructions().append(dst->index());
+ instructions().append(scopeRegister()->index());
+ instructions().append(index);
+ return dst;
+}
+
</ins><span class="cx"> RegisterID* BytecodeGenerator::emitNewRegExp(RegisterID* dst, RegExp* regExp)
</span><span class="cx"> {
</span><span class="cx"> emitOpcode(op_new_regexp);
</span><span class="lines">@@ -2565,25 +2503,13 @@
</span><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void BytecodeGenerator::emitNewFunctionExpressionCommon(RegisterID* dst, BaseFuncExprNode* func)
</del><ins>+void BytecodeGenerator::emitNewFunctionCommon(RegisterID* dst, BaseFuncExprNode* func, OpcodeID opcodeID)
</ins><span class="cx"> {
</span><ins>+
+ ASSERT(opcodeID == op_new_func_exp || opcodeID == op_new_arrow_func_exp);
+
</ins><span class="cx"> FunctionMetadataNode* function = func->metadata();
</span><span class="cx"> unsigned index = m_codeBlock->addFunctionExpr(makeFunction(function));
</span><del>-
- OpcodeID opcodeID = op_new_func_exp;
- switch (function->parseMode()) {
- case SourceParseMode::GeneratorWrapperFunctionMode: {
- opcodeID = op_new_generator_func_exp;
- break;
- }
- case SourceParseMode::ArrowFunctionMode: {
- opcodeID = op_new_arrow_func_exp;
- break;
- }
- default: {
- break;
- }
- }
</del><span class="cx">
</span><span class="cx"> emitOpcode(opcodeID);
</span><span class="cx"> instructions().append(dst->index());
</span><span class="lines">@@ -2596,18 +2522,17 @@
</span><span class="cx">
</span><span class="cx"> RegisterID* BytecodeGenerator::emitNewFunctionExpression(RegisterID* dst, FuncExprNode* func)
</span><span class="cx"> {
</span><del>- emitNewFunctionExpressionCommon(dst, func);
</del><ins>+ emitNewFunctionCommon(dst, func, op_new_func_exp);
</ins><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RegisterID* BytecodeGenerator::emitNewArrowFunctionExpression(RegisterID* dst, ArrowFuncExprNode* func)
</span><span class="cx"> {
</span><del>- ASSERT(func->metadata()->parseMode() == SourceParseMode::ArrowFunctionMode);
</del><span class="cx"> bool isClassConstructor = m_codeBlock->isConstructor() && constructorKind() != ConstructorKind::None;
</span><del>- if (isClassConstructor || generatorThisMode() == GeneratorThisMode::Empty)
</del><ins>+ if (isClassConstructor)
</ins><span class="cx"> emitTDZCheck(thisRegister());
</span><span class="cx">
</span><del>- emitNewFunctionExpressionCommon(dst, func);
</del><ins>+ emitNewFunctionCommon(dst, func, op_new_arrow_func_exp);
</ins><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2625,19 +2550,6 @@
</span><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-RegisterID* BytecodeGenerator::emitNewFunction(RegisterID* dst, FunctionMetadataNode* function)
-{
- unsigned index = m_codeBlock->addFunctionDecl(makeFunction(function));
- if (function->parseMode() == SourceParseMode::GeneratorWrapperFunctionMode)
- emitOpcode(op_new_generator_func);
- else
- emitOpcode(op_new_func);
- instructions().append(dst->index());
- instructions().append(scopeRegister()->index());
- instructions().append(index);
- return dst;
-}
-
</del><span class="cx"> RegisterID* BytecodeGenerator::emitCall(RegisterID* dst, RegisterID* func, ExpectedFunction expectedFunction, CallArguments& callArguments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd)
</span><span class="cx"> {
</span><span class="cx"> return emitCall(op_call, dst, func, expectedFunction, callArguments, divot, divotStart, divotEnd);
</span><span class="lines">@@ -3861,24 +3773,6 @@
</span><span class="cx"> return dst;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-RegisterID* BytecodeGenerator::emitIteratorNextWithValue(RegisterID* dst, RegisterID* iterator, RegisterID* value, const ThrowableExpressionData* node)
-{
- {
- RefPtr<RegisterID> next = emitGetById(newTemporary(), iterator, propertyNames().next);
- CallArguments nextArguments(*this, nullptr, 1);
- emitMove(nextArguments.thisRegister(), iterator);
- emitMove(nextArguments.argumentRegister(0), value);
- emitCall(dst, next.get(), NoExpectedFunction, nextArguments, node->divot(), node->divotStart(), node->divotEnd());
- }
- {
- RefPtr<Label> typeIsObject = newLabel();
- emitJumpIfTrue(emitIsObject(newTemporary(), dst), typeIsObject.get());
- emitThrowTypeError(ASCIILiteral("Iterator result interface is not an object."));
- emitLabel(typeIsObject.get());
- }
- return dst;
-}
-
</del><span class="cx"> void BytecodeGenerator::emitIteratorClose(RegisterID* iterator, const ThrowableExpressionData* node)
</span><span class="cx"> {
</span><span class="cx"> RefPtr<Label> done = newLabel();
</span><span class="lines">@@ -3974,228 +3868,4 @@
</span><span class="cx"> emitLabel(target.get());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void BytecodeGenerator::emitYieldPoint(RegisterID* argument)
-{
- RefPtr<Label> mergePoint = newLabel();
- size_t yieldPointIndex = m_generatorResumeLabels.size();
- emitGeneratorStateChange(yieldPointIndex);
- // First yield point is used for initial sequence.
- unsigned liveCalleeLocalsIndex = yieldPointIndex - 1;
- emitSave(mergePoint.get(), liveCalleeLocalsIndex);
- emitReturn(argument);
- emitResume(mergePoint.get(), liveCalleeLocalsIndex);
-}
-
-void BytecodeGenerator::emitSave(Label* mergePoint, unsigned liveCalleeLocalsIndex)
-{
- size_t begin = instructions().size();
- emitOpcode(op_save);
- instructions().append(m_generatorRegister->index());
- instructions().append(liveCalleeLocalsIndex);
- instructions().append(mergePoint->bind(begin, instructions().size()));
-}
-
-void BytecodeGenerator::emitResume(Label* mergePoint, unsigned liveCalleeLocalsIndex)
-{
- emitGeneratorStateLabel();
- emitOpcode(op_resume);
- instructions().append(m_generatorRegister->index());
- instructions().append(liveCalleeLocalsIndex);
- emitLabel(mergePoint);
-}
-
-RegisterID* BytecodeGenerator::emitYield(RegisterID* argument)
-{
- emitYieldPoint(argument);
-
- RefPtr<Label> normalLabel = newLabel();
- RefPtr<RegisterID> condition = newTemporary();
- emitEqualityOp(op_stricteq, condition.get(), generatorResumeModeRegister(), emitLoad(nullptr, jsNumber(static_cast<int32_t>(JSGeneratorFunction::GeneratorResumeMode::NormalMode))));
- emitJumpIfTrue(condition.get(), normalLabel.get());
-
- RefPtr<Label> throwLabel = newLabel();
- emitEqualityOp(op_stricteq, condition.get(), generatorResumeModeRegister(), emitLoad(nullptr, jsNumber(static_cast<int32_t>(JSGeneratorFunction::GeneratorResumeMode::ThrowMode))));
- emitJumpIfTrue(condition.get(), throwLabel.get());
- // Return.
- {
- RefPtr<RegisterID> returnRegister = generatorValueRegister();
- if (isInFinallyBlock()) {
- returnRegister = emitMove(newTemporary(), returnRegister.get());
- emitPopScopes(scopeRegister(), 0);
- }
- emitReturn(returnRegister.get());
- }
-
- // Throw.
- emitLabel(throwLabel.get());
- emitThrow(generatorValueRegister());
-
- // Normal.
- emitLabel(normalLabel.get());
- return generatorValueRegister();
-}
-
-RegisterID* BytecodeGenerator::emitDelegateYield(RegisterID* argument, ThrowableExpressionData* node)
-{
- RefPtr<RegisterID> value = newTemporary();
- {
- RefPtr<RegisterID> iterator = emitGetById(newTemporary(), argument, propertyNames().iteratorSymbol);
- {
- CallArguments args(*this, nullptr);
- emitMove(args.thisRegister(), argument);
- emitCall(iterator.get(), iterator.get(), NoExpectedFunction, args, node->divot(), node->divotStart(), node->divotEnd());
- }
-
- RefPtr<Label> loopDone = newLabel();
- {
- RefPtr<Label> nextElement = newLabel();
- emitLoad(value.get(), jsUndefined());
-
- emitJump(nextElement.get());
-
- RefPtr<Label> loopStart = newLabel();
- emitLabel(loopStart.get());
- emitLoopHint();
-
- {
- emitYieldPoint(value.get());
-
- RefPtr<Label> normalLabel = newLabel();
- RefPtr<Label> returnLabel = newLabel();
- {
- RefPtr<RegisterID> condition = newTemporary();
- emitEqualityOp(op_stricteq, condition.get(), generatorResumeModeRegister(), emitLoad(nullptr, jsNumber(static_cast<int32_t>(JSGeneratorFunction::GeneratorResumeMode::NormalMode))));
- emitJumpIfTrue(condition.get(), normalLabel.get());
-
- emitEqualityOp(op_stricteq, condition.get(), generatorResumeModeRegister(), emitLoad(nullptr, jsNumber(static_cast<int32_t>(JSGeneratorFunction::GeneratorResumeMode::ReturnMode))));
- emitJumpIfTrue(condition.get(), returnLabel.get());
-
- // Fallthrough to ThrowMode.
- }
-
- RefPtr<Label> returnSequence = newLabel();
- RefPtr<Label> returnWithIteratorResult = newLabel();
- RefPtr<RegisterID> returnIteratorResult = newTemporary();
- // Throw.
- {
- RefPtr<Label> throwMethodFound = newLabel();
- RefPtr<RegisterID> throwMethod = emitGetById(newTemporary(), iterator.get(), propertyNames().throwKeyword);
- emitJumpIfFalse(emitIsUndefined(newTemporary(), throwMethod.get()), throwMethodFound.get());
-
- emitIteratorClose(iterator.get(), node);
- emitThrowTypeError(ASCIILiteral("Delegated generator does not have a 'throw' method."));
-
- emitLabel(throwMethodFound.get());
- CallArguments throwArguments(*this, nullptr, 1);
- emitMove(throwArguments.thisRegister(), iterator.get());
- emitMove(throwArguments.argumentRegister(0), generatorValueRegister());
- emitCall(returnIteratorResult.get(), throwMethod.get(), NoExpectedFunction, throwArguments, node->divot(), node->divotStart(), node->divotEnd());
- emitJump(returnWithIteratorResult.get());
- }
-
- // Return.
- emitLabel(returnLabel.get());
- {
- RefPtr<Label> returnMethodFound = newLabel();
- RefPtr<RegisterID> returnMethod = emitGetById(newTemporary(), iterator.get(), propertyNames().returnKeyword);
- emitJumpIfFalse(emitIsUndefined(newTemporary(), returnMethod.get()), returnMethodFound.get());
-
- emitMove(value.get(), generatorValueRegister());
- emitJump(returnSequence.get());
-
- emitLabel(returnMethodFound.get());
- CallArguments returnArguments(*this, nullptr, 1);
- emitMove(returnArguments.thisRegister(), iterator.get());
- emitMove(returnArguments.argumentRegister(0), generatorValueRegister());
- emitCall(returnIteratorResult.get(), returnMethod.get(), NoExpectedFunction, returnArguments, node->divot(), node->divotStart(), node->divotEnd());
-
- // Fallthrough to returnWithIteratorResult.
- }
-
- emitLabel(returnWithIteratorResult.get());
- {
- RefPtr<Label> returnIteratorResultIsObject = newLabel();
- emitJumpIfTrue(emitIsObject(newTemporary(), returnIteratorResult.get()), returnIteratorResultIsObject.get());
- emitThrowTypeError(ASCIILiteral("Iterator result interface is not an object."));
-
- emitLabel(returnIteratorResultIsObject.get());
- RefPtr<Label> returnFromGenerator = newLabel();
- emitJumpIfTrue(emitGetById(newTemporary(), returnIteratorResult.get(), propertyNames().done), returnFromGenerator.get());
-
- emitGetById(value.get(), returnIteratorResult.get(), propertyNames().value);
- emitJump(loopStart.get());
-
- emitLabel(returnFromGenerator.get());
- emitGetById(value.get(), returnIteratorResult.get(), propertyNames().value);
-
- // Fallthrough to returnSequence.
- }
-
- emitLabel(returnSequence.get());
- {
- if (isInFinallyBlock())
- emitPopScopes(scopeRegister(), 0);
- emitReturn(value.get());
- }
-
- // Normal.
- emitLabel(normalLabel.get());
- emitMove(value.get(), generatorValueRegister());
- }
-
- emitLabel(nextElement.get());
- {
- emitIteratorNextWithValue(value.get(), iterator.get(), value.get(), node);
- emitJumpIfTrue(emitGetById(newTemporary(), value.get(), propertyNames().done), loopDone.get());
- emitGetById(value.get(), value.get(), propertyNames().value);
- emitJump(loopStart.get());
- }
- }
- emitLabel(loopDone.get());
- }
-
- emitGetById(value.get(), value.get(), propertyNames().value);
- return value.get();
-}
-
-
-void BytecodeGenerator::emitGeneratorStateChange(int32_t state)
-{
- RegisterID* completedState = emitLoad(nullptr, jsNumber(state));
- emitPutById(generatorRegister(), propertyNames().generatorStatePrivateName, completedState);
-}
-
-void BytecodeGenerator::emitGeneratorStateLabel()
-{
- RefPtr<Label> label = newLabel();
- m_generatorResumeLabels.append(label.get());
- emitLabel(label.get());
-}
-
-void BytecodeGenerator::beginGenerator(RegisterID* state)
-{
- beginSwitch(state, SwitchInfo::SwitchImmediate);
-}
-
-void BytecodeGenerator::endGenerator(Label* defaultLabel)
-{
- SwitchInfo switchInfo = m_switchContextStack.last();
- m_switchContextStack.removeLast();
-
- instructions()[switchInfo.bytecodeOffset + 1] = m_codeBlock->numberOfSwitchJumpTables();
- instructions()[switchInfo.bytecodeOffset + 2] = defaultLabel->bind(switchInfo.bytecodeOffset, switchInfo.bytecodeOffset + 3);
-
- UnlinkedSimpleJumpTable& jumpTable = m_codeBlock->addSwitchJumpTable();
- int32_t switchAddress = switchInfo.bytecodeOffset;
- jumpTable.min = 0;
- jumpTable.branchOffsets.resize(m_generatorResumeLabels.size() + 1);
- jumpTable.branchOffsets.fill(0);
- for (uint32_t i = 0; i < m_generatorResumeLabels.size(); ++i) {
- // We're emitting this after the clause labels should have been fixed, so
- // the labels should not be "forward" references
- ASSERT(!m_generatorResumeLabels[i]->isForward());
- jumpTable.add(i, m_generatorResumeLabels[i]->bind(switchAddress, switchAddress + 3));
- }
-}
-
</del><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #define BytecodeGenerator_h
</span><span class="cx">
</span><span class="cx"> #include "CodeBlock.h"
</span><del>-#include "GeneratorThisMode.h"
</del><span class="cx"> #include <wtf/HashTraits.h>
</span><span class="cx"> #include "Instruction.h"
</span><span class="cx"> #include "Label.h"
</span><span class="lines">@@ -281,8 +280,6 @@
</span><span class="cx">
</span><span class="cx"> bool isConstructor() const { return m_codeBlock->isConstructor(); }
</span><span class="cx"> ConstructorKind constructorKind() const { return m_codeBlock->constructorKind(); }
</span><del>- GeneratorThisMode generatorThisMode() const { return m_codeBlock->generatorThisMode(); }
- SuperBinding superBinding() const { return m_codeBlock->superBinding(); }
</del><span class="cx">
</span><span class="cx"> ParserError generate();
</span><span class="cx">
</span><span class="lines">@@ -300,8 +297,6 @@
</span><span class="cx">
</span><span class="cx"> RegisterID* scopeRegister() { return m_scopeRegister; }
</span><span class="cx">
</span><del>- RegisterID* generatorRegister() { return m_generatorRegister; }
-
</del><span class="cx"> // Returns the next available temporary register. Registers returned by
</span><span class="cx"> // newTemporary require a modified form of reference counting: any
</span><span class="cx"> // register with a refcount of 0 is considered "available", meaning that
</span><span class="lines">@@ -505,8 +500,10 @@
</span><span class="cx"> RegisterID* emitNewArrayWithSize(RegisterID* dst, RegisterID* length);
</span><span class="cx">
</span><span class="cx"> RegisterID* emitNewFunction(RegisterID* dst, FunctionMetadataNode*);
</span><ins>+ RegisterID* emitNewFunctionInternal(RegisterID* dst, unsigned index);
</ins><span class="cx"> RegisterID* emitNewFunctionExpression(RegisterID* dst, FuncExprNode* func);
</span><span class="cx"> RegisterID* emitNewDefaultConstructor(RegisterID* dst, ConstructorKind, const Identifier& name);
</span><ins>+ void emitNewFunctionCommon(RegisterID*, BaseFuncExprNode*, OpcodeID);
</ins><span class="cx"> RegisterID* emitNewArrowFunctionExpression(RegisterID*, ArrowFuncExprNode*);
</span><span class="cx"> RegisterID* emitNewRegExp(RegisterID* dst, RegExp*);
</span><span class="cx">
</span><span class="lines">@@ -601,7 +598,6 @@
</span><span class="cx"> void emitRequireObjectCoercible(RegisterID* value, const String& error);
</span><span class="cx">
</span><span class="cx"> RegisterID* emitIteratorNext(RegisterID* dst, RegisterID* iterator, const ThrowableExpressionData* node);
</span><del>- RegisterID* emitIteratorNextWithValue(RegisterID* dst, RegisterID* iterator, RegisterID* value, const ThrowableExpressionData* node);
</del><span class="cx"> void emitIteratorClose(RegisterID* iterator, const ThrowableExpressionData* node);
</span><span class="cx">
</span><span class="cx"> RegisterID* emitRestParameter(RegisterID* result, unsigned numParametersToSkip);
</span><span class="lines">@@ -650,28 +646,12 @@
</span><span class="cx"> void beginSwitch(RegisterID*, SwitchInfo::SwitchType);
</span><span class="cx"> void endSwitch(uint32_t clauseCount, RefPtr<Label>*, ExpressionNode**, Label* defaultLabel, int32_t min, int32_t range);
</span><span class="cx">
</span><del>- void emitYieldPoint(RegisterID*);
- void emitSave(Label* mergePoint, unsigned liveCalleeLocalsIndex);
- void emitResume(Label* mergePoint, unsigned liveCalleeLocalsIndex);
-
- void emitGeneratorStateLabel();
- void emitGeneratorStateChange(int32_t state);
- RegisterID* emitYield(RegisterID* argument);
- RegisterID* emitDelegateYield(RegisterID* argument, ThrowableExpressionData*);
- void beginGenerator(RegisterID*);
- void endGenerator(Label* defaultLabel);
- RegisterID* generatorStateRegister() { return &m_parameters[2]; }
- RegisterID* generatorValueRegister() { return &m_parameters[3]; }
- RegisterID* generatorResumeModeRegister() { return &m_parameters[4]; }
-
</del><span class="cx"> CodeType codeType() const { return m_codeType; }
</span><span class="cx">
</span><span class="cx"> bool shouldEmitProfileHooks() { return m_shouldEmitProfileHooks; }
</span><span class="cx"> bool shouldEmitDebugHooks() { return m_shouldEmitDebugHooks; }
</span><span class="cx">
</span><span class="cx"> bool isStrictMode() const { return m_codeBlock->isStrictMode(); }
</span><del>-
- SourceParseMode parseMode() const { return m_codeBlock->parseMode(); }
</del><span class="cx">
</span><span class="cx"> bool isBuiltinFunction() const { return m_isBuiltinFunction; }
</span><span class="cx">
</span><span class="lines">@@ -689,7 +669,6 @@
</span><span class="cx"> void emitPopScope(RegisterID* dst, RegisterID* scope);
</span><span class="cx"> RegisterID* emitGetParentScope(RegisterID* dst, RegisterID* scope);
</span><span class="cx"> void emitPushFunctionNameScope(const Identifier& property, RegisterID* value, bool isCaptured);
</span><del>- void emitNewFunctionExpressionCommon(RegisterID*, BaseFuncExprNode*);
</del><span class="cx">
</span><span class="cx"> public:
</span><span class="cx"> void pushLexicalScope(VariableEnvironmentNode*, bool canOptimizeTDZChecks, RegisterID** constantSymbolTableResult = nullptr);
</span><span class="lines">@@ -753,7 +732,7 @@
</span><span class="cx"> RegisterID& registerFor(VirtualRegister reg)
</span><span class="cx"> {
</span><span class="cx"> if (reg.isLocal())
</span><del>- return m_calleeLocals[reg.toLocal()];
</del><ins>+ return m_calleeRegisters[reg.toLocal()];
</ins><span class="cx">
</span><span class="cx"> if (reg.offset() == JSStack::Callee)
</span><span class="cx"> return m_calleeRegister;
</span><span class="lines">@@ -775,22 +754,12 @@
</span><span class="cx"> VariableEnvironment variablesUnderTDZ;
</span><span class="cx"> getVariablesUnderTDZ(variablesUnderTDZ);
</span><span class="cx">
</span><del>- // FIXME: These flags, ParserModes and propagation to XXXCodeBlocks should be reorganized.
- // https://bugs.webkit.org/show_bug.cgi?id=151547
</del><span class="cx"> SourceParseMode parseMode = metadata->parseMode();
</span><span class="cx"> ConstructAbility constructAbility = ConstructAbility::CanConstruct;
</span><del>- if (parseMode == SourceParseMode::GetterMode || parseMode == SourceParseMode::SetterMode || parseMode == SourceParseMode::ArrowFunctionMode)
</del><ins>+ if (parseMode == SourceParseMode::GetterMode || parseMode == SourceParseMode::SetterMode || parseMode == SourceParseMode::ArrowFunctionMode || (parseMode == SourceParseMode::MethodMode && metadata->constructorKind() == ConstructorKind::None))
</ins><span class="cx"> constructAbility = ConstructAbility::CannotConstruct;
</span><del>- else if (parseMode == SourceParseMode::MethodMode && metadata->constructorKind() == ConstructorKind::None)
- constructAbility = ConstructAbility::CannotConstruct;
- else if (parseMode == SourceParseMode::GeneratorWrapperFunctionMode && metadata->superBinding() == SuperBinding::Needed)
- constructAbility = ConstructAbility::CannotConstruct;
</del><span class="cx">
</span><del>- GeneratorThisMode generatorThisMode = GeneratorThisMode::NonEmpty;
- if (parseMode == SourceParseMode::GeneratorBodyMode && isConstructor())
- generatorThisMode = GeneratorThisMode::Empty;
-
- return UnlinkedFunctionExecutable::create(m_vm, m_scopeNode->source(), metadata, isBuiltinFunction() ? UnlinkedBuiltinFunction : UnlinkedNormalFunction, constructAbility, generatorThisMode, variablesUnderTDZ);
</del><ins>+ return UnlinkedFunctionExecutable::create(m_vm, m_scopeNode->source(), metadata, isBuiltinFunction() ? UnlinkedBuiltinFunction : UnlinkedNormalFunction, constructAbility, variablesUnderTDZ);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void getVariablesUnderTDZ(VariableEnvironment&);
</span><span class="lines">@@ -798,7 +767,6 @@
</span><span class="cx"> RegisterID* emitConstructVarargs(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, RegisterID* arguments, RegisterID* firstFreeRegister, int32_t firstVarArgOffset, RegisterID* profileHookRegister, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
</span><span class="cx"> RegisterID* emitCallVarargs(OpcodeID, RegisterID* dst, RegisterID* func, RegisterID* thisRegister, RegisterID* arguments, RegisterID* firstFreeRegister, int32_t firstVarArgOffset, RegisterID* profileHookRegister, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
</span><span class="cx">
</span><del>- void initializeParameters(FunctionParameters&);
</del><span class="cx"> void initializeVarLexicalEnvironment(int symbolTableConstantIndex);
</span><span class="cx"> void initializeDefaultParameterValuesAndSetupFunctionScopeStack(FunctionParameters&, FunctionNode*, SymbolTable*, int symbolTableConstantIndex, const std::function<bool (UniquedStringImpl*)>& captures);
</span><span class="cx">
</span><span class="lines">@@ -838,7 +806,6 @@
</span><span class="cx"> RegisterID* m_topMostScope { nullptr };
</span><span class="cx"> RegisterID* m_argumentsRegister { nullptr };
</span><span class="cx"> RegisterID* m_lexicalEnvironmentRegister { nullptr };
</span><del>- RegisterID* m_generatorRegister { nullptr };
</del><span class="cx"> RegisterID* m_emptyValueRegister { nullptr };
</span><span class="cx"> RegisterID* m_globalObjectRegister { nullptr };
</span><span class="cx"> RegisterID* m_newTargetRegister { nullptr };
</span><span class="lines">@@ -846,7 +813,7 @@
</span><span class="cx">
</span><span class="cx"> SegmentedVector<RegisterID*, 16> m_localRegistersForCalleeSaveRegisters;
</span><span class="cx"> SegmentedVector<RegisterID, 32> m_constantPoolRegisters;
</span><del>- SegmentedVector<RegisterID, 32> m_calleeLocals;
</del><ins>+ SegmentedVector<RegisterID, 32> m_calleeRegisters;
</ins><span class="cx"> SegmentedVector<RegisterID, 32> m_parameters;
</span><span class="cx"> SegmentedVector<Label, 32> m_labels;
</span><span class="cx"> LabelScopeStore m_labelScopes;
</span><span class="lines">@@ -862,7 +829,6 @@
</span><span class="cx"> Vector<SwitchInfo> m_switchContextStack;
</span><span class="cx"> Vector<std::unique_ptr<ForInContext>> m_forInContextStack;
</span><span class="cx"> Vector<TryContext> m_tryContextStack;
</span><del>- Vector<RefPtr<Label>> m_generatorResumeLabels;
</del><span class="cx"> enum FunctionVariableType : uint8_t { NormalFunctionVariable, GlobalFunctionVariable };
</span><span class="cx"> Vector<std::pair<FunctionMetadataNode*, FunctionVariableType>> m_functionsToInitialize;
</span><span class="cx"> bool m_needToInitializeArguments { false };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> #include "Debugger.h"
</span><span class="cx"> #include "JIT.h"
</span><span class="cx"> #include "JSFunction.h"
</span><del>-#include "JSGeneratorFunction.h"
</del><span class="cx"> #include "JSGlobalObject.h"
</span><span class="cx"> #include "JSONObject.h"
</span><span class="cx"> #include "LabelScope.h"
</span><span class="lines">@@ -146,7 +145,7 @@
</span><span class="cx">
</span><span class="cx"> RegisterID* ThisNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
</span><span class="cx"> {
</span><del>- if (m_shouldAlwaysEmitTDZCheck || generator.constructorKind() == ConstructorKind::Derived || generator.generatorThisMode() == GeneratorThisMode::Empty)
</del><ins>+ if (m_shouldAlwaysEmitTDZCheck || generator.constructorKind() == ConstructorKind::Derived)
</ins><span class="cx"> generator.emitTDZCheck(generator.thisRegister());
</span><span class="cx">
</span><span class="cx"> if (dst == generator.ignoredResult())
</span><span class="lines">@@ -171,16 +170,12 @@
</span><span class="cx"> return generator.emitGetById(generator.finalDestination(dst), &callee, generator.propertyNames().underscoreProto);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static RegisterID* emitHomeObjectForCallee(BytecodeGenerator& generator)
</del><ins>+static RegisterID* emitSuperBaseForCallee(BytecodeGenerator& generator)
</ins><span class="cx"> {
</span><span class="cx"> RegisterID callee;
</span><span class="cx"> callee.setIndex(JSStack::Callee);
</span><del>- return generator.emitGetById(generator.newTemporary(), &callee, generator.propertyNames().homeObjectPrivateName);
-}
</del><span class="cx">
</span><del>-static RegisterID* emitSuperBaseForCallee(BytecodeGenerator& generator)
-{
- RefPtr<RegisterID> homeObject = emitHomeObjectForCallee(generator);
</del><ins>+ RefPtr<RegisterID> homeObject = generator.emitGetById(generator.newTemporary(), &callee, generator.propertyNames().homeObjectPrivateName);
</ins><span class="cx"> return generator.emitGetById(generator.newTemporary(), homeObject.get(), generator.propertyNames().underscoreProto);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2589,7 +2584,6 @@
</span><span class="cx"> dst = 0;
</span><span class="cx">
</span><span class="cx"> RefPtr<RegisterID> returnRegister = m_value ? generator.emitNodeInTailPosition(dst, m_value) : generator.emitLoad(dst, jsUndefined());
</span><del>-
</del><span class="cx"> generator.emitProfileType(returnRegister.get(), ProfileTypeBytecodeFunctionReturnStatement, divotStart(), divotEnd());
</span><span class="cx"> if (generator.isInFinallyBlock()) {
</span><span class="cx"> returnRegister = generator.emitMove(generator.newTemporary(), returnRegister.get());
</span><span class="lines">@@ -2972,96 +2966,27 @@
</span><span class="cx">
</span><span class="cx"> generator.emitProfileControlFlow(startStartOffset());
</span><span class="cx"> generator.emitDebugHook(DidEnterCallFrame, startLine(), startStartOffset(), startLineStartOffset());
</span><ins>+ emitStatementsBytecode(generator, generator.ignoredResult());
</ins><span class="cx">
</span><del>- switch (generator.parseMode()) {
- case SourceParseMode::GeneratorWrapperFunctionMode: {
- StatementNode* singleStatement = this->singleStatement();
- ASSERT(singleStatement->isExprStatement());
- ExprStatementNode* exprStatement = static_cast<ExprStatementNode*>(singleStatement);
- ExpressionNode* expr = exprStatement->expr();
- ASSERT(expr->isFuncExprNode());
- FuncExprNode* funcExpr = static_cast<FuncExprNode*>(expr);
</del><ins>+ StatementNode* singleStatement = this->singleStatement();
+ ReturnNode* returnNode = 0;
</ins><span class="cx">
</span><del>- RefPtr<RegisterID> next = generator.newTemporary();
- generator.emitNode(next.get(), funcExpr);
</del><ins>+ // Check for a return statement at the end of a function composed of a single block.
+ if (singleStatement && singleStatement->isBlock()) {
+ StatementNode* lastStatementInBlock = static_cast<BlockNode*>(singleStatement)->lastStatement();
+ if (lastStatementInBlock && lastStatementInBlock->isReturnNode())
+ returnNode = static_cast<ReturnNode*>(lastStatementInBlock);
+ }
</ins><span class="cx">
</span><del>- if (generator.superBinding() == SuperBinding::Needed) {
- RefPtr<RegisterID> homeObject = emitHomeObjectForCallee(generator);
- emitPutHomeObject(generator, next.get(), homeObject.get());
- }
-
- // FIXME: Currently, we just create an object and store generator related fields as its properties for ease.
- // But to make it efficient, we will introduce JSGenerator class, add opcode new_generator and use its C++ fields instead of these private properties.
- // https://bugs.webkit.org/show_bug.cgi?id=151545
-
- generator.emitDirectPutById(generator.generatorRegister(), generator.propertyNames().generatorNextPrivateName, next.get(), PropertyNode::KnownDirect);
-
- generator.emitDirectPutById(generator.generatorRegister(), generator.propertyNames().generatorThisPrivateName, generator.thisRegister(), PropertyNode::KnownDirect);
-
- RegisterID* initialState = generator.emitLoad(nullptr, jsNumber(0));
- generator.emitDirectPutById(generator.generatorRegister(), generator.propertyNames().generatorStatePrivateName, initialState, PropertyNode::KnownDirect);
-
- generator.emitDirectPutById(generator.generatorRegister(), generator.propertyNames().generatorFramePrivateName, generator.emitLoad(nullptr, jsNull()), PropertyNode::KnownDirect);
-
</del><ins>+ // If there is no return we must automatically insert one.
+ if (!returnNode) {
+ RegisterID* r0 = generator.isConstructor() ? generator.thisRegister() : generator.emitLoad(0, jsUndefined());
+ generator.emitProfileType(r0, ProfileTypeBytecodeFunctionReturnStatement); // Do not emit expression info for this profile because it's not in the user's source code.
</ins><span class="cx"> ASSERT(startOffset() >= lineStartOffset());
</span><span class="cx"> generator.emitDebugHook(WillLeaveCallFrame, lastLine(), startOffset(), lineStartOffset());
</span><del>- generator.emitReturn(generator.generatorRegister());
- break;
</del><ins>+ generator.emitReturn(r0);
+ return;
</ins><span class="cx"> }
</span><del>-
- case SourceParseMode::GeneratorBodyMode: {
- RefPtr<Label> generatorBodyLabel = generator.newLabel();
- {
- RefPtr<RegisterID> condition = generator.newTemporary();
- generator.emitEqualityOp(op_stricteq, condition.get(), generator.generatorResumeModeRegister(), generator.emitLoad(nullptr, jsNumber(static_cast<int32_t>(JSGeneratorFunction::GeneratorResumeMode::NormalMode))));
- generator.emitJumpIfTrue(condition.get(), generatorBodyLabel.get());
-
- RefPtr<Label> throwLabel = generator.newLabel();
- generator.emitEqualityOp(op_stricteq, condition.get(), generator.generatorResumeModeRegister(), generator.emitLoad(nullptr, jsNumber(static_cast<int32_t>(JSGeneratorFunction::GeneratorResumeMode::ThrowMode))));
- generator.emitJumpIfTrue(condition.get(), throwLabel.get());
-
- generator.emitReturn(generator.generatorValueRegister());
-
- generator.emitLabel(throwLabel.get());
- generator.emitThrow(generator.generatorValueRegister());
- }
-
- generator.emitLabel(generatorBodyLabel.get());
-
- emitStatementsBytecode(generator, generator.ignoredResult());
-
- RefPtr<Label> done = generator.newLabel();
- generator.emitLabel(done.get());
- generator.emitReturn(generator.emitLoad(nullptr, jsUndefined()));
- generator.endGenerator(done.get());
- break;
- }
-
- default: {
- emitStatementsBytecode(generator, generator.ignoredResult());
-
- StatementNode* singleStatement = this->singleStatement();
- ReturnNode* returnNode = 0;
-
- // Check for a return statement at the end of a function composed of a single block.
- if (singleStatement && singleStatement->isBlock()) {
- StatementNode* lastStatementInBlock = static_cast<BlockNode*>(singleStatement)->lastStatement();
- if (lastStatementInBlock && lastStatementInBlock->isReturnNode())
- returnNode = static_cast<ReturnNode*>(lastStatementInBlock);
- }
-
- // If there is no return we must automatically insert one.
- if (!returnNode) {
- RegisterID* r0 = generator.isConstructor() ? generator.thisRegister() : generator.emitLoad(0, jsUndefined());
- generator.emitProfileType(r0, ProfileTypeBytecodeFunctionReturnStatement); // Do not emit expression info for this profile because it's not in the user's source code.
- ASSERT(startOffset() >= lineStartOffset());
- generator.emitDebugHook(WillLeaveCallFrame, lastLine(), startOffset(), lineStartOffset());
- generator.emitReturn(r0);
- return;
- }
- break;
- }
- }
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // ------------------------------ FuncDeclNode ---------------------------------
</span><span class="lines">@@ -3088,24 +3013,11 @@
</span><span class="cx">
</span><span class="cx"> RegisterID* YieldExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
</span><span class="cx"> {
</span><del>- if (!delegate()) {
- RefPtr<RegisterID> arg = nullptr;
- if (argument()) {
- arg = generator.newTemporary();
- generator.emitNode(arg.get(), argument());
- } else
- arg = generator.emitLoad(nullptr, jsUndefined());
- RefPtr<RegisterID> value = generator.emitYield(arg.get());
- if (dst == generator.ignoredResult())
- return nullptr;
- return generator.emitMove(generator.finalDestination(dst), value.get());
- }
- RefPtr<RegisterID> arg = generator.newTemporary();
- generator.emitNode(arg.get(), argument());
- RefPtr<RegisterID> value = generator.emitDelegateYield(arg.get(), this);
</del><ins>+ // FIXME: This is just a stub. When completing ES6 Generators, we need to implement it.
+ generator.emitThrowTypeError(ASCIILiteral("Not implemented yet."));
</ins><span class="cx"> if (dst == generator.ignoredResult())
</span><del>- return nullptr;
- return generator.emitMove(generator.finalDestination(dst), value.get());
</del><ins>+ return 0;
+ return generator.emitLoad(dst, jsUndefined());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // ------------------------------ ClassDeclNode ---------------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> , m_constantNaN(graph.freeze(jsNumber(PNaN)))
</span><span class="cx"> , m_constantOne(graph.freeze(jsNumber(1)))
</span><span class="cx"> , m_numArguments(m_codeBlock->numParameters())
</span><del>- , m_numLocals(m_codeBlock->m_numCalleeLocals)
</del><ins>+ , m_numLocals(m_codeBlock->m_numCalleeRegisters)
</ins><span class="cx"> , m_parameterSlots(0)
</span><span class="cx"> , m_numPassedVarArgs(0)
</span><span class="cx"> , m_inlineStackTop(0)
</span><span class="lines">@@ -1413,7 +1413,7 @@
</span><span class="cx">
</span><span class="cx"> ensureLocals(
</span><span class="cx"> VirtualRegister(inlineCallFrameStart).toLocal() + 1 +
</span><del>- JSStack::CallFrameHeaderSize + codeBlock->m_numCalleeLocals);
</del><ins>+ JSStack::CallFrameHeaderSize + codeBlock->m_numCalleeRegisters);
</ins><span class="cx">
</span><span class="cx"> size_t argumentPositionStart = m_graph.m_argumentPositions.size();
</span><span class="cx">
</span><span class="lines">@@ -2927,7 +2927,7 @@
</span><span class="cx">
</span><span class="cx"> // Start with a register offset that corresponds to the last in-use register.
</span><span class="cx"> int registerOffset = virtualRegisterForLocal(
</span><del>- m_inlineStackTop->m_profiledBlock->m_numCalleeLocals - 1).offset();
</del><ins>+ m_inlineStackTop->m_profiledBlock->m_numCalleeRegisters - 1).offset();
</ins><span class="cx"> registerOffset -= numberOfParameters;
</span><span class="cx"> registerOffset -= JSStack::CallFrameHeaderSize;
</span><span class="cx">
</span><span class="lines">@@ -3096,7 +3096,7 @@
</span><span class="cx">
</span><span class="cx"> // Start with a register offset that corresponds to the last in-use register.
</span><span class="cx"> int registerOffset = virtualRegisterForLocal(
</span><del>- m_inlineStackTop->m_profiledBlock->m_numCalleeLocals - 1).offset();
</del><ins>+ m_inlineStackTop->m_profiledBlock->m_numCalleeRegisters - 1).offset();
</ins><span class="cx"> registerOffset -= numberOfParameters;
</span><span class="cx"> registerOffset -= JSStack::CallFrameHeaderSize;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGForAllKillsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGForAllKills.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGForAllKills.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/dfg/DFGForAllKills.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> const FastBitVector& liveBefore = fullLiveness.getLiveness(before.bytecodeIndex);
</span><span class="cx"> const FastBitVector& liveAfter = fullLiveness.getLiveness(after.bytecodeIndex);
</span><span class="cx">
</span><del>- for (unsigned relativeLocal = codeBlock->m_numCalleeLocals; relativeLocal--;) {
</del><ins>+ for (unsigned relativeLocal = codeBlock->m_numCalleeRegisters; relativeLocal--;) {
</ins><span class="cx"> if (liveBefore.get(relativeLocal) && !liveAfter.get(relativeLocal))
</span><span class="cx"> functor(virtualRegisterForLocal(relativeLocal) + stackOffset);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGGraphh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGGraph.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGGraph.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/dfg/DFGGraph.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -738,7 +738,7 @@
</span><span class="cx"> CodeBlock* codeBlock = baselineCodeBlockFor(inlineCallFrame);
</span><span class="cx"> FullBytecodeLiveness& fullLiveness = livenessFor(codeBlock);
</span><span class="cx"> const FastBitVector& liveness = fullLiveness.getLiveness(codeOriginPtr->bytecodeIndex);
</span><del>- for (unsigned relativeLocal = codeBlock->m_numCalleeLocals; relativeLocal--;) {
</del><ins>+ for (unsigned relativeLocal = codeBlock->m_numCalleeRegisters; relativeLocal--;) {
</ins><span class="cx"> VirtualRegister reg = stackOffset + virtualRegisterForLocal(relativeLocal);
</span><span class="cx">
</span><span class="cx"> // Don't report if our callee already reported.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOSREntrypointCreationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -93,8 +93,8 @@
</span><span class="cx"> // We'd really like to use an unset origin, but ThreadedCPS won't allow that.
</span><span class="cx"> NodeOrigin origin = NodeOrigin(CodeOrigin(0), CodeOrigin(0), false);
</span><span class="cx">
</span><del>- Vector<Node*> locals(baseline->m_numCalleeLocals);
- for (int local = 0; local < baseline->m_numCalleeLocals; ++local) {
</del><ins>+ Vector<Node*> locals(baseline->m_numCalleeRegisters);
+ for (int local = 0; local < baseline->m_numCalleeRegisters; ++local) {
</ins><span class="cx"> Node* previousHead = target->variablesAtHead.local(local);
</span><span class="cx"> if (!previousHead)
</span><span class="cx"> continue;
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> m_graph.m_arguments[argument] = node;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- for (int local = 0; local < baseline->m_numCalleeLocals; ++local) {
</del><ins>+ for (int local = 0; local < baseline->m_numCalleeRegisters; ++local) {
</ins><span class="cx"> Node* previousHead = target->variablesAtHead.local(local);
</span><span class="cx"> if (!previousHead)
</span><span class="cx"> continue;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGVariableEventStreamcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -123,9 +123,9 @@
</span><span class="cx">
</span><span class="cx"> unsigned numVariables;
</span><span class="cx"> if (codeOrigin.inlineCallFrame)
</span><del>- numVariables = baselineCodeBlockForInlineCallFrame(codeOrigin.inlineCallFrame)->m_numCalleeLocals + VirtualRegister(codeOrigin.inlineCallFrame->stackOffset).toLocal() + 1;
</del><ins>+ numVariables = baselineCodeBlockForInlineCallFrame(codeOrigin.inlineCallFrame)->m_numCalleeRegisters + VirtualRegister(codeOrigin.inlineCallFrame->stackOffset).toLocal() + 1;
</ins><span class="cx"> else
</span><del>- numVariables = baselineCodeBlock->m_numCalleeLocals;
</del><ins>+ numVariables = baselineCodeBlock->m_numCalleeRegisters;
</ins><span class="cx">
</span><span class="cx"> // Crazy special case: if we're at index == 0 then this must be an argument check
</span><span class="cx"> // failure, in which case all variables are already set up. The recoveries should
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLForOSREntryJITCodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -45,9 +45,9 @@
</span><span class="cx"> return this;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void ForOSREntryJITCode::initializeEntryBuffer(VM& vm, unsigned numCalleeLocals)
</del><ins>+void ForOSREntryJITCode::initializeEntryBuffer(VM& vm, unsigned numCalleeRegisters)
</ins><span class="cx"> {
</span><del>- m_entryBuffer = vm.scratchBufferForSize(numCalleeLocals * sizeof(EncodedJSValue));
</del><ins>+ m_entryBuffer = vm.scratchBufferForSize(numCalleeRegisters * sizeof(EncodedJSValue));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLForOSREntryJITCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> ForOSREntryJITCode();
</span><span class="cx"> ~ForOSREntryJITCode();
</span><span class="cx">
</span><del>- void initializeEntryBuffer(VM&, unsigned numCalleeLocals);
</del><ins>+ void initializeEntryBuffer(VM&, unsigned numCalleeRegisters);
</ins><span class="cx"> ScratchBuffer* entryBuffer() const { return m_entryBuffer; }
</span><span class="cx">
</span><span class="cx"> void setBytecodeIndex(unsigned value) { m_bytecodeIndex = value; }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOSREntrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOSREntry.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOSREntry.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/ftl/FTLOSREntry.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RELEASE_ASSERT(
</span><del>- static_cast<int>(values.numberOfLocals()) == baseline->m_numCalleeLocals);
</del><ins>+ static_cast<int>(values.numberOfLocals()) == baseline->m_numCalleeRegisters);
</ins><span class="cx">
</span><span class="cx"> EncodedJSValue* scratch = static_cast<EncodedJSValue*>(
</span><span class="cx"> entryCode->entryBuffer()->dataBuffer());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLStatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLState.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLState.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/ftl/FTLState.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> }
</span><span class="cx"> case FTLForOSREntryMode: {
</span><span class="cx"> RefPtr<ForOSREntryJITCode> code = adoptRef(new ForOSREntryJITCode());
</span><del>- code->initializeEntryBuffer(graph.m_vm, graph.m_profiledBlock->m_numCalleeLocals);
</del><ins>+ code->initializeEntryBuffer(graph.m_vm, graph.m_profiledBlock->m_numCalleeRegisters);
</ins><span class="cx"> code->setBytecodeIndex(graph.m_plan.osrEntryBytecodeIndex);
</span><span class="cx"> jitCode = code;
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMarkedBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MarkedBlock.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MarkedBlock.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/heap/MarkedBlock.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -155,7 +155,6 @@
</span><span class="cx"> bool testAndSetMarked(const void*);
</span><span class="cx"> bool isLive(const JSCell*);
</span><span class="cx"> bool isLiveCell(const void*);
</span><del>- bool isAtom(const void*);
</del><span class="cx"> bool isMarkedOrNewlyAllocated(const JSCell*);
</span><span class="cx"> void setMarked(const void*);
</span><span class="cx"> void clearMarked(const void*);
</span><span class="lines">@@ -389,7 +388,7 @@
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- inline bool MarkedBlock::isAtom(const void* p)
</del><ins>+ inline bool MarkedBlock::isLiveCell(const void* p)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(MarkedBlock::isAtomAligned(p));
</span><span class="cx"> size_t atomNumber = this->atomNumber(p);
</span><span class="lines">@@ -400,13 +399,7 @@
</span><span class="cx"> return false;
</span><span class="cx"> if (atomNumber >= m_endAtom) // Filters pointers into invalid cells out of the range.
</span><span class="cx"> return false;
</span><del>- return true;
- }
</del><span class="cx">
</span><del>- inline bool MarkedBlock::isLiveCell(const void* p)
- {
- if (!isAtom(p))
- return false;
</del><span class="cx"> return isLive(static_cast<const JSCell*>(p));
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterInterpretercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -153,17 +153,8 @@
</span><span class="cx"> CallFrame* callerFrame = callFrame->callerFrame();
</span><span class="cx"> CodeBlock* callerCodeBlock = callerFrame->codeBlock();
</span><span class="cx"> JSScope* callerScopeChain = callerFrame->uncheckedR(callerCodeBlock->scopeRegister().offset()).Register::scope();
</span><del>- UnlinkedCodeBlock* callerUnlinkedCodeBlock = callerCodeBlock->unlinkedCodeBlock();
</del><ins>+ EvalExecutable* eval = callerCodeBlock->evalCodeCache().tryGet(callerCodeBlock->isStrictMode(), programSource, callerScopeChain);
</ins><span class="cx">
</span><del>- ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded;
- if (callerUnlinkedCodeBlock->constructorKind() == ConstructorKind::Derived)
- thisTDZMode = ThisTDZMode::AlwaysCheck;
- if (callerUnlinkedCodeBlock->parseMode() == SourceParseMode::GeneratorBodyMode && callerUnlinkedCodeBlock->generatorThisMode() == GeneratorThisMode::Empty)
- thisTDZMode = ThisTDZMode::AlwaysCheck;
-
- SourceCode sourceCode(makeSource(programSource));
- EvalExecutable* eval = callerCodeBlock->evalCodeCache().tryGet(callerCodeBlock->isStrictMode(), sourceCode, thisTDZMode, callerScopeChain);
-
</del><span class="cx"> if (!eval) {
</span><span class="cx"> if (!callerCodeBlock->isStrictMode()) {
</span><span class="cx"> if (programSource.is8Bit()) {
</span><span class="lines">@@ -180,7 +171,8 @@
</span><span class="cx"> // If the literal parser bailed, it should not have thrown exceptions.
</span><span class="cx"> ASSERT(!callFrame->vm().exception());
</span><span class="cx">
</span><del>- eval = callerCodeBlock->evalCodeCache().getSlow(callFrame, callerCodeBlock, callerCodeBlock->isStrictMode(), thisTDZMode, sourceCode, callerScopeChain);
</del><ins>+ ThisTDZMode thisTDZMode = callerCodeBlock->unlinkedCodeBlock()->constructorKind() == ConstructorKind::Derived ? ThisTDZMode::AlwaysCheck : ThisTDZMode::CheckIfNeeded;
+ eval = callerCodeBlock->evalCodeCache().getSlow(callFrame, callerCodeBlock, callerCodeBlock->isStrictMode(), thisTDZMode, programSource, callerScopeChain);
</ins><span class="cx"> if (!eval)
</span><span class="cx"> return jsUndefined();
</span><span class="cx"> }
</span><span class="lines">@@ -418,7 +410,7 @@
</span><span class="cx"> }
</span><span class="cx"> dataLogF("-----------------------------------------------------------------------------\n");
</span><span class="cx">
</span><del>- end = it - codeBlock->m_numCalleeLocals + codeBlock->m_numVars;
</del><ins>+ end = it - codeBlock->m_numCalleeRegisters + codeBlock->m_numVars;
</ins><span class="cx"> if (it != end) {
</span><span class="cx"> do {
</span><span class="cx"> JSValue v = (*it).jsValue();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/jit/JIT.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -215,8 +215,6 @@
</span><span class="cx"> DEFINE_OP(op_get_rest_length)
</span><span class="cx"> DEFINE_OP(op_check_tdz)
</span><span class="cx"> DEFINE_OP(op_assert)
</span><del>- DEFINE_OP(op_save)
- DEFINE_OP(op_resume)
</del><span class="cx"> DEFINE_OP(op_debug)
</span><span class="cx"> DEFINE_OP(op_del_by_id)
</span><span class="cx"> DEFINE_OP(op_div)
</span><span class="lines">@@ -263,8 +261,6 @@
</span><span class="cx"> DEFINE_OP(op_new_array_buffer)
</span><span class="cx"> DEFINE_OP(op_new_func)
</span><span class="cx"> DEFINE_OP(op_new_func_exp)
</span><del>- DEFINE_OP(op_new_generator_func)
- DEFINE_OP(op_new_generator_func_exp)
</del><span class="cx"> DEFINE_OP(op_new_arrow_func_exp)
</span><span class="cx"> DEFINE_OP(op_new_object)
</span><span class="cx"> DEFINE_OP(op_new_regexp)
</span><span class="lines">@@ -768,9 +764,9 @@
</span><span class="cx">
</span><span class="cx"> unsigned JIT::frameRegisterCountFor(CodeBlock* codeBlock)
</span><span class="cx"> {
</span><del>- ASSERT(static_cast<unsigned>(codeBlock->m_numCalleeLocals) == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), static_cast<unsigned>(codeBlock->m_numCalleeLocals)));
</del><ins>+ ASSERT(static_cast<unsigned>(codeBlock->m_numCalleeRegisters) == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), static_cast<unsigned>(codeBlock->m_numCalleeRegisters)));
</ins><span class="cx">
</span><del>- return roundLocalRegisterCountForFramePointerOffset(codeBlock->m_numCalleeLocals + maxFrameExtentForSlowPathCallInRegisters);
</del><ins>+ return roundLocalRegisterCountForFramePointerOffset(codeBlock->m_numCalleeRegisters + maxFrameExtentForSlowPathCallInRegisters);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int JIT::stackPointerOffsetFor(CodeBlock* codeBlock)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/jit/JIT.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -494,8 +494,6 @@
</span><span class="cx"> void emit_op_get_rest_length(Instruction*);
</span><span class="cx"> void emit_op_check_tdz(Instruction*);
</span><span class="cx"> void emit_op_assert(Instruction*);
</span><del>- void emit_op_save(Instruction*);
- void emit_op_resume(Instruction*);
</del><span class="cx"> void emit_op_debug(Instruction*);
</span><span class="cx"> void emit_op_del_by_id(Instruction*);
</span><span class="cx"> void emit_op_div(Instruction*);
</span><span class="lines">@@ -544,8 +542,6 @@
</span><span class="cx"> void emit_op_new_array_buffer(Instruction*);
</span><span class="cx"> void emit_op_new_func(Instruction*);
</span><span class="cx"> void emit_op_new_func_exp(Instruction*);
</span><del>- void emit_op_new_generator_func(Instruction*);
- void emit_op_new_generator_func_exp(Instruction*);
</del><span class="cx"> void emit_op_new_arrow_func_exp(Instruction*);
</span><span class="cx"> void emit_op_new_object(Instruction*);
</span><span class="cx"> void emit_op_new_regexp(Instruction*);
</span><span class="lines">@@ -665,7 +661,6 @@
</span><span class="cx"> void emitRightShift(Instruction*, bool isUnsigned);
</span><span class="cx"> void emitRightShiftSlowCase(Instruction*, Vector<SlowCaseEntry>::iterator&, bool isUnsigned);
</span><span class="cx">
</span><del>- void emitNewFuncCommon(Instruction*);
</del><span class="cx"> void emitNewFuncExprCommon(Instruction*);
</span><span class="cx"> void emitVarInjectionCheck(bool needsVarInjectionChecks);
</span><span class="cx"> void emitResolveClosure(int dst, int scope, bool needsVarInjectionChecks, unsigned depth);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -967,7 +967,7 @@
</span><span class="cx"> callOperation(operationNewRegexp, currentInstruction[1].u.operand, m_codeBlock->regexp(currentInstruction[2].u.operand));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JIT::emitNewFuncCommon(Instruction* currentInstruction)
</del><ins>+void JIT::emit_op_new_func(Instruction* currentInstruction)
</ins><span class="cx"> {
</span><span class="cx"> Jump lazyJump;
</span><span class="cx"> int dst = currentInstruction[1].u.operand;
</span><span class="lines">@@ -978,26 +978,14 @@
</span><span class="cx"> emitLoadPayload(currentInstruction[2].u.operand, regT0);
</span><span class="cx"> #endif
</span><span class="cx"> FunctionExecutable* funcExec = m_codeBlock->functionDecl(currentInstruction[3].u.operand);
</span><del>-
- OpcodeID opcodeID = m_vm->interpreter->getOpcodeID(currentInstruction->u.opcode);
- if (opcodeID == op_new_func)
- callOperation(operationNewFunction, dst, regT0, funcExec);
- else {
- ASSERT(opcodeID == op_new_generator_func);
- callOperation(operationNewGeneratorFunction, dst, regT0, funcExec);
- }
</del><ins>+ callOperation(operationNewFunction, dst, regT0, funcExec);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void JIT::emit_op_new_func(Instruction* currentInstruction)
</del><ins>+void JIT::emit_op_new_func_exp(Instruction* currentInstruction)
</ins><span class="cx"> {
</span><del>- emitNewFuncCommon(currentInstruction);
</del><ins>+ emitNewFuncExprCommon(currentInstruction);
</ins><span class="cx"> }
</span><del>-
-void JIT::emit_op_new_generator_func(Instruction* currentInstruction)
-{
- emitNewFuncCommon(currentInstruction);
-}
-
</del><ins>+
</ins><span class="cx"> void JIT::emitNewFuncExprCommon(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx"> OpcodeID opcodeID = m_vm->interpreter->getOpcodeID(currentInstruction->u.opcode);
</span><span class="lines">@@ -1030,27 +1018,11 @@
</span><span class="cx"> #else
</span><span class="cx"> callOperation(operationNewArrowFunction, dst, regT0, function, regT3, regT2);
</span><span class="cx"> #endif
</span><del>- else {
- if (opcodeID == op_new_func_exp)
- callOperation(operationNewFunction, dst, regT0, function);
- else {
- ASSERT(opcodeID == op_new_generator_func_exp);
- callOperation(operationNewGeneratorFunction, dst, regT0, function);
- }
- }
</del><ins>+ else
+ callOperation(operationNewFunction, dst, regT0, function);
</ins><span class="cx"> done.link(this);
</span><span class="cx"> }
</span><del>-
-void JIT::emit_op_new_func_exp(Instruction* currentInstruction)
-{
- emitNewFuncExprCommon(currentInstruction);
-}
-
-void JIT::emit_op_new_generator_func_exp(Instruction* currentInstruction)
-{
- emitNewFuncExprCommon(currentInstruction);
-}
-
</del><ins>+
</ins><span class="cx"> void JIT::emit_op_new_arrow_func_exp(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx"> emitNewFuncExprCommon(currentInstruction);
</span><span class="lines">@@ -1462,18 +1434,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JIT::emit_op_save(Instruction* currentInstruction)
-{
- JITSlowPathCall slowPathCall(this, currentInstruction, slow_path_save);
- slowPathCall.call();
-}
-
-void JIT::emit_op_resume(Instruction* currentInstruction)
-{
- JITSlowPathCall slowPathCall(this, currentInstruction, slow_path_resume);
- slowPathCall.call();
-}
-
</del><span class="cx"> } // namespace JSC
</span><span class="cx">
</span><span class="cx"> #endif // ENABLE(JIT)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -45,7 +45,6 @@
</span><span class="cx"> #include "JITToDFGDeferredCompilationCallback.h"
</span><span class="cx"> #include "JSArrowFunction.h"
</span><span class="cx"> #include "JSCInlines.h"
</span><del>-#include "JSGeneratorFunction.h"
</del><span class="cx"> #include "JSGlobalObjectFunctions.h"
</span><span class="cx"> #include "JSLexicalEnvironment.h"
</span><span class="cx"> #include "JSPropertyNameEnumerator.h"
</span><span class="lines">@@ -988,43 +987,24 @@
</span><span class="cx"> return JSValue::encode(constructArrayWithSizeQuirk(exec, profile, exec->lexicalGlobalObject(), sizeValue));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-}
-
-template<typename FunctionType>
-static EncodedJSValue operationNewFunctionCommon(ExecState* exec, JSScope* scope, JSCell* functionExecutable, bool isInvalidated)
</del><ins>+EncodedJSValue JIT_OPERATION operationNewFunction(ExecState* exec, JSScope* scope, JSCell* functionExecutable)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(functionExecutable->inherits(FunctionExecutable::info()));
</span><span class="cx"> VM& vm = exec->vm();
</span><span class="cx"> NativeCallFrameTracer tracer(&vm, exec);
</span><del>- if (isInvalidated)
- return JSValue::encode(FunctionType::createWithInvalidatedReallocationWatchpoint(vm, static_cast<FunctionExecutable*>(functionExecutable), scope));
- return JSValue::encode(FunctionType::create(vm, static_cast<FunctionExecutable*>(functionExecutable), scope));
</del><ins>+ return JSValue::encode(JSFunction::create(vm, static_cast<FunctionExecutable*>(functionExecutable), scope));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-extern "C" {
-
-EncodedJSValue JIT_OPERATION operationNewFunction(ExecState* exec, JSScope* scope, JSCell* functionExecutable)
-{
- return operationNewFunctionCommon<JSFunction>(exec, scope, functionExecutable, false);
-}
-
</del><span class="cx"> EncodedJSValue JIT_OPERATION operationNewFunctionWithInvalidatedReallocationWatchpoint(ExecState* exec, JSScope* scope, JSCell* functionExecutable)
</span><span class="cx"> {
</span><del>- return operationNewFunctionCommon<JSFunction>(exec, scope, functionExecutable, true);
</del><ins>+ ASSERT(functionExecutable->inherits(FunctionExecutable::info()));
+ VM& vm = exec->vm();
+ NativeCallFrameTracer tracer(&vm, exec);
+ return JSValue::encode(JSFunction::createWithInvalidatedReallocationWatchpoint(vm, static_cast<FunctionExecutable*>(functionExecutable), scope));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue JIT_OPERATION operationNewGeneratorFunction(ExecState* exec, JSScope* scope, JSCell* functionExecutable)
</del><ins>+EncodedJSValue static operationNewFunctionCommon(ExecState* exec, JSScope* scope, JSCell* functionExecutable, EncodedJSValue thisValue, bool isInvalidated)
</ins><span class="cx"> {
</span><del>- return operationNewFunctionCommon<JSGeneratorFunction>(exec, scope, functionExecutable, false);
-}
-
-EncodedJSValue JIT_OPERATION operationNewGeneratorFunctionWithInvalidatedReallocationWatchpoint(ExecState* exec, JSScope* scope, JSCell* functionExecutable)
-{
- return operationNewFunctionCommon<JSGeneratorFunction>(exec, scope, functionExecutable, true);
-}
-
-EncodedJSValue static operationNewArrowFunctionCommon(ExecState* exec, JSScope* scope, JSCell* functionExecutable, EncodedJSValue thisValue, bool isInvalidated)
-{
</del><span class="cx"> ASSERT(functionExecutable->inherits(FunctionExecutable::info()));
</span><span class="cx"> FunctionExecutable* executable = static_cast<FunctionExecutable*>(functionExecutable);
</span><span class="cx"> VM& vm = exec->vm();
</span><span class="lines">@@ -1039,12 +1019,12 @@
</span><span class="cx">
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationNewArrowFunctionWithInvalidatedReallocationWatchpoint(ExecState* exec, JSScope* scope, JSCell* functionExecutable, EncodedJSValue thisValue)
</span><span class="cx"> {
</span><del>- return operationNewArrowFunctionCommon(exec, scope, functionExecutable, thisValue, true);
</del><ins>+ return operationNewFunctionCommon(exec, scope, functionExecutable, thisValue, true);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationNewArrowFunction(ExecState* exec, JSScope* scope, JSCell* functionExecutable, EncodedJSValue thisValue)
</span><span class="cx"> {
</span><del>- return operationNewArrowFunctionCommon(exec, scope, functionExecutable, thisValue, false);
</del><ins>+ return operationNewFunctionCommon(exec, scope, functionExecutable, thisValue, false);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSCell* JIT_OPERATION operationNewObject(ExecState* exec, Structure* structure)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -301,8 +301,6 @@
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationNewArrayWithSizeAndProfile(ExecState*, ArrayAllocationProfile*, EncodedJSValue size) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationNewFunction(ExecState*, JSScope*, JSCell*) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationNewFunctionWithInvalidatedReallocationWatchpoint(ExecState*, JSScope*, JSCell*) WTF_INTERNAL;
</span><del>-EncodedJSValue JIT_OPERATION operationNewGeneratorFunction(ExecState*, JSScope*, JSCell*) WTF_INTERNAL;
-EncodedJSValue JIT_OPERATION operationNewGeneratorFunctionWithInvalidatedReallocationWatchpoint(ExecState*, JSScope*, JSCell*) WTF_INTERNAL;
</del><span class="cx"> EncodedJSValue JIT_OPERATION operationNewArrowFunction(ExecState*, JSScope*, JSCell*, EncodedJSValue) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationNewArrowFunctionWithInvalidatedReallocationWatchpoint(ExecState*, JSScope*, JSCell*, EncodedJSValue) WTF_INTERNAL;
</span><span class="cx"> JSCell* JIT_OPERATION operationNewObject(ExecState*, Structure*) WTF_INTERNAL;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntEntrypointcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntEntrypoint.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntEntrypoint.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/llint/LLIntEntrypoint.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -134,9 +134,9 @@
</span><span class="cx">
</span><span class="cx"> unsigned frameRegisterCountFor(CodeBlock* codeBlock)
</span><span class="cx"> {
</span><del>- ASSERT(static_cast<unsigned>(codeBlock->m_numCalleeLocals) == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), static_cast<unsigned>(codeBlock->m_numCalleeLocals)));
</del><ins>+ ASSERT(static_cast<unsigned>(codeBlock->m_numCalleeRegisters) == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), static_cast<unsigned>(codeBlock->m_numCalleeRegisters)));
</ins><span class="cx">
</span><del>- return roundLocalRegisterCountForFramePointerOffset(codeBlock->m_numCalleeLocals + maxFrameExtentForSlowPathCallInRegisters);
</del><ins>+ return roundLocalRegisterCountForFramePointerOffset(codeBlock->m_numCalleeRegisters + maxFrameExtentForSlowPathCallInRegisters);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } } // namespace JSC::LLInt
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> #include "JSLexicalEnvironment.h"
</span><span class="cx"> #include "JSCInlines.h"
</span><span class="cx"> #include "JSCJSValue.h"
</span><del>-#include "JSGeneratorFunction.h"
</del><span class="cx"> #include "JSGlobalObjectFunctions.h"
</span><span class="cx"> #include "JSStackInlines.h"
</span><span class="cx"> #include "JSString.h"
</span><span class="lines">@@ -225,9 +224,9 @@
</span><span class="cx"> JSFunction* callee = jsCast<JSFunction*>(exec->callee());
</span><span class="cx"> FunctionExecutable* executable = callee->jsExecutable();
</span><span class="cx"> CodeBlock* codeBlock = executable->codeBlockFor(kind);
</span><del>- dataLogF("%p / %p: in %s of function %p, executable %p; numVars = %u, numParameters = %u, numCalleeLocals = %u, caller = %p.\n",
</del><ins>+ dataLogF("%p / %p: in %s of function %p, executable %p; numVars = %u, numParameters = %u, numCalleeRegisters = %u, caller = %p.\n",
</ins><span class="cx"> codeBlock, exec, comment, callee, executable,
</span><del>- codeBlock->m_numVars, codeBlock->numParameters(), codeBlock->m_numCalleeLocals,
</del><ins>+ codeBlock->m_numVars, codeBlock->numParameters(), codeBlock->m_numCalleeRegisters,
</ins><span class="cx"> exec->callerFrame());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -459,7 +458,7 @@
</span><span class="cx"> #if LLINT_SLOW_PATH_TRACING
</span><span class="cx"> dataLogF("Checking stack height with exec = %p.\n", exec);
</span><span class="cx"> dataLogF("CodeBlock = %p.\n", exec->codeBlock());
</span><del>- dataLogF("Num callee registers = %u.\n", exec->codeBlock()->m_numCalleeLocals);
</del><ins>+ dataLogF("Num callee registers = %u.\n", exec->codeBlock()->m_numCalleeRegisters);
</ins><span class="cx"> dataLogF("Num vars = %u.\n", exec->codeBlock()->m_numVars);
</span><span class="cx">
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="lines">@@ -1042,18 +1041,6 @@
</span><span class="cx"> LLINT_RETURN(JSFunction::create(vm, codeBlock->functionDecl(pc[3].u.operand), scope));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-LLINT_SLOW_PATH_DECL(slow_path_new_generator_func)
-{
- LLINT_BEGIN();
- CodeBlock* codeBlock = exec->codeBlock();
- ASSERT(codeBlock->codeType() != FunctionCode || !codeBlock->needsActivation() || exec->hasActivation());
- JSScope* scope = exec->uncheckedR(pc[2].u.operand).Register::scope();
-#if LLINT_SLOW_PATH_TRACING
- dataLogF("Creating function!\n");
-#endif
- LLINT_RETURN(JSGeneratorFunction::create(vm, codeBlock->functionDecl(pc[3].u.operand), scope));
-}
-
</del><span class="cx"> LLINT_SLOW_PATH_DECL(slow_path_new_func_exp)
</span><span class="cx"> {
</span><span class="cx"> LLINT_BEGIN();
</span><span class="lines">@@ -1065,17 +1052,6 @@
</span><span class="cx"> LLINT_RETURN(JSFunction::create(vm, executable, scope));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-LLINT_SLOW_PATH_DECL(slow_path_new_generator_func_exp)
-{
- LLINT_BEGIN();
-
- CodeBlock* codeBlock = exec->codeBlock();
- JSScope* scope = exec->uncheckedR(pc[2].u.operand).Register::scope();
- FunctionExecutable* executable = codeBlock->functionExpr(pc[3].u.operand);
-
- LLINT_RETURN(JSGeneratorFunction::create(vm, executable, scope));
-}
-
</del><span class="cx"> LLINT_SLOW_PATH_DECL(slow_path_new_arrow_func_exp)
</span><span class="cx"> {
</span><span class="cx"> LLINT_BEGIN();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -99,8 +99,6 @@
</span><span class="cx"> LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_switch_string);
</span><span class="cx"> LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_func);
</span><span class="cx"> LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_func_exp);
</span><del>-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_generator_func);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_generator_func_exp);
</del><span class="cx"> LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_arrow_func_exp);
</span><span class="cx"> LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_call);
</span><span class="cx"> LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_construct);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -697,7 +697,7 @@
</span><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> macro getFrameRegisterSizeForCodeBlock(codeBlock, size)
</span><del>- loadi CodeBlock::m_numCalleeLocals[codeBlock], size
</del><ins>+ loadi CodeBlock::m_numCalleeRegisters[codeBlock], size
</ins><span class="cx"> lshiftp 3, size
</span><span class="cx"> addp maxFrameExtentForSlowPathCall, size
</span><span class="cx"> end
</span><span class="lines">@@ -1227,12 +1227,6 @@
</span><span class="cx"> dispatch(4)
</span><span class="cx">
</span><span class="cx">
</span><del>-_llint_op_new_generator_func:
- traceExecution()
- callSlowPath(_llint_slow_path_new_generator_func)
- dispatch(4)
-
-
</del><span class="cx"> _llint_op_new_array:
</span><span class="cx"> traceExecution()
</span><span class="cx"> callSlowPath(_llint_slow_path_new_array)
</span><span class="lines">@@ -1464,11 +1458,6 @@
</span><span class="cx"> callSlowPath(_llint_slow_path_new_func_exp)
</span><span class="cx"> dispatch(4)
</span><span class="cx">
</span><del>-_llint_op_new_generator_func_exp:
- traceExecution()
- callSlowPath(_llint_slow_path_new_generator_func_exp)
- dispatch(4)
-
</del><span class="cx"> _llint_op_new_arrow_func_exp:
</span><span class="cx"> traceExecution()
</span><span class="cx"> callSlowPath(_llint_slow_path_new_arrow_func_exp)
</span><span class="lines">@@ -1584,18 +1573,6 @@
</span><span class="cx"> dispatch(3)
</span><span class="cx">
</span><span class="cx">
</span><del>-_llint_op_save:
- traceExecution()
- callSlowPath(_slow_path_save)
- dispatch(4)
-
-
-_llint_op_resume:
- traceExecution()
- callSlowPath(_slow_path_resume)
- dispatch(3)
-
-
</del><span class="cx"> _llint_op_create_lexical_environment:
</span><span class="cx"> traceExecution()
</span><span class="cx"> callSlowPath(_slow_path_create_lexical_environment)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserASTBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ASTBuilder.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ASTBuilder.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/ASTBuilder.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -341,11 +341,9 @@
</span><span class="cx"> return new (m_parserArena) YieldExprNode(location, nullptr, /* delegate */ false);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- YieldExprNode* createYield(const JSTokenLocation& location, ExpressionNode* argument, bool delegate, const JSTextPosition& start, const JSTextPosition& divot, const JSTextPosition& end)
</del><ins>+ YieldExprNode* createYield(const JSTokenLocation& location, ExpressionNode* argument, bool delegate)
</ins><span class="cx"> {
</span><del>- YieldExprNode* node = new (m_parserArena) YieldExprNode(location, argument, delegate);
- setExceptionLocation(node, start, divot, end);
- return node;
</del><ins>+ return new (m_parserArena) YieldExprNode(location, argument, delegate);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ClassExprNode* createClassExpr(const JSTokenLocation& location, const Identifier& name, VariableEnvironment& classEnvironment, ExpressionNode* constructor,
</span><span class="lines">@@ -366,12 +364,12 @@
</span><span class="cx"> const JSTokenLocation& startLocation, const JSTokenLocation& endLocation,
</span><span class="cx"> unsigned startColumn, unsigned endColumn, int functionKeywordStart,
</span><span class="cx"> int functionNameStart, int parametersStart, bool inStrictContext,
</span><del>- ConstructorKind constructorKind, SuperBinding superBinding, unsigned parameterCount, SourceParseMode mode, bool isArrowFunctionBodyExpression)
</del><ins>+ ConstructorKind constructorKind, unsigned parameterCount, SourceParseMode mode, bool isArrowFunction, bool isArrowFunctionBodyExpression)
</ins><span class="cx"> {
</span><span class="cx"> return new (m_parserArena) FunctionMetadataNode(
</span><span class="cx"> m_parserArena, startLocation, endLocation, startColumn, endColumn,
</span><span class="cx"> functionKeywordStart, functionNameStart, parametersStart,
</span><del>- inStrictContext, constructorKind, superBinding, parameterCount, mode, isArrowFunctionBodyExpression);
</del><ins>+ inStrictContext, constructorKind, parameterCount, mode, isArrowFunction, isArrowFunctionBodyExpression);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ExpressionNode* createArrowFunctionExpr(const JSTokenLocation& location, const ParserFunctionInfo<ASTBuilder>& functionInfo)
</span><span class="lines">@@ -893,9 +891,6 @@
</span><span class="cx"> {
</span><span class="cx"> node->setStartOffset(offset);
</span><span class="cx"> }
</span><del>-
-
- void propagateArgumentsUse() { usesArguments(); }
</del><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> struct Scope {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/Nodes.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> ParserArena&, const JSTokenLocation& startLocation,
</span><span class="cx"> const JSTokenLocation& endLocation, unsigned startColumn, unsigned endColumn,
</span><span class="cx"> int functionKeywordStart, int functionNameStart, int parametersStart, bool isInStrictContext,
</span><del>- ConstructorKind constructorKind, SuperBinding superBinding, unsigned parameterCount, SourceParseMode mode, bool isArrowFunctionBodyExpression)
</del><ins>+ ConstructorKind constructorKind, unsigned parameterCount, SourceParseMode mode, bool isArrowFunction, bool isArrowFunctionBodyExpression)
</ins><span class="cx"> : Node(endLocation)
</span><span class="cx"> , m_startColumn(startColumn)
</span><span class="cx"> , m_endColumn(endColumn)
</span><span class="lines">@@ -162,11 +162,10 @@
</span><span class="cx"> , m_parameterCount(parameterCount)
</span><span class="cx"> , m_parseMode(mode)
</span><span class="cx"> , m_isInStrictContext(isInStrictContext)
</span><del>- , m_superBinding(static_cast<unsigned>(superBinding))
</del><span class="cx"> , m_constructorKind(static_cast<unsigned>(constructorKind))
</span><ins>+ , m_isArrowFunction(isArrowFunction)
</ins><span class="cx"> , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)
</span><span class="cx"> {
</span><del>- ASSERT(m_superBinding == static_cast<unsigned>(superBinding));
</del><span class="cx"> ASSERT(m_constructorKind == static_cast<unsigned>(constructorKind));
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/Nodes.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1817,7 +1817,7 @@
</span><span class="cx"> ParserArena&, const JSTokenLocation& start, const JSTokenLocation& end,
</span><span class="cx"> unsigned startColumn, unsigned endColumn, int functionKeywordStart,
</span><span class="cx"> int functionNameStart, int parametersStart, bool isInStrictContext,
</span><del>- ConstructorKind, SuperBinding, unsigned, SourceParseMode, bool isArrowFunctionBodyExpression);
</del><ins>+ ConstructorKind, unsigned, SourceParseMode, bool isArrowFunction, bool isArrowFunctionBodyExpression);
</ins><span class="cx">
</span><span class="cx"> void finishParsing(const SourceCode&, const Identifier&, FunctionMode);
</span><span class="cx">
</span><span class="lines">@@ -1842,8 +1842,8 @@
</span><span class="cx">
</span><span class="cx"> int startStartOffset() const { return m_startStartOffset; }
</span><span class="cx"> bool isInStrictContext() const { return m_isInStrictContext; }
</span><del>- SuperBinding superBinding() { return static_cast<SuperBinding>(m_superBinding); }
</del><span class="cx"> ConstructorKind constructorKind() { return static_cast<ConstructorKind>(m_constructorKind); }
</span><ins>+ bool isArrowFunction() const { return m_isArrowFunction; }
</ins><span class="cx"> bool isArrowFunctionBodyExpression() const { return m_isArrowFunctionBodyExpression; }
</span><span class="cx">
</span><span class="cx"> void setLoc(unsigned firstLine, unsigned lastLine, int startOffset, int lineStartOffset)
</span><span class="lines">@@ -1869,8 +1869,8 @@
</span><span class="cx"> int m_lastLine;
</span><span class="cx"> SourceParseMode m_parseMode;
</span><span class="cx"> unsigned m_isInStrictContext : 1;
</span><del>- unsigned m_superBinding : 1;
</del><span class="cx"> unsigned m_constructorKind : 2;
</span><ins>+ unsigned m_isArrowFunction : 1;
</ins><span class="cx"> unsigned m_isArrowFunctionBodyExpression : 1;
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -1932,7 +1932,7 @@
</span><span class="cx"> virtual bool isArrowFuncExprNode() const override { return true; }
</span><span class="cx"> };
</span><span class="cx">
</span><del>- class YieldExprNode final : public ExpressionNode, public ThrowableExpressionData {
</del><ins>+ class YieldExprNode final : public ExpressionNode {
</ins><span class="cx"> public:
</span><span class="cx"> YieldExprNode(const JSTokenLocation&, ExpressionNode* argument, bool delegate);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/Parser.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -194,7 +194,7 @@
</span><span class="cx"> template <typename LexerType>
</span><span class="cx"> Parser<LexerType>::Parser(
</span><span class="cx"> VM* vm, const SourceCode& source, JSParserBuiltinMode builtinMode,
</span><del>- JSParserStrictMode strictMode, SourceParseMode parseMode, SuperBinding superBinding,
</del><ins>+ JSParserStrictMode strictMode, SourceParseMode parseMode,
</ins><span class="cx"> ConstructorKind defaultConstructorKind, ThisTDZMode thisTDZMode)
</span><span class="cx"> : m_vm(vm)
</span><span class="cx"> , m_source(&source)
</span><span class="lines">@@ -210,7 +210,6 @@
</span><span class="cx"> , m_lastFunctionName(nullptr)
</span><span class="cx"> , m_sourceElements(0)
</span><span class="cx"> , m_parsingBuiltin(builtinMode == JSParserBuiltinMode::Builtin)
</span><del>- , m_superBinding(superBinding)
</del><span class="cx"> , m_defaultConstructorKind(defaultConstructorKind)
</span><span class="cx"> , m_thisTDZMode(thisTDZMode)
</span><span class="cx"> {
</span><span class="lines">@@ -250,10 +249,7 @@
</span><span class="cx"> bool isArrowFunctionBodyExpression = false;
</span><span class="cx"> if (m_lexer->isReparsingFunction()) {
</span><span class="cx"> ParserFunctionInfo<ASTBuilder> functionInfo;
</span><del>- if (parseMode == SourceParseMode::GeneratorBodyMode)
- functionInfo.parameters = createGeneratorParameters(context);
- else
- parseFunctionParameters(context, parseMode, functionInfo);
</del><ins>+ parseFunctionParameters(context, parseMode, functionInfo);
</ins><span class="cx"> m_parameters = functionInfo.parameters;
</span><span class="cx">
</span><span class="cx"> if (parseMode == SourceParseMode::ArrowFunctionMode && !hasError()) {
</span><span class="lines">@@ -277,12 +273,8 @@
</span><span class="cx"> sourceElements = parseArrowFunctionSingleExpressionBodySourceElements(context);
</span><span class="cx"> else if (isModuleParseMode(parseMode))
</span><span class="cx"> sourceElements = parseModuleSourceElements(context, parseMode);
</span><del>- else {
- if (parseMode == SourceParseMode::GeneratorWrapperFunctionMode)
- sourceElements = parseGeneratorFunctionSourceElements(context, CheckForStrictMode);
- else
- sourceElements = parseSourceElements(context, CheckForStrictMode);
- }
</del><ins>+ else
+ sourceElements = parseSourceElements(context, CheckForStrictMode);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool validEnding;
</span><span class="lines">@@ -309,14 +301,7 @@
</span><span class="cx"> VariableEnvironment& varDeclarations = scope->declaredVariables();
</span><span class="cx"> for (auto& entry : capturedVariables)
</span><span class="cx"> varDeclarations.markVariableAsCaptured(entry);
</span><del>-
- IdentifierSet usedVariables;
- scope->getUsedVariables(usedVariables);
- if (parseMode == SourceParseMode::GeneratorWrapperFunctionMode) {
- if (usedVariables.contains(m_vm->propertyNames->arguments.impl()))
- context.propagateArgumentsUse();
- }
-
</del><ins>+
</ins><span class="cx"> CodeFeatures features = context.features();
</span><span class="cx"> if (scope->strictMode())
</span><span class="cx"> features |= StrictModeFeature;
</span><span class="lines">@@ -326,9 +311,10 @@
</span><span class="cx"> features |= ModifiedParameterFeature;
</span><span class="cx"> if (modifiedArguments)
</span><span class="cx"> features |= ModifiedArgumentsFeature;
</span><del>-
</del><span class="cx"> Vector<RefPtr<UniquedStringImpl>> closedVariables;
</span><span class="cx"> if (m_parsingBuiltin) {
</span><ins>+ IdentifierSet usedVariables;
+ scope->getUsedVariables(usedVariables);
</ins><span class="cx"> // FIXME: This needs to be changed if we want to allow builtins to use lexical declarations.
</span><span class="cx"> for (const auto& variable : usedVariables) {
</span><span class="cx"> Identifier identifier = Identifier::fromUid(m_vm, variable.get());
</span><span class="lines">@@ -472,45 +458,6 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <typename LexerType>
</span><del>-template <class TreeBuilder> TreeSourceElements Parser<LexerType>::parseGeneratorFunctionSourceElements(TreeBuilder& context, SourceElementsMode mode)
-{
- auto sourceElements = context.createSourceElements();
-
- unsigned functionKeywordStart = tokenStart();
- JSTokenLocation startLocation(tokenLocation());
- JSTextPosition start = tokenStartPosition();
- unsigned startColumn = tokenColumn();
- int functionNameStart = m_token.m_location.startOffset;
- int parametersStart = m_token.m_location.startOffset;
-
- ParserFunctionInfo<TreeBuilder> info;
- info.name = &m_vm->propertyNames->nullIdentifier;
- info.parameters = createGeneratorParameters(context);
- info.startOffset = parametersStart;
- info.startLine = tokenLine();
- info.parameterCount = 4; // generator, state, value, resume mode
-
- {
- AutoPopScopeRef generatorBodyScope(this, pushScope());
- generatorBodyScope->setSourceParseMode(SourceParseMode::GeneratorBodyMode);
- SyntaxChecker generatorFunctionContext(const_cast<VM*>(m_vm), m_lexer.get());
- failIfFalse(parseSourceElements(generatorFunctionContext, mode), "Cannot parse the body of a generator");
- popScope(generatorBodyScope, TreeBuilder::NeedsFreeVariableInfo);
- }
- info.body = context.createFunctionMetadata(startLocation, tokenLocation(), startColumn, tokenColumn(), functionKeywordStart, functionNameStart, parametersStart, strictMode(), ConstructorKind::None, m_superBinding, info.parameterCount, SourceParseMode::GeneratorBodyMode, false);
-
- info.endLine = tokenLine();
- info.endOffset = m_token.m_data.offset;
- info.bodyStartColumn = startColumn;
-
- auto functionExpr = context.createFunctionExpr(startLocation, info);
- auto statement = context.createExprStatement(startLocation, functionExpr, start, m_lastTokenEndPosition.line);
- context.appendStatement(sourceElements, statement);
-
- return sourceElements;
-}
-
-template <typename LexerType>
</del><span class="cx"> template <class TreeBuilder> TreeStatement Parser<LexerType>::parseStatementListItem(TreeBuilder& context, const Identifier*& directive, unsigned* directiveLiteralLength)
</span><span class="cx"> {
</span><span class="cx"> // The grammar is documented here:
</span><span class="lines">@@ -1653,14 +1600,15 @@
</span><span class="cx"> template <typename LexerType>
</span><span class="cx"> template <class TreeBuilder> TreeFunctionBody Parser<LexerType>::parseFunctionBody(
</span><span class="cx"> TreeBuilder& context, const JSTokenLocation& startLocation, int startColumn, int functionKeywordStart, int functionNameStart, int parametersStart,
</span><del>- ConstructorKind constructorKind, SuperBinding superBinding, FunctionBodyType bodyType, unsigned parameterCount, SourceParseMode parseMode)
</del><ins>+ ConstructorKind constructorKind, FunctionBodyType bodyType, unsigned parameterCount, SourceParseMode parseMode)
</ins><span class="cx"> {
</span><ins>+ bool isArrowFunction = FunctionBodyType::StandardFunctionBodyBlock != bodyType;
</ins><span class="cx"> bool isArrowFunctionBodyExpression = bodyType == ArrowFunctionBodyExpression;
</span><span class="cx"> if (!isArrowFunctionBodyExpression) {
</span><span class="cx"> next();
</span><span class="cx"> if (match(CLOSEBRACE)) {
</span><span class="cx"> unsigned endColumn = tokenColumn();
</span><del>- return context.createFunctionMetadata(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind, superBinding, parameterCount, parseMode, isArrowFunctionBodyExpression);
</del><ins>+ return context.createFunctionMetadata(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind, parameterCount, parseMode, isArrowFunction, isArrowFunctionBodyExpression);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1672,7 +1620,7 @@
</span><span class="cx"> else
</span><span class="cx"> failIfFalse(parseSourceElements(syntaxChecker, CheckForStrictMode), bodyType == StandardFunctionBodyBlock ? "Cannot parse body of this function" : "Cannot parse body of this arrow function");
</span><span class="cx"> unsigned endColumn = tokenColumn();
</span><del>- return context.createFunctionMetadata(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind, superBinding, parameterCount, parseMode, isArrowFunctionBodyExpression);
</del><ins>+ return context.createFunctionMetadata(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind, parameterCount, parseMode, isArrowFunction, isArrowFunctionBodyExpression);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static const char* stringForFunctionMode(SourceParseMode mode)
</span><span class="lines">@@ -1686,10 +1634,8 @@
</span><span class="cx"> return "function";
</span><span class="cx"> case SourceParseMode::MethodMode:
</span><span class="cx"> return "method";
</span><del>- case SourceParseMode::GeneratorBodyMode:
</del><ins>+ case SourceParseMode::GeneratorMode:
</ins><span class="cx"> return "generator";
</span><del>- case SourceParseMode::GeneratorWrapperFunctionMode:
- return "generator function";
</del><span class="cx"> case SourceParseMode::ArrowFunctionMode:
</span><span class="cx"> return "arrow function";
</span><span class="cx"> case SourceParseMode::ProgramMode:
</span><span class="lines">@@ -1768,37 +1714,6 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <typename LexerType>
</span><del>-template <class TreeBuilder> typename TreeBuilder::FormalParameterList Parser<LexerType>::createGeneratorParameters(TreeBuilder& context)
-{
- auto parameters = context.createFormalParameterList();
-
- JSTokenLocation location(tokenLocation());
- JSTextPosition position = tokenStartPosition();
-
- // @generator
- declareParameter(&m_vm->propertyNames->generatorPrivateName);
- auto generator = context.createBindingLocation(location, m_vm->propertyNames->generatorPrivateName, position, position, AssignmentContext::DeclarationStatement);
- context.appendParameter(parameters, generator, 0);
-
- // @generatorState
- declareParameter(&m_vm->propertyNames->generatorStatePrivateName);
- auto generatorState = context.createBindingLocation(location, m_vm->propertyNames->generatorStatePrivateName, position, position, AssignmentContext::DeclarationStatement);
- context.appendParameter(parameters, generatorState, 0);
-
- // @generatorValue
- declareParameter(&m_vm->propertyNames->generatorValuePrivateName);
- auto generatorValue = context.createBindingLocation(location, m_vm->propertyNames->generatorValuePrivateName, position, position, AssignmentContext::DeclarationStatement);
- context.appendParameter(parameters, generatorValue, 0);
-
- // @generatorResumeMode
- declareParameter(&m_vm->propertyNames->generatorResumeModePrivateName);
- auto generatorResumeMode = context.createBindingLocation(location, m_vm->propertyNames->generatorResumeModePrivateName, position, position, AssignmentContext::DeclarationStatement);
- context.appendParameter(parameters, generatorResumeMode, 0);
-
- return parameters;
-}
-
-template <typename LexerType>
</del><span class="cx"> template <class TreeBuilder> bool Parser<LexerType>::parseFunctionInfo(TreeBuilder& context, FunctionRequirements requirements, SourceParseMode mode, bool nameIsInContainingScope, ConstructorKind constructorKind, SuperBinding expectedSuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>& functionInfo, FunctionDefinitionType functionDefinitionType)
</span><span class="cx"> {
</span><span class="cx"> RELEASE_ASSERT(isFunctionParseMode(mode));
</span><span class="lines">@@ -1909,10 +1824,12 @@
</span><span class="cx"> endLocation.startOffset - endLocation.lineStartOffset;
</span><span class="cx"> unsigned currentLineStartOffset = m_token.m_location.lineStartOffset;
</span><span class="cx">
</span><ins>+ bool isArrowFunction = mode == SourceParseMode::ArrowFunctionMode;
+
</ins><span class="cx"> functionInfo.body = context.createFunctionMetadata(
</span><span class="cx"> startLocation, endLocation, functionInfo.bodyStartColumn, bodyEndColumn,
</span><span class="cx"> functionKeywordStart, functionNameStart, parametersStart,
</span><del>- cachedInfo->strictMode, constructorKind, expectedSuperBinding, cachedInfo->parameterCount, mode, functionBodyType == ArrowFunctionBodyExpression);
</del><ins>+ cachedInfo->strictMode, constructorKind, cachedInfo->parameterCount, mode, isArrowFunction, functionBodyType == ArrowFunctionBodyExpression);
</ins><span class="cx">
</span><span class="cx"> functionScope->restoreFromSourceProviderCache(cachedInfo);
</span><span class="cx"> popScope(functionScope, TreeBuilder::NeedsFreeVariableInfo);
</span><span class="lines">@@ -1926,7 +1843,7 @@
</span><span class="cx"> m_lexer->setLineNumber(m_token.m_location.line);
</span><span class="cx"> functionInfo.endOffset = cachedInfo->endFunctionOffset;
</span><span class="cx">
</span><del>- if (mode == SourceParseMode::ArrowFunctionMode)
</del><ins>+ if (isArrowFunction)
</ins><span class="cx"> functionBodyType = cachedInfo->isBodyArrowExpression ? ArrowFunctionBodyExpression : ArrowFunctionBodyBlock;
</span><span class="cx"> else
</span><span class="cx"> functionBodyType = StandardFunctionBodyBlock;
</span><span class="lines">@@ -1948,33 +1865,14 @@
</span><span class="cx">
</span><span class="cx"> m_lastFunctionName = lastFunctionName;
</span><span class="cx"> ParserState oldState = saveState();
</span><del>-
- auto performParsingFunctionBody = [&] {
- return parseFunctionBody(context, startLocation, startColumn, functionKeywordStart, functionNameStart, parametersStart, constructorKind, expectedSuperBinding, functionBodyType, functionInfo.parameterCount, mode);
- };
-
- if (mode == SourceParseMode::GeneratorWrapperFunctionMode) {
- AutoPopScopeRef generatorBodyScope(this, pushScope());
- generatorBodyScope->setSourceParseMode(SourceParseMode::GeneratorBodyMode);
- functionInfo.body = performParsingFunctionBody();
-
- // When a generator has a "use strict" directive, a generator function wrapping it should be strict mode.
- if (generatorBodyScope->strictMode())
- functionScope->setStrictMode();
-
- semanticFailIfTrue(generatorBodyScope->hasDirectSuper(), "Cannot call super() outside of a class constructor");
- if (generatorBodyScope->needsSuperBinding())
- semanticFailIfTrue(expectedSuperBinding == SuperBinding::NotNeeded, "super can only be used in a method of a derived class");
-
- popScope(generatorBodyScope, TreeBuilder::NeedsFreeVariableInfo);
- } else
- functionInfo.body = performParsingFunctionBody();
</del><span class="cx">
</span><ins>+ functionInfo.body = parseFunctionBody(context, startLocation, startColumn, functionKeywordStart, functionNameStart, parametersStart, constructorKind, functionBodyType, functionInfo.parameterCount, mode);
+
</ins><span class="cx"> restoreState(oldState);
</span><span class="cx"> failIfFalse(functionInfo.body, "Cannot parse the body of this ", stringForFunctionMode(mode));
</span><span class="cx"> context.setEndOffset(functionInfo.body, m_lexer->currentOffset());
</span><span class="cx"> if (functionScope->strictMode() && functionInfo.name) {
</span><del>- RELEASE_ASSERT(mode == SourceParseMode::NormalFunctionMode || mode == SourceParseMode::MethodMode || mode == SourceParseMode::ArrowFunctionMode || mode == SourceParseMode::GeneratorBodyMode || mode == SourceParseMode::GeneratorWrapperFunctionMode);
</del><ins>+ RELEASE_ASSERT(mode == SourceParseMode::NormalFunctionMode || mode == SourceParseMode::MethodMode || mode == SourceParseMode::ArrowFunctionMode || mode == SourceParseMode::GeneratorMode);
</ins><span class="cx"> semanticFailIfTrue(m_vm->propertyNames->arguments == *functionInfo.name, "'", functionInfo.name->impl(), "' is not a valid function name in strict mode");
</span><span class="cx"> semanticFailIfTrue(m_vm->propertyNames->eval == *functionInfo.name, "'", functionInfo.name->impl(), "' is not a valid function name in strict mode");
</span><span class="cx"> }
</span><span class="lines">@@ -2042,7 +1940,7 @@
</span><span class="cx"> SourceParseMode parseMode = SourceParseMode::NormalFunctionMode;
</span><span class="cx"> #if ENABLE(ES6_GENERATORS)
</span><span class="cx"> if (consume(TIMES))
</span><del>- parseMode = SourceParseMode::GeneratorWrapperFunctionMode;
</del><ins>+ parseMode = SourceParseMode::GeneratorMode;
</ins><span class="cx"> #endif
</span><span class="cx"> failIfFalse((parseFunctionInfo(context, FunctionNeedsName, parseMode, true, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, functionInfo, FunctionDefinitionType::Declaration)), "Cannot parse this function");
</span><span class="cx"> failIfFalse(functionInfo.name, "Function statements must have a name");
</span><span class="lines">@@ -2193,7 +2091,7 @@
</span><span class="cx"> SourceParseMode parseMode = SourceParseMode::MethodMode;
</span><span class="cx"> if (isGenerator) {
</span><span class="cx"> isConstructor = false;
</span><del>- parseMode = SourceParseMode::GeneratorWrapperFunctionMode;
</del><ins>+ parseMode = SourceParseMode::GeneratorMode;
</ins><span class="cx"> semanticFailIfTrue(*ident == m_vm->propertyNames->prototype, "Cannot declare a generator named 'prototype'");
</span><span class="cx"> semanticFailIfTrue(*ident == m_vm->propertyNames->constructor, "Cannot declare a generator named 'constructor'");
</span><span class="cx"> }
</span><span class="lines">@@ -2859,7 +2757,7 @@
</span><span class="cx"> SavePoint savePoint = createSavePoint();
</span><span class="cx">
</span><span class="cx"> #if ENABLE(ES6_GENERATORS)
</span><del>- if (match(YIELD) && !isYIELDMaskedAsIDENT(currentScope()->isGenerator()))
</del><ins>+ if (match(YIELD))
</ins><span class="cx"> return parseYieldExpression(context);
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="lines">@@ -2964,7 +2862,6 @@
</span><span class="cx"> failIfTrue(m_functionParsePhase == FunctionParsePhase::Parameters, "Cannot use yield expression within parameters");
</span><span class="cx">
</span><span class="cx"> JSTokenLocation location(tokenLocation());
</span><del>- JSTextPosition divotStart = tokenStartPosition();
</del><span class="cx"> ASSERT(match(YIELD));
</span><span class="cx"> SavePoint savePoint = createSavePoint();
</span><span class="cx"> next();
</span><span class="lines">@@ -2972,14 +2869,13 @@
</span><span class="cx"> return context.createYield(location);
</span><span class="cx">
</span><span class="cx"> bool delegate = consume(TIMES);
</span><del>- JSTextPosition argumentStart = tokenStartPosition();
</del><span class="cx"> TreeExpression argument = parseAssignmentExpression(context);
</span><span class="cx"> if (!argument) {
</span><span class="cx"> restoreSavePoint(savePoint);
</span><span class="cx"> next();
</span><span class="cx"> return context.createYield(location);
</span><span class="cx"> }
</span><del>- return context.createYield(location, argument, delegate, divotStart, argumentStart, lastTokenEndPosition());
</del><ins>+ return context.createYield(location, argument, delegate);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <typename LexerType>
</span><span class="lines">@@ -3171,7 +3067,7 @@
</span><span class="cx"> JSTokenLocation methodLocation(tokenLocation());
</span><span class="cx"> unsigned methodStart = tokenStart();
</span><span class="cx"> ParserFunctionInfo<TreeBuilder> methodInfo;
</span><del>- SourceParseMode parseMode = isGenerator ? SourceParseMode::GeneratorWrapperFunctionMode : SourceParseMode::MethodMode;
</del><ins>+ SourceParseMode parseMode = isGenerator ? SourceParseMode::GeneratorMode : SourceParseMode::MethodMode;
</ins><span class="cx"> failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, parseMode, false, ConstructorKind::None, SuperBinding::NotNeeded, methodStart, methodInfo, FunctionDefinitionType::Method)), "Cannot parse this method");
</span><span class="cx"> methodInfo.name = methodName;
</span><span class="cx"> return context.createFunctionExpr(methodLocation, methodInfo);
</span><span class="lines">@@ -3424,7 +3320,7 @@
</span><span class="cx"> SourceParseMode parseMode = SourceParseMode::NormalFunctionMode;
</span><span class="cx"> #if ENABLE(ES6_GENERATORS)
</span><span class="cx"> if (consume(TIMES))
</span><del>- parseMode = SourceParseMode::GeneratorWrapperFunctionMode;
</del><ins>+ parseMode = SourceParseMode::GeneratorMode;
</ins><span class="cx"> #endif
</span><span class="cx"> failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, parseMode, false, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, functionInfo, FunctionDefinitionType::Expression)), "Cannot parse function expression");
</span><span class="cx"> return context.createFunctionExpr(location, functionInfo);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/Parser.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -172,7 +172,6 @@
</span><span class="cx"> , m_isLexicalScope(false)
</span><span class="cx"> , m_isFunctionBoundary(false)
</span><span class="cx"> , m_isValidStrictMode(true)
</span><del>- , m_hasArguments(false)
</del><span class="cx"> , m_loopDepth(0)
</span><span class="cx"> , m_switchDepth(0)
</span><span class="cx"> {
</span><span class="lines">@@ -193,7 +192,6 @@
</span><span class="cx"> , m_isLexicalScope(rhs.m_isLexicalScope)
</span><span class="cx"> , m_isFunctionBoundary(rhs.m_isFunctionBoundary)
</span><span class="cx"> , m_isValidStrictMode(rhs.m_isValidStrictMode)
</span><del>- , m_hasArguments(rhs.m_hasArguments)
</del><span class="cx"> , m_loopDepth(rhs.m_loopDepth)
</span><span class="cx"> , m_switchDepth(rhs.m_switchDepth)
</span><span class="cx"> , m_moduleScopeData(rhs.m_moduleScopeData)
</span><span class="lines">@@ -244,14 +242,10 @@
</span><span class="cx"> void setSourceParseMode(SourceParseMode mode)
</span><span class="cx"> {
</span><span class="cx"> switch (mode) {
</span><del>- case SourceParseMode::GeneratorBodyMode:
</del><ins>+ case SourceParseMode::GeneratorMode:
</ins><span class="cx"> setIsGenerator();
</span><span class="cx"> break;
</span><span class="cx">
</span><del>- case SourceParseMode::GeneratorWrapperFunctionMode:
- setIsGeneratorFunction();
- break;
-
</del><span class="cx"> case SourceParseMode::NormalFunctionMode:
</span><span class="cx"> case SourceParseMode::GetterMode:
</span><span class="cx"> case SourceParseMode::SetterMode:
</span><span class="lines">@@ -274,8 +268,6 @@
</span><span class="cx"> bool isFunctionBoundary() const { return m_isFunctionBoundary; }
</span><span class="cx"> bool isGenerator() const { return m_isGenerator; }
</span><span class="cx">
</span><del>- bool hasArguments() const { return m_hasArguments; }
-
</del><span class="cx"> void setIsLexicalScope()
</span><span class="cx"> {
</span><span class="cx"> m_isLexicalScope = true;
</span><span class="lines">@@ -458,20 +450,16 @@
</span><span class="cx"> m_usesEval = true;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- for (const RefPtr<UniquedStringImpl>& impl : nestedScope->m_usedVariables) {
- if (nestedScope->m_declaredVariables.contains(impl) || nestedScope->m_lexicalVariables.contains(impl))
</del><ins>+ IdentifierSet::iterator end = nestedScope->m_usedVariables.end();
+ for (IdentifierSet::iterator ptr = nestedScope->m_usedVariables.begin(); ptr != end; ++ptr) {
+ if (nestedScope->m_declaredVariables.contains(*ptr) || nestedScope->m_lexicalVariables.contains(*ptr))
</ins><span class="cx"> continue;
</span><del>-
- // "arguments" reference should be resolved at function boudary.
- if (nestedScope->isFunctionBoundary() && nestedScope->hasArguments() && impl == m_vm->propertyNames->arguments.impl())
- continue;
-
- m_usedVariables.add(impl);
</del><ins>+ m_usedVariables.add(*ptr);
</ins><span class="cx"> // We don't want a declared variable that is used in an inner scope to be thought of as captured if
</span><span class="cx"> // that inner scope is both a lexical scope and not a function. Only inner functions and "catch"
</span><span class="cx"> // statements can cause variables to be captured.
</span><span class="cx"> if (shouldTrackClosedVariables && (nestedScope->m_isFunctionBoundary || !nestedScope->m_isLexicalScope))
</span><del>- m_closedVariableCandidates.add(impl);
</del><ins>+ m_closedVariableCandidates.add(*ptr);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> // Propagate closed variable candidates downwards within the same function.
</span><span class="lines">@@ -562,22 +550,14 @@
</span><span class="cx"> {
</span><span class="cx"> m_isFunction = true;
</span><span class="cx"> m_isFunctionBoundary = true;
</span><del>- m_hasArguments = true;
</del><span class="cx"> setIsLexicalScope();
</span><span class="cx"> m_isGenerator = false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- void setIsGeneratorFunction()
- {
- setIsFunction();
- m_isGenerator = true;
- }
-
</del><span class="cx"> void setIsGenerator()
</span><span class="cx"> {
</span><span class="cx"> setIsFunction();
</span><span class="cx"> m_isGenerator = true;
</span><del>- m_hasArguments = false;
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void setIsModule()
</span><span class="lines">@@ -599,7 +579,6 @@
</span><span class="cx"> bool m_isLexicalScope : 1;
</span><span class="cx"> bool m_isFunctionBoundary : 1;
</span><span class="cx"> bool m_isValidStrictMode : 1;
</span><del>- bool m_hasArguments : 1;
</del><span class="cx"> int m_loopDepth;
</span><span class="cx"> int m_switchDepth;
</span><span class="cx">
</span><span class="lines">@@ -648,7 +627,7 @@
</span><span class="cx">
</span><span class="cx"> public:
</span><span class="cx"> Parser(
</span><del>- VM*, const SourceCode&, JSParserBuiltinMode, JSParserStrictMode, SourceParseMode, SuperBinding,
</del><ins>+ VM*, const SourceCode&, JSParserBuiltinMode, JSParserStrictMode, SourceParseMode,
</ins><span class="cx"> ConstructorKind defaultConstructorKind = ConstructorKind::None, ThisTDZMode = ThisTDZMode::CheckIfNeeded);
</span><span class="cx"> ~Parser();
</span><span class="cx">
</span><span class="lines">@@ -1178,7 +1157,6 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <class TreeBuilder> TreeSourceElements parseSourceElements(TreeBuilder&, SourceElementsMode);
</span><del>- template <class TreeBuilder> TreeSourceElements parseGeneratorFunctionSourceElements(TreeBuilder&, SourceElementsMode);
</del><span class="cx"> template <class TreeBuilder> TreeStatement parseStatementListItem(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength);
</span><span class="cx"> template <class TreeBuilder> TreeStatement parseStatement(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength = 0);
</span><span class="cx"> enum class ExportType { Exported, NotExported };
</span><span class="lines">@@ -1221,7 +1199,7 @@
</span><span class="cx"> template <class TreeBuilder> TreeProperty parseProperty(TreeBuilder&, bool strict);
</span><span class="cx"> template <class TreeBuilder> TreeExpression parsePropertyMethod(TreeBuilder& context, const Identifier* methodName, bool isGenerator);
</span><span class="cx"> template <class TreeBuilder> TreeProperty parseGetterSetter(TreeBuilder&, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, ConstructorKind = ConstructorKind::None, SuperBinding = SuperBinding::NotNeeded);
</span><del>- template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, const JSTokenLocation&, int, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, SuperBinding, FunctionBodyType, unsigned, SourceParseMode);
</del><ins>+ template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, const JSTokenLocation&, int, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, FunctionBodyType, unsigned, SourceParseMode);
</ins><span class="cx"> template <class TreeBuilder> ALWAYS_INLINE bool parseFormalParameters(TreeBuilder&, TreeFormalParameterList, unsigned&);
</span><span class="cx"> enum VarDeclarationListContext { ForLoopContext, VarDeclarationContext };
</span><span class="cx"> template <class TreeBuilder> TreeExpression parseVariableDeclarationList(TreeBuilder&, int& declarations, TreeDestructuringPattern& lastPattern, TreeExpression& lastInitializer, JSTextPosition& identStart, JSTextPosition& initStart, JSTextPosition& initEnd, VarDeclarationListContext, DeclarationType, ExportType, bool& forLoopConstDoesNotHaveInitializer);
</span><span class="lines">@@ -1246,7 +1224,6 @@
</span><span class="cx"> template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionRequirements, SourceParseMode, bool nameIsInContainingScope, ConstructorKind, SuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>&, FunctionDefinitionType);
</span><span class="cx">
</span><span class="cx"> template <class TreeBuilder> NEVER_INLINE int parseFunctionParameters(TreeBuilder&, SourceParseMode, ParserFunctionInfo<TreeBuilder>&);
</span><del>- template <class TreeBuilder> NEVER_INLINE typename TreeBuilder::FormalParameterList createGeneratorParameters(TreeBuilder&);
</del><span class="cx">
</span><span class="cx"> template <class TreeBuilder> NEVER_INLINE TreeClassExpression parseClass(TreeBuilder&, FunctionRequirements, ParserClassInfo<TreeBuilder>&);
</span><span class="cx">
</span><span class="lines">@@ -1372,7 +1349,6 @@
</span><span class="cx"> RefPtr<SourceProviderCache> m_functionCache;
</span><span class="cx"> SourceElements* m_sourceElements;
</span><span class="cx"> bool m_parsingBuiltin;
</span><del>- SuperBinding m_superBinding;
</del><span class="cx"> ConstructorKind m_defaultConstructorKind;
</span><span class="cx"> ThisTDZMode m_thisTDZMode;
</span><span class="cx"> VariableEnvironment m_varDeclarations;
</span><span class="lines">@@ -1496,7 +1472,7 @@
</span><span class="cx"> std::unique_ptr<ParsedNode> parse(
</span><span class="cx"> VM* vm, const SourceCode& source,
</span><span class="cx"> const Identifier& name, JSParserBuiltinMode builtinMode,
</span><del>- JSParserStrictMode strictMode, SourceParseMode parseMode, SuperBinding superBinding,
</del><ins>+ JSParserStrictMode strictMode, SourceParseMode parseMode,
</ins><span class="cx"> ParserError& error, JSTextPosition* positionBeforeLastNewline = nullptr,
</span><span class="cx"> ConstructorKind defaultConstructorKind = ConstructorKind::None,
</span><span class="cx"> ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded)
</span><span class="lines">@@ -1505,7 +1481,7 @@
</span><span class="cx">
</span><span class="cx"> ASSERT(!source.provider()->source().isNull());
</span><span class="cx"> if (source.provider()->source().is8Bit()) {
</span><del>- Parser<Lexer<LChar>> parser(vm, source, builtinMode, strictMode, parseMode, superBinding, defaultConstructorKind, thisTDZMode);
</del><ins>+ Parser<Lexer<LChar>> parser(vm, source, builtinMode, strictMode, parseMode, defaultConstructorKind, thisTDZMode);
</ins><span class="cx"> std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode);
</span><span class="cx"> if (positionBeforeLastNewline)
</span><span class="cx"> *positionBeforeLastNewline = parser.positionBeforeLastNewline();
</span><span class="lines">@@ -1518,7 +1494,7 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx"> ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, "BuiltinExecutables::createDefaultConstructor should always use a 8-bit string");
</span><del>- Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, parseMode, superBinding, defaultConstructorKind, thisTDZMode);
</del><ins>+ Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, parseMode, defaultConstructorKind, thisTDZMode);
</ins><span class="cx"> std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode);
</span><span class="cx"> if (positionBeforeLastNewline)
</span><span class="cx"> *positionBeforeLastNewline = parser.positionBeforeLastNewline();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserModesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ParserModes.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ParserModes.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/ParserModes.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -46,8 +46,7 @@
</span><span class="cx">
</span><span class="cx"> enum class SourceParseMode {
</span><span class="cx"> NormalFunctionMode,
</span><del>- GeneratorBodyMode,
- GeneratorWrapperFunctionMode,
</del><ins>+ GeneratorMode,
</ins><span class="cx"> GetterMode,
</span><span class="cx"> SetterMode,
</span><span class="cx"> MethodMode,
</span><span class="lines">@@ -61,8 +60,7 @@
</span><span class="cx"> {
</span><span class="cx"> switch (parseMode) {
</span><span class="cx"> case SourceParseMode::NormalFunctionMode:
</span><del>- case SourceParseMode::GeneratorBodyMode:
- case SourceParseMode::GeneratorWrapperFunctionMode:
</del><ins>+ case SourceParseMode::GeneratorMode:
</ins><span class="cx"> case SourceParseMode::GetterMode:
</span><span class="cx"> case SourceParseMode::SetterMode:
</span><span class="cx"> case SourceParseMode::MethodMode:
</span><span class="lines">@@ -86,8 +84,7 @@
</span><span class="cx"> return true;
</span><span class="cx">
</span><span class="cx"> case SourceParseMode::NormalFunctionMode:
</span><del>- case SourceParseMode::GeneratorBodyMode:
- case SourceParseMode::GeneratorWrapperFunctionMode:
</del><ins>+ case SourceParseMode::GeneratorMode:
</ins><span class="cx"> case SourceParseMode::GetterMode:
</span><span class="cx"> case SourceParseMode::SetterMode:
</span><span class="cx"> case SourceParseMode::MethodMode:
</span><span class="lines">@@ -106,8 +103,7 @@
</span><span class="cx"> return true;
</span><span class="cx">
</span><span class="cx"> case SourceParseMode::NormalFunctionMode:
</span><del>- case SourceParseMode::GeneratorBodyMode:
- case SourceParseMode::GeneratorWrapperFunctionMode:
</del><ins>+ case SourceParseMode::GeneratorMode:
</ins><span class="cx"> case SourceParseMode::GetterMode:
</span><span class="cx"> case SourceParseMode::SetterMode:
</span><span class="cx"> case SourceParseMode::MethodMode:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceCodeKeyh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/parser/SourceCodeKey.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceCodeKey.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/SourceCodeKey.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,98 +0,0 @@
</span><del>-/*
- * Copyright (C) 2012 Apple Inc. All Rights Reserved.
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SourceCodeKey_h
-#define SourceCodeKey_h
-
-#include "ParserModes.h"
-#include "SourceCode.h"
-#include <wtf/HashTraits.h>
-
-namespace JSC {
-
-class SourceCodeKey {
-public:
- enum CodeType { EvalType, ProgramType, FunctionType, ModuleType };
-
- SourceCodeKey()
- {
- }
-
- SourceCodeKey(const SourceCode& sourceCode, const String& name, CodeType codeType, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode, ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded)
- : m_sourceCode(sourceCode)
- , m_name(name)
- , m_flags((static_cast<unsigned>(codeType) << 3) | (static_cast<unsigned>(builtinMode) << 2) | (static_cast<unsigned>(strictMode) << 1) | static_cast<unsigned>(thisTDZMode))
- , m_hash(string().impl()->hash())
- {
- }
-
- SourceCodeKey(WTF::HashTableDeletedValueType)
- : m_sourceCode(WTF::HashTableDeletedValue)
- {
- }
-
- bool isHashTableDeletedValue() const { return m_sourceCode.isHashTableDeletedValue(); }
-
- unsigned hash() const { return m_hash; }
-
- size_t length() const { return m_sourceCode.length(); }
-
- bool isNull() const { return m_sourceCode.isNull(); }
-
- // To save memory, we compute our string on demand. It's expected that source
- // providers cache their strings to make this efficient.
- String string() const { return m_sourceCode.toString(); }
-
- bool operator==(const SourceCodeKey& other) const
- {
- return m_hash == other.m_hash
- && length() == other.length()
- && m_flags == other.m_flags
- && m_name == other.m_name
- && string() == other.string();
- }
-
-private:
- SourceCode m_sourceCode;
- String m_name;
- unsigned m_flags;
- unsigned m_hash;
-};
-
-struct SourceCodeKeyHash {
- static unsigned hash(const SourceCodeKey& key) { return key.hash(); }
- static bool equal(const SourceCodeKey& a, const SourceCodeKey& b) { return a == b; }
- static const bool safeToCompareToEmptyOrDeleted = false;
-};
-
-struct SourceCodeKeyHashTraits : SimpleClassHashTraits<SourceCodeKey> {
- static const bool hasIsEmptyValueFunction = true;
- static bool isEmptyValue(const SourceCodeKey& sourceCodeKey) { return sourceCodeKey.isNull(); }
-};
-
-}
-
-#endif // SourceCodeKey_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSyntaxCheckerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SyntaxChecker.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SyntaxChecker.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/parser/SyntaxChecker.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -180,10 +180,10 @@
</span><span class="cx"> ExpressionType createEmptyVarExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
</span><span class="cx"> ExpressionType createEmptyLetExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
</span><span class="cx"> ExpressionType createYield(const JSTokenLocation&) { return YieldExpr; }
</span><del>- ExpressionType createYield(const JSTokenLocation&, ExpressionType, bool, int, int, int) { return YieldExpr; }
</del><ins>+ ExpressionType createYield(const JSTokenLocation&, ExpressionType, bool) { return YieldExpr; }
</ins><span class="cx"> ClassExpression createClassExpr(const JSTokenLocation&, const Identifier&, VariableEnvironment&, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; }
</span><span class="cx"> ExpressionType createFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return FunctionExpr; }
</span><del>- int createFunctionMetadata(const JSTokenLocation&, const JSTokenLocation&, int, int, bool, int, int, int, ConstructorKind, SuperBinding, unsigned, SourceParseMode, bool) { return FunctionBodyResult; }
</del><ins>+ int createFunctionMetadata(const JSTokenLocation&, const JSTokenLocation&, int, int, bool, int, int, int, ConstructorKind, unsigned, SourceParseMode, bool, bool) { return FunctionBodyResult; }
</ins><span class="cx"> ExpressionType createArrowFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return FunctionExpr; }
</span><span class="cx"> void setFunctionNameStart(int, int) { }
</span><span class="cx"> int createArguments() { return ArgumentsResult; }
</span><span class="lines">@@ -389,8 +389,6 @@
</span><span class="cx"> int endOffset(int) { return 0; }
</span><span class="cx"> void setStartOffset(int, int) { }
</span><span class="cx">
</span><del>- void propagateArgumentsUse() { }
-
</del><span class="cx"> private:
</span><span class="cx"> int m_topBinaryExpr;
</span><span class="cx"> int m_topUnaryToken;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx"> typedef typename CacheTypes<UnlinkedCodeBlockType>::RootNode RootNode;
</span><span class="cx"> std::unique_ptr<RootNode> rootNode = parse<RootNode>(
</span><span class="cx"> &vm, source, Identifier(), builtinMode, strictMode,
</span><del>- CacheTypes<UnlinkedCodeBlockType>::parseMode, SuperBinding::NotNeeded, error, nullptr, ConstructorKind::None, thisTDZMode);
</del><ins>+ CacheTypes<UnlinkedCodeBlockType>::parseMode, error, nullptr, ConstructorKind::None, thisTDZMode);
</ins><span class="cx"> if (!rootNode)
</span><span class="cx"> return nullptr;
</span><span class="cx">
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx"> JSTextPosition positionBeforeLastNewline;
</span><span class="cx"> std::unique_ptr<ProgramNode> program = parse<ProgramNode>(
</span><span class="cx"> &vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</span><del>- JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, SuperBinding::NotNeeded,
</del><ins>+ JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode,
</ins><span class="cx"> error, &positionBeforeLastNewline);
</span><span class="cx"> if (!program) {
</span><span class="cx"> RELEASE_ASSERT(error.isValid());
</span><span class="lines">@@ -188,7 +188,7 @@
</span><span class="cx"> metadata->setEndPosition(positionBeforeLastNewline);
</span><span class="cx"> // The Function constructor only has access to global variables, so no variables will be under TDZ.
</span><span class="cx"> VariableEnvironment emptyTDZVariables;
</span><del>- UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, metadata, UnlinkedNormalFunction, ConstructAbility::CanConstruct, GeneratorThisMode::NonEmpty, emptyTDZVariables);
</del><ins>+ UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, metadata, UnlinkedNormalFunction, ConstructAbility::CanConstruct, emptyTDZVariables);
</ins><span class="cx"> functionExecutable->m_nameValue.set(vm, functionExecutable, jsString(&vm, name.string()));
</span><span class="cx">
</span><span class="cx"> m_sourceCode.addCache(key, SourceCodeValue(vm, functionExecutable, m_sourceCode.age()));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #include "CodeSpecializationKind.h"
</span><span class="cx"> #include "ParserModes.h"
</span><span class="cx"> #include "SourceCode.h"
</span><del>-#include "SourceCodeKey.h"
</del><span class="cx"> #include "Strong.h"
</span><span class="cx"> #include "VariableEnvironment.h"
</span><span class="cx"> #include <wtf/CurrentTime.h>
</span><span class="lines">@@ -57,6 +56,71 @@
</span><span class="cx"> class SourceCode;
</span><span class="cx"> class SourceProvider;
</span><span class="cx">
</span><ins>+class SourceCodeKey {
+public:
+ enum CodeType { EvalType, ProgramType, FunctionType, ModuleType };
+
+ SourceCodeKey()
+ {
+ }
+
+ SourceCodeKey(const SourceCode& sourceCode, const String& name, CodeType codeType, JSParserBuiltinMode builtinMode,
+ JSParserStrictMode strictMode, ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded)
+ : m_sourceCode(sourceCode)
+ , m_name(name)
+ , m_flags(
+ (static_cast<unsigned>(codeType) << 3)
+ | (static_cast<unsigned>(builtinMode) << 2)
+ | (static_cast<unsigned>(strictMode) << 1)
+ | static_cast<unsigned>(thisTDZMode))
+ , m_hash(string().impl()->hash())
+ {
+ }
+
+ SourceCodeKey(WTF::HashTableDeletedValueType)
+ : m_sourceCode(WTF::HashTableDeletedValue)
+ {
+ }
+
+ bool isHashTableDeletedValue() const { return m_sourceCode.isHashTableDeletedValue(); }
+
+ unsigned hash() const { return m_hash; }
+
+ size_t length() const { return m_sourceCode.length(); }
+
+ bool isNull() const { return m_sourceCode.isNull(); }
+
+ // To save memory, we compute our string on demand. It's expected that source
+ // providers cache their strings to make this efficient.
+ String string() const { return m_sourceCode.toString(); }
+
+ bool operator==(const SourceCodeKey& other) const
+ {
+ return m_hash == other.m_hash
+ && length() == other.length()
+ && m_flags == other.m_flags
+ && m_name == other.m_name
+ && string() == other.string();
+ }
+
+private:
+ SourceCode m_sourceCode;
+ String m_name;
+ unsigned m_flags;
+ unsigned m_hash;
+};
+
+struct SourceCodeKeyHash {
+ static unsigned hash(const SourceCodeKey& key) { return key.hash(); }
+ static bool equal(const SourceCodeKey& a, const SourceCodeKey& b) { return a == b; }
+ static const bool safeToCompareToEmptyOrDeleted = false;
+};
+
+struct SourceCodeKeyHashTraits : SimpleClassHashTraits<SourceCodeKey> {
+ static const bool hasIsEmptyValueFunction = true;
+ static bool isEmptyValue(const SourceCodeKey& sourceCodeKey) { return sourceCodeKey.isNull(); }
+};
+
</ins><span class="cx"> struct SourceCodeValue {
</span><span class="cx"> SourceCodeValue()
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonIdentifiersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> macro(Error) \
</span><span class="cx"> macro(EvalError) \
</span><span class="cx"> macro(Function) \
</span><del>- macro(GeneratorFunction) \
</del><span class="cx"> macro(Infinity) \
</span><span class="cx"> macro(Intl) \
</span><span class="cx"> macro(JSON) \
</span><span class="lines">@@ -331,13 +330,6 @@
</span><span class="cx"> macro(Uint32Array) \
</span><span class="cx"> macro(Float32Array) \
</span><span class="cx"> macro(Float64Array) \
</span><del>- macro(generator) \
- macro(generatorNext) \
- macro(generatorState) \
- macro(generatorFrame) \
- macro(generatorValue) \
- macro(generatorThis) \
- macro(generatorResumeMode) \
</del><span class="cx">
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "ErrorHandlingScope.h"
</span><span class="cx"> #include "ExceptionFuzz.h"
</span><del>-#include "GeneratorFrame.h"
</del><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "HostCallReturnValue.h"
</span><span class="cx"> #include "Interpreter.h"
</span><span class="lines">@@ -645,38 +644,6 @@
</span><span class="cx"> END();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-SLOW_PATH_DECL(slow_path_save)
-{
- // Only save variables and temporary registers. The scope registers are included in them.
- // But parameters are not included. Because the generator implementation replaces the values of parameters on each generator.next() call.
- BEGIN();
- JSValue generator = OP(1).jsValue();
- GeneratorFrame* frame = nullptr;
- JSValue value = generator.get(exec, exec->propertyNames().generatorFramePrivateName);
- if (!value.isNull())
- frame = jsCast<GeneratorFrame*>(value);
- else {
- // FIXME: Once JSGenerator specialized object is introduced, this GeneratorFrame should be embeded into it to avoid allocations.
- // https://bugs.webkit.org/show_bug.cgi?id=151545
- frame = GeneratorFrame::create(exec->vm(), exec->codeBlock()->numCalleeLocals());
- PutPropertySlot slot(generator, true, PutPropertySlot::PutById);
- asObject(generator)->methodTable(exec->vm())->put(asObject(generator), exec, exec->propertyNames().generatorFramePrivateName, frame, slot);
- }
- unsigned liveCalleeLocalsIndex = pc[2].u.unsignedValue;
- frame->save(exec, exec->codeBlock()->liveCalleeLocalsAtYield(liveCalleeLocalsIndex));
- END();
-}
-
-SLOW_PATH_DECL(slow_path_resume)
-{
- BEGIN();
- JSValue generator = OP(1).jsValue();
- GeneratorFrame* frame = jsCast<GeneratorFrame*>(generator.get(exec, exec->propertyNames().generatorFramePrivateName));
- unsigned liveCalleeLocalsIndex = pc[2].u.unsignedValue;
- frame->resume(exec, exec->codeBlock()->liveCalleeLocalsAtYield(liveCalleeLocalsIndex));
- END();
-}
-
</del><span class="cx"> SLOW_PATH_DECL(slow_path_create_lexical_environment)
</span><span class="cx"> {
</span><span class="cx"> BEGIN();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonSlowPathsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -290,8 +290,6 @@
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_to_index_string);
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_profile_type_clear_log);
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_assert);
</span><del>-SLOW_PATH_HIDDEN_DECL(slow_path_save);
-SLOW_PATH_HIDDEN_DECL(slow_path_resume);
</del><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_create_lexical_environment);
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_push_with_scope);
</span><span class="cx"> SLOW_PATH_HIDDEN_DECL(slow_path_resolve_scope);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCompletioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Completion.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Completion.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/Completion.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx"> RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable());
</span><span class="cx"> return !!parse<ProgramNode>(
</span><span class="cx"> &vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</span><del>- JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, error);
</del><ins>+ JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, error);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool checkModuleSyntax(ExecState* exec, const SourceCode& source, ParserError& error)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx"> RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable());
</span><span class="cx"> std::unique_ptr<ModuleProgramNode> moduleProgramNode = parse<ModuleProgramNode>(
</span><span class="cx"> &vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</span><del>- JSParserStrictMode::Strict, SourceParseMode::ModuleAnalyzeMode, SuperBinding::NotNeeded, error);
</del><ins>+ JSParserStrictMode::Strict, SourceParseMode::ModuleAnalyzeMode, error);
</ins><span class="cx"> if (!moduleProgramNode)
</span><span class="cx"> return false;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/Executable.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -299,7 +299,7 @@
</span><span class="cx"> UnlinkedFunctionCodeBlock* unlinkedCodeBlock =
</span><span class="cx"> executable->m_unlinkedExecutable->unlinkedCodeBlockFor(
</span><span class="cx"> *vm, executable->m_source, kind, debuggerMode, profilerMode, error,
</span><del>- executable->parseMode());
</del><ins>+ executable->isArrowFunction());
</ins><span class="cx"> recordParse(
</span><span class="cx"> executable->m_unlinkedExecutable->features(),
</span><span class="cx"> executable->m_unlinkedExecutable->hasCapturedVariables(), firstLine(),
</span><span class="lines">@@ -556,7 +556,7 @@
</span><span class="cx"> JSGlobalObject* lexicalGlobalObject = exec->lexicalGlobalObject();
</span><span class="cx"> std::unique_ptr<ProgramNode> programNode = parse<ProgramNode>(
</span><span class="cx"> vm, m_source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</span><del>- JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, error);
</del><ins>+ JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, error);
</ins><span class="cx"> if (programNode)
</span><span class="cx"> return 0;
</span><span class="cx"> ASSERT(error.isValid());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/Executable.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -448,7 +448,7 @@
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><span class="cx">
</span><del>- ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, GeneratorThisMode::NonEmpty, SuperBinding::NotNeeded, SourceParseMode::ProgramMode); }
</del><ins>+ ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, false); }
</ins><span class="cx">
</span><span class="cx"> unsigned numVariables() { return m_unlinkedEvalCodeBlock->numVariables(); }
</span><span class="cx"> unsigned numberOfFunctionDecls() { return m_unlinkedEvalCodeBlock->numberOfFunctionDecls(); }
</span><span class="lines">@@ -501,7 +501,7 @@
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><span class="cx">
</span><del>- ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, GeneratorThisMode::NonEmpty, SuperBinding::NotNeeded, SourceParseMode::ProgramMode); }
</del><ins>+ ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, false); }
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> friend class ExecutableBase;
</span><span class="lines">@@ -542,7 +542,7 @@
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><span class="cx">
</span><del>- ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, GeneratorThisMode::NonEmpty, SuperBinding::NotNeeded, SourceParseMode::ModuleEvaluateMode); }
</del><ins>+ ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, false); }
</ins><span class="cx"> UnlinkedModuleProgramCodeBlock* unlinkedModuleProgramCodeBlock() { return m_unlinkedModuleProgramCodeBlock.get(); }
</span><span class="cx">
</span><span class="cx"> SymbolTable* moduleEnvironmentSymbolTable() { return m_moduleEnvironmentSymbolTable.get(); }
</span><span class="lines">@@ -650,13 +650,12 @@
</span><span class="cx"> FunctionMode functionMode() { return m_unlinkedExecutable->functionMode(); }
</span><span class="cx"> bool isBuiltinFunction() const { return m_unlinkedExecutable->isBuiltinFunction(); }
</span><span class="cx"> ConstructAbility constructAbility() const { return m_unlinkedExecutable->constructAbility(); }
</span><ins>+ bool isArrowFunction() const { return m_unlinkedExecutable->isArrowFunction(); }
</ins><span class="cx"> bool isClassConstructorFunction() const { return m_unlinkedExecutable->isClassConstructorFunction(); }
</span><span class="cx"> const Identifier& name() { return m_unlinkedExecutable->name(); }
</span><span class="cx"> const Identifier& inferredName() { return m_unlinkedExecutable->inferredName(); }
</span><span class="cx"> JSString* nameValue() const { return m_unlinkedExecutable->nameValue(); }
</span><span class="cx"> size_t parameterCount() const { return m_unlinkedExecutable->parameterCount(); } // Excluding 'this'!
</span><del>- SourceParseMode parseMode() const { return m_unlinkedExecutable->parseMode(); }
- bool isArrowFunction() const { return parseMode() == SourceParseMode::ArrowFunctionMode; }
</del><span class="cx">
</span><span class="cx"> static void visitChildren(JSCell*, SlotVisitor&);
</span><span class="cx"> static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue proto)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -79,30 +79,28 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // ECMA 15.3.2 The Function Constructor
</span><del>-JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args, const Identifier& functionName, const String& sourceURL, const TextPosition& position, FunctionConstructionMode functionConstructionMode)
</del><ins>+JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args, const Identifier& functionName, const String& sourceURL, const TextPosition& position)
</ins><span class="cx"> {
</span><span class="cx"> if (!globalObject->evalEnabled())
</span><span class="cx"> return exec->vm().throwException(exec, createEvalError(exec, globalObject->evalDisabledErrorMessage()));
</span><del>- return constructFunctionSkippingEvalEnabledCheck(exec, globalObject, args, functionName, sourceURL, position, -1, functionConstructionMode);
</del><ins>+ return constructFunctionSkippingEvalEnabledCheck(exec, globalObject, args, functionName, sourceURL, position);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSObject* constructFunctionSkippingEvalEnabledCheck(
</span><span class="cx"> ExecState* exec, JSGlobalObject* globalObject, const ArgList& args,
</span><span class="cx"> const Identifier& functionName, const String& sourceURL,
</span><del>- const TextPosition& position, int overrideLineNumber, FunctionConstructionMode functionConstructionMode)
</del><ins>+ const TextPosition& position, int overrideLineNumber)
</ins><span class="cx"> {
</span><span class="cx"> // How we stringify functions is sometimes important for web compatibility.
</span><span class="cx"> // See https://bugs.webkit.org/show_bug.cgi?id=24350.
</span><span class="cx"> String program;
</span><span class="cx"> if (args.isEmpty())
</span><del>- program = makeString("{function ", functionConstructionMode == FunctionConstructionMode::Generator ? "*" : "", functionName.string(), "() {\n\n}}");
</del><ins>+ program = makeString("{function ", functionName.string(), "() {\n\n}}");
</ins><span class="cx"> else if (args.size() == 1)
</span><del>- program = makeString("{function ", functionConstructionMode == FunctionConstructionMode::Generator ? "*" : "", functionName.string(), "() {\n", args.at(0).toString(exec)->value(exec), "\n}}");
</del><ins>+ program = makeString("{function ", functionName.string(), "() {\n", args.at(0).toString(exec)->value(exec), "\n}}");
</ins><span class="cx"> else {
</span><span class="cx"> StringBuilder builder;
</span><span class="cx"> builder.appendLiteral("{function ");
</span><del>- if (functionConstructionMode == FunctionConstructionMode::Generator)
- builder.append('*');
</del><span class="cx"> builder.append(functionName.string());
</span><span class="cx"> builder.append('(');
</span><span class="cx"> builder.append(args.at(0).toString(exec)->view(exec));
</span><span class="lines">@@ -128,9 +126,9 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // ECMA 15.3.2 The Function Constructor
</span><del>-JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args, FunctionConstructionMode functionConstructionMode)
</del><ins>+JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args)
</ins><span class="cx"> {
</span><del>- return constructFunction(exec, globalObject, args, exec->propertyNames().anonymous, String(), TextPosition::minimumPosition(), functionConstructionMode);
</del><ins>+ return constructFunction(exec, globalObject, args, exec->propertyNames().anonymous, String(), TextPosition::minimumPosition());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -56,17 +56,12 @@
</span><span class="cx"> static CallType getCallData(JSCell*, CallData&);
</span><span class="cx"> };
</span><span class="cx">
</span><del>-enum class FunctionConstructionMode {
- Function,
- Generator,
-};
</del><ins>+JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&, const Identifier& functionName, const String& sourceURL, const WTF::TextPosition&);
+JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&);
</ins><span class="cx">
</span><del>-JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&, const Identifier& functionName, const String& sourceURL, const WTF::TextPosition&, FunctionConstructionMode = FunctionConstructionMode::Function);
-JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&, FunctionConstructionMode = FunctionConstructionMode::Function);
-
</del><span class="cx"> JS_EXPORT_PRIVATE JSObject* constructFunctionSkippingEvalEnabledCheck(
</span><span class="cx"> ExecState*, JSGlobalObject*, const ArgList&, const Identifier&,
</span><del>- const String&, const WTF::TextPosition&, int overrideLineNumber = -1, FunctionConstructionMode = FunctionConstructionMode::Function);
</del><ins>+ const String&, const WTF::TextPosition&, int overrideLineNumber = -1);
</ins><span class="cx">
</span><span class="cx"> } // namespace JSC
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorFramecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorFrame.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorFrame.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorFrame.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,97 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "GeneratorFrame.h"
-
-#include "CodeBlock.h"
-#include "HeapIterationScope.h"
-#include "JSCJSValueInlines.h"
-#include "JSCellInlines.h"
-#include "SlotVisitorInlines.h"
-#include "StructureInlines.h"
-
-namespace JSC {
-
-const ClassInfo GeneratorFrame::s_info = { "GeneratorFrame", nullptr, nullptr, CREATE_METHOD_TABLE(GeneratorFrame) };
-
-GeneratorFrame::GeneratorFrame(VM& vm, size_t numberOfCalleeLocals)
- : Base(vm, vm.generatorFrameStructure.get())
- , m_numberOfCalleeLocals(numberOfCalleeLocals)
-{
-}
-
-void GeneratorFrame::finishCreation(VM& vm)
-{
- Base::finishCreation(vm);
- for (size_t i = 0; i < m_numberOfCalleeLocals; ++i)
- localAt(i).clear();
-}
-
-Structure* GeneratorFrame::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
-{
- return Structure::create(vm, globalObject, prototype, TypeInfo(CellType, StructureFlags), info());
-}
-
-GeneratorFrame* GeneratorFrame::create(VM& vm, size_t numberOfLocals)
-{
- GeneratorFrame* result =
- new (
- NotNull,
- allocateCell<GeneratorFrame>(vm.heap, allocationSizeForLocals(numberOfLocals)))
- GeneratorFrame(vm, numberOfLocals);
- result->finishCreation(vm);
- return result;
-}
-
-void GeneratorFrame::save(ExecState* exec, const FastBitVector& liveCalleeLocals)
-{
- // Only save callee locals.
- // Every time a generator is called (or resumed), parameters should be replaced.
- ASSERT(liveCalleeLocals.numBits() <= m_numberOfCalleeLocals);
- liveCalleeLocals.forEachSetBit([&](size_t index) {
- localAt(index).set(exec->vm(), this, exec->uncheckedR(virtualRegisterForLocal(index)).jsValue());
- });
-}
-
-void GeneratorFrame::resume(ExecState* exec, const FastBitVector& liveCalleeLocals)
-{
- // Only resume callee locals.
- // Every time a generator is called (or resumed), parameters should be replaced.
- liveCalleeLocals.forEachSetBit([&](size_t index) {
- exec->uncheckedR(virtualRegisterForLocal(index)) = localAt(index).get();
- localAt(index).clear();
- });
-}
-
-void GeneratorFrame::visitChildren(JSCell* cell, SlotVisitor& visitor)
-{
- GeneratorFrame* thisObject = jsCast<GeneratorFrame*>(cell);
- Base::visitChildren(thisObject, visitor);
- // Since only true cell pointers are stored as a cell, we can safely mark them.
- visitor.appendValues(thisObject->locals(), thisObject->m_numberOfCalleeLocals);
-}
-
-} // namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorFrameh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorFrame.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorFrame.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorFrame.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,90 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GeneratorFrame_h
-#define GeneratorFrame_h
-
-#include "JSCell.h"
-#include <wtf/FastBitVector.h>
-
-namespace JSC {
-
-class GeneratorFrame : public JSCell {
- friend class JIT;
-#if ENABLE(DFG_JIT)
- friend class DFG::SpeculativeJIT;
- friend class DFG::JITCompiler;
-#endif
- friend class VM;
-public:
- typedef JSCell Base;
- static const unsigned StructureFlags = StructureIsImmortal | Base::StructureFlags;
-
- DECLARE_EXPORT_INFO;
-
- static GeneratorFrame* create(VM&, size_t numberOfCalleeLocals);
-
- WriteBarrierBase<Unknown>* locals()
- {
- return bitwise_cast<WriteBarrierBase<Unknown>*>(bitwise_cast<char*>(this) + offsetOfLocals());
- }
-
- WriteBarrierBase<Unknown>& localAt(size_t index)
- {
- ASSERT(index < m_numberOfCalleeLocals);
- return locals()[index];
- }
-
- static size_t offsetOfLocals()
- {
- return WTF::roundUpToMultipleOf<sizeof(WriteBarrier<Unknown>)>(sizeof(GeneratorFrame));
- }
-
- static size_t allocationSizeForLocals(unsigned numberOfLocals)
- {
- return offsetOfLocals() + numberOfLocals * sizeof(WriteBarrier<Unknown>);
- }
-
- static Structure* createStructure(VM&, JSGlobalObject*, JSValue prototype);
-
- void save(ExecState*, const FastBitVector& liveCalleeLocals);
- void resume(ExecState*, const FastBitVector& liveCalleeLocals);
-
-private:
- GeneratorFrame(VM&, size_t numberOfCalleeLocals);
-
- size_t m_numberOfCalleeLocals;
-
- friend class LLIntOffsetsExtractor;
-
- void finishCreation(VM&);
-
-protected:
- static void visitChildren(JSCell*, SlotVisitor&);
-};
-
-} // namespace JSC
-
-#endif // GeneratorFrame_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorFunctionConstructorcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,77 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "GeneratorFunctionConstructor.h"
-
-#include "FunctionConstructor.h"
-#include "GeneratorFunctionPrototype.h"
-#include "JSCInlines.h"
-
-namespace JSC {
-
-STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(GeneratorFunctionConstructor);
-
-const ClassInfo GeneratorFunctionConstructor::s_info = { "GeneratorFunction", &Base::s_info, nullptr, CREATE_METHOD_TABLE(GeneratorFunctionConstructor) };
-
-GeneratorFunctionConstructor::GeneratorFunctionConstructor(VM& vm, Structure* structure)
- : InternalFunction(vm, structure)
-{
-}
-
-void GeneratorFunctionConstructor::finishCreation(VM& vm, GeneratorFunctionPrototype* generatorFunctionPrototype)
-{
- Base::finishCreation(vm, "GeneratorFunction");
- putDirectWithoutTransition(vm, vm.propertyNames->prototype, generatorFunctionPrototype, DontEnum | DontDelete | ReadOnly);
-
- // Number of arguments for constructor
- putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
-}
-
-static EncodedJSValue JSC_HOST_CALL callGeneratorFunctionConstructor(ExecState* exec)
-{
- ArgList args(exec);
- return JSValue::encode(constructFunction(exec, asInternalFunction(exec->callee())->globalObject(), args, FunctionConstructionMode::Generator));
-}
-
-static EncodedJSValue JSC_HOST_CALL constructGeneratorFunctionConstructor(ExecState* exec)
-{
- ArgList args(exec);
- return JSValue::encode(constructFunction(exec, asInternalFunction(exec->callee())->globalObject(), args, FunctionConstructionMode::Generator));
-}
-
-CallType GeneratorFunctionConstructor::getCallData(JSCell*, CallData& callData)
-{
- callData.native.function = callGeneratorFunctionConstructor;
- return CallTypeHost;
-}
-
-ConstructType GeneratorFunctionConstructor::getConstructData(JSCell*, ConstructData& constructData)
-{
- constructData.native.function = constructGeneratorFunctionConstructor;
- return ConstructTypeHost;
-}
-
-} // namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorFunctionConstructorh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorFunctionConstructor.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,66 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GeneratorFunctionConstructor_h
-#define GeneratorFunctionConstructor_h
-
-#include "InternalFunction.h"
-
-namespace WTF {
-class TextPosition;
-}
-
-namespace JSC {
-
-class GeneratorFunctionPrototype;
-
-class GeneratorFunctionConstructor : public InternalFunction {
-public:
- typedef InternalFunction Base;
-
- static GeneratorFunctionConstructor* create(VM& vm, Structure* structure, GeneratorFunctionPrototype* generatorFunctionPrototype)
- {
- GeneratorFunctionConstructor* constructor = new (NotNull, allocateCell<GeneratorFunctionConstructor>(vm.heap)) GeneratorFunctionConstructor(vm, structure);
- constructor->finishCreation(vm, generatorFunctionPrototype);
- return constructor;
- }
-
- DECLARE_INFO;
-
- static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
- {
- return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
- }
-
-private:
- GeneratorFunctionConstructor(VM&, Structure*);
- void finishCreation(VM&, GeneratorFunctionPrototype*);
- static ConstructType getConstructData(JSCell*, ConstructData&);
- static CallType getCallData(JSCell*, CallData&);
-};
-
-} // namespace JSC
-
-#endif // GeneratorFunctionConstructor_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorFunctionPrototypecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,56 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "GeneratorFunctionPrototype.h"
-
-#include "BuiltinExecutables.h"
-#include "BuiltinNames.h"
-#include "Error.h"
-#include "JSArray.h"
-#include "JSCInlines.h"
-#include "JSFunction.h"
-#include "JSString.h"
-#include "JSStringBuilder.h"
-#include "Lexer.h"
-
-namespace JSC {
-
-STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(GeneratorFunctionPrototype);
-
-const ClassInfo GeneratorFunctionPrototype::s_info = { "GeneratorFunction", &Base::s_info, nullptr, CREATE_METHOD_TABLE(GeneratorFunctionPrototype) };
-
-GeneratorFunctionPrototype::GeneratorFunctionPrototype(VM& vm, Structure* structure)
- : JSNonFinalObject(vm, structure)
-{
-}
-
-void GeneratorFunctionPrototype::finishCreation(VM& vm)
-{
- Base::finishCreation(vm);
- putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), DontDelete | ReadOnly | DontEnum);
-}
-
-} // namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorFunctionPrototypeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,60 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GeneratorFunctionPrototype_h
-#define GeneratorFunctionPrototype_h
-
-#include "JSObject.h"
-
-namespace JSC {
-
-class GeneratorFunctionPrototype : public JSNonFinalObject {
-public:
- typedef JSNonFinalObject Base;
-
- static GeneratorFunctionPrototype* create(VM& vm, Structure* structure)
- {
- GeneratorFunctionPrototype* prototype = new (NotNull, allocateCell<GeneratorFunctionPrototype>(vm.heap)) GeneratorFunctionPrototype(vm, structure);
- prototype->finishCreation(vm);
- return prototype;
- }
-
- static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue proto)
- {
- return Structure::create(vm, globalObject, proto, TypeInfo(ObjectType, StructureFlags), info());
- }
-
- DECLARE_INFO;
-
-protected:
- void finishCreation(VM&);
-
-private:
- GeneratorFunctionPrototype(VM&, Structure*);
-};
-
-} // namespace JSC
-
-#endif // GeneratorFunctionPrototype_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorPrototypecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "GeneratorPrototype.h"
-
-#include "JSCBuiltins.h"
-#include "JSCJSValueInlines.h"
-#include "JSCellInlines.h"
-#include "JSGlobalObject.h"
-#include "StructureInlines.h"
-
-#include "GeneratorPrototype.lut.h"
-
-namespace JSC {
-
-const ClassInfo GeneratorPrototype::s_info = { "Generator", &Base::s_info, &generatorPrototypeTable, CREATE_METHOD_TABLE(GeneratorPrototype) };
-
-/* Source for GeneratorPrototype.lut.h
-@begin generatorPrototypeTable
- next JSBuiltin DontEnum|Function 1
- return JSBuiltin DontEnum|Function 1
- throw JSBuiltin DontEnum|Function 1
-@end
-*/
-
-void GeneratorPrototype::finishCreation(VM& vm)
-{
- Base::finishCreation(vm);
- ASSERT(inherits(info()));
- putDirectWithoutTransition(vm, vm.propertyNames->toStringTagSymbol, jsString(&vm, "Generator"), DontEnum | ReadOnly);
- vm.prototypeMap.addPrototype(this);
-}
-
-bool GeneratorPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
-{
- return getStaticFunctionSlot<Base>(exec, generatorPrototypeTable, jsCast<GeneratorPrototype*>(object), propertyName, slot);
-}
-
-} // namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorPrototypeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,64 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GeneratorPrototype_h
-#define GeneratorPrototype_h
-
-#include "JSObject.h"
-
-namespace JSC {
-
-class GeneratorPrototype : public JSNonFinalObject {
-public:
- typedef JSNonFinalObject Base;
- static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot;
-
- static GeneratorPrototype* create(VM& vm, JSGlobalObject*, Structure* structure)
- {
- GeneratorPrototype* prototype = new (NotNull, allocateCell<GeneratorPrototype>(vm.heap)) GeneratorPrototype(vm, structure);
- prototype->finishCreation(vm);
- return prototype;
- }
-
- DECLARE_INFO;
-
- static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
- {
- return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
- }
-
- static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
-
-private:
- GeneratorPrototype(VM& vm, Structure* structure)
- : Base(vm, structure)
- {
- }
- void finishCreation(VM&);
-};
-
-}
-
-#endif // !defined(GeneratorPrototype_h)
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGeneratorThisModeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/GeneratorThisMode.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GeneratorThisMode.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/GeneratorThisMode.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,63 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GeneratorThisMode_h
-#define GeneratorThisMode_h
-
-namespace JSC {
-
-// http://ecma-international.org/ecma-262/6.0/#sec-functionallocate
-// http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-construct-argumentslist-newtarget
-// When the function is a GeneratorFunction, its [[ConstructorKind]] is always "derived".
-// This means that OrdinaryCallBindThis in section 9.2.2 is never executed for GeneratorFunction.
-// So, when we execute the following,
-//
-// function *gen()
-// {
-// yield this
-// }
-//
-// {
-// let g = gen();
-// // |this| should be global.
-// g.next();
-// }
-//
-// {
-// let g = new gen();
-// // |this| in gen should be TDZ (and it won't be filled).
-// g.next();
-// }
-//
-// The following flag manages this state. When GeneratorFunction is called as a constructor, it returns a Generator that function has GeneratorThisMode::Empty flag.
-// In this case, when accessing |this|, a TDZ reference error occurs.
-enum class GeneratorThisMode : unsigned {
- Empty,
- NonEmpty
-};
-
-}
-
-#endif // GeneratorThisMode_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSFunction.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #include "CallFrame.h"
</span><span class="cx"> #include "ExceptionHelpers.h"
</span><span class="cx"> #include "FunctionPrototype.h"
</span><del>-#include "GeneratorPrototype.h"
</del><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "JSArray.h"
</span><span class="cx"> #include "JSBoundFunction.h"
</span><span class="lines">@@ -349,12 +348,7 @@
</span><span class="cx"> unsigned attributes;
</span><span class="cx"> PropertyOffset offset = thisObject->getDirectOffset(vm, propertyName, attributes);
</span><span class="cx"> if (!isValidOffset(offset)) {
</span><del>- JSObject* prototype = nullptr;
- if (thisObject->jsExecutable()->parseMode() == SourceParseMode::GeneratorWrapperFunctionMode)
- prototype = constructEmptyObject(exec, thisObject->globalObject()->generatorPrototype());
- else
- prototype = constructEmptyObject(exec);
-
</del><ins>+ JSObject* prototype = constructEmptyObject(exec);
</ins><span class="cx"> prototype->putDirect(vm, exec->propertyNames().constructor, thisObject, DontEnum);
</span><span class="cx"> thisObject->putDirect(vm, exec->propertyNames().prototype, prototype, DontDelete | DontEnum);
</span><span class="cx"> offset = thisObject->getDirectOffset(vm, exec->propertyNames().prototype, attributes);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGeneratorFunctioncpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,67 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JSGeneratorFunction.h"
-
-#include "Error.h"
-#include "JSCInlines.h"
-#include "JSCJSValue.h"
-#include "JSFunction.h"
-#include "JSFunctionInlines.h"
-#include "JSObject.h"
-#include "PropertySlot.h"
-#include "VM.h"
-
-namespace JSC {
-
-const ClassInfo JSGeneratorFunction::s_info = { "GeneratorFunction", &Base::s_info, nullptr, CREATE_METHOD_TABLE(JSGeneratorFunction) };
-
-JSGeneratorFunction::JSGeneratorFunction(VM& vm, FunctionExecutable* executable, JSScope* scope)
- : Base(vm, executable, scope, scope->globalObject()->generatorFunctionStructure())
-{
-}
-
-JSGeneratorFunction* JSGeneratorFunction::createImpl(VM& vm, FunctionExecutable* executable, JSScope* scope)
-{
- JSGeneratorFunction* generatorFunction = new (NotNull, allocateCell<JSGeneratorFunction>(vm.heap)) JSGeneratorFunction(vm, executable, scope);
- ASSERT(generatorFunction->structure()->globalObject());
- generatorFunction->finishCreation(vm);
- return generatorFunction;
-}
-
-JSGeneratorFunction* JSGeneratorFunction::create(VM& vm, FunctionExecutable* executable, JSScope* scope)
-{
- JSGeneratorFunction* generatorFunction = createImpl(vm, executable, scope);
- executable->singletonFunction()->notifyWrite(vm, generatorFunction, "Allocating a generator function");
- return generatorFunction;
-}
-
-JSGeneratorFunction* JSGeneratorFunction::createWithInvalidatedReallocationWatchpoint(VM& vm, FunctionExecutable* executable, JSScope* scope)
-{
- return createImpl(vm, executable, scope);
-}
-
-} // namespace JSC
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGeneratorFunctionh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/JSGeneratorFunction.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,82 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JSGeneratorFunction_h
-#define JSGeneratorFunction_h
-
-#include "JSFunction.h"
-
-namespace JSC {
-
-class JSGlobalObject;
-class LLIntOffsetsExtractor;
-class LLIntDesiredOffsets;
-
-class JSGeneratorFunction : public JSFunction {
- friend class JIT;
-#if ENABLE(DFG_JIT)
- friend class DFG::SpeculativeJIT;
- friend class DFG::JITCompiler;
-#endif
- friend class VM;
-public:
- typedef JSFunction Base;
-
- enum class GeneratorResumeMode : int32_t {
- NormalMode = 0,
- ReturnMode = 1,
- ThrowMode = 2
- };
-
- const static unsigned StructureFlags = Base::StructureFlags;
-
- DECLARE_EXPORT_INFO;
-
- static JSGeneratorFunction* create(VM&, FunctionExecutable*, JSScope*);
- static JSGeneratorFunction* createWithInvalidatedReallocationWatchpoint(VM&, FunctionExecutable*, JSScope*);
-
- static size_t allocationSize(size_t inlineCapacity)
- {
- ASSERT_UNUSED(inlineCapacity, !inlineCapacity);
- return sizeof(JSGeneratorFunction);
- }
-
- static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
- {
- ASSERT(globalObject);
- return Structure::create(vm, globalObject, prototype, TypeInfo(JSFunctionType, StructureFlags), info());
- }
-
-private:
- JSGeneratorFunction(VM&, FunctionExecutable*, JSScope*);
-
- static JSGeneratorFunction* createImpl(VM&, FunctionExecutable*, JSScope*);
-
- friend class LLIntOffsetsExtractor;
-};
-
-} // namespace JSC
-
-#endif // JSGeneratorFunction_h
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -50,9 +50,6 @@
</span><span class="cx"> #include "ErrorPrototype.h"
</span><span class="cx"> #include "FunctionConstructor.h"
</span><span class="cx"> #include "FunctionPrototype.h"
</span><del>-#include "GeneratorFunctionConstructor.h"
-#include "GeneratorFunctionPrototype.h"
-#include "GeneratorPrototype.h"
</del><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "HeapIterationScope.h"
</span><span class="cx"> #include "InspectorInstrumentationObject.h"
</span><span class="lines">@@ -75,7 +72,6 @@
</span><span class="cx"> #include "JSDollarVM.h"
</span><span class="cx"> #include "JSDollarVMPrototype.h"
</span><span class="cx"> #include "JSFunction.h"
</span><del>-#include "JSGeneratorFunction.h"
</del><span class="cx"> #include "JSGenericTypedArrayViewConstructorInlines.h"
</span><span class="cx"> #include "JSGenericTypedArrayViewInlines.h"
</span><span class="cx"> #include "JSGenericTypedArrayViewPrototypeInlines.h"
</span><span class="lines">@@ -388,7 +384,6 @@
</span><span class="cx">
</span><span class="cx"> FOR_EACH_BUILTIN_DERIVED_ITERATOR_TYPE(CREATE_PROTOTYPE_FOR_DERIVED_ITERATOR_TYPE)
</span><span class="cx"> m_propertyNameIteratorStructure.set(vm, this, JSPropertyNameIterator::createStructure(vm, this, m_iteratorPrototype.get()));
</span><del>- m_generatorPrototype.set(vm, this, GeneratorPrototype::create(vm, this, GeneratorPrototype::createStructure(vm, this, m_iteratorPrototype.get())));
</del><span class="cx">
</span><span class="cx"> #undef CREATE_PROTOTYPE_FOR_DERIVED_ITERATOR_TYPE
</span><span class="cx">
</span><span class="lines">@@ -425,14 +420,6 @@
</span><span class="cx"> m_syntaxErrorConstructor.set(vm, this, NativeErrorConstructor::create(vm, this, nativeErrorStructure, nativeErrorPrototypeStructure, ASCIILiteral("SyntaxError")));
</span><span class="cx"> m_typeErrorConstructor.set(vm, this, NativeErrorConstructor::create(vm, this, nativeErrorStructure, nativeErrorPrototypeStructure, ASCIILiteral("TypeError")));
</span><span class="cx"> m_URIErrorConstructor.set(vm, this, NativeErrorConstructor::create(vm, this, nativeErrorStructure, nativeErrorPrototypeStructure, ASCIILiteral("URIError")));
</span><del>-
- m_generatorFunctionPrototype.set(vm, this, GeneratorFunctionPrototype::create(vm, GeneratorFunctionPrototype::createStructure(vm, this, m_functionPrototype.get())));
- GeneratorFunctionConstructor* generatorFunctionConstructor = GeneratorFunctionConstructor::create(vm, GeneratorFunctionConstructor::createStructure(vm, this, functionConstructor), m_generatorFunctionPrototype.get());
- m_generatorFunctionPrototype->putDirectWithoutTransition(vm, vm.propertyNames->constructor, generatorFunctionConstructor, DontEnum);
- m_generatorFunctionStructure.set(vm, this, JSGeneratorFunction::createStructure(vm, this, m_generatorFunctionPrototype.get()));
-
- m_generatorPrototype->putDirectWithoutTransition(vm, vm.propertyNames->constructor, m_generatorFunctionPrototype.get(), DontEnum);
- m_generatorFunctionPrototype->putDirectWithoutTransition(vm, vm.propertyNames->prototype, m_generatorPrototype.get(), DontEnum);
</del><span class="cx">
</span><span class="cx"> m_objectPrototype->putDirectWithoutTransition(vm, vm.propertyNames->constructor, objectConstructor, DontEnum);
</span><span class="cx"> m_functionPrototype->putDirectWithoutTransition(vm, vm.propertyNames->constructor, functionConstructor, DontEnum);
</span><span class="lines">@@ -566,7 +553,6 @@
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->builtinNames().promiseResolveThenableJobPrivateName(), JSFunction::createBuiltinFunction(vm, promiseOperationsPromiseResolveThenableJobCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly),
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->builtinNames().InspectorInstrumentationPrivateName(), InspectorInstrumentationObject::create(vm, this, InspectorInstrumentationObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum | DontDelete | ReadOnly),
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->MapPrivateName, mapConstructor, DontEnum | DontDelete | ReadOnly),
</span><del>- GlobalPropertyInfo(vm.propertyNames->builtinNames().generatorResumePrivateName(), JSFunction::createBuiltinFunction(vm, generatorPrototypeGeneratorResumeCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly),
</del><span class="cx"> };
</span><span class="cx"> addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));
</span><span class="cx">
</span><span class="lines">@@ -834,8 +820,6 @@
</span><span class="cx"> visitor.append(&thisObject->m_arrayPrototype);
</span><span class="cx"> visitor.append(&thisObject->m_errorPrototype);
</span><span class="cx"> visitor.append(&thisObject->m_iteratorPrototype);
</span><del>- visitor.append(&thisObject->m_generatorFunctionPrototype);
- visitor.append(&thisObject->m_generatorPrototype);
</del><span class="cx">
</span><span class="cx"> visitor.append(&thisObject->m_debuggerScopeStructure);
</span><span class="cx"> visitor.append(&thisObject->m_withScopeStructure);
</span><span class="lines">@@ -868,7 +852,6 @@
</span><span class="cx"> visitor.append(&thisObject->m_namedFunctionStructure);
</span><span class="cx"> visitor.append(&thisObject->m_symbolObjectStructure);
</span><span class="cx"> visitor.append(&thisObject->m_regExpStructure);
</span><del>- visitor.append(&thisObject->m_generatorFunctionStructure);
</del><span class="cx"> visitor.append(&thisObject->m_regExpMatchesArrayStructure);
</span><span class="cx"> visitor.append(&thisObject->m_moduleRecordStructure);
</span><span class="cx"> visitor.append(&thisObject->m_moduleNamespaceObjectStructure);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -63,8 +63,6 @@
</span><span class="cx"> class FunctionCodeBlock;
</span><span class="cx"> class FunctionExecutable;
</span><span class="cx"> class FunctionPrototype;
</span><del>-class GeneratorPrototype;
-class GeneratorFunctionPrototype;
</del><span class="cx"> class GetterSetter;
</span><span class="cx"> class GlobalCodeBlock;
</span><span class="cx"> class InputCursor;
</span><span class="lines">@@ -231,8 +229,6 @@
</span><span class="cx"> WriteBarrier<ArrayPrototype> m_arrayPrototype;
</span><span class="cx"> WriteBarrier<RegExpPrototype> m_regExpPrototype;
</span><span class="cx"> WriteBarrier<IteratorPrototype> m_iteratorPrototype;
</span><del>- WriteBarrier<GeneratorFunctionPrototype> m_generatorFunctionPrototype;
- WriteBarrier<GeneratorPrototype> m_generatorPrototype;
</del><span class="cx">
</span><span class="cx"> WriteBarrier<Structure> m_debuggerScopeStructure;
</span><span class="cx"> WriteBarrier<Structure> m_withScopeStructure;
</span><span class="lines">@@ -266,7 +262,6 @@
</span><span class="cx"> PropertyOffset m_functionNameOffset;
</span><span class="cx"> WriteBarrier<Structure> m_privateNameStructure;
</span><span class="cx"> WriteBarrier<Structure> m_regExpStructure;
</span><del>- WriteBarrier<Structure> m_generatorFunctionStructure;
</del><span class="cx"> WriteBarrier<Structure> m_consoleStructure;
</span><span class="cx"> WriteBarrier<Structure> m_dollarVMStructure;
</span><span class="cx"> WriteBarrier<Structure> m_internalFunctionStructure;
</span><span class="lines">@@ -458,8 +453,6 @@
</span><span class="cx"> RegExpPrototype* regExpPrototype() const { return m_regExpPrototype.get(); }
</span><span class="cx"> ErrorPrototype* errorPrototype() const { return m_errorPrototype.get(); }
</span><span class="cx"> IteratorPrototype* iteratorPrototype() const { return m_iteratorPrototype.get(); }
</span><del>- GeneratorFunctionPrototype* generatorFunctionPrototype() const { return m_generatorFunctionPrototype.get(); }
- GeneratorPrototype* generatorPrototype() const { return m_generatorPrototype.get(); }
</del><span class="cx">
</span><span class="cx"> Structure* debuggerScopeStructure() const { return m_debuggerScopeStructure.get(); }
</span><span class="cx"> Structure* withScopeStructure() const { return m_withScopeStructure.get(); }
</span><span class="lines">@@ -513,7 +506,6 @@
</span><span class="cx"> Structure* internalFunctionStructure() const { return m_internalFunctionStructure.get(); }
</span><span class="cx"> Structure* mapStructure() const { return m_mapStructure.get(); }
</span><span class="cx"> Structure* regExpStructure() const { return m_regExpStructure.get(); }
</span><del>- Structure* generatorFunctionStructure() const { return m_generatorFunctionStructure.get(); }
</del><span class="cx"> Structure* setStructure() const { return m_setStructure.get(); }
</span><span class="cx"> Structure* stringObjectStructure() const { return m_stringObjectStructure.get(); }
</span><span class="cx"> Structure* symbolObjectStructure() const { return m_symbolObjectStructure.get(); }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeModuleLoaderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ModuleLoaderObject.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ModuleLoaderObject.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/ModuleLoaderObject.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -281,7 +281,7 @@
</span><span class="cx"> ParserError error;
</span><span class="cx"> std::unique_ptr<ModuleProgramNode> moduleProgramNode = parse<ModuleProgramNode>(
</span><span class="cx"> &vm, sourceCode, Identifier(), JSParserBuiltinMode::NotBuiltin,
</span><del>- JSParserStrictMode::Strict, SourceParseMode::ModuleAnalyzeMode, SuperBinding::NotNeeded, error);
</del><ins>+ JSParserStrictMode::Strict, SourceParseMode::ModuleAnalyzeMode, error);
</ins><span class="cx">
</span><span class="cx"> if (error.isValid()) {
</span><span class="cx"> throwVMError(exec, error.toErrorObject(exec->lexicalGlobalObject(), sourceCode));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.cpp (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.cpp        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/VM.cpp        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -45,7 +45,6 @@
</span><span class="cx"> #include "FTLThunks.h"
</span><span class="cx"> #include "FunctionConstructor.h"
</span><span class="cx"> #include "GCActivityCallback.h"
</span><del>-#include "GeneratorFrame.h"
</del><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "Heap.h"
</span><span class="cx"> #include "HeapIterationScope.h"
</span><span class="lines">@@ -245,7 +244,6 @@
</span><span class="cx"> inferredTypeStructure.set(*this, InferredType::createStructure(*this, 0, jsNull()));
</span><span class="cx"> inferredTypeTableStructure.set(*this, InferredTypeTable::createStructure(*this, 0, jsNull()));
</span><span class="cx"> functionRareDataStructure.set(*this, FunctionRareData::createStructure(*this, 0, jsNull()));
</span><del>- generatorFrameStructure.set(*this, GeneratorFrame::createStructure(*this, 0, jsNull()));
</del><span class="cx"> exceptionStructure.set(*this, Exception::createStructure(*this, 0, jsNull()));
</span><span class="cx"> promiseDeferredStructure.set(*this, JSPromiseDeferred::createStructure(*this, 0, jsNull()));
</span><span class="cx"> internalPromiseDeferredStructure.set(*this, JSInternalPromiseDeferred::createStructure(*this, 0, jsNull()));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/runtime/VM.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -304,7 +304,6 @@
</span><span class="cx"> Strong<Structure> inferredTypeStructure;
</span><span class="cx"> Strong<Structure> inferredTypeTableStructure;
</span><span class="cx"> Strong<Structure> functionRareDataStructure;
</span><del>- Strong<Structure> generatorFrameStructure;
</del><span class="cx"> Strong<Structure> exceptionStructure;
</span><span class="cx"> Strong<Structure> promiseDeferredStructure;
</span><span class="cx"> Strong<Structure> internalPromiseDeferredStructure;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6generators_yield_star_generic_iterablesjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_generic_iterables.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_generic_iterables.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_generic_iterables.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,24 +1,3 @@
</span><del>-if (typeof global === 'undefined') {
-var global = this;
-}
-function __createIterableObject(arr, methods) {
-methods = methods || {};
-if (typeof Symbol !== 'function' || !Symbol.iterator) {
- return {};
-}
-arr.length++;
-var iterator = {
- next: function() {
- return { value: arr.shift(), done: arr.length <= 0 };
- },
- 'return': methods['return'],
- 'throw': methods['throw']
-};
-var iterable = {};
-iterable[Symbol.iterator] = function(){ return iterator; }
-return iterable;
-}
-
</del><span class="cx"> function test() {
</span><span class="cx">
</span><span class="cx"> var iterator = (function * generator() {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6generators_yield_star_instances_of_iterablesjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_instances_of_iterables.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_instances_of_iterables.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_instances_of_iterables.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,24 +1,3 @@
</span><del>-if (typeof global === 'undefined') {
-var global = this;
-}
-function __createIterableObject(arr, methods) {
-methods = methods || {};
-if (typeof Symbol !== 'function' || !Symbol.iterator) {
- return {};
-}
-arr.length++;
-var iterator = {
- next: function() {
- return { value: arr.shift(), done: arr.length <= 0 };
- },
- 'return': methods['return'],
- 'throw': methods['throw']
-};
-var iterable = {};
-iterable[Symbol.iterator] = function(){ return iterator; }
-return iterable;
-}
-
</del><span class="cx"> function test() {
</span><span class="cx">
</span><span class="cx"> var iterator = (function * generator() {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6generators_yield_star_iterator_closingjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,24 +1,3 @@
</span><del>-if (typeof global === 'undefined') {
-var global = this;
-}
-function __createIterableObject(arr, methods) {
-methods = methods || {};
-if (typeof Symbol !== 'function' || !Symbol.iterator) {
- return {};
-}
-arr.length++;
-var iterator = {
- next: function() {
- return { value: arr.shift(), done: arr.length <= 0 };
- },
- 'return': methods['return'],
- 'throw': methods['throw']
-};
-var iterable = {};
-iterable[Symbol.iterator] = function(){ return iterator; }
-return iterable;
-}
-
</del><span class="cx"> function test() {
</span><span class="cx">
</span><span class="cx"> var closed = '';
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6generators_yield_star_iterator_closing_via_throwjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing_via_throw.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing_via_throw.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/es6/generators_yield_star_iterator_closing_via_throw.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,24 +1,3 @@
</span><del>-if (typeof global === 'undefined') {
-var global = this;
-}
-function __createIterableObject(arr, methods) {
-methods = methods || {};
-if (typeof Symbol !== 'function' || !Symbol.iterator) {
- return {};
-}
-arr.length++;
-var iterator = {
- next: function() {
- return { value: arr.shift(), done: arr.length <= 0 };
- },
- 'return': methods['return'],
- 'throw': methods['throw']
-};
-var iterable = {};
-iterable[Symbol.iterator] = function(){ return iterator; }
-return iterable;
-}
-
</del><span class="cx"> function test() {
</span><span class="cx">
</span><span class="cx"> var closed = false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6yaml"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/es6.yaml (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6.yaml        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/es6.yaml        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -727,7 +727,7 @@
</span><span class="cx"> - path: es6/Array_is_subclassable_correct_prototype_chain.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/Array_static_methods_Array.from_generator_instances.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/Array_static_methods_Array.from_generic_iterables.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/Array_static_methods_Array.from_instances_of_generic_iterables.js
</span><span class="lines">@@ -735,7 +735,7 @@
</span><span class="cx"> - path: es6/Array_static_methods_Array.from_iterator_closing.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/Array_static_methods_Array.from_map_function_generator_instances.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/Array_static_methods_Array.from_map_function_generic_iterables.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/Array_static_methods_Array.from_map_function_instances_of_iterables.js
</span><span class="lines">@@ -761,7 +761,7 @@
</span><span class="cx"> - path: es6/destructuring_nested_rest.js
</span><span class="cx"> cmd: runES6 :normal
</span><span class="cx"> - path: es6/destructuring_with_generator_instances.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/destructuring_with_generic_iterables.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/destructuring_with_instances_of_generic_iterables.js
</span><span class="lines">@@ -771,7 +771,7 @@
</span><span class="cx"> - path: es6/for..of_loops_iterator_closing_throw.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/for..of_loops_with_generator_instances.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/for..of_loops_with_generic_iterables.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/for..of_loops_with_instances_of_generic_iterables.js
</span><span class="lines">@@ -811,55 +811,55 @@
</span><span class="cx"> - path: es6/function_name_property_variables_function.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/generators_%GeneratorPrototype%.constructor.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_%GeneratorPrototype%.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_%GeneratorPrototype%.return.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_%GeneratorPrototype%.throw.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_basic_functionality.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_cant_use_this_with_new.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_computed_shorthand_generators.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_computed_shorthand_generators_classes.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_correct_this_binding.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_generator_function_expressions.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_sending.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_shorthand_generator_methods.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_shorthand_generator_methods_classes.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_string-keyed_shorthand_generator_methods.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_arrays.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_astral_plane_strings.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_generator_instances.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_generic_iterables.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_instances_of_iterables.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_iterator_closing.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_iterator_closing_via_throw.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_on_non-iterables_is_a_runtime_error.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_sparse_arrays.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_star_strings.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/generators_yield_operator_precedence.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/Map_iterator_closing.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/Map_Map[Symbol.species].js
</span><span class="lines">@@ -1113,7 +1113,7 @@
</span><span class="cx"> - path: es6/spread_..._operator_with_astral_plane_strings_in_function_calls.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/spread_..._operator_with_generator_instances_in_arrays.js
</span><del>- cmd: runES6 :normal
</del><ins>+ cmd: runES6 :fail
</ins><span class="cx"> - path: es6/spread_..._operator_with_generator_instances_in_calls.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/spread_..._operator_with_generic_iterables_in_arrays.js
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorargumentsfromfunctionjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-arguments-from-function.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-arguments-from-function.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-arguments-from-function.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,18 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error(`bad value: ${String(actual)}`);
-}
-
-function *gen(a, b, c)
-{
- function test()
- {
- return arguments;
- }
-
- return test;
-}
-
-let g = gen(1, 2, 3);
-let {value: func} = g.next();
-shouldBe(func().length, 0);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorargumentsjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-arguments.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-arguments.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-arguments.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,107 +0,0 @@
</span><del>-function shouldBe(actual, expected)
-{
- if (actual !== expected)
- throw new Error(`bad value: ${String(actual)}`);
-}
-
-(function () {
- function *g1(a, b, c)
- {
- yield arguments;
- yield arguments;
- }
-
- var g = g1(0, 1, 2);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
-
- function *g2(a, b, c)
- {
- yield arguments;
- yield arguments;
- a = yield a;
- yield arguments;
- b = yield b;
- yield arguments;
- c = yield c;
- yield arguments;
- }
- var g = g2(0, 1, 2);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 0);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":42,"1":1,"2":2}`);
- shouldBe(g.next().value, 1);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":42,"1":42,"2":2}`);
- shouldBe(g.next().value, 2);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":42,"1":42,"2":42}`);
-}());
-
-(function () {
- function *g1(a, b, c)
- {
- "use strict";
- yield arguments;
- yield arguments;
- }
-
- var g = g1(0, 1, 2);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
-
- function *g2(a, b, c)
- {
- "use strict";
- yield arguments;
- yield arguments;
- a = yield a;
- yield arguments;
- b = yield b;
- yield arguments;
- c = yield c;
- yield arguments;
- }
- var g = g2(0, 1, 2);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 0);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 1);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 2);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":0,"1":1,"2":2}`);
-}());
-
-(function () {
- "use strict";
- function *g1(a, b, c)
- {
- yield arguments;
- yield arguments;
- }
-
- var g = g1(0, 1, 2);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
-
- function *g2(a, b, c)
- {
- yield arguments;
- yield arguments;
- a = yield a;
- yield arguments;
- b = yield b;
- yield arguments;
- c = yield c;
- yield arguments;
- }
- var g = g2(0, 1, 2);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(JSON.stringify(g.next().value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 0);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 1);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":0,"1":1,"2":2}`);
- shouldBe(g.next().value, 2);
- shouldBe(JSON.stringify(g.next(42).value), `{"0":0,"1":1,"2":2}`);
-}());
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorclassmethodssyntaxjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-class-methods-syntax.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-class-methods-syntax.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-class-methods-syntax.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,48 +0,0 @@
</span><del>-function testSyntax(script) {
- try {
- eval(script);
- } catch (error) {
- if (error instanceof SyntaxError)
- throw new Error("Bad error: " + String(error));
- }
-}
-
-function testSyntaxError(script, message) {
- var error = null;
- try {
- eval(script);
- } catch (e) {
- error = e;
- }
- if (!error)
- throw new Error("Expected syntax error not thrown");
-
- if (String(error) !== message)
- throw new Error("Bad error: " + String(error));
-}
-
-testSyntaxError(`
-class Cocoa {
- *constructor()
- {
- }
-}
-`, `SyntaxError: Cannot declare a generator named 'constructor'.`);
-
-testSyntax(`
-class Cocoa {
- *ok()
- {
- yield 42;
- }
-}
-`);
-
-testSyntax(`
-class Cocoa {
- static *ok()
- {
- yield 42;
- }
-}
-`);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorclassmethodsjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-class-methods.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-class-methods.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-class-methods.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error(`bad value: ${String(actual)}`);
-}
-
-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-class A {
- *gen()
- {
- yield this;
- yield this;
- return 42;
- }
-
- static *staticGen()
- {
- yield this;
- yield this;
- return 42;
- }
-}
-{
- let a = new A();
- let g = a.gen();
- shouldBe(g.next().value, a);
- shouldBe(g.next().value, a);
- shouldBe(g.next().value, 42);
- shouldBe(g.next().done, true);
-}
-{
- let a = new A();
- shouldThrow(() => {
- let g = new a.gen();
- }, `TypeError: function is not a constructor (evaluating 'new a.gen()')`);
-}
-
-{
- let g = A.staticGen();
- shouldBe(g.next().value, A);
- shouldBe(g.next().value, A);
- shouldBe(g.next().value, 42);
- shouldBe(g.next().done, true);
-}
-{
- shouldThrow(() => {
- let g = new A.staticGen();
- }, `TypeError: function is not a constructor (evaluating 'new A.staticGen()')`);
-}
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorevalthisjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-eval-this.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-eval-this.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-eval-this.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,65 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-function *gen() {
- yield eval("this");
-}
-
-var g = new gen();
-shouldThrow(() => {
- g.next().value;
-}, `ReferenceError: Cannot access uninitialized variable.`);
-
-class B { }
-
-(function() {
- eval('this');
- eval('this');
-}());
-
-class A extends B {
- constructor()
- {
- return eval('this');
- }
-}
-
-shouldThrow(() => {
- new A();
-}, `ReferenceError: Cannot access uninitialized variable.`);
-
-class C {
- *generator()
- {
- yield eval('this');
- }
-}
-
-shouldThrow(() => {
- let c = new C();
- let g = new c.generator();
- g.next();
-}, `TypeError: function is not a constructor (evaluating 'new c.generator()')`);
-
-(function () {
- let c = new C();
- let g = c.generator();
- shouldBe(g.next().value, c);
-}());
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorfunctionconstructorjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-function-constructor.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-function-constructor.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-function-constructor.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-var global = (new Function("return this"))();
-shouldBe(typeof global.GeneratorFunction, 'undefined');
-var generatorFunctionConstructor = (function *() { }).constructor;
-shouldBe(generatorFunctionConstructor.__proto__, Function);
-shouldBe(generatorFunctionConstructor.prototype.constructor, generatorFunctionConstructor);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorfunctionnamejs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-function-name.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-function-name.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-function-name.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,12 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-var ok = function *generator()
-{
- yield generator;
-};
-
-var g = ok();
-shouldBe(g.next().value, ok);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratormethodswithnongeneratorjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-methods-with-non-generator.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-methods-with-non-generator.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-methods-with-non-generator.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,31 +0,0 @@
</span><del>-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-function *gen() {
-}
-var g = gen();
-
-shouldThrow(() => {
- g.next.call({});
-}, `TypeError: |this| should be a generator`);
-
-
-shouldThrow(() => {
- g.throw.call({});
-}, `TypeError: |this| should be a generator`);
-
-shouldThrow(() => {
- g.return.call({});
-}, `TypeError: |this| should be a generator`);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorrelationsjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-relations.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-relations.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-relations.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,30 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-function *generatorFunction() {
-}
-let generator = generatorFunction();
-
-shouldBe(generator instanceof generatorFunction, true);
-shouldBe(typeof generator.__proto__, 'object');
-shouldBe(generator.__proto__, generatorFunction.prototype);
-
-let GeneratorPrototype = generator.__proto__.__proto__;
-
-let GeneratorFunctionPrototype = generatorFunction.__proto__;
-let GeneratorFunction = generatorFunction.__proto__.constructor;
-shouldBe(GeneratorFunction.prototype, GeneratorFunctionPrototype);
-shouldBe(generatorFunction instanceof GeneratorFunction, true);
-shouldBe(GeneratorFunction.__proto__, Function);
-shouldBe(GeneratorFunctionPrototype.__proto__, Function.prototype);
-
-shouldBe(GeneratorFunctionPrototype.prototype, GeneratorPrototype);
-shouldBe(GeneratorPrototype.constructor, GeneratorFunctionPrototype);
-
-let arrayIterator = [][Symbol.iterator]();
-let ArrayIteratorPrototype = arrayIterator.__proto__;
-let IteratorPrototype = ArrayIteratorPrototype.__proto__;
-
-shouldBe(IteratorPrototype, GeneratorPrototype.__proto__);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorreturnbeforefirstcalljs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-return-before-first-call.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-return-before-first-call.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-return-before-first-call.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,23 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-function shouldBeIteratorResult(actual, { value, done })
-{
- shouldBe(actual.value, value);
- shouldBe(actual.done, done);
-}
-
-function unreachable()
-{
- throw new Error("NG");
-}
-
-function *gen()
-{
- unreachable();
-}
-
-var g = gen();
-shouldBeIteratorResult(g.return("Hello"), { value: "Hello", done: true });
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorreturnjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-return.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-return.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-return.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,133 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error(`bad value: ${String(actual)}`);
-}
-
-function shouldBeIteratorResult(actual, { value, done })
-{
- shouldBe(actual.value, value);
- shouldBe(actual.done, done);
-}
-
-function unreachable()
-{
- throw new Error('unreachable');
-}
-
-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-(function () {
- function *gen() {
- yield yield 20;
- yield 42;
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(0), { value: 20, done: false });
- shouldBeIteratorResult(g.return(20), { value: 20, done: true });
- shouldBeIteratorResult(g.return(20), { value: 20, done: true });
- shouldBeIteratorResult(g.next(42), { value: undefined, done: true });
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- shouldBeIteratorResult(g.next(42), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- }
-}());
-
-(function () {
- function *gen() {
- return 42;
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: 42, done: true });
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- }
-}());
-
-(function () {
- function *gen() {
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- }
-}());
-
-(function () {
- function *gen() {
- try {
- yield 42;
- } finally {
- return 400;
- }
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: 42, done: false });
- shouldBeIteratorResult(g.return(0), { value: 400, done: true });
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- }
-}());
-
-
-(function () {
- function *gen() {
- try {
- yield 42;
- } finally {
- throw new Error("thrown");
- }
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: 42, done: false });
- shouldThrow(() => g.return(0), `Error: thrown`);
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- }
-}());
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorthisjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-this.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-this.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-this.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,67 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-
-var global = new Function('return this')();
-
-(function () {
- function *gen() {
- yield this;
- }
-
- {
- let g = gen();
- shouldBe(g.next().value, global);
- }
- {
- let g = new gen();
- shouldThrow(() => {
- g.next();
- }, `ReferenceError: Cannot access uninitialized variable.`);
- }
- {
- let thisObject = {};
- let g = gen.call(thisObject);
- shouldBe(g.next().value, thisObject);
- }
-}());
-
-(function () {
- function *gen() {
- "use strict";
- yield this;
- }
-
- {
- let g = gen();
- shouldBe(g.next().value, undefined);
- }
- {
- let g = new gen();
- shouldThrow(() => {
- g.next();
- }, `ReferenceError: Cannot access uninitialized variable.`);
- }
- {
- let thisObject = {};
- let g = gen.call(thisObject);
- shouldBe(g.next().value, thisObject);
- }
-}());
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorthrowbeforefirstcalljs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-throw-before-first-call.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-throw-before-first-call.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-throw-before-first-call.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,20 +0,0 @@
</span><del>-function unreachable()
-{
- throw new Error("NG");
-}
-
-function *gen()
-{
- unreachable();
-}
-
-var g = gen();
-var error = new Error("OK");
-var thrown = null;
-try {
- g.throw(error);
-} catch (e) {
- thrown = e;
-}
-if (thrown !== error)
- unreachable();
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorthrowjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-throw.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-throw.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-throw.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,132 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error(`bad value: ${String(actual)}`);
-}
-
-function shouldBeIteratorResult(actual, { value, done })
-{
- shouldBe(actual.value, value);
- shouldBe(actual.done, done);
-}
-
-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-class CallSite {
- constructor()
- {
- this.count = 0;
- }
-
- call()
- {
- return this.count++;
- }
-}
-
-(function () {
- function *gen() {
- yield yield 20;
- yield 42;
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(0), { value: 20, done: false });
- shouldThrow(() => g.throw(20), `20`);
- shouldThrow(() => g.throw(20), `20`);
- shouldBeIteratorResult(g.next(42), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- }
- {
- let g = gen();
- shouldThrow(() => g.throw(42), `42`);
- shouldBeIteratorResult(g.next(42), { value: undefined, done: true });
- shouldBeIteratorResult(g.return(42), { value: 42, done: true });
- shouldThrow(() => g.throw(42), `42`);
- }
-}());
-
-(function () {
- function *gen() {
- return 42;
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: 42, done: true });
- shouldThrow(() => g.throw(0), `0`);
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldThrow(() => g.throw(42), `42`);
- }
-}());
-
-(function () {
- function *gen() {
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldThrow(() => g.throw(0), `0`);
- }
- {
- let g = gen();
- shouldBeIteratorResult(g.return(0), { value: 0, done: true });
- shouldBeIteratorResult(g.next(), { value: undefined, done: true });
- shouldThrow(() => g.throw(42), `42`);
- }
-}());
-
-(function () {
- let site = new CallSite();
- function *gen() {
- try {
- yield 42;
- } catch (e) {
- shouldBe(e, 0);
- site.call();
- }
- return 42;
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: 42, done: false });
- shouldBeIteratorResult(g.throw(0), { value: 42, done: true });
- shouldBe(site.count, 1);
- }
-}());
-
-(function () {
- function *gen() {
- try {
- yield 42;
- } finally {
- return 42;
- }
- }
-
- {
- let g = gen();
- shouldBeIteratorResult(g.next(), { value: 42, done: false });
- shouldBeIteratorResult(g.throw(0), { value: 42, done: true });
- shouldThrow(() => g.throw(0), `0`);
- }
-}());
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorwithnewtargetjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-with-new-target.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-with-new-target.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-with-new-target.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,15 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-function *gen()
-{
- yield new.target;
-}
-
-var g = gen();
-shouldBe(g.next().value, undefined);
-
-var g2 = new gen();
-shouldBe(g.next().value, undefined);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratorwithsuperjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-with-super.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-with-super.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-with-super.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,82 +0,0 @@
</span><del>-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-(function () {
- function test() {
- return eval('super');
- }
-
- shouldThrow(() => test(), `SyntaxError: super is only valid inside functions.`);
-}());
-
-(function () {
- class B {
- gen() {
- return 42;
- }
- }
-
- class A extends B {
- *gen() {
- return eval('super.gen()');
- }
- }
-
- let a = new A();
- shouldThrow(() => {
- a.gen().next();
- }, `SyntaxError: super is only valid inside functions.`);
-}());
-
-(function () {
- class B {
- gen() {
- return 42;
- }
- }
-
- class A extends B {
- *gen() {
- yield super.gen();
- }
- }
-
- let a = new A();
- shouldBe(a.gen().next().value, 42);
-}());
-
-(function () {
- class B {
- gen() {
- return 42;
- }
- }
-
- class A extends B {
- *gen() {
- yield super.gen();
- }
- }
-
- let a = new A();
- shouldThrow(() => {
- new a.gen();
- }, `TypeError: function is not a constructor (evaluating 'new a.gen()')`);
-}());
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressgeneratoryieldstarjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/generator-yield-star.js (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/generator-yield-star.js        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/JavaScriptCore/tests/stress/generator-yield-star.js        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,326 +0,0 @@
</span><del>-function shouldBe(actual, expected) {
- if (actual !== expected)
- throw new Error('bad value: ' + actual);
-}
-
-function shouldThrow(func, errorMessage) {
- var errorThrown = false;
- var error = null;
- try {
- func();
- } catch (e) {
- errorThrown = true;
- error = e;
- }
- if (!errorThrown)
- throw new Error('not thrown');
- if (String(error) !== errorMessage)
- throw new Error(`bad error: ${String(error)}`);
-}
-
-class CallSite {
- constructor()
- {
- this.count = 0;
- }
-
- call()
- {
- return this.count++;
- }
-}
-
-(function () {
- class Arrays {
- constructor()
- {
- this.first = [ 0, 1, 2, 3 ];
- this.second = [ 4, 5, 6, 7 ];
- }
-
- *[Symbol.iterator]()
- {
- yield * this.first;
- yield * this.second;
- }
- }
-
- var arrays = new Arrays;
- let i = 0;
- for (let value of arrays)
- shouldBe(i++, value);
-}());
-
-(function () {
- // throw should be propagated.
- let c1 = new CallSite;
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- 'throw'(value) {
- shouldBe(value, 42);
- c1.call();
- throw new Error("OK");
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- yield * iter;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldThrow(() => {
- g.throw(42);
- }, `Error: OK`);
- shouldThrow(() => {
- g.throw(44);
- }, `44`);
- shouldBe(c1.count, 1);
-}());
-
-(function () {
- // No `throw` method.
- let c1 = new CallSite;
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- 'return'(value)
- {
- shouldBe(value, undefined);
- c1.call();
- return { value, done: true };
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- yield * iter;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldThrow(() => {
- g.throw(42);
- }, `TypeError: Delegated generator does not have a 'throw' method.`);
- shouldThrow(() => {
- g.throw(44);
- }, `44`);
- shouldBe(c1.count, 1);
-}());
-
-(function () {
- // No `throw` method, `return` returns an incorrect result.
- let c1 = new CallSite;
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- 'return'(value)
- {
- shouldBe(value, undefined);
- c1.call();
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- yield * iter;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldThrow(() => {
- g.throw(42);
- }, `TypeError: Iterator result interface is not an object.`);
- shouldThrow(() => {
- g.throw(44);
- }, `44`);
- shouldBe(c1.count, 1);
-}());
-
-(function () {
- // No `throw` method, No `return` method.
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- yield * iter;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldThrow(() => {
- g.throw(42);
- }, `TypeError: Delegated generator does not have a 'throw' method.`);
- shouldThrow(() => {
- g.throw(44);
- }, `44`);
-}());
-
-
-(function () {
- // `throw` does not throw. Not returns a object.
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- 'throw'(value)
- {
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- yield * iter;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldThrow(() => {
- g.throw(42);
- }, `TypeError: Iterator result interface is not an object.`);
- shouldThrow(() => {
- g.throw(44);
- }, `44`);
-}());
-
-(function () {
- // `throw` does not throw. If returned iterator result is marked as done, it becomes `return`.
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- 'throw'(value)
- {
- return { value, done: true };
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- yield * iter;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldBe(g.throw(42).value, 42);
- shouldThrow(() => {
- g.throw(44);
- }, `44`);
-}());
-
-(function () {
- // `return` returns done: false.
- class Iterator {
- next(value)
- {
- return { value, done: false };
- }
-
- 'return'(value)
- {
- return { value, done: false };
- }
-
- [Symbol.iterator]()
- {
- return this;
- }
- }
-
- function *gen()
- {
- let iter = new Iterator();
- let result = yield * iter;
- yield result;
- yield 42;
- }
-
- let g = gen();
- shouldBe(g.next(0).value, undefined);
- shouldBe(g.next(1).value, 1);
- shouldBe(g.next(2).value, 2);
- shouldBe(g.return(42).value, 42);
- shouldBe(g.return(42).done, false);
-}());
-
-(function () {
- function *gen()
- {
- let result = yield * [ 0, 1, 2 ];
- yield result;
- }
-
- let g = gen();
- shouldBe(g.next().value, 0);
- shouldBe(g.next().value, 1);
- shouldBe(g.next().value, 2);
- shouldBe(g.next().value, undefined);
-}());
</del></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WTF/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> Give String and AtomicString an existingHash() function
</span></span></pre></div>
<a id="trunkSourceWTFwtfFastBitVectorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/FastBitVector.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/FastBitVector.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WTF/wtf/FastBitVector.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -181,7 +181,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename Functor>
</span><del>- void forEachSetBit(const Functor& functor) const
</del><ins>+ void forEachSetBit(const Functor& functor)
</ins><span class="cx"> {
</span><span class="cx"> unsigned n = arrayLength();
</span><span class="cx"> for (unsigned i = 0; i < n; ++i) {
</span><span class="lines">@@ -195,7 +195,7 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> }
</span><del>-
</del><ins>+
</ins><span class="cx"> WTF_EXPORT_PRIVATE void dump(PrintStream&) const;
</span><span class="cx">
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWTFwtfFeatureDefinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/FeatureDefines.h (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/FeatureDefines.h        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WTF/wtf/FeatureDefines.h        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -364,7 +364,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if !defined(ENABLE_ES6_CLASS_SYNTAX)
</span><del>-#define ENABLE_ES6_GENERATORS 1
</del><ins>+#define ENABLE_ES6_GENERATORS 0
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if !defined(ENABLE_ES6_MODULES)
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WebCore/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> [SVG -> OTF Converter] Force UnitsPerEm to 1000
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
</span><span class="cx"> ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
</span><span class="cx"> ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
</span><del>-ENABLE_ES6_GENERATORS = ENABLE_ES6_GENERATORS;
</del><ins>+ENABLE_ES6_GENERATORS = ;
</ins><span class="cx"> ENABLE_ES6_MODULES = ;
</span><span class="cx"> ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
</span><span class="cx"> ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WebKit/mac/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Yusuke Suzuki <utatane.tea@gmail.com>
</span><span class="cx">
</span><span class="cx"> [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
</span></span></pre></div>
<a id="trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
</span><span class="cx"> ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
</span><span class="cx"> ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
</span><del>-ENABLE_ES6_GENERATORS = ENABLE_ES6_GENERATORS;
</del><ins>+ENABLE_ES6_GENERATORS = ;
</ins><span class="cx"> ENABLE_ES6_MODULES = ;
</span><span class="cx"> ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
</span><span class="cx"> ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WebKit2/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Anders Carlsson <andersca@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove WKOriginDataManager
</span></span></pre></div>
<a id="trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
</span><span class="cx"> ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
</span><span class="cx"> ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
</span><del>-ENABLE_ES6_GENERATORS = ENABLE_ES6_GENERATORS;
</del><ins>+ENABLE_ES6_GENERATORS = ;
</ins><span class="cx"> ENABLE_ES6_MODULES = ;
</span><span class="cx"> ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
</span><span class="cx"> ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
</span></span></pre></div>
<a id="trunkSourcecmakeOptionsWincmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/cmake/OptionsWin.cmake (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/cmake/OptionsWin.cmake        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/cmake/OptionsWin.cmake        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DIRECTORY_UPLOAD PUBLIC OFF)
</span><span class="cx"> WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DOM4_EVENTS_CONSTRUCTOR PUBLIC ON)
</span><span class="cx"> WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
</span><del>-WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_GENERATORS PUBLIC ON)
</del><ins>+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_GENERATORS PUBLIC OFF)
</ins><span class="cx"> WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_MODULES PUBLIC OFF)
</span><span class="cx"> WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX PUBLIC ON)
</span><span class="cx"> WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FILE_SYSTEM PUBLIC OFF)
</span></span></pre></div>
<a id="trunkSourcecmakeWebKitFeaturescmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/cmake/WebKitFeatures.cmake (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/cmake/WebKitFeatures.cmake        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Source/cmake/WebKitFeatures.cmake        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> WEBKIT_OPTION_DEFINE(ENABLE_ENCRYPTED_MEDIA_V2 "Support EME v2" PRIVATE OFF)
</span><span class="cx"> WEBKIT_OPTION_DEFINE(ENABLE_ES6_ARROWFUNCTION_SYNTAX "Toggle ES6 arrow function syntax support" PRIVATE ON)
</span><span class="cx"> WEBKIT_OPTION_DEFINE(ENABLE_ES6_CLASS_SYNTAX "Toggle ES6 class syntax support" PRIVATE ON)
</span><del>- WEBKIT_OPTION_DEFINE(ENABLE_ES6_GENERATORS "Toggle ES6 generators support" PRIVATE ON)
</del><ins>+ WEBKIT_OPTION_DEFINE(ENABLE_ES6_GENERATORS "Toggle ES6 generators support" PRIVATE OFF)
</ins><span class="cx"> WEBKIT_OPTION_DEFINE(ENABLE_ES6_MODULES "Toggle ES6 modules support" PRIVATE OFF)
</span><span class="cx"> WEBKIT_OPTION_DEFINE(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX "Toggle ES6 template literal syntax support" PRIVATE ON)
</span><span class="cx"> WEBKIT_OPTION_DEFINE(ENABLE_FILTERS_LEVEL_2 "Toggle Filters Module Level 2" PRIVATE OFF)
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Tools/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 David Kilzer <ddkilzer@apple.com>
</span><span class="cx">
</span><span class="cx"> EventSenderProxy::swipeGestureWithWheelAndMomentumPhases() leaks an EventSenderSyntheticEvent
</span></span></pre></div>
<a id="trunkToolsScriptswebkitperlFeatureListpm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitperl/FeatureList.pm (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitperl/FeatureList.pm        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/Tools/Scripts/webkitperl/FeatureList.pm        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -185,7 +185,7 @@
</span><span class="cx"> define => "ENABLE_ES6_CLASS_SYNTAX", default => 1, value => \$classSyntax },
</span><span class="cx">
</span><span class="cx"> { option => "generators", desc => "Toggle ES6 generators support",
</span><del>- define => "ENABLE_ES6_GENERATORS", default => 1, value => \$generatorsSupport },
</del><ins>+ define => "ENABLE_ES6_GENERATORS", default => 0, value => \$generatorsSupport },
</ins><span class="cx">
</span><span class="cx"> { option => "modules", desc => "Toggle ES6 modules support",
</span><span class="cx"> define => "ENABLE_ES6_MODULES", default => 0, value => \$modulesSupport },
</span></span></pre></div>
<a id="trunkWebKitLibrariesChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKitLibraries/ChangeLog (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitLibraries/ChangeLog        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/WebKitLibraries/ChangeLog        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-12-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r192914.
+ https://bugs.webkit.org/show_bug.cgi?id=151734
+
+ JSC tests for this change are failing on 32 and 64-bit bots
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changeset:
+
+ "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
+ enable this feature"
+ https://bugs.webkit.org/show_bug.cgi?id=150792
+ http://trac.webkit.org/changeset/192914
+
</ins><span class="cx"> 2015-12-01 Yusuke Suzuki <utatane.tea@gmail.com>
</span><span class="cx">
</span><span class="cx"> [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
</span></span></pre></div>
<a id="trunkWebKitLibrarieswintoolsvspropsFeatureDefinesprops"></a>
<div class="modfile"><h4>Modified: trunk/WebKitLibraries/win/tools/vsprops/FeatureDefines.props (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitLibraries/win/tools/vsprops/FeatureDefines.props        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/WebKitLibraries/win/tools/vsprops/FeatureDefines.props        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> <ENABLE_DIRECTORY_UPLOAD />
</span><span class="cx"> <ENABLE_DOM4_EVENTS_CONSTRUCTOR>ENABLE_DOM4_EVENTS_CONSTRUCTOR</ENABLE_DOM4_EVENTS_CONSTRUCTOR>
</span><span class="cx"> <ENABLE_ENCRYPTED_MEDIA_V2>ENABLE_ENCRYPTED_MEDIA_V2</ENABLE_ENCRYPTED_MEDIA_V2>
</span><del>- <ENABLE_ES6_GENERATORS>ENABLE_ES6_GENERATORS</ENABLE_ES6_GENERATORS>
</del><ins>+ <ENABLE_ES6_GENERATORS />
</ins><span class="cx"> <ENABLE_ES6_MODULES />
</span><span class="cx"> <ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX</ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>
</span><span class="cx"> <ENABLE_FILE_SYSTEM />
</span></span></pre></div>
<a id="trunkWebKitLibrarieswintoolsvspropsFeatureDefinesCairoprops"></a>
<div class="modfile"><h4>Modified: trunk/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.props (192934 => 192935)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.props        2015-12-02 01:33:05 UTC (rev 192934)
+++ trunk/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.props        2015-12-02 01:37:19 UTC (rev 192935)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> <ENABLE_DIRECTORY_UPLOAD />
</span><span class="cx"> <ENABLE_DOM4_EVENTS_CONSTRUCTOR>ENABLE_DOM4_EVENTS_CONSTRUCTOR</ENABLE_DOM4_EVENTS_CONSTRUCTOR>
</span><span class="cx"> <ENABLE_ENCRYPTED_MEDIA_V2 />
</span><del>- <ENABLE_ES6_GENERATORS>ENABLE_ES6_GENERATORS</ENABLE_ES6_GENERATORS>
</del><ins>+ <ENABLE_ES6_GENERATORS />
</ins><span class="cx"> <ENABLE_ES6_MODULES />
</span><span class="cx"> <ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX</ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>
</span><span class="cx"> <ENABLE_FILE_SYSTEM />
</span></span></pre>
</div>
</div>
</body>
</html>