Title: [235254] trunk/Source
Revision
235254
Author
mark....@apple.com
Date
2018-08-23 15:57:09 -0700 (Thu, 23 Aug 2018)

Log Message

Move vmEntryGlobalObject() to VM from CallFrame.
https://bugs.webkit.org/show_bug.cgi?id=188900
<rdar://problem/43655753>

Reviewed by Michael Saboff.

Source/_javascript_Core:

Also introduced CallFrame::isGlobalExec() which makes use of one property of
GlobalExecs to identify them i.e. GlobalExecs have null callerFrame and returnPCs.
CallFrame::initGlobalExec() ensures this.

In contrast, normal CallFrames always have a callerFrame (because they must at
least be preceded by a VM EntryFrame) and a returnPC (at least return to the
VM entry glue).

* API/APIUtils.h:
(handleExceptionIfNeeded):
(setException):
* API/JSBase.cpp:
(JSEvaluateScript):
(JSCheckScriptSyntax):
* API/JSContextRef.cpp:
(JSGlobalContextRetain):
(JSGlobalContextRelease):
(JSGlobalContextCopyName):
(JSGlobalContextSetName):
(JSGlobalContextGetRemoteInspectionEnabled):
(JSGlobalContextSetRemoteInspectionEnabled):
(JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions):
(JSGlobalContextSetIncludesNativeCallStackWhenReportingExceptions):
(JSGlobalContextGetDebuggerRunLoop):
(JSGlobalContextSetDebuggerRunLoop):
(JSGlobalContextGetAugmentableInspectorController):
* API/JSValue.mm:
(reportExceptionToInspector):
* API/glib/JSCClass.cpp:
(jscContextForObject):
* API/glib/JSCContext.cpp:
(jsc_context_evaluate_in_object):
* debugger/Debugger.cpp:
(JSC::Debugger::pauseIfNeeded):
* debugger/DebuggerCallFrame.cpp:
(JSC::DebuggerCallFrame::vmEntryGlobalObject const):
(JSC::DebuggerCallFrame::evaluateWithScopeExtension):
* interpreter/CallFrame.cpp:
(JSC::CallFrame::vmEntryGlobalObject): Deleted.
* interpreter/CallFrame.h:
(JSC::ExecState::scope const):
(JSC::ExecState::noCaller):
(JSC::ExecState::isGlobalExec const):
* interpreter/Interpreter.cpp:
(JSC::notifyDebuggerOfUnwinding):
(JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown):
(JSC::Interpreter::debug):
* runtime/CallData.cpp:
(JSC::profiledCall):
* runtime/Completion.cpp:
(JSC::evaluate):
(JSC::profiledEvaluate):
(JSC::evaluateWithScopeExtension):
(JSC::loadAndEvaluateModule):
(JSC::loadModule):
(JSC::linkAndEvaluateModule):
(JSC::importModule):
* runtime/ConstructData.cpp:
(JSC::profiledConstruct):
* runtime/Error.cpp:
(JSC::getStackTrace):
* runtime/VM.cpp:
(JSC::VM::throwException):
(JSC::VM::vmEntryGlobalObject const):
* runtime/VM.h:

Source/WebCore:

No new tests needed because this patch does not introduce new functionality.

* bindings/js/JSCustomXPathNSResolver.cpp:
(WebCore::JSCustomXPathNSResolver::create):
* bindings/js/JSDOMGlobalObject.cpp:
(WebCore::callerGlobalObject):
(WebCore::toJSDOMGlobalObject): Deleted.
* bindings/js/JSDOMWindowBase.cpp:
(WebCore::firstDOMWindow):
* bridge/c/c_utility.cpp:
(JSC::Bindings::convertValueToNPVariant):
* bridge/objc/WebScriptObject.mm:
(WebCore::addExceptionToConsole):
* bridge/objc/objc_instance.mm:
(ObjcInstance::moveGlobalExceptionToExecState):
* bridge/objc/objc_runtime.mm:
(JSC::Bindings::convertValueToObjcObject):
* bridge/objc/objc_utility.mm:
(JSC::Bindings::convertValueToObjcValue):
* testing/Internals.cpp:
(WebCore::Internals::cloneArrayBuffer):

Source/WebKitLegacy/mac:

* WebView/WebScriptDebugger.mm:
(WebScriptDebugger::sourceParsed):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/API/APIUtils.h (235253 => 235254)


--- trunk/Source/_javascript_Core/API/APIUtils.h	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/API/APIUtils.h	2018-08-23 22:57:09 UTC (rev 235254)
@@ -45,7 +45,7 @@
             *returnedExceptionRef = toRef(exec, exception->value());
         scope.clearException();
 #if ENABLE(REMOTE_INSPECTOR)
-        exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);
+        scope.vm().vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception);
 #endif
         return ExceptionStatus::DidThrow;
     }
@@ -57,7 +57,8 @@
     if (returnedExceptionRef)
         *returnedExceptionRef = toRef(exec, exception);
 #if ENABLE(REMOTE_INSPECTOR)
-    exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, JSC::Exception::create(exec->vm(), exception));
+    VM& vm = exec->vm();
+    vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, JSC::Exception::create(vm, exception));
 #endif
 }
 

Modified: trunk/Source/_javascript_Core/API/JSBase.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/API/JSBase.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/API/JSBase.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -54,7 +54,8 @@
         return 0;
     }
     ExecState* exec = toJS(ctx);
-    JSLockHolder locker(exec);
+    VM& vm = exec->vm();
+    JSLockHolder locker(vm);
 
     JSObject* jsThisObject = toJS(thisObject);
 
@@ -61,7 +62,7 @@
     startingLineNumber = std::max(1, startingLineNumber);
 
     // evaluate sets "this" to the global object if it is NULL
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
     auto sourceURLString = sourceURL ? sourceURL->string() : String();
     SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
 
@@ -105,7 +106,7 @@
     SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
     
     JSValue syntaxException;
-    bool isValidSyntax = checkSyntax(exec->vmEntryGlobalObject()->globalExec(), source, &syntaxException);
+    bool isValidSyntax = checkSyntax(vm.vmEntryGlobalObject(exec)->globalExec(), source, &syntaxException);
 
     if (!isValidSyntax) {
         if (exception)
@@ -112,7 +113,7 @@
             *exception = toRef(exec, syntaxException);
 #if ENABLE(REMOTE_INSPECTOR)
         Exception* exception = Exception::create(vm, syntaxException);
-        exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);
+        vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception);
 #endif
         return false;
     }

Modified: trunk/Source/_javascript_Core/API/JSContextRef.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/API/JSContextRef.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/API/JSContextRef.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -162,10 +162,10 @@
 JSGlobalContextRef JSGlobalContextRetain(JSGlobalContextRef ctx)
 {
     ExecState* exec = toJS(ctx);
-    JSLockHolder locker(exec);
+    VM& vm = exec->vm();
+    JSLockHolder locker(vm);
 
-    VM& vm = exec->vm();
-    gcProtect(exec->vmEntryGlobalObject());
+    gcProtect(vm.vmEntryGlobalObject(exec));
     vm.ref();
     return ctx;
 }
@@ -173,10 +173,10 @@
 void JSGlobalContextRelease(JSGlobalContextRef ctx)
 {
     ExecState* exec = toJS(ctx);
-    JSLockHolder locker(exec);
+    VM& vm = exec->vm();
+    JSLockHolder locker(vm);
 
-    VM& vm = exec->vm();
-    bool protectCountIsZero = Heap::heap(exec->vmEntryGlobalObject())->unprotect(exec->vmEntryGlobalObject());
+    bool protectCountIsZero = vm.heap.unprotect(vm.vmEntryGlobalObject(exec));
     if (protectCountIsZero)
         vm.heap.reportAbandonedObjectGraph();
     vm.deref();
@@ -225,9 +225,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder locker(exec);
+    VM& vm = exec->vm();
+    JSLockHolder locker(vm);
 
-    String name = exec->vmEntryGlobalObject()->name();
+    String name = vm.vmEntryGlobalObject(exec)->name();
     if (name.isNull())
         return 0;
 
@@ -242,9 +243,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder locker(exec);
+    VM& vm = exec->vm();
+    JSLockHolder locker(vm);
 
-    exec->vmEntryGlobalObject()->setName(name ? name->string() : String());
+    vm.vmEntryGlobalObject(exec)->setName(name ? name->string() : String());
 }
 
 
@@ -325,9 +327,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    return exec->vmEntryGlobalObject()->remoteDebuggingEnabled();
+    return vm.vmEntryGlobalObject(exec)->remoteDebuggingEnabled();
 }
 
 void JSGlobalContextSetRemoteInspectionEnabled(JSGlobalContextRef ctx, bool enabled)
@@ -338,9 +341,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    exec->vmEntryGlobalObject()->setRemoteDebuggingEnabled(enabled);
+    vm.vmEntryGlobalObject(exec)->setRemoteDebuggingEnabled(enabled);
 }
 
 bool JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions(JSGlobalContextRef ctx)
@@ -352,9 +356,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
     return globalObject->inspectorController().includesNativeCallStackWhenReportingExceptions();
 #else
     UNUSED_PARAM(ctx);
@@ -371,9 +376,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
     globalObject->inspectorController().setIncludesNativeCallStackWhenReportingExceptions(includesNativeCallStack);
 #else
     UNUSED_PARAM(ctx);
@@ -391,9 +397,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    return exec->vmEntryGlobalObject()->inspectorDebuggable().targetRunLoop();
+    return vm.vmEntryGlobalObject(exec)->inspectorDebuggable().targetRunLoop();
 #else
     UNUSED_PARAM(ctx);
     return nullptr;
@@ -409,9 +416,10 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    exec->vmEntryGlobalObject()->inspectorDebuggable().setTargetRunLoop(runLoop);
+    vm.vmEntryGlobalObject(exec)->inspectorDebuggable().setTargetRunLoop(runLoop);
 #else
     UNUSED_PARAM(ctx);
     UNUSED_PARAM(runLoop);
@@ -428,8 +436,9 @@
     }
 
     ExecState* exec = toJS(ctx);
-    JSLockHolder lock(exec);
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
 
-    return &exec->vmEntryGlobalObject()->inspectorController();
+    return &vm.vmEntryGlobalObject(exec)->inspectorController();
 }
 #endif

Modified: trunk/Source/_javascript_Core/API/JSValue.mm (235253 => 235254)


--- trunk/Source/_javascript_Core/API/JSValue.mm	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/API/JSValue.mm	2018-08-23 22:57:09 UTC (rev 235254)
@@ -674,8 +674,9 @@
 static void reportExceptionToInspector(JSGlobalContextRef context, JSC::JSValue exceptionValue)
 {
     JSC::ExecState* exec = toJS(context);
-    JSC::Exception* exception = JSC::Exception::create(exec->vm(), exceptionValue);
-    exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);
+    JSC::VM& vm = exec->vm();
+    JSC::Exception* exception = JSC::Exception::create(vm, exceptionValue);
+    vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception);
 }
 #endif
 

Modified: trunk/Source/_javascript_Core/API/glib/JSCClass.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/API/glib/JSCClass.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/API/glib/JSCClass.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -128,9 +128,11 @@
 static GRefPtr<JSCContext> jscContextForObject(JSC::JSObject* jsObject)
 {
     ASSERT(isWrappedObject(jsObject));
-    JSC::ExecState* exec = jsObject->globalObject()->globalExec();
+    JSC::JSGlobalObject* globalObject = jsObject->globalObject();
+    JSC::ExecState* exec = globalObject->globalExec();
     if (jsObject->isGlobalObject()) {
-        if (auto* globalScopeExtension = exec->vmEntryGlobalObject()->globalScopeExtension())
+        JSC::VM& vm = globalObject->vm();
+        if (auto* globalScopeExtension = vm.vmEntryGlobalObject(exec)->globalScopeExtension())
             exec = JSC::JSScope::objectAtScope(globalScopeExtension)->globalObject()->globalExec();
     }
     return jscContextGetOrCreate(toGlobalRef(exec));

Modified: trunk/Source/_javascript_Core/API/glib/JSCContext.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/API/glib/JSCContext.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/API/glib/JSCContext.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -880,8 +880,9 @@
     JSRetainPtr<JSGlobalContextRef> objectContext(Adopt,
         instance ? jscClassCreateContextWithJSWrapper(objectClass, instance) : JSGlobalContextCreateInGroup(jscVirtualMachineGetContextGroup(context->priv->vm.get()), nullptr));
     JSC::ExecState* exec = toJS(objectContext.get());
-    auto* jsObject = exec->vmEntryGlobalObject();
-    jsObject->setGlobalScopeExtension(JSC::JSWithScope::create(exec->vm(), jsObject, jsObject->globalScope(), toJS(JSContextGetGlobalObject(context->priv->jsContext.get()))));
+    JSC::VM& vm = exec->vm();
+    auto* jsObject = vm.vmEntryGlobalObject(exec);
+    jsObject->setGlobalScopeExtension(JSC::JSWithScope::create(vm, jsObject, jsObject->globalScope(), toJS(JSContextGetGlobalObject(context->priv->jsContext.get()))));
     JSValueRef exception = nullptr;
     JSValueRef result = evaluateScriptInContext(objectContext.get(), String::fromUTF8(code, length < 0 ? strlen(code) : length), uri, lineNumber, &exception);
     if (jscContextHandleExceptionIfNeeded(context, exception))

Modified: trunk/Source/_javascript_Core/ChangeLog (235253 => 235254)


--- trunk/Source/_javascript_Core/ChangeLog	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/ChangeLog	2018-08-23 22:57:09 UTC (rev 235254)
@@ -1,3 +1,77 @@
+2018-08-23  Mark Lam  <mark....@apple.com>
+
+        Move vmEntryGlobalObject() to VM from CallFrame.
+        https://bugs.webkit.org/show_bug.cgi?id=188900
+        <rdar://problem/43655753>
+
+        Reviewed by Michael Saboff.
+
+        Also introduced CallFrame::isGlobalExec() which makes use of one property of
+        GlobalExecs to identify them i.e. GlobalExecs have null callerFrame and returnPCs.
+        CallFrame::initGlobalExec() ensures this.
+
+        In contrast, normal CallFrames always have a callerFrame (because they must at
+        least be preceded by a VM EntryFrame) and a returnPC (at least return to the
+        VM entry glue).
+
+        * API/APIUtils.h:
+        (handleExceptionIfNeeded):
+        (setException):
+        * API/JSBase.cpp:
+        (JSEvaluateScript):
+        (JSCheckScriptSyntax):
+        * API/JSContextRef.cpp:
+        (JSGlobalContextRetain):
+        (JSGlobalContextRelease):
+        (JSGlobalContextCopyName):
+        (JSGlobalContextSetName):
+        (JSGlobalContextGetRemoteInspectionEnabled):
+        (JSGlobalContextSetRemoteInspectionEnabled):
+        (JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions):
+        (JSGlobalContextSetIncludesNativeCallStackWhenReportingExceptions):
+        (JSGlobalContextGetDebuggerRunLoop):
+        (JSGlobalContextSetDebuggerRunLoop):
+        (JSGlobalContextGetAugmentableInspectorController):
+        * API/JSValue.mm:
+        (reportExceptionToInspector):
+        * API/glib/JSCClass.cpp:
+        (jscContextForObject):
+        * API/glib/JSCContext.cpp:
+        (jsc_context_evaluate_in_object):
+        * debugger/Debugger.cpp:
+        (JSC::Debugger::pauseIfNeeded):
+        * debugger/DebuggerCallFrame.cpp:
+        (JSC::DebuggerCallFrame::vmEntryGlobalObject const):
+        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
+        * interpreter/CallFrame.cpp:
+        (JSC::CallFrame::vmEntryGlobalObject): Deleted.
+        * interpreter/CallFrame.h:
+        (JSC::ExecState::scope const):
+        (JSC::ExecState::noCaller):
+        (JSC::ExecState::isGlobalExec const):
+        * interpreter/Interpreter.cpp:
+        (JSC::notifyDebuggerOfUnwinding):
+        (JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown):
+        (JSC::Interpreter::debug):
+        * runtime/CallData.cpp:
+        (JSC::profiledCall):
+        * runtime/Completion.cpp:
+        (JSC::evaluate):
+        (JSC::profiledEvaluate):
+        (JSC::evaluateWithScopeExtension):
+        (JSC::loadAndEvaluateModule):
+        (JSC::loadModule):
+        (JSC::linkAndEvaluateModule):
+        (JSC::importModule):
+        * runtime/ConstructData.cpp:
+        (JSC::profiledConstruct):
+        * runtime/Error.cpp:
+        (JSC::getStackTrace):
+        * runtime/VM.cpp:
+        (JSC::VM::throwException):
+        (JSC::VM::vmEntryGlobalObject const):
+        * runtime/VM.h:
+
 2018-08-23  Andy Estes  <aes...@apple.com>
 
         [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave

Modified: trunk/Source/_javascript_Core/debugger/Debugger.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/debugger/Debugger.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/debugger/Debugger.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -718,7 +718,7 @@
     // reseting the pause state before executing any breakpoint actions.
     TemporaryPausedState pausedState(*this);
 
-    JSGlobalObject* vmEntryGlobalObject = callFrame->vmEntryGlobalObject(vm);
+    JSGlobalObject* vmEntryGlobalObject = vm.vmEntryGlobalObject(callFrame);
 
     if (didHitBreakpoint) {
         handleBreakpointHit(vmEntryGlobalObject, breakpoint);

Modified: trunk/Source/_javascript_Core/debugger/DebuggerCallFrame.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/debugger/DebuggerCallFrame.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/debugger/DebuggerCallFrame.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -118,7 +118,8 @@
     ASSERT(isValid());
     if (!isValid())
         return nullptr;
-    return m_validMachineFrame->vmEntryGlobalObject();
+    VM& vm = m_validMachineFrame->vm();
+    return vm.vmEntryGlobalObject(m_validMachineFrame);
 }
 
 SourceID DebuggerCallFrame::sourceID() const
@@ -252,7 +253,7 @@
         return jsUndefined();
     }
 
-    JSGlobalObject* globalObject = callFrame->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(callFrame);
     if (scopeExtensionObject) {
         JSScope* ignoredPreviousScope = globalObject->globalScope();
         globalObject->setGlobalScopeExtension(JSWithScope::create(vm, globalObject, ignoredPreviousScope, scopeExtensionObject));

Modified: trunk/Source/_javascript_Core/interpreter/CallFrame.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/interpreter/CallFrame.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/interpreter/CallFrame.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -45,6 +45,7 @@
     globalExec->setReturnPC(0);
     globalExec->setArgumentCountIncludingThis(0);
     globalExec->setCallee(globalCallee);
+    ASSERT(globalExec->isGlobalExec());
 }
 
 bool CallFrame::callSiteBitsAreBytecodeOffset() const
@@ -187,34 +188,6 @@
     return registers() + codeBlock->stackPointerOffset();
 }
 
-JSGlobalObject* CallFrame::vmEntryGlobalObject()
-{
-    RELEASE_ASSERT(callee().isCell());
-    if (callee().asCell()->isObject()) { 
-        if (this == lexicalGlobalObject()->globalExec())
-            return lexicalGlobalObject();
-    }
-    // If we're not an object, we're wasm, and therefore we're executing code and the below is safe.
-
-    // For any ExecState that's not a globalExec, the 
-    // dynamic global object must be set since code is running
-    ASSERT(vm().entryScope);
-    return vm().entryScope->globalObject();
-}
-
-JSGlobalObject* CallFrame::vmEntryGlobalObject(VM& vm)
-{
-    if (callee().isCell() && callee().asCell()->isObject()) {
-        if (this == lexicalGlobalObject()->globalExec())
-            return lexicalGlobalObject();
-    }
-
-    // For any ExecState that's not a globalExec, the 
-    // dynamic global object must be set since code is running
-    ASSERT(vm.entryScope);
-    return vm.entryScope->globalObject();
-}
-
 JSGlobalObject* CallFrame::wasmAwareLexicalGlobalObject(VM& vm)
 {
 #if ENABLE(WEBASSEMBLY)

Modified: trunk/Source/_javascript_Core/interpreter/CallFrame.h (235253 => 235254)


--- trunk/Source/_javascript_Core/interpreter/CallFrame.h	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/interpreter/CallFrame.h	2018-08-23 22:57:09 UTC (rev 235254)
@@ -1,7 +1,7 @@
 /*
  *  Copyright (C) 1999-2001 Harri Porten (por...@kde.org)
  *  Copyright (C) 2001 Peter Kelly (p...@post.com)
- *  Copyright (C) 2003-2017 Apple Inc. All rights reserved.
+ *  Copyright (C) 2003-2018 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Library General Public
@@ -115,11 +115,6 @@
             ASSERT(this[scopeRegisterOffset].Register::scope());
             return this[scopeRegisterOffset].Register::scope();
         }
-        // Global object in which execution began.
-        // This variant is not safe to call from a Wasm frame.
-        JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject();
-        // This variant is safe to call from a Wasm frame.
-        JSGlobalObject* vmEntryGlobalObject(VM&);
 
         JSGlobalObject* wasmAwareLexicalGlobalObject(VM&);
 
@@ -126,7 +121,7 @@
         bool isAnyWasmCallee();
 
         // Global object in which the currently executing code was defined.
-        // Differs from vmEntryGlobalObject() during function calls across web browser frames.
+        // Differs from VM::vmEntryGlobalObject() during function calls across web browser frames.
         JSGlobalObject* lexicalGlobalObject() const;
 
         // Differs from lexicalGlobalObject because this will have DOM window shell rather than
@@ -255,7 +250,11 @@
 
         static int offsetFor(size_t argumentCountIncludingThis) { return argumentCountIncludingThis + CallFrameSlot::thisArgument - 1; }
 
-        static CallFrame* noCaller() { return 0; }
+        static CallFrame* noCaller() { return nullptr; }
+        bool isGlobalExec() const
+        {
+            return callerFrameAndPC().callerFrame == noCaller() && callerFrameAndPC().pc == nullptr;
+        }
 
         void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[CallFrameSlot::argumentCount].payload() = count; }
         void setCallee(JSObject* callee) { static_cast<Register*>(this)[CallFrameSlot::callee] = callee; }

Modified: trunk/Source/_javascript_Core/interpreter/Interpreter.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/interpreter/Interpreter.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/interpreter/Interpreter.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -635,7 +635,7 @@
 ALWAYS_INLINE static void notifyDebuggerOfUnwinding(VM& vm, CallFrame* callFrame)
 {
     auto catchScope = DECLARE_CATCH_SCOPE(vm);
-    if (Debugger* debugger = callFrame->vmEntryGlobalObject(vm)->debugger()) {
+    if (Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger()) {
         SuspendExceptionScope scope(&vm);
         if (callFrame->isAnyWasmCallee()
             || (callFrame->callee().isCell() && callFrame->callee().asCell()->inherits<JSFunction>(vm)))
@@ -754,7 +754,7 @@
 
 void Interpreter::notifyDebuggerOfExceptionToBeThrown(VM& vm, CallFrame* callFrame, Exception* exception)
 {
-    Debugger* debugger = callFrame->vmEntryGlobalObject(vm)->debugger();
+    Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger();
     if (debugger && debugger->needsExceptionCallbacks() && !exception->didNotifyInspectorOfThrow()) {
         // This code assumes that if the debugger is enabled then there is no inlining.
         // If that assumption turns out to be false then we'll ignore the inlined call
@@ -1327,7 +1327,7 @@
 {
     VM& vm = callFrame->vm();
     auto scope = DECLARE_CATCH_SCOPE(vm);
-    Debugger* debugger = callFrame->vmEntryGlobalObject()->debugger();
+    Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger();
     if (!debugger)
         return;
 

Modified: trunk/Source/_javascript_Core/runtime/CallData.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/runtime/CallData.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/runtime/CallData.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -57,13 +57,15 @@
 
 JSValue profiledCall(ExecState* exec, ProfilingReason reason, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args)
 {
-    ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
+    VM& vm = exec->vm();
+    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
     return call(exec, functionObject, callType, callData, thisValue, args);
 }
 
 JSValue profiledCall(ExecState* exec, ProfilingReason reason, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args, NakedPtr<Exception>& returnedException)
 {
-    ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
+    VM& vm = exec->vm();
+    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
     return call(exec, functionObject, callType, callData, thisValue, args, returnedException);
 }
 

Modified: trunk/Source/_javascript_Core/runtime/Completion.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/runtime/Completion.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/runtime/Completion.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -98,7 +98,7 @@
     CodeProfiling profile(source);
 
     if (!thisValue || thisValue.isUndefinedOrNull())
-        thisValue = exec->vmEntryGlobalObject();
+        thisValue = vm.vmEntryGlobalObject(exec);
     JSObject* thisObj = jsCast<JSObject*>(thisValue.toThis(exec, NotStrictMode));
     JSValue result = vm.interpreter->executeProgram(source, exec, thisObj);
 
@@ -114,13 +114,15 @@
 
 JSValue profiledEvaluate(ExecState* exec, ProfilingReason reason, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException)
 {
-    ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
+    VM& vm = exec->vm();
+    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
     return evaluate(exec, source, thisValue, returnedException);
 }
 
 JSValue evaluateWithScopeExtension(ExecState* exec, const SourceCode& source, JSObject* scopeExtensionObject, NakedPtr<Exception>& returnedException)
 {
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    VM& vm = exec->vm();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
 
     if (scopeExtensionObject) {
         JSScope* ignoredPreviousScope = globalObject->globalScope();
@@ -161,7 +163,7 @@
     RELEASE_ASSERT(vm.atomicStringTable() == Thread::current().atomicStringTable());
     RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
 
-    return exec->vmEntryGlobalObject()->moduleLoader()->loadAndEvaluateModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
+    return vm.vmEntryGlobalObject(exec)->moduleLoader()->loadAndEvaluateModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
 }
 
 JSInternalPromise* loadAndEvaluateModule(ExecState* exec, const SourceCode& source, JSValue scriptFetcher)
@@ -174,7 +176,7 @@
 
     Symbol* key = createSymbolForEntryPointModule(vm);
 
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
 
     // Insert the given source code to the ModuleLoader registry as the fetched registry entry.
     globalObject->moduleLoader()->provideFetch(exec, key, source);
@@ -190,7 +192,7 @@
     RELEASE_ASSERT(vm.atomicStringTable() == Thread::current().atomicStringTable());
     RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
 
-    return exec->vmEntryGlobalObject()->moduleLoader()->loadModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
+    return vm.vmEntryGlobalObject(exec)->moduleLoader()->loadModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
 }
 
 JSInternalPromise* loadModule(ExecState* exec, const SourceCode& source, JSValue scriptFetcher)
@@ -203,7 +205,7 @@
 
     Symbol* key = createSymbolForEntryPointModule(vm);
 
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
 
     // Insert the given source code to the ModuleLoader registry as the fetched registry entry.
     // FIXME: Introduce JSSourceCode object to wrap around this source.
@@ -220,7 +222,7 @@
     RELEASE_ASSERT(vm.atomicStringTable() == Thread::current().atomicStringTable());
     RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
 
-    JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
     return globalObject->moduleLoader()->linkAndEvaluateModule(exec, identifierToJSValue(vm, moduleKey), scriptFetcher);
 }
 
@@ -231,7 +233,7 @@
     RELEASE_ASSERT(vm.atomicStringTable() == Thread::current().atomicStringTable());
     RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
 
-    return exec->vmEntryGlobalObject()->moduleLoader()->requestImportModule(exec, moduleKey, parameters, scriptFetcher);
+    return vm.vmEntryGlobalObject(exec)->moduleLoader()->requestImportModule(exec, moduleKey, parameters, scriptFetcher);
 }
 
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/ConstructData.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/runtime/ConstructData.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/runtime/ConstructData.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -58,7 +58,8 @@
 
 JSObject* profiledConstruct(ExecState* exec, ProfilingReason reason, JSValue constructorObject, ConstructType constructType, const ConstructData& constructData, const ArgList& args, JSValue newTarget)
 {
-    ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
+    VM& vm = exec->vm();
+    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
     return construct(exec, constructorObject, constructType, constructData, args, newTarget);
 }
 

Modified: trunk/Source/_javascript_Core/runtime/Error.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/runtime/Error.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/runtime/Error.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -169,7 +169,7 @@
     std::unique_ptr<Vector<StackFrame>> stackTrace = std::make_unique<Vector<StackFrame>>();
     vm.interpreter->getStackTrace(obj, *stackTrace, framesToSkip, errorConstructor->stackTraceLimit().value());
     if (!stackTrace->isEmpty())
-        ASSERT_UNUSED(exec, exec == vm.topCallFrame || exec == exec->lexicalGlobalObject()->globalExec() || exec == exec->vmEntryGlobalObject()->globalExec());
+        ASSERT_UNUSED(exec, exec == vm.topCallFrame || exec->isGlobalExec());
     return stackTrace;
 }
 

Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (235253 => 235254)


--- trunk/Source/_javascript_Core/runtime/VM.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -832,7 +832,7 @@
         CRASH();
     }
 
-    ASSERT(exec == topCallFrame || exec == exec->lexicalGlobalObject()->globalExec() || exec == exec->vmEntryGlobalObject()->globalExec());
+    ASSERT(exec == topCallFrame || exec->isGlobalExec());
 
     interpreter->notifyDebuggerOfExceptionToBeThrown(*this, exec, exception);
 
@@ -1263,4 +1263,15 @@
         scratchBuffer->setActiveLength(0);
 }
 
+JSGlobalObject* VM::vmEntryGlobalObject(const CallFrame* callFrame) const
+{
+    if (callFrame && callFrame->isGlobalExec()) {
+        ASSERT(callFrame->callee().isCell() && callFrame->callee().asCell()->isObject());
+        ASSERT(callFrame == callFrame->lexicalGlobalObject()->globalExec());
+        return callFrame->lexicalGlobalObject();
+    }
+    ASSERT(entryScope);
+    return entryScope->globalObject();
+}
+
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/VM.h (235253 => 235254)


--- trunk/Source/_javascript_Core/runtime/VM.h	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/_javascript_Core/runtime/VM.h	2018-08-23 22:57:09 UTC (rev 235254)
@@ -172,6 +172,8 @@
 struct Instruction;
 struct ValueProfile;
 
+typedef ExecState CallFrame;
+
 struct LocalTimeOffsetCache {
     LocalTimeOffsetCache()
         : start(0.0)
@@ -293,6 +295,9 @@
     unsigned id() const { return m_id; }
     bool isEntered() const { return !!entryScope; }
 
+    // Global object in which execution began.
+    JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject(const CallFrame*) const;
+
 private:
     unsigned nextID();
 

Modified: trunk/Source/WebCore/ChangeLog (235253 => 235254)


--- trunk/Source/WebCore/ChangeLog	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/ChangeLog	2018-08-23 22:57:09 UTC (rev 235254)
@@ -1,3 +1,33 @@
+2018-08-23  Mark Lam  <mark....@apple.com>
+
+        Move vmEntryGlobalObject() to VM from CallFrame.
+        https://bugs.webkit.org/show_bug.cgi?id=188900
+        <rdar://problem/43655753>
+
+        Reviewed by Michael Saboff.
+
+        No new tests needed because this patch does not introduce new functionality.
+
+        * bindings/js/JSCustomXPathNSResolver.cpp:
+        (WebCore::JSCustomXPathNSResolver::create):
+        * bindings/js/JSDOMGlobalObject.cpp:
+        (WebCore::callerGlobalObject):
+        (WebCore::toJSDOMGlobalObject): Deleted.
+        * bindings/js/JSDOMWindowBase.cpp:
+        (WebCore::firstDOMWindow):
+        * bridge/c/c_utility.cpp:
+        (JSC::Bindings::convertValueToNPVariant):
+        * bridge/objc/WebScriptObject.mm:
+        (WebCore::addExceptionToConsole):
+        * bridge/objc/objc_instance.mm:
+        (ObjcInstance::moveGlobalExceptionToExecState):
+        * bridge/objc/objc_runtime.mm:
+        (JSC::Bindings::convertValueToObjcObject):
+        * bridge/objc/objc_utility.mm:
+        (JSC::Bindings::convertValueToObjcValue):
+        * testing/Internals.cpp:
+        (WebCore::Internals::cloneArrayBuffer):
+
 2018-08-23  Andy Estes  <aes...@apple.com>
 
         [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave

Modified: trunk/Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp (235253 => 235254)


--- trunk/Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -51,7 +51,8 @@
     if (!resolverObject)
         return Exception { TypeMismatchError };
 
-    return adoptRef(*new JSCustomXPathNSResolver(state.vm(), resolverObject, asJSDOMWindow(state.vmEntryGlobalObject())));
+    VM& vm = state.vm();
+    return adoptRef(*new JSCustomXPathNSResolver(vm, resolverObject, asJSDOMWindow(vm.vmEntryGlobalObject(&state))));
 }
 
 JSCustomXPathNSResolver::JSCustomXPathNSResolver(VM& vm, JSObject* customResolver, JSDOMWindow* globalObject)

Modified: trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp (235253 => 235254)


--- trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -304,7 +304,11 @@
 
     GetCallerGlobalObjectFunctor iter;
     state.iterate(iter);
-    return *jsCast<JSDOMGlobalObject*>(iter.globalObject() ? iter.globalObject() : state.vmEntryGlobalObject());
+    if (iter.globalObject())
+        return *jsCast<JSDOMGlobalObject*>(iter.globalObject());
+
+    VM& vm = state.vm();
+    return *jsCast<JSDOMGlobalObject*>(vm.vmEntryGlobalObject(&state));
 }
 
 JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext& context, DOMWrapperWorld& world)

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp (235253 => 235254)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -269,7 +269,8 @@
 
 DOMWindow& firstDOMWindow(ExecState& state)
 {
-    return asJSDOMWindow(state.vmEntryGlobalObject())->wrapped();
+    VM& vm = state.vm();
+    return asJSDOMWindow(vm.vmEntryGlobalObject(&state))->wrapped();
 }
 
 Document* responsibleDocument(ExecState& state)

Modified: trunk/Source/WebCore/bridge/c/c_utility.cpp (235253 => 235254)


--- trunk/Source/WebCore/bridge/c/c_utility.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bridge/c/c_utility.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -96,7 +96,7 @@
                 OBJECT_TO_NPVARIANT(obj, *result);
             }
         } else {
-            JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
+            JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
 
             RootObject* rootObject = findRootObject(globalObject);
             if (rootObject) {

Modified: trunk/Source/WebCore/bridge/objc/WebScriptObject.mm (235253 => 235254)


--- trunk/Source/WebCore/bridge/objc/WebScriptObject.mm	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bridge/objc/WebScriptObject.mm	2018-08-23 22:57:09 UTC (rev 235254)
@@ -122,7 +122,8 @@
 
 static void addExceptionToConsole(ExecState* exec, JSC::Exception* exception)
 {
-    JSDOMWindow* window = asJSDOMWindow(exec->vmEntryGlobalObject());
+    JSC::VM& vm = exec->vm();
+    JSDOMWindow* window = asJSDOMWindow(vm.vmEntryGlobalObject(exec));
     if (!window || !exception)
         return;
     reportException(exec, exception);

Modified: trunk/Source/WebCore/bridge/objc/objc_instance.mm (235253 => 235254)


--- trunk/Source/WebCore/bridge/objc/objc_instance.mm	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bridge/objc/objc_instance.mm	2018-08-23 22:57:09 UTC (rev 235254)
@@ -88,8 +88,8 @@
         return;
     }
 
-    if (!s_exceptionEnvironment || s_exceptionEnvironment == exec->vmEntryGlobalObject()) {
-        JSLockHolder lock(exec);
+    if (!s_exceptionEnvironment || s_exceptionEnvironment == vm.vmEntryGlobalObject(exec)) {
+        JSLockHolder lock(vm);
         throwError(exec, scope, s_exception);
     }
 

Modified: trunk/Source/WebCore/bridge/objc/objc_runtime.mm (235253 => 235254)


--- trunk/Source/WebCore/bridge/objc/objc_runtime.mm	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bridge/objc/objc_runtime.mm	2018-08-23 22:57:09 UTC (rev 235254)
@@ -122,7 +122,8 @@
 
 static id convertValueToObjcObject(ExecState* exec, JSValue value)
 {
-    RefPtr<RootObject> rootObject = findRootObject(exec->vmEntryGlobalObject());
+    VM& vm = exec->vm();
+    RefPtr<RootObject> rootObject = findRootObject(vm.vmEntryGlobalObject(exec));
     if (!rootObject)
         return nil;
     return [webScriptObjectClass() _convertValueToObjcValue:value originRootObject:rootObject.get() rootObject:rootObject.get()];

Modified: trunk/Source/WebCore/bridge/objc/objc_utility.mm (235253 => 235254)


--- trunk/Source/WebCore/bridge/objc/objc_utility.mm	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/bridge/objc/objc_utility.mm	2018-08-23 22:57:09 UTC (rev 235254)
@@ -88,9 +88,10 @@
 
     switch (type) {
         case ObjcObjectType: {
-            JSLockHolder lock(exec);
+            VM& vm = exec->vm();
+            JSLockHolder lock(vm);
             
-            JSGlobalObject *originGlobalObject = exec->vmEntryGlobalObject();
+            JSGlobalObject *originGlobalObject = vm.vmEntryGlobalObject(exec);
             RootObject* originRootObject = findRootObject(originGlobalObject);
 
             JSGlobalObject* globalObject = 0;

Modified: trunk/Source/WebCore/testing/Internals.cpp (235253 => 235254)


--- trunk/Source/WebCore/testing/Internals.cpp	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebCore/testing/Internals.cpp	2018-08-23 22:57:09 UTC (rev 235254)
@@ -4122,7 +4122,7 @@
 JSValue Internals::cloneArrayBuffer(JSC::ExecState& state, JSValue buffer, JSValue srcByteOffset, JSValue srcLength)
 {
     JSC::VM& vm = state.vm();
-    JSGlobalObject* globalObject = state.vmEntryGlobalObject();
+    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(&state);
     JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData);
     const Identifier& privateName = clientData->builtinNames().cloneArrayBufferPrivateName();
     JSValue value;

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (235253 => 235254)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2018-08-23 22:57:09 UTC (rev 235254)
@@ -1,3 +1,14 @@
+2018-08-23  Mark Lam  <mark....@apple.com>
+
+        Move vmEntryGlobalObject() to VM from CallFrame.
+        https://bugs.webkit.org/show_bug.cgi?id=188900
+        <rdar://problem/43655753>
+
+        Reviewed by Michael Saboff.
+
+        * WebView/WebScriptDebugger.mm:
+        (WebScriptDebugger::sourceParsed):
+
 2018-08-23  Andy Estes  <aes...@apple.com>
 
         [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebScriptDebugger.mm (235253 => 235254)


--- trunk/Source/WebKitLegacy/mac/WebView/WebScriptDebugger.mm	2018-08-23 22:53:05 UTC (rev 235253)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebScriptDebugger.mm	2018-08-23 22:57:09 UTC (rev 235254)
@@ -93,7 +93,8 @@
     NSURL *nsURL = toNSURL(sourceProvider->url());
     int firstLine = sourceProvider->startPosition().m_line.oneBasedInt();
 
-    WebFrame *webFrame = toWebFrame(exec->vmEntryGlobalObject());
+    VM& vm = exec->vm();
+    WebFrame *webFrame = toWebFrame(vm.vmEntryGlobalObject(exec));
     WebView *webView = [webFrame webView];
     WebScriptDebugDelegateImplementationCache* implementations = WebViewGetScriptDebugDelegateImplementations(webView);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to