<!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>[165074] trunk/Source</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/165074">165074</a></dd>
<dt>Author</dt> <dd>mhahnenberg@apple.com</dd>
<dt>Date</dt> <dd>2014-03-04 13:38:05 -0800 (Tue, 04 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge API shims and JSLock
https://bugs.webkit.org/show_bug.cgi?id=129650

Reviewed by Mark Lam.

Source/JavaScriptCore: 

JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

* API/APICallbackFunction.h:
(JSC::APICallbackFunction::call):
(JSC::APICallbackFunction::construct):
* API/APIShims.h: Removed.
* API/JSBase.cpp:
(JSEvaluateScript):
(JSCheckScriptSyntax):
(JSGarbageCollect):
(JSReportExtraMemoryCost):
(JSSynchronousGarbageCollectForDebugging):
* API/JSCallbackConstructor.cpp:
* API/JSCallbackFunction.cpp:
* API/JSCallbackObjectFunctions.h:
(JSC::JSCallbackObject&lt;Parent&gt;::init):
(JSC::JSCallbackObject&lt;Parent&gt;::getOwnPropertySlot):
(JSC::JSCallbackObject&lt;Parent&gt;::put):
(JSC::JSCallbackObject&lt;Parent&gt;::putByIndex):
(JSC::JSCallbackObject&lt;Parent&gt;::deleteProperty):
(JSC::JSCallbackObject&lt;Parent&gt;::construct):
(JSC::JSCallbackObject&lt;Parent&gt;::customHasInstance):
(JSC::JSCallbackObject&lt;Parent&gt;::call):
(JSC::JSCallbackObject&lt;Parent&gt;::getOwnNonIndexPropertyNames):
(JSC::JSCallbackObject&lt;Parent&gt;::getStaticValue):
(JSC::JSCallbackObject&lt;Parent&gt;::callbackGetter):
* API/JSContext.mm:
(-[JSContext setException:]):
(-[JSContext wrapperForObjCObject:]):
(-[JSContext wrapperForJSObject:]):
* API/JSContextRef.cpp:
(JSContextGroupRelease):
(JSContextGroupSetExecutionTimeLimit):
(JSContextGroupClearExecutionTimeLimit):
(JSGlobalContextCreateInGroup):
(JSGlobalContextRetain):
(JSGlobalContextRelease):
(JSContextGetGlobalObject):
(JSContextGetGlobalContext):
(JSGlobalContextCopyName):
(JSGlobalContextSetName):
* API/JSManagedValue.mm:
(-[JSManagedValue value]):
* API/JSObjectRef.cpp:
(JSObjectMake):
(JSObjectMakeFunctionWithCallback):
(JSObjectMakeConstructor):
(JSObjectMakeFunction):
(JSObjectMakeArray):
(JSObjectMakeDate):
(JSObjectMakeError):
(JSObjectMakeRegExp):
(JSObjectGetPrototype):
(JSObjectSetPrototype):
(JSObjectHasProperty):
(JSObjectGetProperty):
(JSObjectSetProperty):
(JSObjectGetPropertyAtIndex):
(JSObjectSetPropertyAtIndex):
(JSObjectDeleteProperty):
(JSObjectGetPrivateProperty):
(JSObjectSetPrivateProperty):
(JSObjectDeletePrivateProperty):
(JSObjectIsFunction):
(JSObjectCallAsFunction):
(JSObjectCallAsConstructor):
(JSObjectCopyPropertyNames):
(JSPropertyNameArrayRelease):
(JSPropertyNameAccumulatorAddName):
* API/JSScriptRef.cpp:
* API/JSValue.mm:
(isDate):
(isArray):
(containerValueToObject):
(valueToArray):
(valueToDictionary):
(objectToValue):
* API/JSValueRef.cpp:
(JSValueGetType):
(JSValueIsUndefined):
(JSValueIsNull):
(JSValueIsBoolean):
(JSValueIsNumber):
(JSValueIsString):
(JSValueIsObject):
(JSValueIsObjectOfClass):
(JSValueIsEqual):
(JSValueIsStrictEqual):
(JSValueIsInstanceOfConstructor):
(JSValueMakeUndefined):
(JSValueMakeNull):
(JSValueMakeBoolean):
(JSValueMakeNumber):
(JSValueMakeString):
(JSValueMakeFromJSONString):
(JSValueCreateJSONString):
(JSValueToBoolean):
(JSValueToNumber):
(JSValueToStringCopy):
(JSValueToObject):
(JSValueProtect):
(JSValueUnprotect):
* API/JSVirtualMachine.mm:
(-[JSVirtualMachine addManagedReference:withOwner:]):
(-[JSVirtualMachine removeManagedReference:withOwner:]):
* API/JSWeakObjectMapRefPrivate.cpp:
* API/JSWrapperMap.mm:
(constructorHasInstance):
(makeWrapper):
(tryUnwrapObjcObject):
* API/ObjCCallbackFunction.mm:
(JSC::objCCallbackFunctionCallAsFunction):
(JSC::objCCallbackFunctionCallAsConstructor):
(objCCallbackFunctionForInvocation):
* CMakeLists.txt:
* ForwardingHeaders/JavaScriptCore/APIShims.h: Removed.
* GNUmakefile.list.am:
* JavaScriptCore.xcodeproj/project.pbxproj:
* dfg/DFGWorklist.cpp:
* heap/DelayedReleaseScope.h:
(JSC::DelayedReleaseScope::~DelayedReleaseScope):
* heap/HeapTimer.cpp:
(JSC::HeapTimer::timerDidFire):
(JSC::HeapTimer::timerEvent):
* heap/IncrementalSweeper.cpp:
* inspector/InjectedScriptModule.cpp:
(Inspector::InjectedScriptModule::ensureInjected):
* jsc.cpp:
(jscmain):
* runtime/GCActivityCallback.cpp:
(JSC::DefaultGCActivityCallback::doWork):
* runtime/JSGlobalObjectDebuggable.cpp:
(JSC::JSGlobalObjectDebuggable::connect):
(JSC::JSGlobalObjectDebuggable::disconnect):
(JSC::JSGlobalObjectDebuggable::dispatchMessageFromRemoteFrontend):
* runtime/JSLock.cpp:
(JSC::JSLock::lock):
(JSC::JSLock::didAcquireLock):
(JSC::JSLock::unlock):
(JSC::JSLock::willReleaseLock):
(JSC::JSLock::DropAllLocks::DropAllLocks):
(JSC::JSLock::DropAllLocks::~DropAllLocks):
* runtime/JSLock.h:
* testRegExp.cpp:
(realMain):

Source/WebCore: 

No new tests.

JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

* bindings/js/DOMRequestState.h:
(WebCore::DOMRequestState::Scope::Scope):
* bindings/js/JSDOMPromise.h:
(WebCore::DeferredWrapper::resolve):
(WebCore::DeferredWrapper::reject):
(WebCore::DeferredWrapper::resolve&lt;String&gt;):
(WebCore::DeferredWrapper::resolve&lt;bool&gt;):
(WebCore::char&gt;&gt;):
(WebCore::DeferredWrapper::reject&lt;String&gt;):
* bindings/js/ScriptController.cpp:
(WebCore::ScriptController::evaluateInWorld):
* bindings/js/SerializedScriptValue.cpp:
(WebCore::SerializedScriptValue::create):
(WebCore::SerializedScriptValue::deserialize):

Source/WebKit/mac: 

JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

* WebView/WebFrame.mm:
(-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):

Source/WebKit2: 

JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

* DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
(WebKit::UniqueIDBDatabaseBackingStoreSQLite::~UniqueIDBDatabaseBackingStoreSQLite):
(WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreAPIAPICallbackFunctionh">trunk/Source/JavaScriptCore/API/APICallbackFunction.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSBasecpp">trunk/Source/JavaScriptCore/API/JSBase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSCallbackConstructorcpp">trunk/Source/JavaScriptCore/API/JSCallbackConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSCallbackFunctioncpp">trunk/Source/JavaScriptCore/API/JSCallbackFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSCallbackObjectFunctionsh">trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSContextmm">trunk/Source/JavaScriptCore/API/JSContext.mm</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSContextRefcpp">trunk/Source/JavaScriptCore/API/JSContextRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSManagedValuemm">trunk/Source/JavaScriptCore/API/JSManagedValue.mm</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="#trunkSourceJavaScriptCoreAPIJSValuemm">trunk/Source/JavaScriptCore/API/JSValue.mm</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSValueRefcpp">trunk/Source/JavaScriptCore/API/JSValueRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSVirtualMachinemm">trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSWeakObjectMapRefPrivatecpp">trunk/Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSWrapperMapmm">trunk/Source/JavaScriptCore/API/JSWrapperMap.mm</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIObjCCallbackFunctionmm">trunk/Source/JavaScriptCore/API/ObjCCallbackFunction.mm</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="#trunkSourceJavaScriptCoreGNUmakefilelistam">trunk/Source/JavaScriptCore/GNUmakefile.list.am</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGWorklistcpp">trunk/Source/JavaScriptCore/dfg/DFGWorklist.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapDelayedReleaseScopeh">trunk/Source/JavaScriptCore/heap/DelayedReleaseScope.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapHeapTimercpp">trunk/Source/JavaScriptCore/heap/HeapTimer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapIncrementalSweepercpp">trunk/Source/JavaScriptCore/heap/IncrementalSweeper.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScriptModulecpp">trunk/Source/JavaScriptCore/inspector/InjectedScriptModule.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeGCActivityCallbackcpp">trunk/Source/JavaScriptCore/runtime/GCActivityCallback.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectDebuggablecpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectDebuggable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSLockcpp">trunk/Source/JavaScriptCore/runtime/JSLock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSLockh">trunk/Source/JavaScriptCore/runtime/JSLock.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretestRegExpcpp">trunk/Source/JavaScriptCore/testRegExp.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsDOMRequestStateh">trunk/Source/WebCore/bindings/js/DOMRequestState.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMPromiseh">trunk/Source/WebCore/bindings/js/JSDOMPromise.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptControllercpp">trunk/Source/WebCore/bindings/js/ScriptController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsSerializedScriptValuecpp">trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebFramemm">trunk/Source/WebKit/mac/WebView/WebFrame.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessIndexedDBsqliteUniqueIDBDatabaseBackingStoreSQLitecpp">trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreAPIAPIShimsh">trunk/Source/JavaScriptCore/API/APIShims.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreForwardingHeadersJavaScriptCoreAPIShimsh">trunk/Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APIShims.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreAPIAPICallbackFunctionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/APICallbackFunction.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/APICallbackFunction.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/APICallbackFunction.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> #define APICallbackFunction_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;Error.h&quot;
</span><span class="cx"> #include &quot;JSCallbackConstructor.h&quot;
</span><ins>+#include &quot;JSLock.h&quot;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     JSValueRef exception = 0;
</span><span class="cx">     JSValueRef result;
</span><span class="cx">     {
</span><del>-        APICallbackShim callbackShim(exec);
</del><ins>+        JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">         result = jsCast&lt;T*&gt;(toJS(functionRef))-&gt;functionCallback()(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &amp;exception);
</span><span class="cx">     }
</span><span class="cx">     if (exception)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx">         JSValueRef exception = 0;
</span><span class="cx">         JSObjectRef result;
</span><span class="cx">         {
</span><del>-            APICallbackShim callbackShim(exec);
</del><ins>+            JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">             result = callback(ctx, constructorRef, argumentCount, arguments.data(), &amp;exception);
</span><span class="cx">         }
</span><span class="cx">         if (exception) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIAPIShimsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/API/APIShims.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/APIShims.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/APIShims.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -1,120 +0,0 @@
</span><del>-/*
- * Copyright (C) 2009 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 COMPUTER, 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 COMPUTER, 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 APIShims_h
-#define APIShims_h
-
-#include &quot;CallFrame.h&quot;
-#include &quot;GCActivityCallback.h&quot;
-#include &quot;IncrementalSweeper.h&quot;
-#include &quot;JSLock.h&quot;
-#include &lt;wtf/WTFThreadData.h&gt;
-
-namespace JSC {
-
-class APIEntryShimWithoutLock {
-protected:
-    APIEntryShimWithoutLock(VM* vm, bool registerThread)
-        : m_vm(vm)
-        , m_entryIdentifierTable(wtfThreadData().setCurrentIdentifierTable(vm-&gt;identifierTable))
-    {
-        if (registerThread)
-            vm-&gt;heap.machineThreads().addCurrentThread();
-    }
-
-    ~APIEntryShimWithoutLock()
-    {
-        wtfThreadData().setCurrentIdentifierTable(m_entryIdentifierTable);
-    }
-
-protected:
-    RefPtr&lt;VM&gt; m_vm;
-    IdentifierTable* m_entryIdentifierTable;
-};
-
-class APIEntryShim : public APIEntryShimWithoutLock {
-public:
-    APIEntryShim(ExecState* exec, bool registerThread = true)
-        : APIEntryShimWithoutLock(&amp;exec-&gt;vm(), registerThread)
-        , m_lockHolder(&amp;exec-&gt;vm())
-    {
-    }
-
-    APIEntryShim(VM* vm, bool registerThread = true)
-        : APIEntryShimWithoutLock(vm, registerThread)
-        , m_lockHolder(vm)
-    {
-    }
-
-    ~APIEntryShim()
-    {
-        // Destroying our JSLockHolder should also destroy the VM.
-        m_vm.clear();
-    }
-
-private:
-    JSLockHolder m_lockHolder;
-};
-
-class APICallbackShim {
-public:
-    APICallbackShim(ExecState* exec)
-        : m_dropAllLocks(shouldDropAllLocks(exec-&gt;vm()) ? exec : nullptr)
-        , m_vm(&amp;exec-&gt;vm())
-    {
-        wtfThreadData().resetCurrentIdentifierTable();
-    }
-
-    APICallbackShim(VM&amp; vm)
-        : m_dropAllLocks(shouldDropAllLocks(vm) ? &amp;vm : nullptr)
-        , m_vm(&amp;vm)
-    {
-        wtfThreadData().resetCurrentIdentifierTable();
-    }
-
-    ~APICallbackShim()
-    {
-        wtfThreadData().setCurrentIdentifierTable(m_vm-&gt;identifierTable);
-    }
-
-private:
-    static bool shouldDropAllLocks(VM&amp; vm)
-    {
-        // If the VM is in the middle of being destroyed then we don't want to resurrect it
-        // by allowing DropAllLocks to ref it. By this point the APILock has already been 
-        // released anyways, so it doesn't matter that DropAllLocks is a no-op.
-        if (!vm.refCount())
-            return false;
-
-        return true;
-    }
-
-    JSLock::DropAllLocks m_dropAllLocks;
-    VM* m_vm;
-};
-
-}
-
-#endif
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSBase.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSBase.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSBase.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> #include &quot;JSBasePrivate.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;CallFrame.h&quot;
</span><span class="cx"> #include &quot;Completion.h&quot;
</span><span class="cx"> #include &quot;InitializeThreading.h&quot;
</span><span class="lines">@@ -53,7 +52,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsThisObject = toJS(thisObject);
</span><span class="cx"> 
</span><span class="lines">@@ -94,7 +93,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     startingLineNumber = std::max(1, startingLineNumber);
</span><span class="cx"> 
</span><span class="lines">@@ -126,7 +125,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec, false);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     exec-&gt;vm().heap.reportAbandonedObjectGraph();
</span><span class="cx"> }
</span><span class="lines">@@ -138,7 +137,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     exec-&gt;vm().heap.reportExtraMemoryCost(size);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -150,7 +149,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     exec-&gt;vm().heap.collectAllGarbage();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSCallbackConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSCallbackConstructor.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSCallbackConstructor.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSCallbackConstructor.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICallbackFunction.h&quot;
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;Error.h&quot;
</span><span class="cx"> #include &quot;JSGlobalObject.h&quot;
</span><span class="cx"> #include &quot;JSLock.h&quot;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSCallbackFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSCallbackFunction.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSCallbackFunction.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSCallbackFunction.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICallbackFunction.h&quot;
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;CodeBlock.h&quot;
</span><span class="cx"> #include &quot;Error.h&quot;
</span><span class="cx"> #include &quot;ExceptionHelpers.h&quot;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSCallbackObjectFunctionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;APICast.h&quot;
</span><span class="cx"> #include &quot;Error.h&quot;
</span><span class="cx"> #include &quot;ExceptionHelpers.h&quot;
</span><span class="lines">@@ -104,7 +103,7 @@
</span><span class="cx">     
</span><span class="cx">     // initialize from base to derived
</span><span class="cx">     for (int i = static_cast&lt;int&gt;(initRoutines.size()) - 1; i &gt;= 0; i--) {
</span><del>-        APICallbackShim callbackShim(exec);
</del><ins>+        JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">         JSObjectInitializeCallback initialize = initRoutines[i];
</span><span class="cx">         initialize(toRef(exec), toRef(this));
</span><span class="cx">     }
</span><span class="lines">@@ -142,7 +141,7 @@
</span><span class="cx">             if (JSObjectHasPropertyCallback hasProperty = jsClass-&gt;hasProperty) {
</span><span class="cx">                 if (!propertyNameRef)
</span><span class="cx">                     propertyNameRef = OpaqueJSString::create(name);
</span><del>-                APICallbackShim callbackShim(exec);
</del><ins>+                JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                 if (hasProperty(ctx, thisRef, propertyNameRef.get())) {
</span><span class="cx">                     slot.setCustom(thisObject, ReadOnly | DontEnum, callbackGetter);
</span><span class="cx">                     return true;
</span><span class="lines">@@ -153,7 +152,7 @@
</span><span class="cx">                 JSValueRef exception = 0;
</span><span class="cx">                 JSValueRef value;
</span><span class="cx">                 {
</span><del>-                    APICallbackShim callbackShim(exec);
</del><ins>+                    JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                     value = getProperty(ctx, thisRef, propertyNameRef.get(), &amp;exception);
</span><span class="cx">                 }
</span><span class="cx">                 if (exception) {
</span><span class="lines">@@ -236,7 +235,7 @@
</span><span class="cx">                 JSValueRef exception = 0;
</span><span class="cx">                 bool result;
</span><span class="cx">                 {
</span><del>-                    APICallbackShim callbackShim(exec);
</del><ins>+                    JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                     result = setProperty(ctx, thisRef, propertyNameRef.get(), valueRef, &amp;exception);
</span><span class="cx">                 }
</span><span class="cx">                 if (exception)
</span><span class="lines">@@ -253,7 +252,7 @@
</span><span class="cx">                         JSValueRef exception = 0;
</span><span class="cx">                         bool result;
</span><span class="cx">                         {
</span><del>-                            APICallbackShim callbackShim(exec);
</del><ins>+                            JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                             result = setProperty(ctx, thisRef, entry-&gt;propertyNameRef.get(), valueRef, &amp;exception);
</span><span class="cx">                         }
</span><span class="cx">                         if (exception)
</span><span class="lines">@@ -295,7 +294,7 @@
</span><span class="cx">             JSValueRef exception = 0;
</span><span class="cx">             bool result;
</span><span class="cx">             {
</span><del>-                APICallbackShim callbackShim(exec);
</del><ins>+                JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                 result = setProperty(ctx, thisRef, propertyNameRef.get(), valueRef, &amp;exception);
</span><span class="cx">             }
</span><span class="cx">             if (exception)
</span><span class="lines">@@ -312,7 +311,7 @@
</span><span class="cx">                     JSValueRef exception = 0;
</span><span class="cx">                     bool result;
</span><span class="cx">                     {
</span><del>-                        APICallbackShim callbackShim(exec);
</del><ins>+                        JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                         result = setProperty(ctx, thisRef, entry-&gt;propertyNameRef.get(), valueRef, &amp;exception);
</span><span class="cx">                     }
</span><span class="cx">                     if (exception)
</span><span class="lines">@@ -351,7 +350,7 @@
</span><span class="cx">                 JSValueRef exception = 0;
</span><span class="cx">                 bool result;
</span><span class="cx">                 {
</span><del>-                    APICallbackShim callbackShim(exec);
</del><ins>+                    JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                     result = deleteProperty(ctx, thisRef, propertyNameRef.get(), &amp;exception);
</span><span class="cx">                 }
</span><span class="cx">                 if (exception)
</span><span class="lines">@@ -418,7 +417,7 @@
</span><span class="cx">             JSValueRef exception = 0;
</span><span class="cx">             JSObject* result;
</span><span class="cx">             {
</span><del>-                APICallbackShim callbackShim(exec);
</del><ins>+                JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                 result = toJS(callAsConstructor(execRef, constructorRef, argumentCount, arguments.data(), &amp;exception));
</span><span class="cx">             }
</span><span class="cx">             if (exception)
</span><span class="lines">@@ -444,7 +443,7 @@
</span><span class="cx">             JSValueRef exception = 0;
</span><span class="cx">             bool result;
</span><span class="cx">             {
</span><del>-                APICallbackShim callbackShim(exec);
</del><ins>+                JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                 result = hasInstance(execRef, thisRef, valueRef, &amp;exception);
</span><span class="cx">             }
</span><span class="cx">             if (exception)
</span><span class="lines">@@ -485,7 +484,7 @@
</span><span class="cx">             JSValueRef exception = 0;
</span><span class="cx">             JSValue result;
</span><span class="cx">             {
</span><del>-                APICallbackShim callbackShim(exec);
</del><ins>+                JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                 result = toJS(exec, callAsFunction(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &amp;exception));
</span><span class="cx">             }
</span><span class="cx">             if (exception)
</span><span class="lines">@@ -507,7 +506,7 @@
</span><span class="cx">     
</span><span class="cx">     for (JSClassRef jsClass = thisObject-&gt;classRef(); jsClass; jsClass = jsClass-&gt;parentClass) {
</span><span class="cx">         if (JSObjectGetPropertyNamesCallback getPropertyNames = jsClass-&gt;getPropertyNames) {
</span><del>-            APICallbackShim callbackShim(exec);
</del><ins>+            JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">             getPropertyNames(execRef, thisRef, toRef(&amp;propertyNames));
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -572,7 +571,7 @@
</span><span class="cx">                         JSValueRef exception = 0;
</span><span class="cx">                         JSValueRef value;
</span><span class="cx">                         {
</span><del>-                            APICallbackShim callbackShim(exec);
</del><ins>+                            JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                             value = getProperty(toRef(exec), thisRef, entry-&gt;propertyNameRef.get(), &amp;exception);
</span><span class="cx">                         }
</span><span class="cx">                         if (exception) {
</span><span class="lines">@@ -634,7 +633,7 @@
</span><span class="cx">                 JSValueRef exception = 0;
</span><span class="cx">                 JSValueRef value;
</span><span class="cx">                 {
</span><del>-                    APICallbackShim callbackShim(exec);
</del><ins>+                    JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx">                     value = getProperty(toRef(exec), thisRef, propertyNameRef.get(), &amp;exception);
</span><span class="cx">                 }
</span><span class="cx">                 if (exception) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSContextmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSContext.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSContext.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSContext.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APICast.h&quot;
</span><del>-#import &quot;APIShims.h&quot;
</del><span class="cx"> #import &quot;JSContextInternal.h&quot;
</span><span class="cx"> #import &quot;JSGlobalObject.h&quot;
</span><span class="cx"> #import &quot;JSValueInternal.h&quot;
</span><span class="lines">@@ -103,7 +102,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)setException:(JSValue *)value
</span><span class="cx"> {
</span><del>-    JSC::APIEntryShim entryShim(toJS(m_context));
</del><ins>+    JSC::JSLockHolder locker(toJS(m_context));
</ins><span class="cx">     if (value)
</span><span class="cx">         m_exception.set(toJS(m_context)-&gt;vm(), toJS(JSValueToObject(m_context, valueInternalValue(value), 0)));
</span><span class="cx">     else
</span><span class="lines">@@ -271,13 +270,13 @@
</span><span class="cx"> 
</span><span class="cx"> - (JSValue *)wrapperForObjCObject:(id)object
</span><span class="cx"> {
</span><del>-    JSC::APIEntryShim entryShim(toJS(m_context));
</del><ins>+    JSC::JSLockHolder locker(toJS(m_context));
</ins><span class="cx">     return [m_wrapperMap jsWrapperForObject:object];
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (JSValue *)wrapperForJSObject:(JSValueRef)value
</span><span class="cx"> {
</span><del>-    JSC::APIEntryShim entryShim(toJS(m_context));
</del><ins>+    JSC::JSLockHolder locker(toJS(m_context));
</ins><span class="cx">     return [m_wrapperMap objcWrapperForJSValueRef:value];
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSContextRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSContextRef.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSContextRef.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSContextRef.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = *toJS(group);
</span><span class="cx"> 
</span><del>-    APIEntryShim entryShim(&amp;vm);
</del><ins>+    JSLockHolder locker(&amp;vm);
</ins><span class="cx">     vm.deref();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx"> void JSContextGroupSetExecutionTimeLimit(JSContextGroupRef group, double limit, JSShouldTerminateCallback callback, void* callbackData)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = *toJS(group);
</span><del>-    APIEntryShim entryShim(&amp;vm);
</del><ins>+    JSLockHolder locker(&amp;vm);
</ins><span class="cx">     Watchdog&amp; watchdog = vm.watchdog;
</span><span class="cx">     if (callback) {
</span><span class="cx">         void* callbackPtr = reinterpret_cast&lt;void*&gt;(callback);
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx"> void JSContextGroupClearExecutionTimeLimit(JSContextGroupRef group)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = *toJS(group);
</span><del>-    APIEntryShim entryShim(&amp;vm);
</del><ins>+    JSLockHolder locker(&amp;vm);
</ins><span class="cx">     Watchdog&amp; watchdog = vm.watchdog;
</span><span class="cx">     watchdog.setTimeLimit(vm, std::numeric_limits&lt;double&gt;::infinity());
</span><span class="cx"> }
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;VM&gt; vm = group ? PassRefPtr&lt;VM&gt;(toJS(group)) : VM::createContextGroup();
</span><span class="cx"> 
</span><del>-    APIEntryShim entryShim(vm.get(), false);
</del><ins>+    JSLockHolder locker(vm.get());
</ins><span class="cx">     vm-&gt;makeUsableFromMultipleThreads();
</span><span class="cx"> 
</span><span class="cx">     if (!globalObjectClass) {
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> JSGlobalContextRef JSGlobalContextRetain(JSGlobalContextRef ctx)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     VM&amp; vm = exec-&gt;vm();
</span><span class="cx">     gcProtect(exec-&gt;vmEntryGlobalObject());
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx">     IdentifierTable* savedIdentifierTable;
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><span class="cx">     {
</span><del>-        APIEntryShim entryShim(exec);
</del><ins>+        JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">         VM&amp; vm = exec-&gt;vm();
</span><span class="cx">         savedIdentifierTable = wtfThreadData().setCurrentIdentifierTable(vm.identifierTable);
</span><span class="lines">@@ -179,7 +179,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     return toRef(jsCast&lt;JSObject*&gt;(exec-&gt;lexicalGlobalObject()-&gt;methodTable()-&gt;toThis(exec-&gt;lexicalGlobalObject(), exec, NotStrictMode)));
</span><span class="cx"> }
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     return toGlobalRef(exec-&gt;lexicalGlobalObject()-&gt;globalExec());
</span><span class="cx"> }
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     String name = exec-&gt;vmEntryGlobalObject()-&gt;name();
</span><span class="cx">     if (name.isNull())
</span><span class="lines">@@ -231,7 +231,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     exec-&gt;vmEntryGlobalObject()-&gt;setName(name ? name-&gt;string() : String());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSManagedValuemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSManagedValue.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSManagedValue.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSManagedValue.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #if JSC_OBJC_API_ENABLED
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APICast.h&quot;
</span><del>-#import &quot;APIShims.h&quot;
</del><span class="cx"> #import &quot;Heap.h&quot;
</span><span class="cx"> #import &quot;JSContextInternal.h&quot;
</span><span class="cx"> #import &quot;JSValueInternal.h&quot;
</span><span class="lines">@@ -266,7 +265,7 @@
</span><span class="cx">     if (!m_lock-&gt;vm())
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span><del>-    JSC::APIEntryShim shim(m_lock-&gt;vm());
</del><ins>+    JSC::JSLockHolder apiLocker(m_lock-&gt;vm());
</ins><span class="cx">     if (!m_globalObject)
</span><span class="cx">         return nil;
</span><span class="cx">     if (m_weakValue.isClear())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSObjectRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSObjectRef.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSObjectRef.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSObjectRef.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     if (!jsClass)
</span><span class="cx">         return toRef(constructEmptyObject(exec));
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     return toRef(JSCallbackFunction::create(exec-&gt;vm(), exec-&gt;lexicalGlobalObject(), callAsFunction, name ? name-&gt;string() : ASCIILiteral(&quot;anonymous&quot;)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsPrototype = jsClass ? jsClass-&gt;prototype(exec) : 0;
</span><span class="cx">     if (!jsPrototype)
</span><span class="lines">@@ -137,7 +137,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     startingLineNumber = std::max(1, startingLineNumber);
</span><span class="cx">     Identifier nameID = name ? name-&gt;identifier(&amp;exec-&gt;vm()) : Identifier(exec, &quot;anonymous&quot;);
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* result;
</span><span class="cx">     if (argumentCount) {
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     MarkedArgumentBuffer argList;
</span><span class="cx">     for (size_t i = 0; i &lt; argumentCount; ++i)
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue message = argumentCount ? toJS(exec, arguments[0]) : jsUndefined();
</span><span class="cx">     Structure* errorStructure = exec-&gt;lexicalGlobalObject()-&gt;errorStructure();
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     MarkedArgumentBuffer argList;
</span><span class="cx">     for (size_t i = 0; i &lt; argumentCount; ++i)
</span><span class="lines">@@ -284,7 +284,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     return toRef(exec, jsObject-&gt;prototype());
</span><span class="lines">@@ -297,7 +297,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="lines">@@ -312,7 +312,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     
</span><span class="lines">@@ -326,7 +326,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx"> 
</span><span class="lines">@@ -350,7 +350,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     Identifier name(propertyName-&gt;identifier(&amp;exec-&gt;vm()));
</span><span class="lines">@@ -382,7 +382,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx"> 
</span><span class="lines">@@ -407,7 +407,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="lines">@@ -431,7 +431,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx"> 
</span><span class="lines">@@ -489,7 +489,7 @@
</span><span class="cx"> JSValueRef JSObjectGetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     JSValue result;
</span><span class="cx">     Identifier name(propertyName-&gt;identifier(&amp;exec-&gt;vm()));
</span><span class="lines">@@ -507,7 +507,7 @@
</span><span class="cx"> bool JSObjectSetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     JSValue jsValue = value ? toJS(exec, value) : JSValue();
</span><span class="cx">     Identifier name(propertyName-&gt;identifier(&amp;exec-&gt;vm()));
</span><span class="lines">@@ -531,7 +531,7 @@
</span><span class="cx"> bool JSObjectDeletePrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     Identifier name(propertyName-&gt;identifier(&amp;exec-&gt;vm()));
</span><span class="cx">     if (jsObject-&gt;inherits(JSCallbackObject&lt;JSGlobalObject&gt;::info())) {
</span><span class="lines">@@ -555,7 +555,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!object)
</span><span class="cx">         return false;
</span><del>-    APIEntryShim entryShim(toJS(ctx));
</del><ins>+    JSLockHolder locker(toJS(ctx));
</ins><span class="cx">     CallData callData;
</span><span class="cx">     JSCell* cell = toJS(object);
</span><span class="cx">     return cell-&gt;methodTable()-&gt;getCallData(cell, callData) != CallTypeNone;
</span><span class="lines">@@ -564,7 +564,7 @@
</span><span class="cx"> JSValueRef JSObjectCallAsFunction(JSContextRef ctx, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     if (!object)
</span><span class="cx">         return 0;
</span><span class="lines">@@ -610,7 +610,7 @@
</span><span class="cx"> JSObjectRef JSObjectCallAsConstructor(JSContextRef ctx, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     if (!object)
</span><span class="cx">         return 0;
</span><span class="lines">@@ -660,7 +660,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     VM* vm = &amp;exec-&gt;vm();
</span><span class="cx"> 
</span><span class="lines">@@ -686,7 +686,7 @@
</span><span class="cx"> void JSPropertyNameArrayRelease(JSPropertyNameArrayRef array)
</span><span class="cx"> {
</span><span class="cx">     if (--array-&gt;refCount == 0) {
</span><del>-        APIEntryShim entryShim(array-&gt;vm, false);
</del><ins>+        JSLockHolder locker(array-&gt;vm);
</ins><span class="cx">         delete array;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -704,6 +704,6 @@
</span><span class="cx"> void JSPropertyNameAccumulatorAddName(JSPropertyNameAccumulatorRef array, JSStringRef propertyName)
</span><span class="cx"> {
</span><span class="cx">     PropertyNameArray* propertyNames = toJS(array);
</span><del>-    APIEntryShim entryShim(propertyNames-&gt;vm());
</del><ins>+    JSLockHolder locker(propertyNames-&gt;vm());
</ins><span class="cx">     propertyNames-&gt;add(propertyName-&gt;identifier(propertyNames-&gt;vm()));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSScriptRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSScriptRef.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;Completion.h&quot;
</span><span class="cx"> #include &quot;JSBasePrivate.h&quot;
</span><span class="cx"> #include &quot;VM.h&quot;
</span><span class="lines">@@ -77,7 +76,7 @@
</span><span class="cx"> JSScriptRef JSScriptCreateReferencingImmortalASCIIText(JSContextGroupRef contextGroup, JSStringRef url, int startingLineNumber, const char* source, size_t length, JSStringRef* errorMessage, int* errorLine)
</span><span class="cx"> {
</span><span class="cx">     VM* vm = toJS(contextGroup);
</span><del>-    APIEntryShim entryShim(vm);
</del><ins>+    JSLockHolder locker(vm);
</ins><span class="cx">     for (size_t i = 0; i &lt; length; i++) {
</span><span class="cx">         if (!isASCII(source[i]))
</span><span class="cx">             return 0;
</span><span class="lines">@@ -102,7 +101,7 @@
</span><span class="cx"> JSScriptRef JSScriptCreateFromString(JSContextGroupRef contextGroup, JSStringRef url, int startingLineNumber, JSStringRef source, JSStringRef* errorMessage, int* errorLine)
</span><span class="cx"> {
</span><span class="cx">     VM* vm = toJS(contextGroup);
</span><del>-    APIEntryShim entryShim(vm);
</del><ins>+    JSLockHolder locker(vm);
</ins><span class="cx"> 
</span><span class="cx">     startingLineNumber = std::max(1, startingLineNumber);
</span><span class="cx"> 
</span><span class="lines">@@ -122,20 +121,20 @@
</span><span class="cx"> 
</span><span class="cx"> void JSScriptRetain(JSScriptRef script)
</span><span class="cx"> {
</span><del>-    APIEntryShim entryShim(script-&gt;vm());
</del><ins>+    JSLockHolder locker(script-&gt;vm());
</ins><span class="cx">     script-&gt;ref();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSScriptRelease(JSScriptRef script)
</span><span class="cx"> {
</span><del>-    APIEntryShim entryShim(script-&gt;vm());
</del><ins>+    JSLockHolder locker(script-&gt;vm());
</ins><span class="cx">     script-&gt;deref();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValueRef JSScriptEvaluate(JSContextRef context, JSScriptRef script, JSValueRef thisValueRef, JSValueRef* exception)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(context);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     if (script-&gt;vm() != &amp;exec-&gt;vm()) {
</span><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">         return 0;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSValuemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSValue.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSValue.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSValue.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APICast.h&quot;
</span><del>-#import &quot;APIShims.h&quot;
</del><span class="cx"> #import &quot;DateInstance.h&quot;
</span><span class="cx"> #import &quot;Error.h&quot;
</span><span class="cx"> #import &quot;JavaScriptCore.h&quot;
</span><span class="lines">@@ -563,13 +562,13 @@
</span><span class="cx"> 
</span><span class="cx"> inline bool isDate(JSObjectRef object, JSGlobalContextRef context)
</span><span class="cx"> {
</span><del>-    JSC::APIEntryShim entryShim(toJS(context));
</del><ins>+    JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx">     return toJS(object)-&gt;inherits(JSC::DateInstance::info());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline bool isArray(JSObjectRef object, JSGlobalContextRef context)
</span><span class="cx"> {
</span><del>-    JSC::APIEntryShim entryShim(toJS(context));
</del><ins>+    JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx">     return toJS(object)-&gt;inherits(JSC::JSArray::info());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -686,7 +685,7 @@
</span><span class="cx"> static id containerValueToObject(JSGlobalContextRef context, JSContainerConvertor::Task task)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(task.type != ContainerNone);
</span><del>-    JSC::APIEntryShim entryShim(toJS(context));
</del><ins>+    JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx">     JSContainerConvertor convertor(context);
</span><span class="cx">     convertor.add(task);
</span><span class="cx">     ASSERT(!convertor.isWorkListEmpty());
</span><span class="lines">@@ -712,7 +711,7 @@
</span><span class="cx">             ASSERT([current.objc isKindOfClass:[NSMutableDictionary class]]);
</span><span class="cx">             NSMutableDictionary *dictionary = (NSMutableDictionary *)current.objc;
</span><span class="cx"> 
</span><del>-            JSC::APIEntryShim entryShim(toJS(context));
</del><ins>+            JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx"> 
</span><span class="cx">             JSPropertyNameArrayRef propertyNameArray = JSObjectCopyPropertyNames(context, js);
</span><span class="cx">             size_t length = JSPropertyNameArrayGetCount(propertyNameArray);
</span><span class="lines">@@ -796,7 +795,7 @@
</span><span class="cx">     if (JSValueIsObject(context, value))
</span><span class="cx">         return containerValueToObject(context, (JSContainerConvertor::Task){ value, [NSMutableArray array], ContainerArray});
</span><span class="cx"> 
</span><del>-    JSC::APIEntryShim shim(toJS(context));
</del><ins>+    JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx">     if (!(JSValueIsNull(context, value) || JSValueIsUndefined(context, value))) {
</span><span class="cx">         JSC::JSObject* exceptionObject = JSC::createTypeError(toJS(context), ASCIILiteral(&quot;Cannot convert primitive to NSArray&quot;));
</span><span class="cx">         *exception = toRef(exceptionObject);
</span><span class="lines">@@ -818,7 +817,7 @@
</span><span class="cx">     if (JSValueIsObject(context, value))
</span><span class="cx">         return containerValueToObject(context, (JSContainerConvertor::Task){ value, [NSMutableDictionary dictionary], ContainerDictionary});
</span><span class="cx"> 
</span><del>-    JSC::APIEntryShim shim(toJS(context));
</del><ins>+    JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx">     if (!(JSValueIsNull(context, value) || JSValueIsUndefined(context, value))) {
</span><span class="cx">         JSC::JSObject* exceptionObject = JSC::createTypeError(toJS(context), ASCIILiteral(&quot;Cannot convert primitive to NSDictionary&quot;));
</span><span class="cx">         *exception = toRef(exceptionObject);
</span><span class="lines">@@ -950,7 +949,7 @@
</span><span class="cx">     if (task.type == ContainerNone)
</span><span class="cx">         return task.js;
</span><span class="cx"> 
</span><del>-    JSC::APIEntryShim entryShim(toJS(contextRef));
</del><ins>+    JSC::JSLockHolder locker(toJS(contextRef));
</ins><span class="cx">     ObjcContainerConvertor convertor(context);
</span><span class="cx">     convertor.add(task);
</span><span class="cx">     ASSERT(!convertor.isWorkListEmpty());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSValueRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSValueRef.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSValueRef.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSValueRef.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx"> #include &quot;JSValueRef.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;JSAPIWrapperObject.h&quot;
</span><span class="cx"> #include &quot;JSCJSValue.h&quot;
</span><span class="cx"> #include &quot;JSCallbackObject.h&quot;
</span><span class="lines">@@ -72,7 +71,7 @@
</span><span class="cx">         return kJSTypeUndefined;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx"> 
</span><span class="lines">@@ -97,7 +96,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.isUndefined();
</span><span class="lines">@@ -110,7 +109,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.isNull();
</span><span class="lines">@@ -123,7 +122,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.isBoolean();
</span><span class="lines">@@ -136,7 +135,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.isNumber();
</span><span class="lines">@@ -149,7 +148,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.isString();
</span><span class="lines">@@ -162,7 +161,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.isObject();
</span><span class="lines">@@ -175,7 +174,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     
</span><span class="lines">@@ -199,7 +198,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsA = toJS(exec, a);
</span><span class="cx">     JSValue jsB = toJS(exec, b);
</span><span class="lines">@@ -224,7 +223,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsA = toJS(exec, a);
</span><span class="cx">     JSValue jsB = toJS(exec, b);
</span><span class="lines">@@ -239,7 +238,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx"> 
</span><span class="lines">@@ -266,7 +265,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     return toRef(exec, jsUndefined());
</span><span class="cx"> }
</span><span class="lines">@@ -278,7 +277,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     return toRef(exec, jsNull());
</span><span class="cx"> }
</span><span class="lines">@@ -290,7 +289,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     return toRef(exec, jsBoolean(value));
</span><span class="cx"> }
</span><span class="lines">@@ -302,7 +301,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     // Our JSValue representation relies on a standard bit pattern for NaN. NaNs
</span><span class="cx">     // generated internally to JavaScriptCore naturally have that representation,
</span><span class="lines">@@ -320,7 +319,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     return toRef(exec, jsString(exec, string-&gt;string()));
</span><span class="cx"> }
</span><span class="lines">@@ -332,7 +331,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     String str = string-&gt;string();
</span><span class="cx">     unsigned length = str.length();
</span><span class="cx">     if (length &amp;&amp; str.is8Bit()) {
</span><span class="lines">@@ -350,7 +349,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSValue value = toJS(exec, apiValue);
</span><span class="cx">     String result = JSONStringify(exec, value, indent);
</span><span class="cx">     if (exception)
</span><span class="lines">@@ -375,7 +374,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     return jsValue.toBoolean(exec);
</span><span class="lines">@@ -388,7 +387,7 @@
</span><span class="cx">         return QNaN;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx"> 
</span><span class="lines">@@ -413,7 +412,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     
</span><span class="lines">@@ -438,7 +437,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJS(exec, value);
</span><span class="cx">     
</span><span class="lines">@@ -463,7 +462,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJSForGC(exec, value);
</span><span class="cx">     gcProtect(jsValue);
</span><span class="lines">@@ -477,7 +476,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSValue jsValue = toJSForGC(exec, value);
</span><span class="cx">     gcUnprotect(jsValue);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSVirtualMachinemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #if JSC_OBJC_API_ENABLED
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APICast.h&quot;
</span><del>-#import &quot;APIShims.h&quot;
</del><span class="cx"> #import &quot;JSManagedValueInternal.h&quot;
</span><span class="cx"> #import &quot;JSVirtualMachine.h&quot;
</span><span class="cx"> #import &quot;JSVirtualMachineInternal.h&quot;
</span><span class="lines">@@ -157,7 +156,7 @@
</span><span class="cx">     if (!object || !owner)
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    JSC::APIEntryShim shim(toJS(m_group));
</del><ins>+    JSC::JSLockHolder locker(toJS(m_group));
</ins><span class="cx">     
</span><span class="cx">     NSMapTable *ownedObjects = [m_externalObjectGraph objectForKey:owner];
</span><span class="cx">     if (!ownedObjects) {
</span><span class="lines">@@ -184,7 +183,7 @@
</span><span class="cx">     if (!object || !owner)
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    JSC::APIEntryShim shim(toJS(m_group));
</del><ins>+    JSC::JSLockHolder locker(toJS(m_group));
</ins><span class="cx">     
</span><span class="cx">     NSMapTable *ownedObjects = [m_externalObjectGraph objectForKey:owner];
</span><span class="cx">     if (!ownedObjects)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSWeakObjectMapRefPrivatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSWeakObjectMapRefPrivate.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx"> #include &quot;JSWeakObjectMapRefPrivate.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APICast.h&quot;
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;JSCJSValue.h&quot;
</span><span class="cx"> #include &quot;JSCallbackObject.h&quot;
</span><span class="cx"> #include &quot;JSWeakObjectMapRefInternal.h&quot;
</span><span class="lines">@@ -46,7 +45,7 @@
</span><span class="cx"> JSWeakObjectMapRef JSWeakObjectMapCreate(JSContextRef context, void* privateData, JSWeakMapDestroyedCallback callback)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(context);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     RefPtr&lt;OpaqueJSWeakObjectMap&gt; map = OpaqueJSWeakObjectMap::create(privateData, callback);
</span><span class="cx">     exec-&gt;lexicalGlobalObject()-&gt;registerWeakMap(map.get());
</span><span class="cx">     return map.get();
</span><span class="lines">@@ -59,7 +58,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSObject* obj = toJS(object);
</span><span class="cx">     if (!obj)
</span><span class="cx">         return;
</span><span class="lines">@@ -74,7 +73,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     return toRef(jsCast&lt;JSObject*&gt;(map-&gt;map().get(key)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -85,7 +84,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ExecState* exec = toJS(ctx);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     map-&gt;map().remove(key);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSWrapperMapmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSWrapperMap.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSWrapperMap.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/JSWrapperMap.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #if JSC_OBJC_API_ENABLED
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APICast.h&quot;
</span><del>-#import &quot;APIShims.h&quot;
</del><span class="cx"> #import &quot;JSAPIWrapperObject.h&quot;
</span><span class="cx"> #import &quot;JSCallbackObject.h&quot;
</span><span class="cx"> #import &quot;JSContextInternal.h&quot;
</span><span class="lines">@@ -101,7 +100,7 @@
</span><span class="cx"> static bool constructorHasInstance(JSContextRef ctx, JSObjectRef constructorRef, JSValueRef possibleInstance, JSValueRef*)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = toJS(ctx);
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     JSC::JSObject* constructor = toJS(constructorRef);
</span><span class="cx">     JSC::JSValue instance = toJS(exec, possibleInstance);
</span><span class="lines">@@ -111,7 +110,7 @@
</span><span class="cx"> static JSObjectRef makeWrapper(JSContextRef ctx, JSClassRef jsClass, id wrappedObject)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = toJS(ctx);
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(jsClass);
</span><span class="cx">     JSC::JSCallbackObject&lt;JSC::JSAPIWrapperObject&gt;* object = JSC::JSCallbackObject&lt;JSC::JSAPIWrapperObject&gt;::create(exec, exec-&gt;lexicalGlobalObject(), exec-&gt;lexicalGlobalObject()-&gt;objcWrapperObjectStructure(), jsClass, 0);
</span><span class="lines">@@ -625,7 +624,7 @@
</span><span class="cx">     JSValueRef exception = 0;
</span><span class="cx">     JSObjectRef object = JSValueToObject(context, value, &amp;exception);
</span><span class="cx">     ASSERT(!exception);
</span><del>-    JSC::APIEntryShim entryShim(toJS(context));
</del><ins>+    JSC::JSLockHolder locker(toJS(context));
</ins><span class="cx">     if (toJS(object)-&gt;inherits(JSC::JSCallbackObject&lt;JSC::JSAPIWrapperObject&gt;::info()))
</span><span class="cx">         return (id)JSC::jsCast&lt;JSC::JSAPIWrapperObject*&gt;(toJS(object))-&gt;wrappedObject();
</span><span class="cx">     if (id target = tryUnwrapConstructor(object))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIObjCCallbackFunctionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/ObjCCallbackFunction.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/ObjCCallbackFunction.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/API/ObjCCallbackFunction.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APICallbackFunction.h&quot;
</span><span class="cx"> #import &quot;APICast.h&quot;
</span><del>-#import &quot;APIShims.h&quot;
</del><span class="cx"> #import &quot;DelayedReleaseScope.h&quot;
</span><span class="cx"> #import &quot;Error.h&quot;
</span><span class="cx"> #import &quot;JSCJSValueInlines.h&quot;
</span><span class="lines">@@ -455,7 +454,7 @@
</span><span class="cx">     // (1) We don't want to support the C-API's confusing drops-locks-once policy - should only drop locks if we can do so recursively.
</span><span class="cx">     // (2) We're calling some JSC internals that require us to be on the 'inside' - e.g. createTypeError.
</span><span class="cx">     // (3) We need to be locked (per context would be fine) against conflicting usage of the ObjCCallbackFunction's NSInvocation.
</span><del>-    JSC::APIEntryShim entryShim(toJS(callerContext));
</del><ins>+    JSC::JSLockHolder locker(toJS(callerContext));
</ins><span class="cx"> 
</span><span class="cx">     ObjCCallbackFunction* callback = static_cast&lt;ObjCCallbackFunction*&gt;(toJS(function));
</span><span class="cx">     ObjCCallbackFunctionImpl* impl = callback-&gt;impl();
</span><span class="lines">@@ -475,7 +474,7 @@
</span><span class="cx"> 
</span><span class="cx"> static JSObjectRef objCCallbackFunctionCallAsConstructor(JSContextRef callerContext, JSObjectRef constructor, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
</span><span class="cx"> {
</span><del>-    JSC::APIEntryShim entryShim(toJS(callerContext));
</del><ins>+    JSC::JSLockHolder locker(toJS(callerContext));
</ins><span class="cx"> 
</span><span class="cx">     ObjCCallbackFunction* callback = static_cast&lt;ObjCCallbackFunction*&gt;(toJS(constructor));
</span><span class="cx">     ObjCCallbackFunctionImpl* impl = callback-&gt;impl();
</span><span class="lines">@@ -673,7 +672,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JSC::ExecState* exec = toJS([context JSGlobalContextRef]);
</span><del>-    JSC::APIEntryShim shim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     OwnPtr&lt;JSC::ObjCCallbackFunctionImpl&gt; impl = adoptPtr(new JSC::ObjCCallbackFunctionImpl(invocation, type, instanceClass, arguments.release(), result.release()));
</span><span class="cx">     return toRef(JSC::ObjCCallbackFunction::create(exec-&gt;vm(), exec-&gt;lexicalGlobalObject(), impl-&gt;name(), impl.release()));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -769,7 +769,6 @@
</span><span class="cx"> 
</span><span class="cx"> set(JavaScriptCore_FORWARDING_HEADERS_FILES
</span><span class="cx">     API/APICast.h
</span><del>-    API/APIShims.h
</del><span class="cx">     API/JSBase.h
</span><span class="cx">     API/JSCTestRunnerUtils.h
</span><span class="cx">     API/JSContextRef.h
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -1,3 +1,157 @@
</span><ins>+2014-03-04  Mark Hahnenberg  &lt;mhahnenberg@apple.com&gt;
+
+        Merge API shims and JSLock
+        https://bugs.webkit.org/show_bug.cgi?id=129650
+
+        Reviewed by Mark Lam.
+
+        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
+        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.
+
+        * API/APICallbackFunction.h:
+        (JSC::APICallbackFunction::call):
+        (JSC::APICallbackFunction::construct):
+        * API/APIShims.h: Removed.
+        * API/JSBase.cpp:
+        (JSEvaluateScript):
+        (JSCheckScriptSyntax):
+        (JSGarbageCollect):
+        (JSReportExtraMemoryCost):
+        (JSSynchronousGarbageCollectForDebugging):
+        * API/JSCallbackConstructor.cpp:
+        * API/JSCallbackFunction.cpp:
+        * API/JSCallbackObjectFunctions.h:
+        (JSC::JSCallbackObject&lt;Parent&gt;::init):
+        (JSC::JSCallbackObject&lt;Parent&gt;::getOwnPropertySlot):
+        (JSC::JSCallbackObject&lt;Parent&gt;::put):
+        (JSC::JSCallbackObject&lt;Parent&gt;::putByIndex):
+        (JSC::JSCallbackObject&lt;Parent&gt;::deleteProperty):
+        (JSC::JSCallbackObject&lt;Parent&gt;::construct):
+        (JSC::JSCallbackObject&lt;Parent&gt;::customHasInstance):
+        (JSC::JSCallbackObject&lt;Parent&gt;::call):
+        (JSC::JSCallbackObject&lt;Parent&gt;::getOwnNonIndexPropertyNames):
+        (JSC::JSCallbackObject&lt;Parent&gt;::getStaticValue):
+        (JSC::JSCallbackObject&lt;Parent&gt;::callbackGetter):
+        * API/JSContext.mm:
+        (-[JSContext setException:]):
+        (-[JSContext wrapperForObjCObject:]):
+        (-[JSContext wrapperForJSObject:]):
+        * API/JSContextRef.cpp:
+        (JSContextGroupRelease):
+        (JSContextGroupSetExecutionTimeLimit):
+        (JSContextGroupClearExecutionTimeLimit):
+        (JSGlobalContextCreateInGroup):
+        (JSGlobalContextRetain):
+        (JSGlobalContextRelease):
+        (JSContextGetGlobalObject):
+        (JSContextGetGlobalContext):
+        (JSGlobalContextCopyName):
+        (JSGlobalContextSetName):
+        * API/JSManagedValue.mm:
+        (-[JSManagedValue value]):
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeConstructor):
+        (JSObjectMakeFunction):
+        (JSObjectMakeArray):
+        (JSObjectMakeDate):
+        (JSObjectMakeError):
+        (JSObjectMakeRegExp):
+        (JSObjectGetPrototype):
+        (JSObjectSetPrototype):
+        (JSObjectHasProperty):
+        (JSObjectGetProperty):
+        (JSObjectSetProperty):
+        (JSObjectGetPropertyAtIndex):
+        (JSObjectSetPropertyAtIndex):
+        (JSObjectDeleteProperty):
+        (JSObjectGetPrivateProperty):
+        (JSObjectSetPrivateProperty):
+        (JSObjectDeletePrivateProperty):
+        (JSObjectIsFunction):
+        (JSObjectCallAsFunction):
+        (JSObjectCallAsConstructor):
+        (JSObjectCopyPropertyNames):
+        (JSPropertyNameArrayRelease):
+        (JSPropertyNameAccumulatorAddName):
+        * API/JSScriptRef.cpp:
+        * API/JSValue.mm:
+        (isDate):
+        (isArray):
+        (containerValueToObject):
+        (valueToArray):
+        (valueToDictionary):
+        (objectToValue):
+        * API/JSValueRef.cpp:
+        (JSValueGetType):
+        (JSValueIsUndefined):
+        (JSValueIsNull):
+        (JSValueIsBoolean):
+        (JSValueIsNumber):
+        (JSValueIsString):
+        (JSValueIsObject):
+        (JSValueIsObjectOfClass):
+        (JSValueIsEqual):
+        (JSValueIsStrictEqual):
+        (JSValueIsInstanceOfConstructor):
+        (JSValueMakeUndefined):
+        (JSValueMakeNull):
+        (JSValueMakeBoolean):
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        (JSValueMakeFromJSONString):
+        (JSValueCreateJSONString):
+        (JSValueToBoolean):
+        (JSValueToNumber):
+        (JSValueToStringCopy):
+        (JSValueToObject):
+        (JSValueProtect):
+        (JSValueUnprotect):
+        * API/JSVirtualMachine.mm:
+        (-[JSVirtualMachine addManagedReference:withOwner:]):
+        (-[JSVirtualMachine removeManagedReference:withOwner:]):
+        * API/JSWeakObjectMapRefPrivate.cpp:
+        * API/JSWrapperMap.mm:
+        (constructorHasInstance):
+        (makeWrapper):
+        (tryUnwrapObjcObject):
+        * API/ObjCCallbackFunction.mm:
+        (JSC::objCCallbackFunctionCallAsFunction):
+        (JSC::objCCallbackFunctionCallAsConstructor):
+        (objCCallbackFunctionForInvocation):
+        * CMakeLists.txt:
+        * ForwardingHeaders/JavaScriptCore/APIShims.h: Removed.
+        * GNUmakefile.list.am:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * dfg/DFGWorklist.cpp:
+        * heap/DelayedReleaseScope.h:
+        (JSC::DelayedReleaseScope::~DelayedReleaseScope):
+        * heap/HeapTimer.cpp:
+        (JSC::HeapTimer::timerDidFire):
+        (JSC::HeapTimer::timerEvent):
+        * heap/IncrementalSweeper.cpp:
+        * inspector/InjectedScriptModule.cpp:
+        (Inspector::InjectedScriptModule::ensureInjected):
+        * jsc.cpp:
+        (jscmain):
+        * runtime/GCActivityCallback.cpp:
+        (JSC::DefaultGCActivityCallback::doWork):
+        * runtime/JSGlobalObjectDebuggable.cpp:
+        (JSC::JSGlobalObjectDebuggable::connect):
+        (JSC::JSGlobalObjectDebuggable::disconnect):
+        (JSC::JSGlobalObjectDebuggable::dispatchMessageFromRemoteFrontend):
+        * runtime/JSLock.cpp:
+        (JSC::JSLock::lock):
+        (JSC::JSLock::didAcquireLock):
+        (JSC::JSLock::unlock):
+        (JSC::JSLock::willReleaseLock):
+        (JSC::JSLock::DropAllLocks::DropAllLocks):
+        (JSC::JSLock::DropAllLocks::~DropAllLocks):
+        * runtime/JSLock.h:
+        * testRegExp.cpp:
+        (realMain):
+
</ins><span class="cx"> 2014-03-04  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r164812.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreForwardingHeadersJavaScriptCoreAPIShimsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APIShims.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APIShims.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APIShims.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -1 +0,0 @@
</span><del>-#include &lt;JavaScriptCore/API/APIShims.h&gt;
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreGNUmakefilelistam"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/GNUmakefile.list.am (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/GNUmakefile.list.am        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/GNUmakefile.list.am        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -47,7 +47,6 @@
</span><span class="cx"> javascriptcore_sources += \
</span><span class="cx">         Source/JavaScriptCore/API/APICallbackFunction.h \
</span><span class="cx">         Source/JavaScriptCore/API/APICast.h \
</span><del>-        Source/JavaScriptCore/API/APIShims.h \
</del><span class="cx">         Source/JavaScriptCore/API/JSAPIWrapperObject.h \
</span><span class="cx">         Source/JavaScriptCore/API/JSBase.cpp \
</span><span class="cx">         Source/JavaScriptCore/API/JSBasePrivate.h \
</span><span class="lines">@@ -644,7 +643,6 @@
</span><span class="cx">         Source/JavaScriptCore/debugger/Debugger.h \
</span><span class="cx">         Source/JavaScriptCore/debugger/DebuggerPrimitives.h \
</span><span class="cx">         Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APICast.h \
</span><del>-        Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APIShims.h \
</del><span class="cx">         Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JavaScript.h \
</span><span class="cx">         Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSBase.h \
</span><span class="cx">         Source/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSContextRef.h \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -845,7 +845,6 @@
</span><span class="cx">                 8642C510151C06A90046D4EF /* RegExpCachedResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86F75EFB151C062F007C9BA3 /* RegExpCachedResult.cpp */; };
</span><span class="cx">                 8642C512151C083D0046D4EF /* RegExpMatchesArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86F75EFD151C062F007C9BA3 /* RegExpMatchesArray.cpp */; };
</span><span class="cx">                 865A30F1135007E100CDB49E /* JSCJSValueInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 865A30F0135007E100CDB49E /* JSCJSValueInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                865F408810E7D56300947361 /* APIShims.h in Headers */ = {isa = PBXBuildFile; fileRef = 865F408710E7D56300947361 /* APIShims.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">                 866739D213BFDE710023D87C /* BigInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 866739D013BFDE710023D87C /* BigInteger.h */; };
</span><span class="cx">                 866739D313BFDE710023D87C /* Uint16WithFraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 866739D113BFDE710023D87C /* Uint16WithFraction.h */; };
</span><span class="cx">                 86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86704B4012DB8A8100A9FE7B /* YarrSyntaxChecker.cpp */; };
</span><span class="lines">@@ -2349,7 +2348,6 @@
</span><span class="cx">                 8640923B156EED3B00566CB2 /* ARM64Assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARM64Assembler.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 8640923C156EED3B00566CB2 /* MacroAssemblerARM64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerARM64.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 865A30F0135007E100CDB49E /* JSCJSValueInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCJSValueInlines.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                865F408710E7D56300947361 /* APIShims.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIShims.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 866739D013BFDE710023D87C /* BigInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BigInteger.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 866739D113BFDE710023D87C /* Uint16WithFraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Uint16WithFraction.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 86704B4012DB8A8100A9FE7B /* YarrSyntaxChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YarrSyntaxChecker.cpp; path = yarr/YarrSyntaxChecker.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3582,7 +3580,6 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 C211B574176A224D000E2A23 /* APICallbackFunction.h */,
</span><span class="cx">                                 1482B78A0A4305AB00517CFC /* APICast.h */,
</span><del>-                                865F408710E7D56300947361 /* APIShims.h */,
</del><span class="cx">                                 1CAA8B4A0D32C39A0041BCFF /* JavaScript.h */,
</span><span class="cx">                                 1CAA8B4B0D32C39A0041BCFF /* JavaScriptCore.h */,
</span><span class="cx">                                 BC0894D50FAFBA2D00001865 /* JSAPIValueWrapper.cpp */,
</span><span class="lines">@@ -4876,7 +4873,6 @@
</span><span class="cx">                                 0F55F0F514D1063C00AC7649 /* AbstractPC.h in Headers */,
</span><span class="cx">                                 2A48D1911772365B00C65A5F /* APICallbackFunction.h in Headers */,
</span><span class="cx">                                 BC18C3E50E16F5CD00B34460 /* APICast.h in Headers */,
</span><del>-                                865F408810E7D56300947361 /* APIShims.h in Headers */,
</del><span class="cx">                                 BCF605140E203EF800B9A64D /* ArgList.h in Headers */,
</span><span class="cx">                                 BC257DE80E1F51C50016B6C9 /* Arguments.h in Headers */,
</span><span class="cx">                                 A76140CE182982CB00750624 /* ArgumentsIteratorConstructor.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGWorklistcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGWorklist.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGWorklist.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/dfg/DFGWorklist.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;CodeBlock.h&quot;
</span><span class="cx"> #include &quot;DeferGC.h&quot;
</span><span class="cx"> #include &quot;DFGLongLivedState.h&quot;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapDelayedReleaseScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/DelayedReleaseScope.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/DelayedReleaseScope.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/heap/DelayedReleaseScope.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -26,7 +26,8 @@
</span><span class="cx"> #ifndef DelayedReleaseScope_h
</span><span class="cx"> #define DelayedReleaseScope_h
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><ins>+#include &quot;Heap.h&quot;
+#include &quot;JSLock.h&quot;
</ins><span class="cx"> #include &quot;MarkedSpace.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -51,7 +52,7 @@
</span><span class="cx">         std::swap(operationInProgress, m_markedSpace.m_heap-&gt;m_operationInProgress);
</span><span class="cx"> 
</span><span class="cx">         {
</span><del>-            APICallbackShim callbackShim(*m_markedSpace.m_heap-&gt;vm());
</del><ins>+            JSLock::DropAllLocks dropAllLocks(*m_markedSpace.m_heap-&gt;vm());
</ins><span class="cx">             m_delayedReleaseObjects.clear();
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapHeapTimercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/HeapTimer.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/HeapTimer.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/heap/HeapTimer.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;HeapTimer.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><ins>+#include &quot;IncrementalSweeper.h&quot;
</ins><span class="cx"> #include &quot;JSObject.h&quot;
</span><span class="cx"> #include &quot;JSString.h&quot;
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        APIEntryShim shim(vm);
</del><ins>+        JSLockHolder locker(vm);
</ins><span class="cx">         heapTimer-&gt;doWork();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx"> {
</span><span class="cx">     HeapTimer* agent = static_cast&lt;HeapTimer*&gt;(info);
</span><span class="cx">     
</span><del>-    APIEntryShim shim(agent-&gt;m_vm);
</del><ins>+    JSLockHolder locker(agent-&gt;m_vm);
</ins><span class="cx">     agent-&gt;doWork();
</span><span class="cx">     agent-&gt;m_timer = 0;
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapIncrementalSweepercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/IncrementalSweeper.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/IncrementalSweeper.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/heap/IncrementalSweeper.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;IncrementalSweeper.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;DelayedReleaseScope.h&quot;
</span><span class="cx"> #include &quot;Heap.h&quot;
</span><span class="cx"> #include &quot;JSObject.h&quot;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScriptModulecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScriptModule.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScriptModule.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScriptModule.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR)
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;InjectedScript.h&quot;
</span><span class="cx"> #include &quot;InjectedScriptManager.h&quot;
</span><span class="cx"> #include &quot;ScriptFunctionCall.h&quot;
</span><span class="lines">@@ -64,7 +63,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Make the InjectedScript a module itself.
</span><del>-    JSC::APIEntryShim entryShim(injectedScript.scriptState());
</del><ins>+    JSC::JSLockHolder locker(injectedScript.scriptState());
</ins><span class="cx">     Deprecated::ScriptFunctionCall function(injectedScript.injectedScriptObject(), ASCIILiteral(&quot;module&quot;), injectedScriptManager-&gt;inspectorEnvironment().functionCallHandler());
</span><span class="cx">     function.appendArgument(name());
</span><span class="cx">     bool hadException = false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/jsc.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -22,7 +22,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;ButterflyInlines.h&quot;
</span><span class="cx"> #include &quot;BytecodeGenerator.h&quot;
</span><span class="cx"> #include &quot;Completion.h&quot;
</span><span class="lines">@@ -1086,7 +1085,7 @@
</span><span class="cx">     VM* vm = VM::create(LargeHeap).leakRef();
</span><span class="cx">     int result;
</span><span class="cx">     {
</span><del>-        APIEntryShim shim(vm);
</del><ins>+        JSLockHolder locker(vm);
</ins><span class="cx"> 
</span><span class="cx">         if (options.m_profile &amp;&amp; !vm-&gt;m_perBytecodeProfiler)
</span><span class="cx">             vm-&gt;m_perBytecodeProfiler = adoptPtr(new Profiler::Database(*vm));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeGCActivityCallbackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/GCActivityCallback.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/GCActivityCallback.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/runtime/GCActivityCallback.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;GCActivityCallback.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;Heap.h&quot;
</span><span class="cx"> #include &quot;VM.h&quot;
</span><span class="cx"> #include &quot;JSLock.h&quot;
</span><span class="lines">@@ -86,7 +85,7 @@
</span><span class="cx">     if (!isEnabled())
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    APIEntryShim shim(m_vm);
</del><ins>+    JSLockHolder locker(m_vm);
</ins><span class="cx">     if (heap-&gt;isDeferred()) {
</span><span class="cx">         scheduleTimer(0);
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectDebuggablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectDebuggable.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectDebuggable.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectDebuggable.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(REMOTE_INSPECTOR)
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &quot;InspectorAgentBase.h&quot;
</span><span class="cx"> #include &quot;InspectorFrontendChannel.h&quot;
</span><span class="cx"> #include &quot;JSGlobalObject.h&quot;
</span><span class="lines">@@ -51,21 +50,21 @@
</span><span class="cx"> 
</span><span class="cx"> void JSGlobalObjectDebuggable::connect(InspectorFrontendChannel* frontendChannel)
</span><span class="cx"> {
</span><del>-    APIEntryShim entryShim(&amp;m_globalObject.vm());
</del><ins>+    JSLockHolder locker(&amp;m_globalObject.vm());
</ins><span class="cx"> 
</span><span class="cx">     m_globalObject.inspectorController().connectFrontend(frontendChannel);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSGlobalObjectDebuggable::disconnect()
</span><span class="cx"> {
</span><del>-    APIEntryShim entryShim(&amp;m_globalObject.vm());
</del><ins>+    JSLockHolder locker(&amp;m_globalObject.vm());
</ins><span class="cx"> 
</span><span class="cx">     m_globalObject.inspectorController().disconnectFrontend(InspectorDisconnectReason::InspectorDestroyed);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSGlobalObjectDebuggable::dispatchMessageFromRemoteFrontend(const String&amp; message)
</span><span class="cx"> {
</span><del>-    APIEntryShim entryShim(&amp;m_globalObject.vm());
</del><ins>+    JSLockHolder locker(&amp;m_globalObject.vm());
</ins><span class="cx"> 
</span><span class="cx">     m_globalObject.inspectorController().dispatchMessageFromFrontend(message);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSLockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSLock.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSLock.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/runtime/JSLock.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -123,6 +123,12 @@
</span><span class="cx">     ASSERT(!m_lockCount);
</span><span class="cx">     m_lockCount = lockCount;
</span><span class="cx"> 
</span><ins>+    didAcquireLock();
+}
+
+void JSLock::didAcquireLock()
+{
+    // FIXME: What should happen to the per-thread identifier table if we don't have a VM?
</ins><span class="cx">     if (!m_vm)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -132,6 +138,9 @@
</span><span class="cx"> 
</span><span class="cx">     WTFThreadData&amp; threadData = wtfThreadData();
</span><span class="cx">     m_vm-&gt;setLastStackTop(threadData.savedLastStackTop());
</span><ins>+
+    m_entryIdentifierTable = threadData.setCurrentIdentifierTable(m_vm-&gt;identifierTable);
+    m_vm-&gt;heap.machineThreads().addCurrentThread();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSLock::unlock()
</span><span class="lines">@@ -147,8 +156,7 @@
</span><span class="cx">     m_lockCount -= unlockCount;
</span><span class="cx"> 
</span><span class="cx">     if (!m_lockCount) {
</span><del>-        if (m_vm)
-            m_vm-&gt;setStackPointerAtVMEntry(nullptr);
</del><ins>+        willReleaseLock();
</ins><span class="cx"> 
</span><span class="cx">         if (!m_hasExclusiveThread) {
</span><span class="cx">             m_ownerThreadID = std::thread::id();
</span><span class="lines">@@ -157,6 +165,14 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void JSLock::willReleaseLock()
+{
+    if (m_vm)
+        m_vm-&gt;setStackPointerAtVMEntry(nullptr);
+
+    wtfThreadData().setCurrentIdentifierTable(m_entryIdentifierTable);
+}
+
</ins><span class="cx"> void JSLock::lock(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     exec-&gt;vm().apiLock().lock();
</span><span class="lines">@@ -226,32 +242,28 @@
</span><span class="cx">     m_vm-&gt;setLastStackTop(threadData.savedLastStackTop());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSLock::DropAllLocks::DropAllLocks(ExecState* exec)
</del><ins>+JSLock::DropAllLocks::DropAllLocks(VM* vm)
</ins><span class="cx">     : m_droppedLockCount(0)
</span><del>-    , m_vm(exec ? &amp;exec-&gt;vm() : nullptr)
</del><ins>+    // If the VM is in the middle of being destroyed then we don't want to resurrect it
+    // by allowing DropAllLocks to ref it. By this point the JSLock has already been 
+    // released anyways, so it doesn't matter that DropAllLocks is a no-op.
+    , m_vm(vm-&gt;refCount() ? vm : nullptr)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_vm)
</span><span class="cx">         return;
</span><ins>+    wtfThreadData().resetCurrentIdentifierTable();
</ins><span class="cx">     RELEASE_ASSERT(!m_vm-&gt;isCollectorBusy());
</span><span class="cx">     m_droppedLockCount = m_vm-&gt;apiLock().dropAllLocks(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSLock::DropAllLocks::DropAllLocks(VM* vm)
-    : m_droppedLockCount(0)
-    , m_vm(vm)
</del><ins>+JSLock::DropAllLocks::DropAllLocks(ExecState* exec)
+    : DropAllLocks(exec ? &amp;exec-&gt;vm() : nullptr)
</ins><span class="cx"> {
</span><del>-    if (!m_vm)
-        return;
-    RELEASE_ASSERT(!m_vm-&gt;isCollectorBusy());
-    m_droppedLockCount = m_vm-&gt;apiLock().dropAllLocks(this);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSLock::DropAllLocks::DropAllLocks(VM&amp; vm)
</span><del>-    : m_droppedLockCount(0)
-    , m_vm(&amp;vm)
</del><ins>+    : DropAllLocks(&amp;vm)
</ins><span class="cx"> {
</span><del>-    RELEASE_ASSERT(!m_vm-&gt;isCollectorBusy());
-    m_droppedLockCount = m_vm-&gt;apiLock().dropAllLocks(this);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSLock::DropAllLocks::~DropAllLocks()
</span><span class="lines">@@ -259,6 +271,7 @@
</span><span class="cx">     if (!m_vm)
</span><span class="cx">         return;
</span><span class="cx">     m_vm-&gt;apiLock().grabAllLocks(this, m_droppedLockCount);
</span><ins>+    wtfThreadData().setCurrentIdentifierTable(m_vm-&gt;identifierTable);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSLockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSLock.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSLock.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/runtime/JSLock.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx">     // DropAllLocks object takes care to release the JSLock only if your
</span><span class="cx">     // thread acquired it to begin with.
</span><span class="cx"> 
</span><ins>+    class IdentifierTable;
</ins><span class="cx">     class ExecState;
</span><span class="cx">     class VM;
</span><span class="cx"> 
</span><span class="lines">@@ -126,6 +127,9 @@
</span><span class="cx">         void lock(intptr_t lockCount);
</span><span class="cx">         void unlock(intptr_t unlockCount);
</span><span class="cx"> 
</span><ins>+        void didAcquireLock();
+        void willReleaseLock();
+
</ins><span class="cx">         unsigned dropAllLocks(DropAllLocks*);
</span><span class="cx">         void grabAllLocks(DropAllLocks*, unsigned lockCount);
</span><span class="cx"> 
</span><span class="lines">@@ -135,6 +139,7 @@
</span><span class="cx">         unsigned m_lockDropDepth;
</span><span class="cx">         bool m_hasExclusiveThread;
</span><span class="cx">         VM* m_vm;
</span><ins>+        IdentifierTable* m_entryIdentifierTable; 
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx"> } // namespace
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestRegExpcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/testRegExp.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/testRegExp.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/JavaScriptCore/testRegExp.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -21,7 +21,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;RegExp.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;APIShims.h&quot;
</del><span class="cx"> #include &lt;wtf/CurrentTime.h&gt;
</span><span class="cx"> #include &quot;InitializeThreading.h&quot;
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="lines">@@ -490,7 +489,7 @@
</span><span class="cx"> int realMain(int argc, char** argv)
</span><span class="cx"> {
</span><span class="cx">     VM* vm = VM::create(LargeHeap).leakRef();
</span><del>-    APIEntryShim shim(vm);
</del><ins>+    JSLockHolder locker(vm);
</ins><span class="cx"> 
</span><span class="cx">     CommandLine options;
</span><span class="cx">     parseArguments(argc, argv, options);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebCore/ChangeLog        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2014-03-04  Mark Hahnenberg  &lt;mhahnenberg@apple.com&gt;
+
+        Merge API shims and JSLock
+        https://bugs.webkit.org/show_bug.cgi?id=129650
+
+        Reviewed by Mark Lam.
+
+        No new tests.
+
+        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
+        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.
+
+        * bindings/js/DOMRequestState.h:
+        (WebCore::DOMRequestState::Scope::Scope):
+        * bindings/js/JSDOMPromise.h:
+        (WebCore::DeferredWrapper::resolve):
+        (WebCore::DeferredWrapper::reject):
+        (WebCore::DeferredWrapper::resolve&lt;String&gt;):
+        (WebCore::DeferredWrapper::resolve&lt;bool&gt;):
+        (WebCore::char&gt;&gt;):
+        (WebCore::DeferredWrapper::reject&lt;String&gt;):
+        * bindings/js/ScriptController.cpp:
+        (WebCore::ScriptController::evaluateInWorld):
+        * bindings/js/SerializedScriptValue.cpp:
+        (WebCore::SerializedScriptValue::create):
+        (WebCore::SerializedScriptValue::deserialize):
+
</ins><span class="cx"> 2014-03-04  Beth Dakin  &lt;bdakin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION: Overlay scrollbars that have grown are sometimes askew in the track
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsDOMRequestStateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/DOMRequestState.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/DOMRequestState.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebCore/bindings/js/DOMRequestState.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -33,8 +33,6 @@
</span><span class="cx"> #include &quot;ScriptState.h&quot;
</span><span class="cx"> #include &quot;WorkerGlobalScope.h&quot;
</span><span class="cx"> 
</span><del>-#include &lt;JavaScriptCore/APIShims.h&gt;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="lines">@@ -63,11 +61,11 @@
</span><span class="cx">     class Scope {
</span><span class="cx">     public:
</span><span class="cx">         explicit Scope(DOMRequestState&amp; state)
</span><del>-            : m_entryShim(state.exec())
</del><ins>+            : m_locker(state.exec())
</ins><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx">     private:
</span><del>-        JSC::APIEntryShim m_entryShim;
</del><ins>+        JSC::JSLockHolder m_locker;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     JSC::ExecState* exec()
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMPromiseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMPromise.h (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMPromise.h        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromise.h        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #include &quot;JSCryptoKey.h&quot;
</span><span class="cx"> #include &quot;JSCryptoKeyPair.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><del>-#include &lt;JavaScriptCore/APIShims.h&gt;
</del><span class="cx"> #include &lt;heap/StrongInlines.h&gt;
</span><span class="cx"> #include &lt;runtime/JSPromiseDeferred.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -59,7 +58,7 @@
</span><span class="cx"> inline void DeferredWrapper::resolve(const ResolveResultType&amp; result)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     resolve(exec, toJS(exec, m_globalObject.get(), result));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -67,7 +66,7 @@
</span><span class="cx"> inline void DeferredWrapper::reject(const RejectResultType&amp; result)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     reject(exec, toJS(exec, m_globalObject.get(), result));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -75,7 +74,7 @@
</span><span class="cx"> inline void DeferredWrapper::reject(const std::nullptr_t&amp;)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     reject(exec, JSC::jsNull());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -83,7 +82,7 @@
</span><span class="cx"> inline void DeferredWrapper::resolve&lt;String&gt;(const String&amp; result)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     resolve(exec, jsString(exec, result));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -91,7 +90,7 @@
</span><span class="cx"> inline void DeferredWrapper::resolve&lt;bool&gt;(const bool&amp; result)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     resolve(exec, JSC::jsBoolean(result));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -99,7 +98,7 @@
</span><span class="cx"> inline void DeferredWrapper::resolve&lt;Vector&lt;unsigned char&gt;&gt;(const Vector&lt;unsigned char&gt;&amp; result)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     RefPtr&lt;ArrayBuffer&gt; buffer = ArrayBuffer::create(result.data(), result.size());
</span><span class="cx">     resolve(exec, toJS(exec, m_globalObject.get(), buffer.get()));
</span><span class="cx"> }
</span><span class="lines">@@ -108,7 +107,7 @@
</span><span class="cx"> inline void DeferredWrapper::reject&lt;String&gt;(const String&amp; result)
</span><span class="cx"> {
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><del>-    JSC::APIEntryShim entryShim(exec);
</del><ins>+    JSC::JSLockHolder locker(exec);
</ins><span class="cx">     reject(exec, jsString(exec, result));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsScriptControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ScriptController.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ScriptController.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebCore/bindings/js/ScriptController.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx"> 
</span><span class="cx"> Deprecated::ScriptValue ScriptController::evaluateInWorld(const ScriptSourceCode&amp; sourceCode, DOMWrapperWorld&amp; world)
</span><span class="cx"> {
</span><del>-    JSLockHolder lock(JSDOMWindowBase::commonVM());
</del><ins>+    JSLockHolder lock(world.vm());
</ins><span class="cx"> 
</span><span class="cx">     const SourceCode&amp; jsSourceCode = sourceCode.jsSourceCode();
</span><span class="cx">     String sourceURL = jsSourceCode.provider()-&gt;url();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsSerializedScriptValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -51,7 +51,6 @@
</span><span class="cx"> #include &quot;WebCoreJSClientData.h&quot;
</span><span class="cx"> #include &lt;limits&gt;
</span><span class="cx"> #include &lt;JavaScriptCore/APICast.h&gt;
</span><del>-#include &lt;JavaScriptCore/APIShims.h&gt;
</del><span class="cx"> #include &lt;runtime/ArrayBuffer.h&gt;
</span><span class="cx"> #include &lt;runtime/BooleanObject.h&gt;
</span><span class="cx"> #include &lt;runtime/DateInstance.h&gt;
</span><span class="lines">@@ -2614,7 +2613,7 @@
</span><span class="cx"> PassRefPtr&lt;SerializedScriptValue&gt; SerializedScriptValue::create(JSContextRef originContext, JSValueRef apiValue, JSValueRef* exception)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(originContext);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSValue value = toJS(exec, apiValue);
</span><span class="cx">     RefPtr&lt;SerializedScriptValue&gt; serializedValue = SerializedScriptValue::create(exec, value, nullptr, nullptr);
</span><span class="cx">     if (exec-&gt;hadException()) {
</span><span class="lines">@@ -2645,7 +2644,7 @@
</span><span class="cx"> JSValueRef SerializedScriptValue::deserialize(JSContextRef destinationContext, JSValueRef* exception)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(destinationContext);
</span><del>-    APIEntryShim entryShim(exec);
</del><ins>+    JSLockHolder locker(exec);
</ins><span class="cx">     JSValue value = deserialize(exec, exec-&gt;lexicalGlobalObject(), nullptr);
</span><span class="cx">     if (exec-&gt;hadException()) {
</span><span class="cx">         if (exception)
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebKit/mac/ChangeLog        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-03-04  Mark Hahnenberg  &lt;mhahnenberg@apple.com&gt;
+
+        Merge API shims and JSLock
+        https://bugs.webkit.org/show_bug.cgi?id=129650
+
+        Reviewed by Mark Lam.
+
+        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
+        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.
+
+        * WebView/WebFrame.mm:
+        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
+
</ins><span class="cx"> 2014-03-02  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Sort Mac platform export files so they merge better
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebFramemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebFrame.mm (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebFrame.mm        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebKit/mac/WebView/WebFrame.mm        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -109,7 +109,6 @@
</span><span class="cx"> #import &quot;WebMailDelegate.h&quot;
</span><span class="cx"> #import &quot;WebResource.h&quot;
</span><span class="cx"> #import &quot;WebUIKitDelegate.h&quot;
</span><del>-#import &lt;JavaScriptCore/APIShims.h&gt;
</del><span class="cx"> #import &lt;WebCore/Document.h&gt;
</span><span class="cx"> #import &lt;WebCore/Editor.h&gt;
</span><span class="cx"> #import &lt;WebCore/EditorClient.h&gt;
</span><span class="lines">@@ -694,9 +693,7 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     ASSERT(WebThreadIsLockedOrDisabled());
</span><span class="cx">     JSC::ExecState* exec = _private-&gt;coreFrame-&gt;script().globalObject(mainThreadNormalWorld())-&gt;globalExec();
</span><del>-    // Need to use the full entry shim to prevent crashes arising from the UI thread being unknown
-    // to the JSC GC: &lt;rdar://problem/11553172&gt; Crash when breaking in the Web Inspector during stringByEvaluatingJavaScriptFromString:
-    JSC::APIEntryShim jscLock(exec);
</del><ins>+    JSC::JSLockHolder jscLock(exec);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     JSC::JSValue result = _private-&gt;coreFrame-&gt;script().executeScript(string, forceUserGesture).jsValue();
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebKit2/ChangeLog        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2014-03-04  Mark Hahnenberg  &lt;mhahnenberg@apple.com&gt;
+
+        Merge API shims and JSLock
+        https://bugs.webkit.org/show_bug.cgi?id=129650
+
+        Reviewed by Mark Lam.
+
+        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
+        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.
+
+        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
+        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::~UniqueIDBDatabaseBackingStoreSQLite):
+        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):
+
</ins><span class="cx"> 2014-03-03  Enrica Casucci  &lt;enrica@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2] Selection remains after reload.
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessIndexedDBsqliteUniqueIDBDatabaseBackingStoreSQLitecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp (165073 => 165074)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp        2014-03-04 21:30:59 UTC (rev 165073)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp        2014-03-04 21:38:05 UTC (rev 165074)
</span><span class="lines">@@ -33,7 +33,6 @@
</span><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;SQLiteIDBCursor.h&quot;
</span><span class="cx"> #include &quot;SQLiteIDBTransaction.h&quot;
</span><del>-#include &lt;JavaScriptCore/APIShims.h&gt;
</del><span class="cx"> #include &lt;WebCore/FileSystem.h&gt;
</span><span class="cx"> #include &lt;WebCore/IDBBindingUtilities.h&gt;
</span><span class="cx"> #include &lt;WebCore/IDBDatabaseMetadata.h&gt;
</span><span class="lines">@@ -77,7 +76,7 @@
</span><span class="cx">     m_sqliteDB = nullptr;
</span><span class="cx"> 
</span><span class="cx">     if (m_vm) {
</span><del>-        APIEntryShim shim(m_vm.get());
</del><ins>+        JSLockHolder locker(m_vm.get());
</ins><span class="cx">         m_globalObject.clear();
</span><span class="cx">         m_vm = nullptr;
</span><span class="cx">     }
</span><span class="lines">@@ -631,7 +630,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_cursors.set(cursor-&gt;identifier(), cursor);
</span><span class="cx"> 
</span><del>-    OwnPtr&lt;APIEntryShim&gt; shim;
</del><ins>+    OwnPtr&lt;JSLockHolder&gt; locker;
</ins><span class="cx">     while (!cursor-&gt;currentKey().isNull) {
</span><span class="cx">         const IDBKeyData&amp; key = cursor-&gt;currentKey();
</span><span class="cx">         const Vector&lt;uint8_t&gt;&amp; valueBuffer = cursor-&gt;currentValueBuffer();
</span><span class="lines">@@ -639,12 +638,12 @@
</span><span class="cx">         if (!m_globalObject) {
</span><span class="cx">             ASSERT(!m_vm);
</span><span class="cx">             m_vm = VM::create();
</span><del>-            shim = adoptPtr(new APIEntryShim(m_vm.get()));
</del><ins>+            locker = adoptPtr(new JSLockHolder(m_vm.get()));
</ins><span class="cx">             m_globalObject.set(*m_vm, JSGlobalObject::create(*m_vm, JSGlobalObject::createStructure(*m_vm, jsNull())));
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (!shim)
-            shim = adoptPtr(new APIEntryShim(m_vm.get()));
</del><ins>+        if (!locker)
+            locker = adoptPtr(new JSLockHolder(m_vm.get()));
</ins><span class="cx"> 
</span><span class="cx">         Deprecated::ScriptValue value = deserializeIDBValueBuffer(m_globalObject-&gt;globalExec(), valueBuffer, true);
</span><span class="cx">         Vector&lt;IDBKeyData&gt; indexKeys;
</span></span></pre>
</div>
</div>

</body>
</html>