<!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>[167165] 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/167165">167165</a></dd>
<dt>Author</dt> <dd>barraclough@apple.com</dd>
<dt>Date</dt> <dd>2014-04-11 15:38:22 -0700 (Fri, 11 Apr 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Rollout - Rewrite Function.bind as a builtin
https://bugs.webkit.org/show_bug.cgi?id=131083
Unreviewed.
Rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/167020">r167020</a> while investigating a performance regression.
Source/JavaScriptCore:
* API/JSObjectRef.cpp:
(JSObjectMakeConstructor):
* API/JSScriptRef.cpp:
(parseScript):
* CMakeLists.txt:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
* JavaScriptCore.xcodeproj/project.pbxproj:
* builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::createBuiltinExecutable):
* builtins/Function.prototype.js:
(apply):
(bind.bindingFunction): Deleted.
(bind.else.bindingFunction): Deleted.
(bind): Deleted.
* bytecode/UnlinkedCodeBlock.cpp:
(JSC::generateFunctionCodeBlock):
* bytecompiler/NodesCodegen.cpp:
(JSC::InstanceOfNode::emitBytecode):
* interpreter/Interpreter.cpp:
* parser/Lexer.cpp:
(JSC::Lexer<T>::Lexer):
(JSC::Lexer<LChar>::parseIdentifier):
(JSC::Lexer<UChar>::parseIdentifier):
* parser/Lexer.h:
* parser/Parser.cpp:
(JSC::Parser<LexerType>::Parser):
(JSC::Parser<LexerType>::parseInner):
* parser/Parser.h:
(JSC::parse):
* parser/ParserModes.h:
* runtime/ArgumentsIteratorConstructor.cpp:
(JSC::ArgumentsIteratorConstructor::finishCreation):
* runtime/ArrayConstructor.cpp:
(JSC::ArrayConstructor::finishCreation):
* runtime/BooleanConstructor.cpp:
(JSC::BooleanConstructor::finishCreation):
* runtime/CodeCache.cpp:
(JSC::CodeCache::getGlobalCodeBlock):
(JSC::CodeCache::getFunctionExecutableFromGlobalCode):
* runtime/CommonIdentifiers.h:
* runtime/Completion.cpp:
(JSC::checkSyntax):
* runtime/DateConstructor.cpp:
(JSC::DateConstructor::finishCreation):
* runtime/ErrorConstructor.cpp:
(JSC::ErrorConstructor::finishCreation):
* runtime/Executable.cpp:
(JSC::ProgramExecutable::checkSyntax):
* runtime/FunctionConstructor.cpp:
(JSC::FunctionConstructor::finishCreation):
* runtime/FunctionPrototype.cpp:
(JSC::FunctionPrototype::addFunctionProperties):
(JSC::functionProtoFuncBind):
* runtime/JSArrayBufferConstructor.cpp:
(JSC::JSArrayBufferConstructor::finishCreation):
* runtime/JSBoundFunction.cpp: Added.
(JSC::boundFunctionCall):
(JSC::boundFunctionConstruct):
(JSC::JSBoundFunction::create):
(JSC::JSBoundFunction::destroy):
(JSC::JSBoundFunction::customHasInstance):
(JSC::JSBoundFunction::JSBoundFunction):
(JSC::JSBoundFunction::finishCreation):
(JSC::JSBoundFunction::visitChildren):
* runtime/JSBoundFunction.h: Added.
(JSC::JSBoundFunction::targetFunction):
(JSC::JSBoundFunction::boundThis):
(JSC::JSBoundFunction::boundArgs):
(JSC::JSBoundFunction::createStructure):
* runtime/JSFunction.cpp:
(JSC::RetrieveCallerFunctionFunctor::RetrieveCallerFunctionFunctor):
(JSC::RetrieveCallerFunctionFunctor::operator()):
(JSC::retrieveCallerFunction):
(JSC::JSFunction::getOwnPropertySlot):
(JSC::JSFunction::getOwnNonIndexPropertyNames):
(JSC::JSFunction::put):
(JSC::JSFunction::defineOwnProperty):
* runtime/JSGenericTypedArrayViewConstructorInlines.h:
(JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::reset):
* runtime/JSGlobalObjectFunctions.cpp:
(JSC::globalFuncSetTypeErrorAccessor): Deleted.
* runtime/JSGlobalObjectFunctions.h:
* runtime/JSObject.cpp:
(JSC::JSObject::putDirectPrototypeProperty): Deleted.
(JSC::JSObject::putDirectPrototypePropertyWithoutTransitions): Deleted.
* runtime/JSObject.h:
* runtime/JSPromiseConstructor.cpp:
(JSC::JSPromiseConstructor::finishCreation):
* runtime/MapConstructor.cpp:
(JSC::MapConstructor::finishCreation):
* runtime/MapIteratorConstructor.cpp:
(JSC::MapIteratorConstructor::finishCreation):
* runtime/NameConstructor.cpp:
(JSC::NameConstructor::finishCreation):
* runtime/NativeErrorConstructor.cpp:
(JSC::NativeErrorConstructor::finishCreation):
* runtime/NumberConstructor.cpp:
(JSC::NumberConstructor::finishCreation):
* runtime/ObjectConstructor.cpp:
(JSC::ObjectConstructor::finishCreation):
* runtime/RegExpConstructor.cpp:
(JSC::RegExpConstructor::finishCreation):
* runtime/SetConstructor.cpp:
(JSC::SetConstructor::finishCreation):
* runtime/SetIteratorConstructor.cpp:
(JSC::SetIteratorConstructor::finishCreation):
* runtime/StringConstructor.cpp:
(JSC::StringConstructor::finishCreation):
* runtime/WeakMapConstructor.cpp:
(JSC::WeakMapConstructor::finishCreation):
Source/WebCore:
* bindings/js/JSImageConstructor.cpp:
(WebCore::JSImageConstructor::finishCreation):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateConstructorHelperMethods):
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
(WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
(WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
(WebCore::JSTestEventConstructorConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
(WebCore::JSTestEventTargetConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestException.cpp:
(WebCore::JSTestExceptionConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
(WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestInterface.cpp:
(WebCore::JSTestInterfaceConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
(WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
(WebCore::JSTestNamedConstructorConstructor::finishCreation):
(WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestNode.cpp:
(WebCore::JSTestNodeConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestObj.cpp:
(WebCore::JSTestObjConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
(WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
(WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
(WebCore::JSTestTypedefsConstructor::finishCreation):
* bindings/scripts/test/JS/JSattribute.cpp:
(WebCore::JSattributeConstructor::finishCreation):
* bindings/scripts/test/JS/JSreadonly.cpp:
(WebCore::JSreadonlyConstructor::finishCreation):
LayoutTests:
* js/dom/function-bind-expected.txt:
* js/regress/function-bind-expected.txt: Removed.
* js/regress/function-bind.html: Removed.
* js/regress/script-tests/function-bind.js: Removed.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsjsdomfunctionbindexpectedtxt">trunk/LayoutTests/js/dom/function-bind-expected.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSObjectRefcpp">trunk/Source/JavaScriptCore/API/JSObjectRef.cpp</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="#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="#trunkSourceJavaScriptCorebuiltinsFunctionprototypejs">trunk/Source/JavaScriptCore/builtins/Function.prototype.js</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerNodesCodegencpp">trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterInterpretercpp">trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexercpp">trunk/Source/JavaScriptCore/parser/Lexer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexerh">trunk/Source/JavaScriptCore/parser/Lexer.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="#trunkSourceJavaScriptCoreruntimeArgumentsIteratorConstructorcpp">trunk/Source/JavaScriptCore/runtime/ArgumentsIteratorConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayConstructorcpp">trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeBooleanConstructorcpp">trunk/Source/JavaScriptCore/runtime/BooleanConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCachecpp">trunk/Source/JavaScriptCore/runtime/CodeCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonIdentifiersh">trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCompletioncpp">trunk/Source/JavaScriptCore/runtime/Completion.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDateConstructorcpp">trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeErrorConstructorcpp">trunk/Source/JavaScriptCore/runtime/ErrorConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutablecpp">trunk/Source/JavaScriptCore/runtime/Executable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionPrototypecpp">trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSArrayBufferConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewConstructorInlinesh">trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionsh">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectcpp">trunk/Source/JavaScriptCore/runtime/JSObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjecth">trunk/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeMapConstructorcpp">trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeMapIteratorConstructorcpp">trunk/Source/JavaScriptCore/runtime/MapIteratorConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNameConstructorcpp">trunk/Source/JavaScriptCore/runtime/NameConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNativeErrorConstructorcpp">trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNumberConstructorcpp">trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeObjectConstructorcpp">trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp">trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSetConstructorcpp">trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSetIteratorConstructorcpp">trunk/Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStringConstructorcpp">trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWeakMapConstructorcpp">trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSImageConstructorcpp">trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSBoundFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSBoundFunctionh">trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsregressfunctionbindexpectedtxt">trunk/LayoutTests/js/regress/function-bind-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressfunctionbindhtml">trunk/LayoutTests/js/regress/function-bind.html</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsfunctionbindjs">trunk/LayoutTests/js/regress/script-tests/function-bind.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/LayoutTests/ChangeLog        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2014-04-11 Gavin Barraclough <baraclough@apple.com>
+
+ Rollout - Rewrite Function.bind as a builtin
+ https://bugs.webkit.org/show_bug.cgi?id=131083
+
+ Unreviewed.
+
+ Rolling out r167020 while investigating a performance regression.
+
+ * js/dom/function-bind-expected.txt:
+ * js/regress/function-bind-expected.txt: Removed.
+ * js/regress/function-bind.html: Removed.
+ * js/regress/script-tests/function-bind.js: Removed.
+
</ins><span class="cx"> 2014-04-11 Hans Muller <hmuller@adobe.com>
</span><span class="cx">
</span><span class="cx"> [CSS Shapes] shape-outside from image doesn't load properly
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomfunctionbindexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/function-bind-expected.txt (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/function-bind-expected.txt        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/LayoutTests/js/dom/function-bind-expected.txt        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -3,7 +3,7 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><del>-PASS new (decodeURI.bind())() threw exception TypeError: function is not a constructor.
</del><ins>+PASS new (decodeURI.bind())() threw exception TypeError: function is not a constructor (evaluating 'new (decodeURI.bind())()').
</ins><span class="cx"> PASS (new (String.bind())('foo')).toString() is 'foo'
</span><span class="cx"> PASS result is "[object Window] -> x:1, y:2"
</span><span class="cx"> PASS result is "'a' -> x:'b', y:1"
</span><span class="lines">@@ -23,9 +23,9 @@
</span><span class="cx"> PASS "prototype" in F is true
</span><span class="cx"> PASS "prototype" in G is false
</span><span class="cx"> PASS "prototype" in H is false
</span><del>-PASS Function.bind.call(undefined) threw exception TypeError: Cannot bind non-function object..
</del><ins>+PASS Function.bind.call(undefined) threw exception TypeError: Type error.
</ins><span class="cx"> PASS abcAt(1) is "b"
</span><del>-PASS new abcAt(1) threw exception TypeError: function is not a constructor.
</del><ins>+PASS new abcAt(1) threw exception TypeError: function is not a constructor (evaluating 'new abcAt(1)').
</ins><span class="cx"> PASS boundFunctionPrototypeAccessed is false
</span><span class="cx"> PASS Function.bind.length is 1
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsjsregressfunctionbindexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/function-bind-expected.txt (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/function-bind-expected.txt        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/LayoutTests/js/regress/function-bind-expected.txt        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-JSRegress/function-bind
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS no exception thrown
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressfunctionbindhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/function-bind.html (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/function-bind.html        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/LayoutTests/js/regress/function-bind.html        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,12 +0,0 @@
</span><del>-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test-pre.js"></script>
-</head>
-<body>
-<script src="../../resources/regress-pre.js"></script>
-<script src="script-tests/function-bind.js"></script>
-<script src="../../resources/regress-post.js"></script>
-<script src="../../resources/js-test-post.js"></script>
-</body>
-</html>
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsfunctionbindjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/script-tests/function-bind.js (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/function-bind.js        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/LayoutTests/js/regress/script-tests/function-bind.js        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,15 +0,0 @@
</span><del>-function foo(a,b) {
- return a ^ b;
-}
-
-var g = foo.bind({});
-
-var result = 0;
-for (var i = 0; i < 100000; ++i) {
- result *= 3;
- result += g(i, result);
- result |= 0;
-}
-
-if (result != -2055604513)
- throw "Bad result: " + result;
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSObjectRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSObjectRef.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSObjectRef.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/API/JSObjectRef.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -127,7 +127,6 @@
</span><span class="cx">
</span><span class="cx"> JSCallbackConstructor* constructor = JSCallbackConstructor::create(exec, exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->callbackConstructorStructure(), jsClass, callAsConstructor);
</span><span class="cx"> constructor->putDirect(exec->vm(), exec->propertyNames().prototype, jsPrototype, DontEnum | DontDelete | ReadOnly);
</span><del>- constructor->putDirect(exec->vm(), exec->propertyNames().prototypeForHasInstancePrivateName, jsPrototype, DontEnum | DontDelete | ReadOnly);
</del><span class="cx"> return toRef(constructor);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSScriptRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSScriptRef.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">
</span><span class="cx"> static bool parseScript(VM* vm, const SourceCode& source, ParserError& error)
</span><span class="cx"> {
</span><del>- return JSC::parse<JSC::ProgramNode>(vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, JSNotFunctionKind, error);
</del><ins>+ return JSC::parse<JSC::ProgramNode>(vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> extern "C" {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -394,6 +394,7 @@
</span><span class="cx"> runtime/JSArrayBufferPrototype.cpp
</span><span class="cx"> runtime/JSArrayBufferView.cpp
</span><span class="cx"> runtime/JSArrayIterator.cpp
</span><ins>+ runtime/JSBoundFunction.cpp
</ins><span class="cx"> runtime/JSCJSValue.cpp
</span><span class="cx"> runtime/JSCell.cpp
</span><span class="cx"> runtime/JSConsole.cpp
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,3 +1,126 @@
</span><ins>+2014-04-11 Gavin Barraclough <baraclough@apple.com>
+
+ Rollout - Rewrite Function.bind as a builtin
+ https://bugs.webkit.org/show_bug.cgi?id=131083
+
+ Unreviewed.
+
+ Rolling out r167020 while investigating a performance regression.
+
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeConstructor):
+ * API/JSScriptRef.cpp:
+ (parseScript):
+ * CMakeLists.txt:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * builtins/BuiltinExecutables.cpp:
+ (JSC::BuiltinExecutables::createBuiltinExecutable):
+ * builtins/Function.prototype.js:
+ (apply):
+ (bind.bindingFunction): Deleted.
+ (bind.else.bindingFunction): Deleted.
+ (bind): Deleted.
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::generateFunctionCodeBlock):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::InstanceOfNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ * parser/Lexer.cpp:
+ (JSC::Lexer<T>::Lexer):
+ (JSC::Lexer<LChar>::parseIdentifier):
+ (JSC::Lexer<UChar>::parseIdentifier):
+ * parser/Lexer.h:
+ * parser/Parser.cpp:
+ (JSC::Parser<LexerType>::Parser):
+ (JSC::Parser<LexerType>::parseInner):
+ * parser/Parser.h:
+ (JSC::parse):
+ * parser/ParserModes.h:
+ * runtime/ArgumentsIteratorConstructor.cpp:
+ (JSC::ArgumentsIteratorConstructor::finishCreation):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::finishCreation):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::finishCreation):
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getGlobalCodeBlock):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ * runtime/CommonIdentifiers.h:
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::finishCreation):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::finishCreation):
+ * runtime/Executable.cpp:
+ (JSC::ProgramExecutable::checkSyntax):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::finishCreation):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::addFunctionProperties):
+ (JSC::functionProtoFuncBind):
+ * runtime/JSArrayBufferConstructor.cpp:
+ (JSC::JSArrayBufferConstructor::finishCreation):
+ * runtime/JSBoundFunction.cpp: Added.
+ (JSC::boundFunctionCall):
+ (JSC::boundFunctionConstruct):
+ (JSC::JSBoundFunction::create):
+ (JSC::JSBoundFunction::destroy):
+ (JSC::JSBoundFunction::customHasInstance):
+ (JSC::JSBoundFunction::JSBoundFunction):
+ (JSC::JSBoundFunction::finishCreation):
+ (JSC::JSBoundFunction::visitChildren):
+ * runtime/JSBoundFunction.h: Added.
+ (JSC::JSBoundFunction::targetFunction):
+ (JSC::JSBoundFunction::boundThis):
+ (JSC::JSBoundFunction::boundArgs):
+ (JSC::JSBoundFunction::createStructure):
+ * runtime/JSFunction.cpp:
+ (JSC::RetrieveCallerFunctionFunctor::RetrieveCallerFunctionFunctor):
+ (JSC::RetrieveCallerFunctionFunctor::operator()):
+ (JSC::retrieveCallerFunction):
+ (JSC::JSFunction::getOwnPropertySlot):
+ (JSC::JSFunction::getOwnNonIndexPropertyNames):
+ (JSC::JSFunction::put):
+ (JSC::JSFunction::defineOwnProperty):
+ * runtime/JSGenericTypedArrayViewConstructorInlines.h:
+ (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncSetTypeErrorAccessor): Deleted.
+ * runtime/JSGlobalObjectFunctions.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::putDirectPrototypeProperty): Deleted.
+ (JSC::JSObject::putDirectPrototypePropertyWithoutTransitions): Deleted.
+ * runtime/JSObject.h:
+ * runtime/JSPromiseConstructor.cpp:
+ (JSC::JSPromiseConstructor::finishCreation):
+ * runtime/MapConstructor.cpp:
+ (JSC::MapConstructor::finishCreation):
+ * runtime/MapIteratorConstructor.cpp:
+ (JSC::MapIteratorConstructor::finishCreation):
+ * runtime/NameConstructor.cpp:
+ (JSC::NameConstructor::finishCreation):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::finishCreation):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::finishCreation):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::finishCreation):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::finishCreation):
+ * runtime/SetConstructor.cpp:
+ (JSC::SetConstructor::finishCreation):
+ * runtime/SetIteratorConstructor.cpp:
+ (JSC::SetIteratorConstructor::finishCreation):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::finishCreation):
+ * runtime/WeakMapConstructor.cpp:
+ (JSC::WeakMapConstructor::finishCreation):
+
</ins><span class="cx"> 2014-04-11 David Kilzer <ddkilzer@apple.com>
</span><span class="cx">
</span><span class="cx"> [ASan] Build broke because libCompileRuntimeToLLVMIR.a links to libclang_rt.asan_osx_dynamic.dylib
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -640,6 +640,7 @@
</span><span class="cx"> <ClCompile Include="..\runtime\JSArrayBufferConstructor.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSArrayBufferPrototype.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSArrayBufferView.cpp" />
</span><ins>+ <ClCompile Include="..\runtime\JSBoundFunction.cpp" />
</ins><span class="cx"> <ClCompile Include="..\runtime\JSCJSValue.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSCell.cpp" />
</span><span class="cx"> <ClCompile Include="..\runtime\JSConsole.cpp" />
</span><span class="lines">@@ -1300,6 +1301,7 @@
</span><span class="cx"> <ClInclude Include="..\runtime\JSArrayBufferView.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSArrayBufferViewInlines.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSArrayIterator.h" />
</span><ins>+ <ClInclude Include="..\runtime\JSBoundFunction.h" />
</ins><span class="cx"> <ClInclude Include="..\runtime\JSCInlines.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSCJSValue.h" />
</span><span class="cx"> <ClInclude Include="..\runtime\JSCJSValueInlines.h" />
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -606,6 +606,9 @@
</span><span class="cx"> <ClCompile Include="..\runtime\JSArray.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><ins>+ <ClCompile Include="..\runtime\JSBoundFunction.cpp">
+ <Filter>runtime</Filter>
+ </ClCompile>
</ins><span class="cx"> <ClCompile Include="..\runtime\JSCell.cpp">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClCompile>
</span><span class="lines">@@ -2252,6 +2255,9 @@
</span><span class="cx"> <ClInclude Include="..\runtime\JSArray.h">
</span><span class="cx"> <Filter>runtime</Filter>
</span><span class="cx"> </ClInclude>
</span><ins>+ <ClInclude Include="..\runtime\JSBoundFunction.h">
+ <Filter>runtime</Filter>
+ </ClInclude>
</ins><span class="cx"> <ClInclude Include="..\runtime\JSCell.h">
</span><span class="cx"> <Filter>runtime</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 (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1215,6 +1215,8 @@
</span><span class="cx">                 86F3EEBD168CDE930077B92A /* ObjCCallbackFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F3EEB9168CCF750077B92A /* ObjCCallbackFunction.h */; };
</span><span class="cx">                 86F3EEBE168CDE930077B92A /* ObjCCallbackFunction.mm in Sources */ = {isa = PBXBuildFile; fileRef = 86F3EEBA168CCF750077B92A /* ObjCCallbackFunction.mm */; };
</span><span class="cx">                 86F3EEBF168CDE930077B92A /* ObjcRuntimeExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F3EEB616855A5B0077B92A /* ObjcRuntimeExtras.h */; };
</span><ins>+                86FA9E91142BBB2E001773B7 /* JSBoundFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */; };
+                86FA9E92142BBB2E001773B7 /* JSBoundFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 86FA9E90142BBB2E001773B7 /* JSBoundFunction.h */; };
</ins><span class="cx">                 90213E3D123A40C200D422F3 /* MemoryStatistics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90213E3B123A40C200D422F3 /* MemoryStatistics.cpp */; };
</span><span class="cx">                 90213E3E123A40C200D422F3 /* MemoryStatistics.h in Headers */ = {isa = PBXBuildFile; fileRef = 90213E3C123A40C200D422F3 /* MemoryStatistics.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 93052C340FB792190048FDC3 /* ParserArena.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93052C320FB792190048FDC3 /* ParserArena.cpp */; };
</span><span class="lines">@@ -2787,6 +2789,8 @@
</span><span class="cx">                 86F75EFB151C062F007C9BA3 /* RegExpCachedResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegExpCachedResult.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 86F75EFC151C062F007C9BA3 /* RegExpCachedResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpCachedResult.h; sourceTree = "<group>"; };
</span><span class="cx">                 86F75EFD151C062F007C9BA3 /* RegExpMatchesArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegExpMatchesArray.cpp; sourceTree = "<group>"; };
</span><ins>+                86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSBoundFunction.cpp; sourceTree = "<group>"; };
+                86FA9E90142BBB2E001773B7 /* JSBoundFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBoundFunction.h; sourceTree = "<group>"; };
</ins><span class="cx">                 90213E3B123A40C200D422F3 /* MemoryStatistics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryStatistics.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 90213E3C123A40C200D422F3 /* MemoryStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryStatistics.h; sourceTree = "<group>"; };
</span><span class="cx">                 93052C320FB792190048FDC3 /* ParserArena.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParserArena.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -4318,6 +4322,8 @@
</span><span class="cx">                                 0F2B66BC17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h */,
</span><span class="cx">                                 A7BDAEC417F4EA1400F6140C /* JSArrayIterator.cpp */,
</span><span class="cx">                                 A7BDAEC517F4EA1400F6140C /* JSArrayIterator.h */,
</span><ins>+                                86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */,
+                                86FA9E90142BBB2E001773B7 /* JSBoundFunction.h */,
</ins><span class="cx">                                 BC7F8FBA0E19D1EF008632C0 /* JSCell.cpp */,
</span><span class="cx">                                 BC1167D80E19BCC9008066DD /* JSCell.h */,
</span><span class="cx">                                 0F97496F1687ADE200A4FF6A /* JSCellInlines.h */,
</span><span class="lines">@@ -5933,6 +5939,7 @@
</span><span class="cx">                                 A7BDAECB17F4EA1400F6140C /* JSArrayIterator.h in Headers */,
</span><span class="cx">                                 BC18C4180E16F5CD00B34460 /* JSBase.h in Headers */,
</span><span class="cx">                                 140D17D70E8AD4A9000CD17D /* JSBasePrivate.h in Headers */,
</span><ins>+                                86FA9E92142BBB2E001773B7 /* JSBoundFunction.h in Headers */,
</ins><span class="cx">                                 BC18C4190E16F5CD00B34460 /* JSCallbackConstructor.h in Headers */,
</span><span class="cx">                                 BC18C41A0E16F5CD00B34460 /* JSCallbackFunction.h in Headers */,
</span><span class="cx">                                 BC18C41B0E16F5CD00B34460 /* JSCallbackObject.h in Headers */,
</span><span class="lines">@@ -7126,6 +7133,7 @@
</span><span class="cx">                                 0F2B66E817B6B5AB00A7AE3F /* JSArrayBufferView.cpp in Sources */,
</span><span class="cx">                                 A7BDAECA17F4EA1400F6140C /* JSArrayIterator.cpp in Sources */,
</span><span class="cx">                                 1421359B0A677F4F00A8195E /* JSBase.cpp in Sources */,
</span><ins>+                                86FA9E91142BBB2E001773B7 /* JSBoundFunction.cpp in Sources */,
</ins><span class="cx">                                 1440F8AF0A508D200005F061 /* JSCallbackConstructor.cpp in Sources */,
</span><span class="cx">                                 1440F8920A508B100005F061 /* JSCallbackFunction.cpp in Sources */,
</span><span class="cx">                                 14ABDF600A437FEF00ECCA01 /* JSCallbackObject.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> {
</span><span class="cx"> JSTextPosition positionBeforeLastNewline;
</span><span class="cx"> ParserError error;
</span><del>- RefPtr<ProgramNode> program = parse<ProgramNode>(&m_vm, source, 0, Identifier(), JSParseBuiltin, JSParseProgramCode, JSNotFunctionKind, error, &positionBeforeLastNewline);
</del><ins>+ RefPtr<ProgramNode> program = parse<ProgramNode>(&m_vm, source, 0, Identifier(), JSParseBuiltin, JSParseProgramCode, error, &positionBeforeLastNewline);
</ins><span class="cx">
</span><span class="cx"> if (!program) {
</span><span class="cx"> dataLog("Fatal error compiling builtin function '", name.string(), "': ", error.m_message);
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> RELEASE_ASSERT(body);
</span><span class="cx"> for (const auto& closedVariable : program->closedVariables()) {
</span><span class="cx"> if (closedVariable == m_vm.propertyNames->arguments.impl())
</span><del>- continue;
</del><ins>+ continue;
</ins><span class="cx">
</span><span class="cx"> if (closedVariable == m_vm.propertyNames->undefinedKeyword.impl())
</span><span class="cx"> continue;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsFunctionprototypejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/builtins/Function.prototype.js (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/Function.prototype.js        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/builtins/Function.prototype.js        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -32,50 +32,3 @@
</span><span class="cx"> "use strict";
</span><span class="cx"> return this.@apply(thisValue, argumentValues);
</span><span class="cx"> }
</span><del>-
-function bind(thisValue /*, optional arguments */)
-{
- "use strict";
- var boundFunction = this;
- if (typeof boundFunction !== "function")
- throw new @TypeError("Cannot bind non-function object.");
- var bindingFunction;
- if (arguments.length <= 1) {
- bindingFunction = function () {
- if (@IsConstructor) {
- return new boundFunction(...arguments);
- } else {
- return boundFunction.@apply(thisValue, arguments);
- }
- }
- } else {
- var boundParameters = [];
- var length = arguments.length;
- for (var i = 1; i < length; i++)
- boundParameters[i - 1] = arguments[i];
-
- bindingFunction = function () {
- if (arguments.length) {
- var completeArguments = [...boundParameters, ...arguments];
- if (@IsConstructor)
- return new boundFunction(...completeArguments);
- else
- return boundFunction.@apply(thisValue, completeArguments);
- }
- if (@IsConstructor)
- return new boundFunction(...boundParameters);
- else
- return boundFunction.@apply(thisValue, boundParameters);
-
- }
- }
- bindingFunction.@boundFunctionName = this.name;
- bindingFunction.@boundFunction = boundFunction.@boundFunction || boundFunction;
- var boundLength = boundFunction.length - (arguments.length - 1);
- if (boundLength < 0)
- boundLength = 0;
- bindingFunction.@boundFunctionLength = boundLength;
- @SetTypeErrorAccessor(bindingFunction, "arguments");
- @SetTypeErrorAccessor(bindingFunction, "caller");
- return bindingFunction;
-}
</del></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx">
</span><span class="cx"> static UnlinkedFunctionCodeBlock* generateFunctionCodeBlock(VM& vm, UnlinkedFunctionExecutable* executable, const SourceCode& source, CodeSpecializationKind kind, DebuggerMode debuggerMode, ProfilerMode profilerMode, UnlinkedFunctionKind functionKind, ParserError& error)
</span><span class="cx"> {
</span><del>- RefPtr<FunctionBodyNode> body = parse<FunctionBodyNode>(&vm, source, executable->parameters(), executable->name(), executable->toStrictness(), JSParseFunctionCode, kind == CodeForConstruct ? JSFunctionIsConstructorKind : JSFunctionIsFunctionKind, error);
</del><ins>+ RefPtr<FunctionBodyNode> body = parse<FunctionBodyNode>(&vm, source, executable->parameters(), executable->name(), executable->toStrictness(), JSParseFunctionCode, error);
</ins><span class="cx">
</span><span class="cx"> if (!body) {
</span><span class="cx"> ASSERT(error.m_type != ParserError::ErrorNone);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1285,7 +1285,7 @@
</span><span class="cx"> generator.emitCheckHasInstance(dstReg.get(), src1.get(), src2.get(), target.get());
</span><span class="cx">
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><del>- generator.emitGetById(prototype.get(), src2.get(), generator.vm()->propertyNames->prototypeForHasInstancePrivateName);
</del><ins>+ generator.emitGetById(prototype.get(), src2.get(), generator.vm()->propertyNames->prototype);
</ins><span class="cx">
</span><span class="cx"> generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
</span><span class="cx"> RegisterID* result = generator.emitInstanceOf(dstReg.get(), src1.get(), prototype.get());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterInterpretercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -44,6 +44,7 @@
</span><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "JSActivation.h"
</span><span class="cx"> #include "JSArray.h"
</span><ins>+#include "JSBoundFunction.h"
</ins><span class="cx"> #include "JSNameScope.h"
</span><span class="cx"> #include "JSNotAnObject.h"
</span><span class="cx"> #include "JSPropertyNameIterator.h"
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/parser/Lexer.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -489,11 +489,10 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> template <typename T>
</span><del>-Lexer<T>::Lexer(VM* vm, JSParserStrictness strictness, JSFunctionKind functionKind)
</del><ins>+Lexer<T>::Lexer(VM* vm, JSParserStrictness strictness)
</ins><span class="cx"> : m_isReparsing(false)
</span><span class="cx"> , m_vm(vm)
</span><span class="cx"> , m_parsingBuiltinFunction(strictness == JSParseBuiltin)
</span><del>- , m_functionKind(functionKind)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -820,13 +819,8 @@
</span><span class="cx"> ident = m_vm->propertyNames->getPrivateName(*ident);
</span><span class="cx"> else if (*ident == m_vm->propertyNames->undefinedKeyword)
</span><span class="cx"> tokenData->ident = &m_vm->propertyNames->undefinedPrivateName;
</span><del>-
</del><span class="cx"> if (!ident)
</span><span class="cx"> return INVALID_PRIVATE_NAME_ERRORTOK;
</span><del>-
- if (*ident == m_vm->propertyNames->IsConstructorPrivateName)
- return m_functionKind == JSFunctionIsConstructorKind ? TRUETOKEN : FALSETOKEN;
-
</del><span class="cx"> }
</span><span class="cx"> tokenData->ident = ident;
</span><span class="cx"> } else
</span><span class="lines">@@ -902,11 +896,6 @@
</span><span class="cx"> ident = m_vm->propertyNames->getPrivateName(*ident);
</span><span class="cx"> else if (*ident == m_vm->propertyNames->undefinedKeyword)
</span><span class="cx"> tokenData->ident = &m_vm->propertyNames->undefinedPrivateName;
</span><del>- if (m_functionKind == JSFunctionIsConstructorKind) {
- if (*ident == m_vm->propertyNames->IsConstructorPrivateName)
- return TRUETOKEN;
- return FALSETOKEN;
- }
</del><span class="cx"> if (!ident)
</span><span class="cx"> return INVALID_PRIVATE_NAME_ERRORTOK;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.h (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/parser/Lexer.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx">
</span><span class="cx"> public:
</span><del>- Lexer(VM*, JSParserStrictness, JSFunctionKind);
</del><ins>+ Lexer(VM*, JSParserStrictness);
</ins><span class="cx"> ~Lexer();
</span><span class="cx">
</span><span class="cx"> // Character manipulation functions.
</span><span class="lines">@@ -238,7 +238,6 @@
</span><span class="cx">
</span><span class="cx"> VM* m_vm;
</span><span class="cx"> bool m_parsingBuiltinFunction;
</span><del>- JSFunctionKind m_functionKind;
</del><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> template <>
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/parser/Parser.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -192,7 +192,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <typename LexerType>
</span><del>-Parser<LexerType>::Parser(VM* vm, const SourceCode& source, FunctionParameters* parameters, const Identifier& name, JSParserStrictness strictness, JSParserMode parserMode, JSFunctionKind functionKind)
</del><ins>+Parser<LexerType>::Parser(VM* vm, const SourceCode& source, FunctionParameters* parameters, const Identifier& name, JSParserStrictness strictness, JSParserMode parserMode)
</ins><span class="cx"> : m_vm(vm)
</span><span class="cx"> , m_source(&source)
</span><span class="cx"> , m_hasStackOverflow(false)
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx"> , m_sourceElements(0)
</span><span class="cx"> , m_parsingBuiltin(strictness == JSParseBuiltin)
</span><span class="cx"> {
</span><del>- m_lexer = adoptPtr(new LexerType(vm, strictness, functionKind));
</del><ins>+ m_lexer = adoptPtr(new LexerType(vm, strictness));
</ins><span class="cx"> m_arena = m_vm->parserArena.get();
</span><span class="cx"> m_lexer->setCode(source, m_arena);
</span><span class="cx"> m_token.m_location.line = source.firstLine();
</span><span class="lines">@@ -283,6 +283,7 @@
</span><span class="cx">
</span><span class="cx"> Vector<RefPtr<StringImpl>> closedVariables;
</span><span class="cx"> if (m_parsingBuiltin) {
</span><ins>+ RELEASE_ASSERT(!capturedVariables.size());
</ins><span class="cx"> IdentifierSet usedVariables;
</span><span class="cx"> scope->getUsedVariables(usedVariables);
</span><span class="cx"> for (const auto& variable : usedVariables) {
</span><span class="lines">@@ -293,16 +294,6 @@
</span><span class="cx"> continue;
</span><span class="cx"> closedVariables.append(variable);
</span><span class="cx"> }
</span><del>- if (!capturedVariables.isEmpty()) {
- for (const auto& capturedVariable : capturedVariables) {
- if (scope->hasDeclaredVariable(Identifier(m_vm, capturedVariable.get())))
- continue;
-
- if (scope->hasDeclaredParameter(Identifier(m_vm, capturedVariable.get())))
- continue;
- RELEASE_ASSERT_NOT_REACHED();
- }
- }
</del><span class="cx"> }
</span><span class="cx"> didFinishParsing(sourceElements, context.varDeclarations(), context.funcDeclarations(), features,
</span><span class="cx"> context.numConstants(), capturedVariables, std::move(closedVariables));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.h (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/parser/Parser.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -411,7 +411,7 @@
</span><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx">
</span><span class="cx"> public:
</span><del>- Parser(VM*, const SourceCode&, FunctionParameters*, const Identifier&, JSParserStrictness, JSParserMode, JSFunctionKind);
</del><ins>+ Parser(VM*, const SourceCode&, FunctionParameters*, const Identifier&, JSParserStrictness, JSParserMode);
</ins><span class="cx"> ~Parser();
</span><span class="cx">
</span><span class="cx"> template <class ParsedNode>
</span><span class="lines">@@ -954,13 +954,13 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <class ParsedNode>
</span><del>-PassRefPtr<ParsedNode> parse(VM* vm, const SourceCode& source, FunctionParameters* parameters, const Identifier& name, JSParserStrictness strictness, JSParserMode parserMode, JSFunctionKind functionKind, ParserError& error, JSTextPosition* positionBeforeLastNewline = 0)
</del><ins>+PassRefPtr<ParsedNode> parse(VM* vm, const SourceCode& source, FunctionParameters* parameters, const Identifier& name, JSParserStrictness strictness, JSParserMode parserMode, ParserError& error, JSTextPosition* positionBeforeLastNewline = 0)
</ins><span class="cx"> {
</span><span class="cx"> SamplingRegion samplingRegion("Parsing");
</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, parameters, name, strictness, parserMode, functionKind);
</del><ins>+ Parser<Lexer<LChar>> parser(vm, source, parameters, name, strictness, parserMode);
</ins><span class="cx"> RefPtr<ParsedNode> result = parser.parse<ParsedNode>(error);
</span><span class="cx"> if (positionBeforeLastNewline)
</span><span class="cx"> *positionBeforeLastNewline = parser.positionBeforeLastNewline();
</span><span class="lines">@@ -972,7 +972,7 @@
</span><span class="cx"> }
</span><span class="cx"> return result.release();
</span><span class="cx"> }
</span><del>- Parser<Lexer<UChar>> parser(vm, source, parameters, name, strictness, parserMode, functionKind);
</del><ins>+ Parser<Lexer<UChar>> parser(vm, source, parameters, name, strictness, parserMode);
</ins><span class="cx"> RefPtr<ParsedNode> result = parser.parse<ParsedNode>(error);
</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 (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ParserModes.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/parser/ParserModes.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -33,8 +33,7 @@
</span><span class="cx">
</span><span class="cx"> enum JSParserStrictness { JSParseNormal, JSParseBuiltin, JSParseStrict };
</span><span class="cx"> enum JSParserMode { JSParseProgramCode, JSParseFunctionCode };
</span><del>-enum JSFunctionKind { JSNotFunctionKind, JSFunctionIsFunctionKind, JSFunctionIsConstructorKind };
-
</del><ins>+
</ins><span class="cx"> enum ProfilerMode { ProfilerOff, ProfilerOn };
</span><span class="cx"> enum DebuggerMode { DebuggerOff, DebuggerOn };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArgumentsIteratorConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArgumentsIteratorConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArgumentsIteratorConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/ArgumentsIteratorConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> void ArgumentsIteratorConstructor::finishCreation(VM& vm, ArgumentsIteratorPrototype* prototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> void ArrayConstructor::finishCreation(VM& vm, ArrayPrototype* arrayPrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, arrayPrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, arrayPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeBooleanConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/BooleanConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/BooleanConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/BooleanConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> void BooleanConstructor::finishCreation(VM& vm, BooleanPrototype* booleanPrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, booleanPrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, booleanPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, booleanPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx">
</span><span class="cx"> // no. of arguments for constructor
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> typedef typename CacheTypes<UnlinkedCodeBlockType>::RootNode RootNode;
</span><del>- RefPtr<RootNode> rootNode = parse<RootNode>(&vm, source, 0, Identifier(), strictness, JSParseProgramCode, JSNotFunctionKind, error);
</del><ins>+ RefPtr<RootNode> rootNode = parse<RootNode>(&vm, source, 0, Identifier(), strictness, JSParseProgramCode, error);
</ins><span class="cx"> if (!rootNode) {
</span><span class="cx"> m_sourceCode.remove(addResult.iterator);
</span><span class="cx"> return 0;
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> return jsCast<UnlinkedFunctionExecutable*>(addResult.iterator->value.cell.get());
</span><span class="cx">
</span><span class="cx"> JSTextPosition positionBeforeLastNewline;
</span><del>- RefPtr<ProgramNode> program = parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, JSNotFunctionKind, error, &positionBeforeLastNewline);
</del><ins>+ RefPtr<ProgramNode> program = parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error, &positionBeforeLastNewline);
</ins><span class="cx"> if (!program) {
</span><span class="cx"> RELEASE_ASSERT(error.m_type != ParserError::ErrorNone);
</span><span class="cx"> m_sourceCode.remove(addResult.iterator);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonIdentifiersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -219,13 +219,6 @@
</span><span class="cx"> macro(Object) \
</span><span class="cx"> macro(TypeError) \
</span><span class="cx"> macro(undefined) \
</span><del>- macro(IsConstructor) \
- macro(boundFunctionName) \
- macro(boundFunctionParameters) \
- macro(boundFunction) \
- macro(boundFunctionLength) \
- macro(prototypeForHasInstance) \
- macro(SetTypeErrorAccessor) \
</del><span class="cx"> macro(BuiltinLog)
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCompletioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Completion.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Completion.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/Completion.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx"> {
</span><span class="cx"> JSLockHolder lock(vm);
</span><span class="cx"> RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable());
</span><del>- RefPtr<ProgramNode> programNode = parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, JSNotFunctionKind, error);
</del><ins>+ RefPtr<ProgramNode> programNode = parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error);
</ins><span class="cx"> return programNode;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDateConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx"> void DateConstructor::finishCreation(VM& vm, DatePrototype* datePrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, datePrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, datePrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, datePrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(7), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeErrorConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ErrorConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ErrorConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/ErrorConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, errorPrototype->classInfo()->className);
</span><span class="cx"> // ECMA 15.11.3.1 Error.prototype
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, errorPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, errorPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), DontDelete | ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/Executable.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -447,7 +447,7 @@
</span><span class="cx"> ParserError error;
</span><span class="cx"> VM* vm = &exec->vm();
</span><span class="cx"> JSGlobalObject* lexicalGlobalObject = exec->lexicalGlobalObject();
</span><del>- RefPtr<ProgramNode> programNode = parse<ProgramNode>(vm, m_source, 0, Identifier(), JSParseNormal, ProgramNode::isFunctionNode ? JSParseFunctionCode : JSParseProgramCode, JSNotFunctionKind, error);
</del><ins>+ RefPtr<ProgramNode> programNode = parse<ProgramNode>(vm, m_source, 0, Identifier(), JSParseNormal, ProgramNode::isFunctionNode ? JSParseFunctionCode : JSParseProgramCode, error);
</ins><span class="cx"> if (programNode)
</span><span class="cx"> return 0;
</span><span class="cx"> ASSERT(error.m_type != ParserError::ErrorNone);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> void FunctionConstructor::finishCreation(VM& vm, FunctionPrototype* functionPrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, functionPrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, functionPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, functionPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx">
</span><span class="cx"> // Number of arguments for constructor
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> #include "BuiltinExecutables.h"
</span><span class="cx"> #include "BuiltinNames.h"
</span><span class="cx"> #include "JSArray.h"
</span><ins>+#include "JSBoundFunction.h"
</ins><span class="cx"> #include "JSFunction.h"
</span><span class="cx"> #include "JSString.h"
</span><span class="cx"> #include "JSStringBuilder.h"
</span><span class="lines">@@ -39,6 +40,7 @@
</span><span class="cx"> const ClassInfo FunctionPrototype::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(FunctionPrototype) };
</span><span class="cx">
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL functionProtoFuncToString(ExecState*);
</span><ins>+static EncodedJSValue JSC_HOST_CALL functionProtoFuncBind(ExecState*);
</ins><span class="cx">
</span><span class="cx"> FunctionPrototype::FunctionPrototype(VM& vm, Structure* structure)
</span><span class="cx"> : InternalFunction(vm, structure)
</span><span class="lines">@@ -60,8 +62,9 @@
</span><span class="cx">
</span><span class="cx"> *applyFunction = putDirectBuiltinFunctionWithoutTransition(vm, globalObject, vm.propertyNames->builtinNames().applyPublicName(), functionPrototypeApplyCodeGenerator(vm), DontEnum);
</span><span class="cx"> *callFunction = putDirectBuiltinFunctionWithoutTransition(vm, globalObject, vm.propertyNames->builtinNames().callPublicName(), functionPrototypeCallCodeGenerator(vm), DontEnum);
</span><del>-
- putDirectBuiltinFunctionWithoutTransition(vm, globalObject, vm.propertyNames->builtinNames().bindPublicName(), functionPrototypeBindCodeGenerator(vm), DontEnum);
</del><ins>+
+ JSFunction* bindFunction = JSFunction::create(vm, globalObject, 1, vm.propertyNames->bind.string(), functionProtoFuncBind);
+ putDirectWithoutTransition(vm, vm.propertyNames->bind, bindFunction, DontEnum);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL callFunctionPrototype(ExecState*)
</span><span class="lines">@@ -118,4 +121,47 @@
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+// 15.3.4.5 Function.prototype.bind (thisArg [, arg1 [, arg2, ...]])
+EncodedJSValue JSC_HOST_CALL functionProtoFuncBind(ExecState* exec)
+{
+ JSGlobalObject* globalObject = exec->callee()->globalObject();
+
+ // Let Target be the this value.
+ JSValue target = exec->thisValue();
+
+ // If IsCallable(Target) is false, throw a TypeError exception.
+ CallData callData;
+ CallType callType = getCallData(target, callData);
+ if (callType == CallTypeNone)
+ return throwVMTypeError(exec);
+ // Primitive values are not callable.
+ ASSERT(target.isObject());
+ JSObject* targetObject = asObject(target);
+ VM& vm = exec->vm();
+
+ // Let A be a new (possibly empty) internal list of all of the argument values provided after thisArg (arg1, arg2 etc), in order.
+ size_t numBoundArgs = exec->argumentCount() > 1 ? exec->argumentCount() - 1 : 0;
+ JSArray* boundArgs = JSArray::tryCreateUninitialized(vm, globalObject->arrayStructureForIndexingTypeDuringAllocation(ArrayWithUndecided), numBoundArgs);
+ if (!boundArgs)
+ return JSValue::encode(throwOutOfMemoryError(exec));
+
+ for (size_t i = 0; i < numBoundArgs; ++i)
+ boundArgs->initializeIndex(vm, i, exec->argument(i + 1));
+
+ // If the [[Class]] internal property of Target is "Function", then ...
+ // Else set the length own property of F to 0.
+ unsigned length = 0;
+ if (targetObject->inherits(JSFunction::info())) {
+ ASSERT(target.get(exec, exec->propertyNames().length).isNumber());
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is larger.
+ unsigned targetLength = (unsigned)target.get(exec, exec->propertyNames().length).asNumber();
+ if (targetLength > numBoundArgs)
+ length = targetLength - numBoundArgs;
+ }
+
+ JSString* name = target.get(exec, exec->propertyNames().name).toString(exec);
+ return JSValue::encode(JSBoundFunction::create(vm, globalObject, targetObject, exec->argument(0), boundArgs, length, name->value(exec)));
+}
+
</ins><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSArrayBufferConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> void JSArrayBufferConstructor::finishCreation(VM& vm, JSArrayBufferPrototype* prototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, "ArrayBuffer");
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), DontEnum | DontDelete | ReadOnly);
</span><span class="cx">
</span><span class="cx"> JSGlobalObject* globalObject = this->globalObject();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSBoundFunctioncpp"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp (0 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp         (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -0,0 +1,129 @@
</span><ins>+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * 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 "JSBoundFunction.h"
+
+#include "GetterSetter.h"
+#include "JSGlobalObject.h"
+#include "JSCInlines.h"
+
+namespace JSC {
+
+const ClassInfo JSBoundFunction::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JSBoundFunction) };
+
+EncodedJSValue JSC_HOST_CALL boundFunctionCall(ExecState* exec)
+{
+ JSBoundFunction* boundFunction = jsCast<JSBoundFunction*>(exec->callee());
+
+ ASSERT(isJSArray(boundFunction->boundArgs())); // Currently this is true!
+ JSArray* boundArgs = asArray(boundFunction->boundArgs());
+
+ MarkedArgumentBuffer args;
+ for (unsigned i = 0; i < boundArgs->length(); ++i)
+ args.append(boundArgs->getIndexQuickly(i));
+ for (unsigned i = 0; i < exec->argumentCount(); ++i)
+ args.append(exec->uncheckedArgument(i));
+
+ JSObject* targetFunction = boundFunction->targetFunction();
+ CallData callData;
+ CallType callType = getCallData(targetFunction, callData);
+ ASSERT(callType != CallTypeNone);
+ return JSValue::encode(call(exec, targetFunction, callType, callData, boundFunction->boundThis(), args));
+}
+
+EncodedJSValue JSC_HOST_CALL boundFunctionConstruct(ExecState* exec)
+{
+ JSBoundFunction* boundFunction = jsCast<JSBoundFunction*>(exec->callee());
+
+ ASSERT(isJSArray(boundFunction->boundArgs())); // Currently this is true!
+ JSArray* boundArgs = asArray(boundFunction->boundArgs());
+
+ MarkedArgumentBuffer args;
+ for (unsigned i = 0; i < boundArgs->length(); ++i)
+ args.append(boundArgs->getIndexQuickly(i));
+ for (unsigned i = 0; i < exec->argumentCount(); ++i)
+ args.append(exec->uncheckedArgument(i));
+
+ JSObject* targetFunction = boundFunction->targetFunction();
+ ConstructData constructData;
+ ConstructType constructType = getConstructData(targetFunction, constructData);
+ ASSERT(constructType != ConstructTypeNone);
+ return JSValue::encode(construct(exec, targetFunction, constructType, constructData, args));
+}
+
+JSBoundFunction* JSBoundFunction::create(VM& vm, JSGlobalObject* globalObject, JSObject* targetFunction, JSValue boundThis, JSValue boundArgs, int length, const String& name)
+{
+ ConstructData constructData;
+ ConstructType constructType = JSC::getConstructData(targetFunction, constructData);
+ bool canConstruct = constructType != ConstructTypeNone;
+ NativeExecutable* executable = vm.getHostFunction(boundFunctionCall, canConstruct ? boundFunctionConstruct : callHostFunctionAsConstructor);
+ JSBoundFunction* function = new (NotNull, allocateCell<JSBoundFunction>(vm.heap)) JSBoundFunction(vm, globalObject, globalObject->boundFunctionStructure(), targetFunction, boundThis, boundArgs);
+
+ function->finishCreation(vm, executable, length, name);
+ return function;
+}
+
+void JSBoundFunction::destroy(JSCell* cell)
+{
+ static_cast<JSBoundFunction*>(cell)->JSBoundFunction::~JSBoundFunction();
+}
+
+bool JSBoundFunction::customHasInstance(JSObject* object, ExecState* exec, JSValue value)
+{
+ return jsCast<JSBoundFunction*>(object)->m_targetFunction->hasInstance(exec, value);
+}
+
+JSBoundFunction::JSBoundFunction(VM& vm, JSGlobalObject* globalObject, Structure* structure, JSObject* targetFunction, JSValue boundThis, JSValue boundArgs)
+ : Base(vm, globalObject, structure)
+ , m_targetFunction(vm, this, targetFunction)
+ , m_boundThis(vm, this, boundThis)
+ , m_boundArgs(vm, this, boundArgs)
+{
+}
+
+void JSBoundFunction::finishCreation(VM& vm, NativeExecutable* executable, int length, const String& name)
+{
+ Base::finishCreation(vm, executable, length, name);
+ ASSERT(inherits(info()));
+
+ putDirectNonIndexAccessor(vm, vm.propertyNames->arguments, globalObject()->throwTypeErrorGetterSetter(vm), DontDelete | DontEnum | Accessor);
+ putDirectNonIndexAccessor(vm, vm.propertyNames->caller, globalObject()->throwTypeErrorGetterSetter(vm), DontDelete | DontEnum | Accessor);
+}
+
+void JSBoundFunction::visitChildren(JSCell* cell, SlotVisitor& visitor)
+{
+ JSBoundFunction* thisObject = jsCast<JSBoundFunction*>(cell);
+ ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+ COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
+ ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
+ Base::visitChildren(thisObject, visitor);
+
+ visitor.append(&thisObject->m_targetFunction);
+ visitor.append(&thisObject->m_boundThis);
+ visitor.append(&thisObject->m_boundArgs);
+}
+
+} // namespace JSC
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSBoundFunctionh"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h (0 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h         (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -0,0 +1,75 @@
</span><ins>+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * 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 JSBoundFunction_h
+#define JSBoundFunction_h
+
+#include "JSFunction.h"
+
+namespace JSC {
+
+EncodedJSValue JSC_HOST_CALL boundFunctionCall(ExecState*);
+EncodedJSValue JSC_HOST_CALL boundFunctionConstruct(ExecState*);
+
+class JSBoundFunction : public JSFunction {
+public:
+ typedef JSFunction Base;
+
+ static JSBoundFunction* create(VM&, JSGlobalObject*, JSObject* targetFunction, JSValue boundThis, JSValue boundArgs, int, const String&);
+
+ static void destroy(JSCell*);
+
+ static bool customHasInstance(JSObject*, ExecState*, JSValue);
+
+ JSObject* targetFunction() { return m_targetFunction.get(); }
+ JSValue boundThis() { return m_boundThis.get(); }
+ JSValue boundArgs() { return m_boundArgs.get(); }
+
+ static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
+ {
+ ASSERT(globalObject);
+ return Structure::create(vm, globalObject, prototype, TypeInfo(JSFunctionType, StructureFlags), info());
+ }
+
+ DECLARE_INFO;
+
+protected:
+ const static unsigned StructureFlags = OverridesHasInstance | OverridesVisitChildren | Base::StructureFlags;
+
+ static void visitChildren(JSCell*, SlotVisitor&);
+
+private:
+ JSBoundFunction(VM&, JSGlobalObject*, Structure*, JSObject* targetFunction, JSValue boundThis, JSValue boundArgs);
+
+ void finishCreation(VM&, NativeExecutable*, int, const String&);
+
+ WriteBarrier<JSObject> m_targetFunction;
+ WriteBarrier<Unknown> m_boundThis;
+ WriteBarrier<Unknown> m_boundArgs;
+};
+
+} // namespace JSC
+
+#endif // JSFunction_h
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSFunction.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "FunctionPrototype.h"
</span><span class="cx"> #include "GetterSetter.h"
</span><span class="cx"> #include "JSArray.h"
</span><ins>+#include "JSBoundFunction.h"
</ins><span class="cx"> #include "JSFunctionInlines.h"
</span><span class="cx"> #include "JSGlobalObject.h"
</span><span class="cx"> #include "JSNameScope.h"
</span><span class="lines">@@ -250,9 +251,8 @@
</span><span class="cx">
</span><span class="cx"> class RetrieveCallerFunctionFunctor {
</span><span class="cx"> public:
</span><del>- RetrieveCallerFunctionFunctor(ExecState* exec, JSFunction* functionObj)
- : m_exec(exec)
- , m_targetCallee(jsDynamicCast<JSObject*>(functionObj))
</del><ins>+ RetrieveCallerFunctionFunctor(JSFunction* functionObj)
+ : m_targetCallee(jsDynamicCast<JSObject*>(functionObj))
</ins><span class="cx"> , m_hasFoundFrame(false)
</span><span class="cx"> , m_hasSkippedToCallerFrame(false)
</span><span class="cx"> , m_result(jsNull())
</span><span class="lines">@@ -265,7 +265,7 @@
</span><span class="cx"> {
</span><span class="cx"> JSObject* callee = visitor->callee();
</span><span class="cx">
</span><del>- if (callee && callee->hasOwnProperty(m_exec, m_exec->propertyNames().boundFunctionNamePrivateName))
</del><ins>+ if (callee && callee->inherits(JSBoundFunction::info()))
</ins><span class="cx"> return StackVisitor::Continue;
</span><span class="cx">
</span><span class="cx"> if (!m_hasFoundFrame && (callee != m_targetCallee))
</span><span class="lines">@@ -283,7 +283,6 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- ExecState* m_exec;
</del><span class="cx"> JSObject* m_targetCallee;
</span><span class="cx"> bool m_hasFoundFrame;
</span><span class="cx"> bool m_hasSkippedToCallerFrame;
</span><span class="lines">@@ -292,7 +291,7 @@
</span><span class="cx">
</span><span class="cx"> static JSValue retrieveCallerFunction(ExecState* exec, JSFunction* functionObj)
</span><span class="cx"> {
</span><del>- RetrieveCallerFunctionFunctor functor(exec, functionObj);
</del><ins>+ RetrieveCallerFunctionFunctor functor(functionObj);
</ins><span class="cx"> exec->iterate(functor);
</span><span class="cx"> return functor.result();
</span><span class="cx"> }
</span><span class="lines">@@ -329,59 +328,17 @@
</span><span class="cx"> bool JSFunction::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
</span><span class="cx"> {
</span><span class="cx"> JSFunction* thisObject = jsCast<JSFunction*>(object);
</span><del>- if (thisObject->isHostFunction())
</del><ins>+ if (thisObject->isHostOrBuiltinFunction())
</ins><span class="cx"> return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><del>- if (thisObject->isBuiltinFunction()) {
- if (propertyName == exec->propertyNames().caller) {
- if (thisObject->jsExecutable()->isStrictMode()) {
- bool result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
- if (!result) {
- thisObject->putDirectAccessor(exec, propertyName, thisObject->globalObject()->throwTypeErrorGetterSetter(exec->vm()), DontDelete | DontEnum | Accessor);
- result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
- ASSERT(result);
- }
- return result;
- }
- slot.setCacheableCustom(thisObject, ReadOnly | DontEnum | DontDelete, callerGetter);
- return true;
- }
- if (propertyName == exec->propertyNames().prototypeForHasInstancePrivateName) {
- PropertySlot boundFunctionSlot(thisObject);
- if (Base::getOwnPropertySlot(thisObject, exec, exec->propertyNames().boundFunctionPrivateName, boundFunctionSlot)) {
- JSValue boundFunction = boundFunctionSlot.getValue(exec, exec->propertyNames().boundFunctionPrivateName);
- PropertySlot boundPrototypeSlot(asObject(boundFunction));
- if (asObject(boundFunction)->getPropertySlot(exec, propertyName, boundPrototypeSlot)) {
- slot.setValue(boundPrototypeSlot.slotBase(), boundPrototypeSlot.attributes(), boundPrototypeSlot.getValue(exec, propertyName));
- return true;
- }
- }
- }
- if (propertyName == exec->propertyNames().name) {
- PropertySlot nameSlot(thisObject);
- if (Base::getOwnPropertySlot(thisObject, exec, exec->vm().propertyNames->boundFunctionNamePrivateName, nameSlot)) {
- slot.setValue(thisObject, DontEnum | DontDelete | ReadOnly, nameSlot.getValue(exec, exec->vm().propertyNames->boundFunctionNamePrivateName));
- return true;
- }
- }
- if (propertyName == exec->propertyNames().length) {
- PropertySlot lengthSlot(thisObject);
- if (Base::getOwnPropertySlot(thisObject, exec, exec->vm().propertyNames->boundFunctionLengthPrivateName, lengthSlot)) {
- slot.setValue(thisObject, DontEnum | DontDelete | ReadOnly, lengthSlot.getValue(exec, exec->vm().propertyNames->boundFunctionLengthPrivateName));
- return true;
- }
- }
-
- return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
- }
-
- if (propertyName == exec->propertyNames().prototype || propertyName == exec->propertyNames().prototypeForHasInstancePrivateName) {
</del><ins>+
+ if (propertyName == exec->propertyNames().prototype) {
</ins><span class="cx"> VM& vm = exec->vm();
</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><span class="cx"> JSObject* prototype = constructEmptyObject(exec);
</span><span class="cx"> prototype->putDirect(vm, exec->propertyNames().constructor, thisObject, DontEnum);
</span><del>- thisObject->putDirectPrototypeProperty(vm, prototype, DontDelete | DontEnum);
</del><ins>+ thisObject->putDirect(vm, exec->propertyNames().prototype, prototype, DontDelete | DontEnum);
</ins><span class="cx"> offset = thisObject->getDirectOffset(vm, exec->propertyNames().prototype, attributes);
</span><span class="cx"> ASSERT(isValidOffset(offset));
</span><span class="cx"> }
</span><span class="lines">@@ -433,23 +390,16 @@
</span><span class="cx"> void JSFunction::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
</span><span class="cx"> {
</span><span class="cx"> JSFunction* thisObject = jsCast<JSFunction*>(object);
</span><del>- if (mode == IncludeDontEnumProperties) {
- bool shouldIncludeJSFunctionProperties = !thisObject->isHostOrBuiltinFunction();
- if (!shouldIncludeJSFunctionProperties && thisObject->isBuiltinFunction()) {
- PropertySlot boundFunctionSlot(thisObject);
- shouldIncludeJSFunctionProperties = Base::getOwnPropertySlot(thisObject, exec, exec->propertyNames().boundFunctionPrivateName, boundFunctionSlot);
- }
- if (shouldIncludeJSFunctionProperties) {
- VM& vm = exec->vm();
- // Make sure prototype has been reified.
- PropertySlot slot(thisObject);
- thisObject->methodTable(vm)->getOwnPropertySlot(thisObject, exec, vm.propertyNames->prototype, slot);
</del><ins>+ if (!thisObject->isHostOrBuiltinFunction() && (mode == IncludeDontEnumProperties)) {
+ VM& vm = exec->vm();
+ // Make sure prototype has been reified.
+ PropertySlot slot(thisObject);
+ thisObject->methodTable(vm)->getOwnPropertySlot(thisObject, exec, vm.propertyNames->prototype, slot);
</ins><span class="cx">
</span><del>- propertyNames.add(vm.propertyNames->arguments);
- propertyNames.add(vm.propertyNames->caller);
- propertyNames.add(vm.propertyNames->length);
- propertyNames.add(vm.propertyNames->name);
- }
</del><ins>+ propertyNames.add(vm.propertyNames->arguments);
+ propertyNames.add(vm.propertyNames->caller);
+ propertyNames.add(vm.propertyNames->length);
+ propertyNames.add(vm.propertyNames->name);
</ins><span class="cx"> }
</span><span class="cx"> Base::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode);
</span><span class="cx"> }
</span><span class="lines">@@ -469,10 +419,8 @@
</span><span class="cx"> thisObject->m_allocationProfile.clear();
</span><span class="cx"> thisObject->m_allocationProfileWatchpoint.fireAll();
</span><span class="cx"> // Don't allow this to be cached, since a [[Put]] must clear m_allocationProfile.
</span><del>- PutPropertySlot dontCachePrototype(thisObject);
- Base::put(thisObject, exec, propertyName, value, dontCachePrototype);
- PutPropertySlot dontCachePrototypeForHasInstance(thisObject);
- Base::put(thisObject, exec, exec->propertyNames().prototypeForHasInstancePrivateName, value, dontCachePrototypeForHasInstance);
</del><ins>+ PutPropertySlot dontCache(thisObject);
+ Base::put(thisObject, exec, propertyName, value, dontCache);
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx"> if (thisObject->jsExecutable()->isStrictMode() && (propertyName == exec->propertyNames().arguments || propertyName == exec->propertyNames().caller)) {
</span><span class="lines">@@ -517,10 +465,7 @@
</span><span class="cx"> thisObject->methodTable(exec->vm())->getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><span class="cx"> thisObject->m_allocationProfile.clear();
</span><span class="cx"> thisObject->m_allocationProfileWatchpoint.fireAll();
</span><del>- if (!Base::defineOwnProperty(object, exec, propertyName, descriptor, throwException))
- return false;
- Base::defineOwnProperty(object, exec, exec->propertyNames().prototypeForHasInstancePrivateName, descriptor, throwException);
- return true;
</del><ins>+ return Base::defineOwnProperty(object, exec, propertyName, descriptor, throwException);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool valueCheck;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewConstructorInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> void JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation(VM& vm, JSObject* prototype, const String& name)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, name);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(3), DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->BYTES_PER_ELEMENT, jsNumber(ViewClass::elementSize), DontEnum | ReadOnly | DontDelete);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx"> #include "JSArrayBufferConstructor.h"
</span><span class="cx"> #include "JSArrayBufferPrototype.h"
</span><span class="cx"> #include "JSArrayIterator.h"
</span><ins>+#include "JSBoundFunction.h"
</ins><span class="cx"> #include "JSCInlines.h"
</span><span class="cx"> #include "JSCallbackConstructor.h"
</span><span class="cx"> #include "JSCallbackFunction.h"
</span><span class="lines">@@ -277,6 +278,7 @@
</span><span class="cx">
</span><span class="cx"> m_functionPrototype.set(vm, this, FunctionPrototype::create(vm, FunctionPrototype::createStructure(vm, this, jsNull()))); // The real prototype will be set once ObjectPrototype is created.
</span><span class="cx"> m_functionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get()));
</span><ins>+ m_boundFunctionStructure.set(vm, this, JSBoundFunction::createStructure(vm, this, m_functionPrototype.get()));
</ins><span class="cx"> m_namedFunctionStructure.set(vm, this, Structure::addPropertyTransition(vm, m_functionStructure.get(), vm.propertyNames->name, DontDelete | ReadOnly | DontEnum, 0, m_functionNameOffset));
</span><span class="cx"> m_internalFunctionStructure.set(vm, this, InternalFunction::createStructure(vm, this, m_functionPrototype.get()));
</span><span class="cx"> JSFunction* callFunction = 0;
</span><span class="lines">@@ -450,7 +452,6 @@
</span><span class="cx"> putDirectWithoutTransition(vm, Identifier(exec, typedArrayConstructors[typedArrayIndex]->name(exec)), typedArrayConstructors[typedArrayIndex], DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- JSFunction* setTypeErrorAccessor = JSFunction::create(vm, this, 2, vm.propertyNames->emptyIdentifier.string(), globalFuncSetTypeErrorAccessor);
</del><span class="cx"> JSFunction* builtinLog = JSFunction::create(vm, this, 1, vm.propertyNames->emptyIdentifier.string(), globalFuncBuiltinLog);
</span><span class="cx"> GlobalPropertyInfo staticGlobals[] = {
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->NaN, jsNaN(), DontEnum | DontDelete | ReadOnly),
</span><span class="lines">@@ -459,7 +460,6 @@
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->undefinedPrivateName, jsUndefined(), DontEnum | DontDelete | ReadOnly),
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->ObjectPrivateName, objectConstructor, DontEnum | DontDelete | ReadOnly),
</span><span class="cx"> GlobalPropertyInfo(vm.propertyNames->TypeErrorPrivateName, m_typeErrorConstructor.get(), DontEnum | DontDelete | ReadOnly),
</span><del>- GlobalPropertyInfo(vm.propertyNames->SetTypeErrorAccessorPrivateName, setTypeErrorAccessor, DontEnum | DontDelete | ReadOnly),
</del><span class="cx"> GlobalPropertyInfo(vm.propertyNames->BuiltinLogPrivateName, builtinLog, DontEnum | DontDelete | ReadOnly)
</span><span class="cx"> };
</span><span class="cx"> addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #include "JSGlobalObjectFunctions.h"
</span><span class="cx">
</span><span class="cx"> #include "CallFrame.h"
</span><del>-#include "GetterSetter.h"
</del><span class="cx"> #include "Interpreter.h"
</span><span class="cx"> #include "JSFunction.h"
</span><span class="cx"> #include "JSGlobalObject.h"
</span><span class="lines">@@ -807,20 +806,6 @@
</span><span class="cx"> return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue JSC_HOST_CALL globalFuncSetTypeErrorAccessor(ExecState* exec)
-{
- JSObject* target = jsDynamicCast<JSObject*>(exec->argument(0));
- JSValue propertyName = exec->argument(1);
-
- // Setting __proto__ of a primitive should have no effect.
- if (!target || !propertyName.isString())
- return JSValue::encode(jsUndefined());
- VM& vm = exec->vm();
- Identifier property(exec, asString(propertyName)->getString(exec));
- target->putDirectNonIndexAccessor(vm, vm.propertyNames->arguments, target->globalObject()->throwTypeErrorGetterSetter(vm), DontDelete | DontEnum | Accessor);
- return JSValue::encode(jsUndefined());
-}
-
</del><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncBuiltinLog(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx"> dataLog(exec->argument(0).toWTFString(exec), "\n");
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -51,7 +51,6 @@
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeError(ExecState*);
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncProtoGetter(ExecState*);
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncProtoSetter(ExecState*);
</span><del>-EncodedJSValue JSC_HOST_CALL globalFuncSetTypeErrorAccessor(ExecState*);
</del><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncBuiltinLog(ExecState*);
</span><span class="cx">
</span><span class="cx"> static const double mantissaOverflowLowerBound = 9007199254740992.0;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -2668,17 +2668,5 @@
</span><span class="cx"> {
</span><span class="cx"> return exec->vm().throwException(exec, createTypeError(exec, message));
</span><span class="cx"> }
</span><del>-
-void JSObject::putDirectPrototypeProperty(VM& vm, JSValue value, int attributes)
-{
- putDirect(vm, vm.propertyNames->prototype, value, attributes);
- putDirect(vm, vm.propertyNames->prototypeForHasInstancePrivateName, value, attributes);
-}
-
-void JSObject::putDirectPrototypePropertyWithoutTransitions(VM& vm, JSValue value, int attributes)
-{
- putDirectWithoutTransition(vm, vm.propertyNames->prototype, value, attributes);
- putDirectWithoutTransition(vm, vm.propertyNames->prototypeForHasInstancePrivateName, value, attributes);
-}
-
</del><ins>+
</ins><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.h (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.h        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.h        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -932,9 +932,6 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- JS_EXPORT_PRIVATE void putDirectPrototypeProperty(VM&, JSValue, int);
- void putDirectPrototypePropertyWithoutTransitions(VM&, JSValue, int);
-
</del><span class="cx"> private:
</span><span class="cx"> friend class LLIntOffsetsExtractor;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> void JSPromiseConstructor::finishCreation(VM& vm, JSPromisePrototype* promisePrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, "Promise");
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, promisePrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, promisePrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeMapConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> void MapConstructor::finishCreation(VM& vm, MapPrototype* mapPrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, mapPrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, mapPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, mapPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeMapIteratorConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/MapIteratorConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/MapIteratorConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/MapIteratorConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> void MapIteratorConstructor::finishCreation(VM& vm, MapIteratorPrototype* prototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNameConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NameConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NameConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/NameConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> void NameConstructor::finishCreation(VM& vm, NamePrototype* prototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, prototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), DontDelete | ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNativeErrorConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> NativeErrorPrototype* prototype = NativeErrorPrototype::create(vm, globalObject, prototypeStructure, name, this);
</span><span class="cx">
</span><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.5
</span><del>- putDirectPrototypeProperty(vm, prototype, DontDelete | ReadOnly | DontEnum);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, prototype, DontDelete | ReadOnly | DontEnum);
</ins><span class="cx"> m_errorStructure.set(vm, this, ErrorInstance::createStructure(vm, globalObject, prototype));
</span><span class="cx"> ASSERT(m_errorStructure);
</span><span class="cx"> ASSERT(m_errorStructure->isObject());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNumberConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx"> ASSERT(inherits(info()));
</span><span class="cx">
</span><span class="cx"> // Number.Prototype
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, numberPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, numberPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx">
</span><span class="cx"> // no. of arguments for constructor
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeObjectConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, Identifier(&vm, "Object").string());
</span><span class="cx"> // ECMA 15.2.3.1
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, objectPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, objectPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> // no. of arguments for constructor
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> ASSERT(inherits(info()));
</span><span class="cx">
</span><span class="cx"> // ECMA 15.10.5.1 RegExp.prototype
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, regExpPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, regExpPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx">
</span><span class="cx"> // no. of arguments for constructor
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSetConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx"> void SetConstructor::finishCreation(VM& vm, SetPrototype* setPrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, setPrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, setPrototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, setPrototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSetIteratorConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> void SetIteratorConstructor::finishCreation(VM& vm, SetIteratorPrototype* prototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStringConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> void StringConstructor::finishCreation(VM& vm, StringPrototype* stringPrototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, stringPrototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, stringPrototype, ReadOnly | DontEnum | DontDelete);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, stringPrototype, ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWeakMapConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> void WeakMapConstructor::finishCreation(VM& vm, WeakMapPrototype* prototype)
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, prototype->classInfo()->className);
</span><del>- putDirectPrototypePropertyWithoutTransitions(vm, prototype, DontEnum | DontDelete | ReadOnly);
</del><ins>+ putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</ins><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/ChangeLog        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,3 +1,50 @@
</span><ins>+2014-04-11 Gavin Barraclough <baraclough@apple.com>
+
+ Rollout - Rewrite Function.bind as a builtin
+ https://bugs.webkit.org/show_bug.cgi?id=131083
+
+ Unreviewed.
+
+ Rolling out r167020 while investigating a performance regression.
+
+ * bindings/js/JSImageConstructor.cpp:
+ (WebCore::JSImageConstructor::finishCreation):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateConstructorHelperMethods):
+ * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+ (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
+ (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+ (WebCore::JSTestEventConstructorConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+ (WebCore::JSTestEventTargetConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestException.cpp:
+ (WebCore::JSTestExceptionConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
+ (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestInterface.cpp:
+ (WebCore::JSTestInterfaceConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
+ (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
+ (WebCore::JSTestNamedConstructorConstructor::finishCreation):
+ (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestNode.cpp:
+ (WebCore::JSTestNodeConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestObj.cpp:
+ (WebCore::JSTestObjConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
+ (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+ (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+ (WebCore::JSTestTypedefsConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSattribute.cpp:
+ (WebCore::JSattributeConstructor::finishCreation):
+ * bindings/scripts/test/JS/JSreadonly.cpp:
+ (WebCore::JSreadonlyConstructor::finishCreation):
+
</ins><span class="cx"> 2014-04-11 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> Build Fix after r167151.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSImageConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx"> * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
</span><del>- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010, 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * This library is free software; you can redistribute it and/or
</span><span class="cx"> * modify it under the terms of the GNU Lesser General Public
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(globalObject);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSHTMLImageElementPrototype::self(vm, globalObject), None);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSHTMLImageElementPrototype::self(vm, globalObject), None);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL constructImage(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -4560,15 +4560,15 @@
</span><span class="cx"> if (IsDOMGlobalObject($interface)) {
</span><span class="cx"> push(@$outputArray, " Base::finishCreation(vm);\n");
</span><span class="cx"> push(@$outputArray, " ASSERT(inherits(info()));\n");
</span><del>- push(@$outputArray, " putDirectPrototypeProperty(vm, globalObject->prototype(), DontDelete | ReadOnly);\n");
</del><ins>+ push(@$outputArray, " putDirect(vm, vm.propertyNames->prototype, globalObject->prototype(), DontDelete | ReadOnly);\n");
</ins><span class="cx"> } elsif ($generatingNamedConstructor) {
</span><span class="cx"> push(@$outputArray, " Base::finishCreation(globalObject);\n");
</span><span class="cx"> push(@$outputArray, " ASSERT(inherits(info()));\n");
</span><del>- push(@$outputArray, " putDirectPrototypeProperty(vm, ${className}Prototype::self(vm, globalObject), None);\n");
</del><ins>+ push(@$outputArray, " putDirect(vm, vm.propertyNames->prototype, ${className}Prototype::self(vm, globalObject), None);\n");
</ins><span class="cx"> } else {
</span><span class="cx"> push(@$outputArray, " Base::finishCreation(vm);\n");
</span><span class="cx"> push(@$outputArray, " ASSERT(inherits(info()));\n");
</span><del>- push(@$outputArray, " putDirectPrototypeProperty(vm, ${protoClassName}::self(vm, globalObject), DontDelete | ReadOnly);\n");
</del><ins>+ push(@$outputArray, " putDirect(vm, vm.propertyNames->prototype, ${protoClassName}::self(vm, globalObject), DontDelete | ReadOnly);\n");
</ins><span class="cx"> }
</span><span class="cx"> push(@$outputArray, " putDirect(vm, vm.propertyNames->length, jsNumber(${leastConstructorLength}), ReadOnly | DontDelete | DontEnum);\n") if defined $leastConstructorLength;
</span><span class="cx"> push(@$outputArray, "}\n\n");
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestActiveDOMObjectPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestActiveDOMObjectPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestCustomNamedGetterPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestCustomNamedGetterPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestEventConstructorPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestEventConstructorPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestEventTargetPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestEventTargetPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestExceptionPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestExceptionPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestGenerateIsReachablePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestGenerateIsReachablePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestInterfacePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestInterfacePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestMediaQueryListListenerPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestMediaQueryListListenerPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestNamedConstructorPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestNamedConstructorPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(globalObject);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestNamedConstructorPrototype::self(vm, globalObject), None);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestNamedConstructorPrototype::self(vm, globalObject), None);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestNodePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestNodePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -242,7 +242,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestObjPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestObjPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestOverloadedConstructorsPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestOverloadedConstructorsPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestSerializedScriptValueInterfacePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestSerializedScriptValueInterfacePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSTestTypedefsPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSTestTypedefsPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSattributePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSattributePrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (167164 => 167165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-04-11 22:36:37 UTC (rev 167164)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-04-11 22:38:22 UTC (rev 167165)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm);
</span><span class="cx"> ASSERT(inherits(info()));
</span><del>- putDirectPrototypeProperty(vm, JSreadonlyPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</del><ins>+ putDirect(vm, vm.propertyNames->prototype, JSreadonlyPrototype::self(vm, globalObject), DontDelete | ReadOnly);
</ins><span class="cx"> putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>