Ignore:
Timestamp:
Aug 23, 2018, 3:57:09 PM (7 years ago)
Author:
[email protected]
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):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.