<!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<Parent>::init):
(JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
(JSC::JSCallbackObject<Parent>::put):
(JSC::JSCallbackObject<Parent>::putByIndex):
(JSC::JSCallbackObject<Parent>::deleteProperty):
(JSC::JSCallbackObject<Parent>::construct):
(JSC::JSCallbackObject<Parent>::customHasInstance):
(JSC::JSCallbackObject<Parent>::call):
(JSC::JSCallbackObject<Parent>::getOwnNonIndexPropertyNames):
(JSC::JSCallbackObject<Parent>::getStaticValue):
(JSC::JSCallbackObject<Parent>::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<String>):
(WebCore::DeferredWrapper::resolve<bool>):
(WebCore::char>>):
(WebCore::DeferredWrapper::reject<String>):
* 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 "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "JSCallbackConstructor.h"
</span><ins>+#include "JSLock.h"
</ins><span class="cx"> #include <wtf/Vector.h>
</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<T*>(toJS(functionRef))->functionCallback()(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &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(), &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 "CallFrame.h"
-#include "GCActivityCallback.h"
-#include "IncrementalSweeper.h"
-#include "JSLock.h"
-#include <wtf/WTFThreadData.h>
-
-namespace JSC {
-
-class APIEntryShimWithoutLock {
-protected:
- APIEntryShimWithoutLock(VM* vm, bool registerThread)
- : m_vm(vm)
- , m_entryIdentifierTable(wtfThreadData().setCurrentIdentifierTable(vm->identifierTable))
- {
- if (registerThread)
- vm->heap.machineThreads().addCurrentThread();
- }
-
- ~APIEntryShimWithoutLock()
- {
- wtfThreadData().setCurrentIdentifierTable(m_entryIdentifierTable);
- }
-
-protected:
- RefPtr<VM> m_vm;
- IdentifierTable* m_entryIdentifierTable;
-};
-
-class APIEntryShim : public APIEntryShimWithoutLock {
-public:
- APIEntryShim(ExecState* exec, bool registerThread = true)
- : APIEntryShimWithoutLock(&exec->vm(), registerThread)
- , m_lockHolder(&exec->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->vm()) ? exec : nullptr)
- , m_vm(&exec->vm())
- {
- wtfThreadData().resetCurrentIdentifierTable();
- }
-
- APICallbackShim(VM& vm)
- : m_dropAllLocks(shouldDropAllLocks(vm) ? &vm : nullptr)
- , m_vm(&vm)
- {
- wtfThreadData().resetCurrentIdentifierTable();
- }
-
- ~APICallbackShim()
- {
- wtfThreadData().setCurrentIdentifierTable(m_vm->identifierTable);
- }
-
-private:
- static bool shouldDropAllLocks(VM& 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 "JSBasePrivate.h"
</span><span class="cx">
</span><span class="cx"> #include "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "CallFrame.h"
</span><span class="cx"> #include "Completion.h"
</span><span class="cx"> #include "InitializeThreading.h"
</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->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->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->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 "APICallbackFunction.h"
</span><span class="cx"> #include "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "JSGlobalObject.h"
</span><span class="cx"> #include "JSLock.h"
</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 "APICallbackFunction.h"
</span><span class="cx"> #include "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "CodeBlock.h"
</span><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "ExceptionHelpers.h"
</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 "APIShims.h"
</del><span class="cx"> #include "APICast.h"
</span><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "ExceptionHelpers.h"
</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<int>(initRoutines.size()) - 1; i >= 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->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(), &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, &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->propertyNameRef.get(), valueRef, &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, &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->propertyNameRef.get(), valueRef, &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(), &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(), &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, &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(), &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->classRef(); jsClass; jsClass = jsClass->parentClass) {
</span><span class="cx"> if (JSObjectGetPropertyNamesCallback getPropertyNames = jsClass->getPropertyNames) {
</span><del>- APICallbackShim callbackShim(exec);
</del><ins>+ JSLock::DropAllLocks dropAllLocks(exec);
</ins><span class="cx"> getPropertyNames(execRef, thisRef, toRef(&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->propertyNameRef.get(), &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(), &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 "config.h"
</span><span class="cx">
</span><span class="cx"> #import "APICast.h"
</span><del>-#import "APIShims.h"
</del><span class="cx"> #import "JSContextInternal.h"
</span><span class="cx"> #import "JSGlobalObject.h"
</span><span class="cx"> #import "JSValueInternal.h"
</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)->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& vm = *toJS(group);
</span><span class="cx">
</span><del>- APIEntryShim entryShim(&vm);
</del><ins>+ JSLockHolder locker(&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& vm = *toJS(group);
</span><del>- APIEntryShim entryShim(&vm);
</del><ins>+ JSLockHolder locker(&vm);
</ins><span class="cx"> Watchdog& watchdog = vm.watchdog;
</span><span class="cx"> if (callback) {
</span><span class="cx"> void* callbackPtr = reinterpret_cast<void*>(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& vm = *toJS(group);
</span><del>- APIEntryShim entryShim(&vm);
</del><ins>+ JSLockHolder locker(&vm);
</ins><span class="cx"> Watchdog& watchdog = vm.watchdog;
</span><span class="cx"> watchdog.setTimeLimit(vm, std::numeric_limits<double>::infinity());
</span><span class="cx"> }
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx">
</span><span class="cx"> RefPtr<VM> vm = group ? PassRefPtr<VM>(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->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& vm = exec->vm();
</span><span class="cx"> gcProtect(exec->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& vm = exec->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<JSObject*>(exec->lexicalGlobalObject()->methodTable()->toThis(exec->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->lexicalGlobalObject()->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->vmEntryGlobalObject()->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->vmEntryGlobalObject()->setName(name ? name->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 "APICast.h"
</span><del>-#import "APIShims.h"
</del><span class="cx"> #import "Heap.h"
</span><span class="cx"> #import "JSContextInternal.h"
</span><span class="cx"> #import "JSValueInternal.h"
</span><span class="lines">@@ -266,7 +265,7 @@
</span><span class="cx"> if (!m_lock->vm())
</span><span class="cx"> return nil;
</span><span class="cx">
</span><del>- JSC::APIEntryShim shim(m_lock->vm());
</del><ins>+ JSC::JSLockHolder apiLocker(m_lock->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->vm(), exec->lexicalGlobalObject(), callAsFunction, name ? name->string() : ASCIILiteral("anonymous")));
</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->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->identifier(&exec->vm()) : Identifier(exec, "anonymous");
</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 < 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->lexicalGlobalObject()->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 < 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->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->identifier(&exec->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->identifier(&exec->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->identifier(&exec->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->identifier(&exec->vm()));
</span><span class="cx"> if (jsObject->inherits(JSCallbackObject<JSGlobalObject>::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->methodTable()->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 = &exec->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->refCount == 0) {
</span><del>- APIEntryShim entryShim(array->vm, false);
</del><ins>+ JSLockHolder locker(array->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->vm());
</del><ins>+ JSLockHolder locker(propertyNames->vm());
</ins><span class="cx"> propertyNames->add(propertyName->identifier(propertyNames->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 "config.h"
</span><span class="cx">
</span><span class="cx"> #include "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "Completion.h"
</span><span class="cx"> #include "JSBasePrivate.h"
</span><span class="cx"> #include "VM.h"
</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 < 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->vm());
</del><ins>+ JSLockHolder locker(script->vm());
</ins><span class="cx"> script->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->vm());
</del><ins>+ JSLockHolder locker(script->vm());
</ins><span class="cx"> script->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->vm() != &exec->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 "config.h"
</span><span class="cx">
</span><span class="cx"> #import "APICast.h"
</span><del>-#import "APIShims.h"
</del><span class="cx"> #import "DateInstance.h"
</span><span class="cx"> #import "Error.h"
</span><span class="cx"> #import "JavaScriptCore.h"
</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)->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)->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("Cannot convert primitive to NSArray"));
</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("Cannot convert primitive to NSDictionary"));
</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 "JSValueRef.h"
</span><span class="cx">
</span><span class="cx"> #include "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "JSAPIWrapperObject.h"
</span><span class="cx"> #include "JSCJSValue.h"
</span><span class="cx"> #include "JSCallbackObject.h"
</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->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->string();
</span><span class="cx"> unsigned length = str.length();
</span><span class="cx"> if (length && 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 "APICast.h"
</span><del>-#import "APIShims.h"
</del><span class="cx"> #import "JSManagedValueInternal.h"
</span><span class="cx"> #import "JSVirtualMachine.h"
</span><span class="cx"> #import "JSVirtualMachineInternal.h"
</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 "JSWeakObjectMapRefPrivate.h"
</span><span class="cx">
</span><span class="cx"> #include "APICast.h"
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "JSCJSValue.h"
</span><span class="cx"> #include "JSCallbackObject.h"
</span><span class="cx"> #include "JSWeakObjectMapRefInternal.h"
</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<OpaqueJSWeakObjectMap> map = OpaqueJSWeakObjectMap::create(privateData, callback);
</span><span class="cx"> exec->lexicalGlobalObject()->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<JSObject*>(map->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->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 "APICast.h"
</span><del>-#import "APIShims.h"
</del><span class="cx"> #import "JSAPIWrapperObject.h"
</span><span class="cx"> #import "JSCallbackObject.h"
</span><span class="cx"> #import "JSContextInternal.h"
</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<JSC::JSAPIWrapperObject>* object = JSC::JSCallbackObject<JSC::JSAPIWrapperObject>::create(exec, exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->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, &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)->inherits(JSC::JSCallbackObject<JSC::JSAPIWrapperObject>::info()))
</span><span class="cx"> return (id)JSC::jsCast<JSC::JSAPIWrapperObject*>(toJS(object))->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 "APICallbackFunction.h"
</span><span class="cx"> #import "APICast.h"
</span><del>-#import "APIShims.h"
</del><span class="cx"> #import "DelayedReleaseScope.h"
</span><span class="cx"> #import "Error.h"
</span><span class="cx"> #import "JSCJSValueInlines.h"
</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<ObjCCallbackFunction*>(toJS(function));
</span><span class="cx"> ObjCCallbackFunctionImpl* impl = callback->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<ObjCCallbackFunction*>(toJS(constructor));
</span><span class="cx"> ObjCCallbackFunctionImpl* impl = callback->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<JSC::ObjCCallbackFunctionImpl> impl = adoptPtr(new JSC::ObjCCallbackFunctionImpl(invocation, type, instanceClass, arguments.release(), result.release()));
</span><span class="cx"> return toRef(JSC::ObjCCallbackFunction::create(exec->vm(), exec->lexicalGlobalObject(), impl->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 <mhahnenberg@apple.com>
+
+ 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<Parent>::init):
+ (JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
+ (JSC::JSCallbackObject<Parent>::put):
+ (JSC::JSCallbackObject<Parent>::putByIndex):
+ (JSC::JSCallbackObject<Parent>::deleteProperty):
+ (JSC::JSCallbackObject<Parent>::construct):
+ (JSC::JSCallbackObject<Parent>::customHasInstance):
+ (JSC::JSCallbackObject<Parent>::call):
+ (JSC::JSCallbackObject<Parent>::getOwnNonIndexPropertyNames):
+ (JSC::JSCallbackObject<Parent>::getStaticValue):
+ (JSC::JSCallbackObject<Parent>::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 <commit-queue@webkit.org>
</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 <JavaScriptCore/API/APIShims.h>
</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 = "<group>"; };
</span><span class="cx">                 8640923C156EED3B00566CB2 /* MacroAssemblerARM64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerARM64.h; sourceTree = "<group>"; };
</span><span class="cx">                 865A30F0135007E100CDB49E /* JSCJSValueInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCJSValueInlines.h; sourceTree = "<group>"; };
</span><del>-                865F408710E7D56300947361 /* APIShims.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIShims.h; sourceTree = "<group>"; };
</del><span class="cx">                 866739D013BFDE710023D87C /* BigInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BigInteger.h; sourceTree = "<group>"; };
</span><span class="cx">                 866739D113BFDE710023D87C /* Uint16WithFraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Uint16WithFraction.h; sourceTree = "<group>"; };
</span><span class="cx">                 86704B4012DB8A8100A9FE7B /* YarrSyntaxChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YarrSyntaxChecker.cpp; path = yarr/YarrSyntaxChecker.cpp; sourceTree = "<group>"; };
</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 "APIShims.h"
</del><span class="cx"> #include "CodeBlock.h"
</span><span class="cx"> #include "DeferGC.h"
</span><span class="cx"> #include "DFGLongLivedState.h"
</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 "APIShims.h"
</del><ins>+#include "Heap.h"
+#include "JSLock.h"
</ins><span class="cx"> #include "MarkedSpace.h"
</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->m_operationInProgress);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- APICallbackShim callbackShim(*m_markedSpace.m_heap->vm());
</del><ins>+ JSLock::DropAllLocks dropAllLocks(*m_markedSpace.m_heap->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 "config.h"
</span><span class="cx"> #include "HeapTimer.h"
</span><span class="cx">
</span><del>-#include "APIShims.h"
</del><ins>+#include "IncrementalSweeper.h"
</ins><span class="cx"> #include "JSObject.h"
</span><span class="cx"> #include "JSString.h"
</span><span class="cx"> #include "JSCInlines.h"
</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->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<HeapTimer*>(info);
</span><span class="cx">
</span><del>- APIEntryShim shim(agent->m_vm);
</del><ins>+ JSLockHolder locker(agent->m_vm);
</ins><span class="cx"> agent->doWork();
</span><span class="cx"> agent->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 "config.h"
</span><span class="cx"> #include "IncrementalSweeper.h"
</span><span class="cx">
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "DelayedReleaseScope.h"
</span><span class="cx"> #include "Heap.h"
</span><span class="cx"> #include "JSObject.h"
</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 "APIShims.h"
</del><span class="cx"> #include "InjectedScript.h"
</span><span class="cx"> #include "InjectedScriptManager.h"
</span><span class="cx"> #include "ScriptFunctionCall.h"
</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("module"), injectedScriptManager->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 "config.h"
</span><span class="cx">
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "ButterflyInlines.h"
</span><span class="cx"> #include "BytecodeGenerator.h"
</span><span class="cx"> #include "Completion.h"
</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 && !vm->m_perBytecodeProfiler)
</span><span class="cx"> vm->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 "config.h"
</span><span class="cx"> #include "GCActivityCallback.h"
</span><span class="cx">
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include "Heap.h"
</span><span class="cx"> #include "VM.h"
</span><span class="cx"> #include "JSLock.h"
</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->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 "APIShims.h"
</del><span class="cx"> #include "InspectorAgentBase.h"
</span><span class="cx"> #include "InspectorFrontendChannel.h"
</span><span class="cx"> #include "JSGlobalObject.h"
</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(&m_globalObject.vm());
</del><ins>+ JSLockHolder locker(&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(&m_globalObject.vm());
</del><ins>+ JSLockHolder locker(&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& message)
</span><span class="cx"> {
</span><del>- APIEntryShim entryShim(&m_globalObject.vm());
</del><ins>+ JSLockHolder locker(&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& threadData = wtfThreadData();
</span><span class="cx"> m_vm->setLastStackTop(threadData.savedLastStackTop());
</span><ins>+
+ m_entryIdentifierTable = threadData.setCurrentIdentifierTable(m_vm->identifierTable);
+ m_vm->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->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->setStackPointerAtVMEntry(nullptr);
+
+ wtfThreadData().setCurrentIdentifierTable(m_entryIdentifierTable);
+}
+
</ins><span class="cx"> void JSLock::lock(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx"> exec->vm().apiLock().lock();
</span><span class="lines">@@ -226,32 +242,28 @@
</span><span class="cx"> m_vm->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 ? &exec->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->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->isCollectorBusy());
</span><span class="cx"> m_droppedLockCount = m_vm->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 ? &exec->vm() : nullptr)
</ins><span class="cx"> {
</span><del>- if (!m_vm)
- return;
- RELEASE_ASSERT(!m_vm->isCollectorBusy());
- m_droppedLockCount = m_vm->apiLock().dropAllLocks(this);
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSLock::DropAllLocks::DropAllLocks(VM& vm)
</span><del>- : m_droppedLockCount(0)
- , m_vm(&vm)
</del><ins>+ : DropAllLocks(&vm)
</ins><span class="cx"> {
</span><del>- RELEASE_ASSERT(!m_vm->isCollectorBusy());
- m_droppedLockCount = m_vm->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->apiLock().grabAllLocks(this, m_droppedLockCount);
</span><ins>+ wtfThreadData().setCurrentIdentifierTable(m_vm->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 "config.h"
</span><span class="cx"> #include "RegExp.h"
</span><span class="cx">
</span><del>-#include "APIShims.h"
</del><span class="cx"> #include <wtf/CurrentTime.h>
</span><span class="cx"> #include "InitializeThreading.h"
</span><span class="cx"> #include "JSCInlines.h"
</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 <mhahnenberg@apple.com>
+
+ 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<String>):
+ (WebCore::DeferredWrapper::resolve<bool>):
+ (WebCore::char>>):
+ (WebCore::DeferredWrapper::reject<String>):
+ * 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 <bdakin@apple.com>
</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 "ScriptState.h"
</span><span class="cx"> #include "WorkerGlobalScope.h"
</span><span class="cx">
</span><del>-#include <JavaScriptCore/APIShims.h>
-
</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& 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 "JSCryptoKey.h"
</span><span class="cx"> #include "JSCryptoKeyPair.h"
</span><span class="cx"> #include "JSDOMBinding.h"
</span><del>-#include <JavaScriptCore/APIShims.h>
</del><span class="cx"> #include <heap/StrongInlines.h>
</span><span class="cx"> #include <runtime/JSPromiseDeferred.h>
</span><span class="cx">
</span><span class="lines">@@ -59,7 +58,7 @@
</span><span class="cx"> inline void DeferredWrapper::resolve(const ResolveResultType& result)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->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& result)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->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&)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->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<String>(const String& result)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->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<bool>(const bool& result)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->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<Vector<unsigned char>>(const Vector<unsigned char>& result)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->globalExec();
</span><del>- JSC::APIEntryShim entryShim(exec);
</del><ins>+ JSC::JSLockHolder locker(exec);
</ins><span class="cx"> RefPtr<ArrayBuffer> 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<String>(const String& result)
</span><span class="cx"> {
</span><span class="cx"> JSC::ExecState* exec = m_globalObject->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& sourceCode, DOMWrapperWorld& 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& jsSourceCode = sourceCode.jsSourceCode();
</span><span class="cx"> String sourceURL = jsSourceCode.provider()->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 "WebCoreJSClientData.h"
</span><span class="cx"> #include <limits>
</span><span class="cx"> #include <JavaScriptCore/APICast.h>
</span><del>-#include <JavaScriptCore/APIShims.h>
</del><span class="cx"> #include <runtime/ArrayBuffer.h>
</span><span class="cx"> #include <runtime/BooleanObject.h>
</span><span class="cx"> #include <runtime/DateInstance.h>
</span><span class="lines">@@ -2614,7 +2613,7 @@
</span><span class="cx"> PassRefPtr<SerializedScriptValue> 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<SerializedScriptValue> serializedValue = SerializedScriptValue::create(exec, value, nullptr, nullptr);
</span><span class="cx"> if (exec->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->lexicalGlobalObject(), nullptr);
</span><span class="cx"> if (exec->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 <mhahnenberg@apple.com>
+
+ 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 <darin@apple.com>
</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 "WebMailDelegate.h"
</span><span class="cx"> #import "WebResource.h"
</span><span class="cx"> #import "WebUIKitDelegate.h"
</span><del>-#import <JavaScriptCore/APIShims.h>
</del><span class="cx"> #import <WebCore/Document.h>
</span><span class="cx"> #import <WebCore/Editor.h>
</span><span class="cx"> #import <WebCore/EditorClient.h>
</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->coreFrame->script().globalObject(mainThreadNormalWorld())->globalExec();
</span><del>- // Need to use the full entry shim to prevent crashes arising from the UI thread being unknown
- // to the JSC GC: <rdar://problem/11553172> 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->coreFrame->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 <mhahnenberg@apple.com>
+
+ 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 <enrica@apple.com>
</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 "Logging.h"
</span><span class="cx"> #include "SQLiteIDBCursor.h"
</span><span class="cx"> #include "SQLiteIDBTransaction.h"
</span><del>-#include <JavaScriptCore/APIShims.h>
</del><span class="cx"> #include <WebCore/FileSystem.h>
</span><span class="cx"> #include <WebCore/IDBBindingUtilities.h>
</span><span class="cx"> #include <WebCore/IDBDatabaseMetadata.h>
</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->identifier(), cursor);
</span><span class="cx">
</span><del>- OwnPtr<APIEntryShim> shim;
</del><ins>+ OwnPtr<JSLockHolder> locker;
</ins><span class="cx"> while (!cursor->currentKey().isNull) {
</span><span class="cx"> const IDBKeyData& key = cursor->currentKey();
</span><span class="cx"> const Vector<uint8_t>& valueBuffer = cursor->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->globalExec(), valueBuffer, true);
</span><span class="cx"> Vector<IDBKeyData> indexKeys;
</span></span></pre>
</div>
</div>
</body>
</html>