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