Changeset 235254 in webkit


Ignore:
Timestamp:
Aug 23, 2018 3:57:09 PM (6 years ago)
Author:
mark.lam@apple.com
Message:

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

Reviewed by Michael Saboff.

Source/JavaScriptCore:

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):

Location:
trunk/Source
Files:
30 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/APIUtils.h

    r222617 r235254  
    4646        scope.clearException();
    4747#if ENABLE(REMOTE_INSPECTOR)
    48         exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);
     48        scope.vm().vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception);
    4949#endif
    5050        return ExceptionStatus::DidThrow;
     
    5858        *returnedExceptionRef = toRef(exec, exception);
    5959#if ENABLE(REMOTE_INSPECTOR)
    60     exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, JSC::Exception::create(exec->vm(), exception));
     60    VM& vm = exec->vm();
     61    vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, JSC::Exception::create(vm, exception));
    6162#endif
    6263}
  • trunk/Source/JavaScriptCore/API/JSBase.cpp

    r221822 r235254  
    5555    }
    5656    ExecState* exec = toJS(ctx);
    57     JSLockHolder locker(exec);
     57    VM& vm = exec->vm();
     58    JSLockHolder locker(vm);
    5859
    5960    JSObject* jsThisObject = toJS(thisObject);
     
    6263
    6364    // evaluate sets "this" to the global object if it is NULL
    64     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     65    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    6566    auto sourceURLString = sourceURL ? sourceURL->string() : String();
    6667    SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
     
    106107   
    107108    JSValue syntaxException;
    108     bool isValidSyntax = checkSyntax(exec->vmEntryGlobalObject()->globalExec(), source, &syntaxException);
     109    bool isValidSyntax = checkSyntax(vm.vmEntryGlobalObject(exec)->globalExec(), source, &syntaxException);
    109110
    110111    if (!isValidSyntax) {
     
    113114#if ENABLE(REMOTE_INSPECTOR)
    114115        Exception* exception = Exception::create(vm, syntaxException);
    115         exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);
     116        vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception);
    116117#endif
    117118        return false;
  • trunk/Source/JavaScriptCore/API/JSContextRef.cpp

    r226295 r235254  
    163163{
    164164    ExecState* exec = toJS(ctx);
    165     JSLockHolder locker(exec);
    166 
    167     VM& vm = exec->vm();
    168     gcProtect(exec->vmEntryGlobalObject());
     165    VM& vm = exec->vm();
     166    JSLockHolder locker(vm);
     167
     168    gcProtect(vm.vmEntryGlobalObject(exec));
    169169    vm.ref();
    170170    return ctx;
     
    174174{
    175175    ExecState* exec = toJS(ctx);
    176     JSLockHolder locker(exec);
    177 
    178     VM& vm = exec->vm();
    179     bool protectCountIsZero = Heap::heap(exec->vmEntryGlobalObject())->unprotect(exec->vmEntryGlobalObject());
     176    VM& vm = exec->vm();
     177    JSLockHolder locker(vm);
     178
     179    bool protectCountIsZero = vm.heap.unprotect(vm.vmEntryGlobalObject(exec));
    180180    if (protectCountIsZero)
    181181        vm.heap.reportAbandonedObjectGraph();
     
    226226
    227227    ExecState* exec = toJS(ctx);
    228     JSLockHolder locker(exec);
    229 
    230     String name = exec->vmEntryGlobalObject()->name();
     228    VM& vm = exec->vm();
     229    JSLockHolder locker(vm);
     230
     231    String name = vm.vmEntryGlobalObject(exec)->name();
    231232    if (name.isNull())
    232233        return 0;
     
    243244
    244245    ExecState* exec = toJS(ctx);
    245     JSLockHolder locker(exec);
    246 
    247     exec->vmEntryGlobalObject()->setName(name ? name->string() : String());
     246    VM& vm = exec->vm();
     247    JSLockHolder locker(vm);
     248
     249    vm.vmEntryGlobalObject(exec)->setName(name ? name->string() : String());
    248250}
    249251
     
    326328
    327329    ExecState* exec = toJS(ctx);
    328     JSLockHolder lock(exec);
    329 
    330     return exec->vmEntryGlobalObject()->remoteDebuggingEnabled();
     330    VM& vm = exec->vm();
     331    JSLockHolder lock(vm);
     332
     333    return vm.vmEntryGlobalObject(exec)->remoteDebuggingEnabled();
    331334}
    332335
     
    339342
    340343    ExecState* exec = toJS(ctx);
    341     JSLockHolder lock(exec);
    342 
    343     exec->vmEntryGlobalObject()->setRemoteDebuggingEnabled(enabled);
     344    VM& vm = exec->vm();
     345    JSLockHolder lock(vm);
     346
     347    vm.vmEntryGlobalObject(exec)->setRemoteDebuggingEnabled(enabled);
    344348}
    345349
     
    353357
    354358    ExecState* exec = toJS(ctx);
    355     JSLockHolder lock(exec);
    356 
    357     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     359    VM& vm = exec->vm();
     360    JSLockHolder lock(vm);
     361
     362    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    358363    return globalObject->inspectorController().includesNativeCallStackWhenReportingExceptions();
    359364#else
     
    372377
    373378    ExecState* exec = toJS(ctx);
    374     JSLockHolder lock(exec);
    375 
    376     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     379    VM& vm = exec->vm();
     380    JSLockHolder lock(vm);
     381
     382    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    377383    globalObject->inspectorController().setIncludesNativeCallStackWhenReportingExceptions(includesNativeCallStack);
    378384#else
     
    392398
    393399    ExecState* exec = toJS(ctx);
    394     JSLockHolder lock(exec);
    395 
    396     return exec->vmEntryGlobalObject()->inspectorDebuggable().targetRunLoop();
     400    VM& vm = exec->vm();
     401    JSLockHolder lock(vm);
     402
     403    return vm.vmEntryGlobalObject(exec)->inspectorDebuggable().targetRunLoop();
    397404#else
    398405    UNUSED_PARAM(ctx);
     
    410417
    411418    ExecState* exec = toJS(ctx);
    412     JSLockHolder lock(exec);
    413 
    414     exec->vmEntryGlobalObject()->inspectorDebuggable().setTargetRunLoop(runLoop);
     419    VM& vm = exec->vm();
     420    JSLockHolder lock(vm);
     421
     422    vm.vmEntryGlobalObject(exec)->inspectorDebuggable().setTargetRunLoop(runLoop);
    415423#else
    416424    UNUSED_PARAM(ctx);
     
    429437
    430438    ExecState* exec = toJS(ctx);
    431     JSLockHolder lock(exec);
    432 
    433     return &exec->vmEntryGlobalObject()->inspectorController();
    434 }
    435 #endif
     439    VM& vm = exec->vm();
     440    JSLockHolder lock(vm);
     441
     442    return &vm.vmEntryGlobalObject(exec)->inspectorController();
     443}
     444#endif
  • trunk/Source/JavaScriptCore/API/JSValue.mm

    r234685 r235254  
    675675{
    676676    JSC::ExecState* exec = toJS(context);
    677     JSC::Exception* exception = JSC::Exception::create(exec->vm(), exceptionValue);
    678     exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);
     677    JSC::VM& vm = exec->vm();
     678    JSC::Exception* exception = JSC::Exception::create(vm, exceptionValue);
     679    vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception);
    679680}
    680681#endif
  • trunk/Source/JavaScriptCore/API/glib/JSCClass.cpp

    r234025 r235254  
    129129{
    130130    ASSERT(isWrappedObject(jsObject));
    131     JSC::ExecState* exec = jsObject->globalObject()->globalExec();
     131    JSC::JSGlobalObject* globalObject = jsObject->globalObject();
     132    JSC::ExecState* exec = globalObject->globalExec();
    132133    if (jsObject->isGlobalObject()) {
    133         if (auto* globalScopeExtension = exec->vmEntryGlobalObject()->globalScopeExtension())
     134        JSC::VM& vm = globalObject->vm();
     135        if (auto* globalScopeExtension = vm.vmEntryGlobalObject(exec)->globalScopeExtension())
    134136            exec = JSC::JSScope::objectAtScope(globalScopeExtension)->globalObject()->globalExec();
    135137    }
  • trunk/Source/JavaScriptCore/API/glib/JSCContext.cpp

    r235024 r235254  
    881881        instance ? jscClassCreateContextWithJSWrapper(objectClass, instance) : JSGlobalContextCreateInGroup(jscVirtualMachineGetContextGroup(context->priv->vm.get()), nullptr));
    882882    JSC::ExecState* exec = toJS(objectContext.get());
    883     auto* jsObject = exec->vmEntryGlobalObject();
    884     jsObject->setGlobalScopeExtension(JSC::JSWithScope::create(exec->vm(), jsObject, jsObject->globalScope(), toJS(JSContextGetGlobalObject(context->priv->jsContext.get()))));
     883    JSC::VM& vm = exec->vm();
     884    auto* jsObject = vm.vmEntryGlobalObject(exec);
     885    jsObject->setGlobalScopeExtension(JSC::JSWithScope::create(vm, jsObject, jsObject->globalScope(), toJS(JSContextGetGlobalObject(context->priv->jsContext.get()))));
    885886    JSValueRef exception = nullptr;
    886887    JSValueRef result = evaluateScriptInContext(objectContext.get(), String::fromUTF8(code, length < 0 ? strlen(code) : length), uri, lineNumber, &exception);
  • trunk/Source/JavaScriptCore/ChangeLog

    r235251 r235254  
     12018-08-23  Mark Lam  <mark.lam@apple.com>
     2
     3        Move vmEntryGlobalObject() to VM from CallFrame.
     4        https://bugs.webkit.org/show_bug.cgi?id=188900
     5        <rdar://problem/43655753>
     6
     7        Reviewed by Michael Saboff.
     8
     9        Also introduced CallFrame::isGlobalExec() which makes use of one property of
     10        GlobalExecs to identify them i.e. GlobalExecs have null callerFrame and returnPCs.
     11        CallFrame::initGlobalExec() ensures this.
     12
     13        In contrast, normal CallFrames always have a callerFrame (because they must at
     14        least be preceded by a VM EntryFrame) and a returnPC (at least return to the
     15        VM entry glue).
     16
     17        * API/APIUtils.h:
     18        (handleExceptionIfNeeded):
     19        (setException):
     20        * API/JSBase.cpp:
     21        (JSEvaluateScript):
     22        (JSCheckScriptSyntax):
     23        * API/JSContextRef.cpp:
     24        (JSGlobalContextRetain):
     25        (JSGlobalContextRelease):
     26        (JSGlobalContextCopyName):
     27        (JSGlobalContextSetName):
     28        (JSGlobalContextGetRemoteInspectionEnabled):
     29        (JSGlobalContextSetRemoteInspectionEnabled):
     30        (JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions):
     31        (JSGlobalContextSetIncludesNativeCallStackWhenReportingExceptions):
     32        (JSGlobalContextGetDebuggerRunLoop):
     33        (JSGlobalContextSetDebuggerRunLoop):
     34        (JSGlobalContextGetAugmentableInspectorController):
     35        * API/JSValue.mm:
     36        (reportExceptionToInspector):
     37        * API/glib/JSCClass.cpp:
     38        (jscContextForObject):
     39        * API/glib/JSCContext.cpp:
     40        (jsc_context_evaluate_in_object):
     41        * debugger/Debugger.cpp:
     42        (JSC::Debugger::pauseIfNeeded):
     43        * debugger/DebuggerCallFrame.cpp:
     44        (JSC::DebuggerCallFrame::vmEntryGlobalObject const):
     45        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
     46        * interpreter/CallFrame.cpp:
     47        (JSC::CallFrame::vmEntryGlobalObject): Deleted.
     48        * interpreter/CallFrame.h:
     49        (JSC::ExecState::scope const):
     50        (JSC::ExecState::noCaller):
     51        (JSC::ExecState::isGlobalExec const):
     52        * interpreter/Interpreter.cpp:
     53        (JSC::notifyDebuggerOfUnwinding):
     54        (JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown):
     55        (JSC::Interpreter::debug):
     56        * runtime/CallData.cpp:
     57        (JSC::profiledCall):
     58        * runtime/Completion.cpp:
     59        (JSC::evaluate):
     60        (JSC::profiledEvaluate):
     61        (JSC::evaluateWithScopeExtension):
     62        (JSC::loadAndEvaluateModule):
     63        (JSC::loadModule):
     64        (JSC::linkAndEvaluateModule):
     65        (JSC::importModule):
     66        * runtime/ConstructData.cpp:
     67        (JSC::profiledConstruct):
     68        * runtime/Error.cpp:
     69        (JSC::getStackTrace):
     70        * runtime/VM.cpp:
     71        (JSC::VM::throwException):
     72        (JSC::VM::vmEntryGlobalObject const):
     73        * runtime/VM.h:
     74
    1752018-08-23  Andy Estes  <aestes@apple.com>
    276
  • trunk/Source/JavaScriptCore/debugger/Debugger.cpp

    r233236 r235254  
    719719    TemporaryPausedState pausedState(*this);
    720720
    721     JSGlobalObject* vmEntryGlobalObject = callFrame->vmEntryGlobalObject(vm);
     721    JSGlobalObject* vmEntryGlobalObject = vm.vmEntryGlobalObject(callFrame);
    722722
    723723    if (didHitBreakpoint) {
  • trunk/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp

    r233403 r235254  
    119119    if (!isValid())
    120120        return nullptr;
    121     return m_validMachineFrame->vmEntryGlobalObject();
     121    VM& vm = m_validMachineFrame->vm();
     122    return vm.vmEntryGlobalObject(m_validMachineFrame);
    122123}
    123124
     
    253254    }
    254255
    255     JSGlobalObject* globalObject = callFrame->vmEntryGlobalObject();
     256    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(callFrame);
    256257    if (scopeExtensionObject) {
    257258        JSScope* ignoredPreviousScope = globalObject->globalScope();
  • trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp

    r233122 r235254  
    4646    globalExec->setArgumentCountIncludingThis(0);
    4747    globalExec->setCallee(globalCallee);
     48    ASSERT(globalExec->isGlobalExec());
    4849}
    4950
     
    186187    ASSERT(codeBlock);
    187188    return registers() + codeBlock->stackPointerOffset();
    188 }
    189 
    190 JSGlobalObject* CallFrame::vmEntryGlobalObject()
    191 {
    192     RELEASE_ASSERT(callee().isCell());
    193     if (callee().asCell()->isObject()) {
    194         if (this == lexicalGlobalObject()->globalExec())
    195             return lexicalGlobalObject();
    196     }
    197     // If we're not an object, we're wasm, and therefore we're executing code and the below is safe.
    198 
    199     // For any ExecState that's not a globalExec, the
    200     // dynamic global object must be set since code is running
    201     ASSERT(vm().entryScope);
    202     return vm().entryScope->globalObject();
    203 }
    204 
    205 JSGlobalObject* CallFrame::vmEntryGlobalObject(VM& vm)
    206 {
    207     if (callee().isCell() && callee().asCell()->isObject()) {
    208         if (this == lexicalGlobalObject()->globalExec())
    209             return lexicalGlobalObject();
    210     }
    211 
    212     // For any ExecState that's not a globalExec, the
    213     // dynamic global object must be set since code is running
    214     ASSERT(vm.entryScope);
    215     return vm.entryScope->globalObject();
    216189}
    217190
  • trunk/Source/JavaScriptCore/interpreter/CallFrame.h

    r223738 r235254  
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    33 *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
    4  *  Copyright (C) 2003-2017 Apple Inc. All rights reserved.
     4 *  Copyright (C) 2003-2018 Apple Inc. All rights reserved.
    55 *
    66 *  This library is free software; you can redistribute it and/or
     
    116116            return this[scopeRegisterOffset].Register::scope();
    117117        }
    118         // Global object in which execution began.
    119         // This variant is not safe to call from a Wasm frame.
    120         JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject();
    121         // This variant is safe to call from a Wasm frame.
    122         JSGlobalObject* vmEntryGlobalObject(VM&);
    123118
    124119        JSGlobalObject* wasmAwareLexicalGlobalObject(VM&);
     
    127122
    128123        // Global object in which the currently executing code was defined.
    129         // Differs from vmEntryGlobalObject() during function calls across web browser frames.
     124        // Differs from VM::vmEntryGlobalObject() during function calls across web browser frames.
    130125        JSGlobalObject* lexicalGlobalObject() const;
    131126
     
    256251        static int offsetFor(size_t argumentCountIncludingThis) { return argumentCountIncludingThis + CallFrameSlot::thisArgument - 1; }
    257252
    258         static CallFrame* noCaller() { return 0; }
     253        static CallFrame* noCaller() { return nullptr; }
     254        bool isGlobalExec() const
     255        {
     256            return callerFrameAndPC().callerFrame == noCaller() && callerFrameAndPC().pc == nullptr;
     257        }
    259258
    260259        void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[CallFrameSlot::argumentCount].payload() = count; }
  • trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp

    r233630 r235254  
    636636{
    637637    auto catchScope = DECLARE_CATCH_SCOPE(vm);
    638     if (Debugger* debugger = callFrame->vmEntryGlobalObject(vm)->debugger()) {
     638    if (Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger()) {
    639639        SuspendExceptionScope scope(&vm);
    640640        if (callFrame->isAnyWasmCallee()
     
    755755void Interpreter::notifyDebuggerOfExceptionToBeThrown(VM& vm, CallFrame* callFrame, Exception* exception)
    756756{
    757     Debugger* debugger = callFrame->vmEntryGlobalObject(vm)->debugger();
     757    Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger();
    758758    if (debugger && debugger->needsExceptionCallbacks() && !exception->didNotifyInspectorOfThrow()) {
    759759        // This code assumes that if the debugger is enabled then there is no inlining.
     
    13281328    VM& vm = callFrame->vm();
    13291329    auto scope = DECLARE_CATCH_SCOPE(vm);
    1330     Debugger* debugger = callFrame->vmEntryGlobalObject()->debugger();
     1330    Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger();
    13311331    if (!debugger)
    13321332        return;
  • trunk/Source/JavaScriptCore/runtime/CallData.cpp

    r221822 r235254  
    5858JSValue profiledCall(ExecState* exec, ProfilingReason reason, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args)
    5959{
    60     ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
     60    VM& vm = exec->vm();
     61    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
    6162    return call(exec, functionObject, callType, callData, thisValue, args);
    6263}
     
    6465JSValue profiledCall(ExecState* exec, ProfilingReason reason, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args, NakedPtr<Exception>& returnedException)
    6566{
    66     ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
     67    VM& vm = exec->vm();
     68    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
    6769    return call(exec, functionObject, callType, callData, thisValue, args, returnedException);
    6870}
  • trunk/Source/JavaScriptCore/runtime/Completion.cpp

    r223777 r235254  
    9999
    100100    if (!thisValue || thisValue.isUndefinedOrNull())
    101         thisValue = exec->vmEntryGlobalObject();
     101        thisValue = vm.vmEntryGlobalObject(exec);
    102102    JSObject* thisObj = jsCast<JSObject*>(thisValue.toThis(exec, NotStrictMode));
    103103    JSValue result = vm.interpreter->executeProgram(source, exec, thisObj);
     
    115115JSValue profiledEvaluate(ExecState* exec, ProfilingReason reason, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException)
    116116{
    117     ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
     117    VM& vm = exec->vm();
     118    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
    118119    return evaluate(exec, source, thisValue, returnedException);
    119120}
     
    121122JSValue evaluateWithScopeExtension(ExecState* exec, const SourceCode& source, JSObject* scopeExtensionObject, NakedPtr<Exception>& returnedException)
    122123{
    123     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     124    VM& vm = exec->vm();
     125    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    124126
    125127    if (scopeExtensionObject) {
     
    162164    RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
    163165
    164     return exec->vmEntryGlobalObject()->moduleLoader()->loadAndEvaluateModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
     166    return vm.vmEntryGlobalObject(exec)->moduleLoader()->loadAndEvaluateModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
    165167}
    166168
     
    175177    Symbol* key = createSymbolForEntryPointModule(vm);
    176178
    177     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     179    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    178180
    179181    // Insert the given source code to the ModuleLoader registry as the fetched registry entry.
     
    191193    RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
    192194
    193     return exec->vmEntryGlobalObject()->moduleLoader()->loadModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
     195    return vm.vmEntryGlobalObject(exec)->moduleLoader()->loadModule(exec, identifierToJSValue(vm, Identifier::fromString(exec, moduleName)), parameters, scriptFetcher);
    194196}
    195197
     
    204206    Symbol* key = createSymbolForEntryPointModule(vm);
    205207
    206     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     208    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    207209
    208210    // Insert the given source code to the ModuleLoader registry as the fetched registry entry.
     
    221223    RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
    222224
    223     JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     225    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    224226    return globalObject->moduleLoader()->linkAndEvaluateModule(exec, identifierToJSValue(vm, moduleKey), scriptFetcher);
    225227}
     
    232234    RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread());
    233235
    234     return exec->vmEntryGlobalObject()->moduleLoader()->requestImportModule(exec, moduleKey, parameters, scriptFetcher);
     236    return vm.vmEntryGlobalObject(exec)->moduleLoader()->requestImportModule(exec, moduleKey, parameters, scriptFetcher);
    235237}
    236238
  • trunk/Source/JavaScriptCore/runtime/ConstructData.cpp

    r232337 r235254  
    5959JSObject* profiledConstruct(ExecState* exec, ProfilingReason reason, JSValue constructorObject, ConstructType constructType, const ConstructData& constructData, const ArgList& args, JSValue newTarget)
    6060{
    61     ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason);
     61    VM& vm = exec->vm();
     62    ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
    6263    return construct(exec, constructorObject, constructType, constructData, args, newTarget);
    6364}
  • trunk/Source/JavaScriptCore/runtime/Error.cpp

    r233999 r235254  
    170170    vm.interpreter->getStackTrace(obj, *stackTrace, framesToSkip, errorConstructor->stackTraceLimit().value());
    171171    if (!stackTrace->isEmpty())
    172         ASSERT_UNUSED(exec, exec == vm.topCallFrame || exec == exec->lexicalGlobalObject()->globalExec() || exec == exec->vmEntryGlobalObject()->globalExec());
     172        ASSERT_UNUSED(exec, exec == vm.topCallFrame || exec->isGlobalExec());
    173173    return stackTrace;
    174174}
  • trunk/Source/JavaScriptCore/runtime/VM.cpp

    r235152 r235254  
    833833    }
    834834
    835     ASSERT(exec == topCallFrame || exec == exec->lexicalGlobalObject()->globalExec() || exec == exec->vmEntryGlobalObject()->globalExec());
     835    ASSERT(exec == topCallFrame || exec->isGlobalExec());
    836836
    837837    interpreter->notifyDebuggerOfExceptionToBeThrown(*this, exec, exception);
     
    12641264}
    12651265
     1266JSGlobalObject* VM::vmEntryGlobalObject(const CallFrame* callFrame) const
     1267{
     1268    if (callFrame && callFrame->isGlobalExec()) {
     1269        ASSERT(callFrame->callee().isCell() && callFrame->callee().asCell()->isObject());
     1270        ASSERT(callFrame == callFrame->lexicalGlobalObject()->globalExec());
     1271        return callFrame->lexicalGlobalObject();
     1272    }
     1273    ASSERT(entryScope);
     1274    return entryScope->globalObject();
     1275}
     1276
    12661277} // namespace JSC
  • trunk/Source/JavaScriptCore/runtime/VM.h

    r235152 r235254  
    173173struct ValueProfile;
    174174
     175typedef ExecState CallFrame;
     176
    175177struct LocalTimeOffsetCache {
    176178    LocalTimeOffsetCache()
     
    293295    unsigned id() const { return m_id; }
    294296    bool isEntered() const { return !!entryScope; }
     297
     298    // Global object in which execution began.
     299    JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject(const CallFrame*) const;
    295300
    296301private:
  • trunk/Source/WebCore/ChangeLog

    r235251 r235254  
     12018-08-23  Mark Lam  <mark.lam@apple.com>
     2
     3        Move vmEntryGlobalObject() to VM from CallFrame.
     4        https://bugs.webkit.org/show_bug.cgi?id=188900
     5        <rdar://problem/43655753>
     6
     7        Reviewed by Michael Saboff.
     8
     9        No new tests needed because this patch does not introduce new functionality.
     10
     11        * bindings/js/JSCustomXPathNSResolver.cpp:
     12        (WebCore::JSCustomXPathNSResolver::create):
     13        * bindings/js/JSDOMGlobalObject.cpp:
     14        (WebCore::callerGlobalObject):
     15        (WebCore::toJSDOMGlobalObject): Deleted.
     16        * bindings/js/JSDOMWindowBase.cpp:
     17        (WebCore::firstDOMWindow):
     18        * bridge/c/c_utility.cpp:
     19        (JSC::Bindings::convertValueToNPVariant):
     20        * bridge/objc/WebScriptObject.mm:
     21        (WebCore::addExceptionToConsole):
     22        * bridge/objc/objc_instance.mm:
     23        (ObjcInstance::moveGlobalExceptionToExecState):
     24        * bridge/objc/objc_runtime.mm:
     25        (JSC::Bindings::convertValueToObjcObject):
     26        * bridge/objc/objc_utility.mm:
     27        (JSC::Bindings::convertValueToObjcValue):
     28        * testing/Internals.cpp:
     29        (WebCore::Internals::cloneArrayBuffer):
     30
    1312018-08-23  Andy Estes  <aestes@apple.com>
    232
  • trunk/Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp

    r234586 r235254  
    5252        return Exception { TypeMismatchError };
    5353
    54     return adoptRef(*new JSCustomXPathNSResolver(state.vm(), resolverObject, asJSDOMWindow(state.vmEntryGlobalObject())));
     54    VM& vm = state.vm();
     55    return adoptRef(*new JSCustomXPathNSResolver(vm, resolverObject, asJSDOMWindow(vm.vmEntryGlobalObject(&state))));
    5556}
    5657
  • trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp

    r234846 r235254  
    305305    GetCallerGlobalObjectFunctor iter;
    306306    state.iterate(iter);
    307     return *jsCast<JSDOMGlobalObject*>(iter.globalObject() ? iter.globalObject() : state.vmEntryGlobalObject());
     307    if (iter.globalObject())
     308        return *jsCast<JSDOMGlobalObject*>(iter.globalObject());
     309
     310    VM& vm = state.vm();
     311    return *jsCast<JSDOMGlobalObject*>(vm.vmEntryGlobalObject(&state));
    308312}
    309313
  • trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp

    r234846 r235254  
    270270DOMWindow& firstDOMWindow(ExecState& state)
    271271{
    272     return asJSDOMWindow(state.vmEntryGlobalObject())->wrapped();
     272    VM& vm = state.vm();
     273    return asJSDOMWindow(vm.vmEntryGlobalObject(&state))->wrapped();
    273274}
    274275
  • trunk/Source/WebCore/bridge/c/c_utility.cpp

    r228218 r235254  
    9797            }
    9898        } else {
    99             JSGlobalObject* globalObject = exec->vmEntryGlobalObject();
     99            JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
    100100
    101101            RootObject* rootObject = findRootObject(globalObject);
  • trunk/Source/WebCore/bridge/objc/WebScriptObject.mm

    r234586 r235254  
    123123static void addExceptionToConsole(ExecState* exec, JSC::Exception* exception)
    124124{
    125     JSDOMWindow* window = asJSDOMWindow(exec->vmEntryGlobalObject());
     125    JSC::VM& vm = exec->vm();
     126    JSDOMWindow* window = asJSDOMWindow(vm.vmEntryGlobalObject(exec));
    126127    if (!window || !exception)
    127128        return;
  • trunk/Source/WebCore/bridge/objc/objc_instance.mm

    r234685 r235254  
    8989    }
    9090
    91     if (!s_exceptionEnvironment || s_exceptionEnvironment == exec->vmEntryGlobalObject()) {
    92         JSLockHolder lock(exec);
     91    if (!s_exceptionEnvironment || s_exceptionEnvironment == vm.vmEntryGlobalObject(exec)) {
     92        JSLockHolder lock(vm);
    9393        throwError(exec, scope, s_exception);
    9494    }
  • trunk/Source/WebCore/bridge/objc/objc_runtime.mm

    r234348 r235254  
    123123static id convertValueToObjcObject(ExecState* exec, JSValue value)
    124124{
    125     RefPtr<RootObject> rootObject = findRootObject(exec->vmEntryGlobalObject());
     125    VM& vm = exec->vm();
     126    RefPtr<RootObject> rootObject = findRootObject(vm.vmEntryGlobalObject(exec));
    126127    if (!rootObject)
    127128        return nil;
  • trunk/Source/WebCore/bridge/objc/objc_utility.mm

    r234348 r235254  
    8989    switch (type) {
    9090        case ObjcObjectType: {
    91             JSLockHolder lock(exec);
     91            VM& vm = exec->vm();
     92            JSLockHolder lock(vm);
    9293           
    93             JSGlobalObject *originGlobalObject = exec->vmEntryGlobalObject();
     94            JSGlobalObject *originGlobalObject = vm.vmEntryGlobalObject(exec);
    9495            RootObject* originRootObject = findRootObject(originGlobalObject);
    9596
  • trunk/Source/WebCore/testing/Internals.cpp

    r235158 r235254  
    41234123{
    41244124    JSC::VM& vm = state.vm();
    4125     JSGlobalObject* globalObject = state.vmEntryGlobalObject();
     4125    JSGlobalObject* globalObject = vm.vmEntryGlobalObject(&state);
    41264126    JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData);
    41274127    const Identifier& privateName = clientData->builtinNames().cloneArrayBufferPrivateName();
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r235251 r235254  
     12018-08-23  Mark Lam  <mark.lam@apple.com>
     2
     3        Move vmEntryGlobalObject() to VM from CallFrame.
     4        https://bugs.webkit.org/show_bug.cgi?id=188900
     5        <rdar://problem/43655753>
     6
     7        Reviewed by Michael Saboff.
     8
     9        * WebView/WebScriptDebugger.mm:
     10        (WebScriptDebugger::sourceParsed):
     11
    1122018-08-23  Andy Estes  <aestes@apple.com>
    213
  • trunk/Source/WebKitLegacy/mac/WebView/WebScriptDebugger.mm

    r212448 r235254  
    9494    int firstLine = sourceProvider->startPosition().m_line.oneBasedInt();
    9595
    96     WebFrame *webFrame = toWebFrame(exec->vmEntryGlobalObject());
     96    VM& vm = exec->vm();
     97    WebFrame *webFrame = toWebFrame(vm.vmEntryGlobalObject(exec));
    9798    WebView *webView = [webFrame webView];
    9899    WebScriptDebugDelegateImplementationCache* implementations = WebViewGetScriptDebugDelegateImplementations(webView);
Note: See TracChangeset for help on using the changeset viewer.