Changeset 235254 in webkit
- Timestamp:
- Aug 23, 2018 3:57:09 PM (6 years ago)
- Location:
- trunk/Source
- Files:
-
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/APIUtils.h
r222617 r235254 46 46 scope.clearException(); 47 47 #if ENABLE(REMOTE_INSPECTOR) 48 exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);48 scope.vm().vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception); 49 49 #endif 50 50 return ExceptionStatus::DidThrow; … … 58 58 *returnedExceptionRef = toRef(exec, exception); 59 59 #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)); 61 62 #endif 62 63 } -
trunk/Source/JavaScriptCore/API/JSBase.cpp
r221822 r235254 55 55 } 56 56 ExecState* exec = toJS(ctx); 57 JSLockHolder locker(exec); 57 VM& vm = exec->vm(); 58 JSLockHolder locker(vm); 58 59 59 60 JSObject* jsThisObject = toJS(thisObject); … … 62 63 63 64 // evaluate sets "this" to the global object if it is NULL 64 JSGlobalObject* globalObject = exec->vmEntryGlobalObject();65 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec); 65 66 auto sourceURLString = sourceURL ? sourceURL->string() : String(); 66 67 SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber())); … … 106 107 107 108 JSValue syntaxException; 108 bool isValidSyntax = checkSyntax( exec->vmEntryGlobalObject()->globalExec(), source, &syntaxException);109 bool isValidSyntax = checkSyntax(vm.vmEntryGlobalObject(exec)->globalExec(), source, &syntaxException); 109 110 110 111 if (!isValidSyntax) { … … 113 114 #if ENABLE(REMOTE_INSPECTOR) 114 115 Exception* exception = Exception::create(vm, syntaxException); 115 exec->vmEntryGlobalObject()->inspectorController().reportAPIException(exec, exception);116 vm.vmEntryGlobalObject(exec)->inspectorController().reportAPIException(exec, exception); 116 117 #endif 117 118 return false; -
trunk/Source/JavaScriptCore/API/JSContextRef.cpp
r226295 r235254 163 163 { 164 164 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)); 169 169 vm.ref(); 170 170 return ctx; … … 174 174 { 175 175 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)); 180 180 if (protectCountIsZero) 181 181 vm.heap.reportAbandonedObjectGraph(); … … 226 226 227 227 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(); 231 232 if (name.isNull()) 232 233 return 0; … … 243 244 244 245 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()); 248 250 } 249 251 … … 326 328 327 329 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(); 331 334 } 332 335 … … 339 342 340 343 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); 344 348 } 345 349 … … 353 357 354 358 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); 358 363 return globalObject->inspectorController().includesNativeCallStackWhenReportingExceptions(); 359 364 #else … … 372 377 373 378 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); 377 383 globalObject->inspectorController().setIncludesNativeCallStackWhenReportingExceptions(includesNativeCallStack); 378 384 #else … … 392 398 393 399 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(); 397 404 #else 398 405 UNUSED_PARAM(ctx); … … 410 417 411 418 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); 415 423 #else 416 424 UNUSED_PARAM(ctx); … … 429 437 430 438 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 675 675 { 676 676 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); 679 680 } 680 681 #endif -
trunk/Source/JavaScriptCore/API/glib/JSCClass.cpp
r234025 r235254 129 129 { 130 130 ASSERT(isWrappedObject(jsObject)); 131 JSC::ExecState* exec = jsObject->globalObject()->globalExec(); 131 JSC::JSGlobalObject* globalObject = jsObject->globalObject(); 132 JSC::ExecState* exec = globalObject->globalExec(); 132 133 if (jsObject->isGlobalObject()) { 133 if (auto* globalScopeExtension = exec->vmEntryGlobalObject()->globalScopeExtension()) 134 JSC::VM& vm = globalObject->vm(); 135 if (auto* globalScopeExtension = vm.vmEntryGlobalObject(exec)->globalScopeExtension()) 134 136 exec = JSC::JSScope::objectAtScope(globalScopeExtension)->globalObject()->globalExec(); 135 137 } -
trunk/Source/JavaScriptCore/API/glib/JSCContext.cpp
r235024 r235254 881 881 instance ? jscClassCreateContextWithJSWrapper(objectClass, instance) : JSGlobalContextCreateInGroup(jscVirtualMachineGetContextGroup(context->priv->vm.get()), nullptr)); 882 882 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())))); 885 886 JSValueRef exception = nullptr; 886 887 JSValueRef result = evaluateScriptInContext(objectContext.get(), String::fromUTF8(code, length < 0 ? strlen(code) : length), uri, lineNumber, &exception); -
trunk/Source/JavaScriptCore/ChangeLog
r235251 r235254 1 2018-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 1 75 2018-08-23 Andy Estes <aestes@apple.com> 2 76 -
trunk/Source/JavaScriptCore/debugger/Debugger.cpp
r233236 r235254 719 719 TemporaryPausedState pausedState(*this); 720 720 721 JSGlobalObject* vmEntryGlobalObject = callFrame->vmEntryGlobalObject(vm);721 JSGlobalObject* vmEntryGlobalObject = vm.vmEntryGlobalObject(callFrame); 722 722 723 723 if (didHitBreakpoint) { -
trunk/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp
r233403 r235254 119 119 if (!isValid()) 120 120 return nullptr; 121 return m_validMachineFrame->vmEntryGlobalObject(); 121 VM& vm = m_validMachineFrame->vm(); 122 return vm.vmEntryGlobalObject(m_validMachineFrame); 122 123 } 123 124 … … 253 254 } 254 255 255 JSGlobalObject* globalObject = callFrame->vmEntryGlobalObject();256 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(callFrame); 256 257 if (scopeExtensionObject) { 257 258 JSScope* ignoredPreviousScope = globalObject->globalScope(); -
trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp
r233122 r235254 46 46 globalExec->setArgumentCountIncludingThis(0); 47 47 globalExec->setCallee(globalCallee); 48 ASSERT(globalExec->isGlobalExec()); 48 49 } 49 50 … … 186 187 ASSERT(codeBlock); 187 188 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, the200 // dynamic global object must be set since code is running201 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, the213 // dynamic global object must be set since code is running214 ASSERT(vm.entryScope);215 return vm.entryScope->globalObject();216 189 } 217 190 -
trunk/Source/JavaScriptCore/interpreter/CallFrame.h
r223738 r235254 2 2 * Copyright (C) 1999-2001 Harri Porten (porten@kde.org) 3 3 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 4 * Copyright (C) 2003-201 7Apple Inc. All rights reserved.4 * Copyright (C) 2003-2018 Apple Inc. All rights reserved. 5 5 * 6 6 * This library is free software; you can redistribute it and/or … … 116 116 return this[scopeRegisterOffset].Register::scope(); 117 117 } 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&);123 118 124 119 JSGlobalObject* wasmAwareLexicalGlobalObject(VM&); … … 127 122 128 123 // 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. 130 125 JSGlobalObject* lexicalGlobalObject() const; 131 126 … … 256 251 static int offsetFor(size_t argumentCountIncludingThis) { return argumentCountIncludingThis + CallFrameSlot::thisArgument - 1; } 257 252 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 } 259 258 260 259 void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[CallFrameSlot::argumentCount].payload() = count; } -
trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp
r233630 r235254 636 636 { 637 637 auto catchScope = DECLARE_CATCH_SCOPE(vm); 638 if (Debugger* debugger = callFrame->vmEntryGlobalObject(vm)->debugger()) {638 if (Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger()) { 639 639 SuspendExceptionScope scope(&vm); 640 640 if (callFrame->isAnyWasmCallee() … … 755 755 void Interpreter::notifyDebuggerOfExceptionToBeThrown(VM& vm, CallFrame* callFrame, Exception* exception) 756 756 { 757 Debugger* debugger = callFrame->vmEntryGlobalObject(vm)->debugger();757 Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger(); 758 758 if (debugger && debugger->needsExceptionCallbacks() && !exception->didNotifyInspectorOfThrow()) { 759 759 // This code assumes that if the debugger is enabled then there is no inlining. … … 1328 1328 VM& vm = callFrame->vm(); 1329 1329 auto scope = DECLARE_CATCH_SCOPE(vm); 1330 Debugger* debugger = callFrame->vmEntryGlobalObject()->debugger();1330 Debugger* debugger = vm.vmEntryGlobalObject(callFrame)->debugger(); 1331 1331 if (!debugger) 1332 1332 return; -
trunk/Source/JavaScriptCore/runtime/CallData.cpp
r221822 r235254 58 58 JSValue profiledCall(ExecState* exec, ProfilingReason reason, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args) 59 59 { 60 ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason); 60 VM& vm = exec->vm(); 61 ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason); 61 62 return call(exec, functionObject, callType, callData, thisValue, args); 62 63 } … … 64 65 JSValue profiledCall(ExecState* exec, ProfilingReason reason, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args, NakedPtr<Exception>& returnedException) 65 66 { 66 ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason); 67 VM& vm = exec->vm(); 68 ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason); 67 69 return call(exec, functionObject, callType, callData, thisValue, args, returnedException); 68 70 } -
trunk/Source/JavaScriptCore/runtime/Completion.cpp
r223777 r235254 99 99 100 100 if (!thisValue || thisValue.isUndefinedOrNull()) 101 thisValue = exec->vmEntryGlobalObject();101 thisValue = vm.vmEntryGlobalObject(exec); 102 102 JSObject* thisObj = jsCast<JSObject*>(thisValue.toThis(exec, NotStrictMode)); 103 103 JSValue result = vm.interpreter->executeProgram(source, exec, thisObj); … … 115 115 JSValue profiledEvaluate(ExecState* exec, ProfilingReason reason, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException) 116 116 { 117 ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason); 117 VM& vm = exec->vm(); 118 ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason); 118 119 return evaluate(exec, source, thisValue, returnedException); 119 120 } … … 121 122 JSValue evaluateWithScopeExtension(ExecState* exec, const SourceCode& source, JSObject* scopeExtensionObject, NakedPtr<Exception>& returnedException) 122 123 { 123 JSGlobalObject* globalObject = exec->vmEntryGlobalObject(); 124 VM& vm = exec->vm(); 125 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec); 124 126 125 127 if (scopeExtensionObject) { … … 162 164 RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread()); 163 165 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); 165 167 } 166 168 … … 175 177 Symbol* key = createSymbolForEntryPointModule(vm); 176 178 177 JSGlobalObject* globalObject = exec->vmEntryGlobalObject();179 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec); 178 180 179 181 // Insert the given source code to the ModuleLoader registry as the fetched registry entry. … … 191 193 RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread()); 192 194 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); 194 196 } 195 197 … … 204 206 Symbol* key = createSymbolForEntryPointModule(vm); 205 207 206 JSGlobalObject* globalObject = exec->vmEntryGlobalObject();208 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec); 207 209 208 210 // Insert the given source code to the ModuleLoader registry as the fetched registry entry. … … 221 223 RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread()); 222 224 223 JSGlobalObject* globalObject = exec->vmEntryGlobalObject();225 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec); 224 226 return globalObject->moduleLoader()->linkAndEvaluateModule(exec, identifierToJSValue(vm, moduleKey), scriptFetcher); 225 227 } … … 232 234 RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread()); 233 235 234 return exec->vmEntryGlobalObject()->moduleLoader()->requestImportModule(exec, moduleKey, parameters, scriptFetcher);236 return vm.vmEntryGlobalObject(exec)->moduleLoader()->requestImportModule(exec, moduleKey, parameters, scriptFetcher); 235 237 } 236 238 -
trunk/Source/JavaScriptCore/runtime/ConstructData.cpp
r232337 r235254 59 59 JSObject* profiledConstruct(ExecState* exec, ProfilingReason reason, JSValue constructorObject, ConstructType constructType, const ConstructData& constructData, const ArgList& args, JSValue newTarget) 60 60 { 61 ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason); 61 VM& vm = exec->vm(); 62 ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason); 62 63 return construct(exec, constructorObject, constructType, constructData, args, newTarget); 63 64 } -
trunk/Source/JavaScriptCore/runtime/Error.cpp
r233999 r235254 170 170 vm.interpreter->getStackTrace(obj, *stackTrace, framesToSkip, errorConstructor->stackTraceLimit().value()); 171 171 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()); 173 173 return stackTrace; 174 174 } -
trunk/Source/JavaScriptCore/runtime/VM.cpp
r235152 r235254 833 833 } 834 834 835 ASSERT(exec == topCallFrame || exec == exec->lexicalGlobalObject()->globalExec() || exec == exec->vmEntryGlobalObject()->globalExec());835 ASSERT(exec == topCallFrame || exec->isGlobalExec()); 836 836 837 837 interpreter->notifyDebuggerOfExceptionToBeThrown(*this, exec, exception); … … 1264 1264 } 1265 1265 1266 JSGlobalObject* 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 1266 1277 } // namespace JSC -
trunk/Source/JavaScriptCore/runtime/VM.h
r235152 r235254 173 173 struct ValueProfile; 174 174 175 typedef ExecState CallFrame; 176 175 177 struct LocalTimeOffsetCache { 176 178 LocalTimeOffsetCache() … … 293 295 unsigned id() const { return m_id; } 294 296 bool isEntered() const { return !!entryScope; } 297 298 // Global object in which execution began. 299 JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject(const CallFrame*) const; 295 300 296 301 private: -
trunk/Source/WebCore/ChangeLog
r235251 r235254 1 2018-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 1 31 2018-08-23 Andy Estes <aestes@apple.com> 2 32 -
trunk/Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp
r234586 r235254 52 52 return Exception { TypeMismatchError }; 53 53 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)))); 55 56 } 56 57 -
trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp
r234846 r235254 305 305 GetCallerGlobalObjectFunctor iter; 306 306 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)); 308 312 } 309 313 -
trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp
r234846 r235254 270 270 DOMWindow& firstDOMWindow(ExecState& state) 271 271 { 272 return asJSDOMWindow(state.vmEntryGlobalObject())->wrapped(); 272 VM& vm = state.vm(); 273 return asJSDOMWindow(vm.vmEntryGlobalObject(&state))->wrapped(); 273 274 } 274 275 -
trunk/Source/WebCore/bridge/c/c_utility.cpp
r228218 r235254 97 97 } 98 98 } else { 99 JSGlobalObject* globalObject = exec->vmEntryGlobalObject();99 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec); 100 100 101 101 RootObject* rootObject = findRootObject(globalObject); -
trunk/Source/WebCore/bridge/objc/WebScriptObject.mm
r234586 r235254 123 123 static void addExceptionToConsole(ExecState* exec, JSC::Exception* exception) 124 124 { 125 JSDOMWindow* window = asJSDOMWindow(exec->vmEntryGlobalObject()); 125 JSC::VM& vm = exec->vm(); 126 JSDOMWindow* window = asJSDOMWindow(vm.vmEntryGlobalObject(exec)); 126 127 if (!window || !exception) 127 128 return; -
trunk/Source/WebCore/bridge/objc/objc_instance.mm
r234685 r235254 89 89 } 90 90 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); 93 93 throwError(exec, scope, s_exception); 94 94 } -
trunk/Source/WebCore/bridge/objc/objc_runtime.mm
r234348 r235254 123 123 static id convertValueToObjcObject(ExecState* exec, JSValue value) 124 124 { 125 RefPtr<RootObject> rootObject = findRootObject(exec->vmEntryGlobalObject()); 125 VM& vm = exec->vm(); 126 RefPtr<RootObject> rootObject = findRootObject(vm.vmEntryGlobalObject(exec)); 126 127 if (!rootObject) 127 128 return nil; -
trunk/Source/WebCore/bridge/objc/objc_utility.mm
r234348 r235254 89 89 switch (type) { 90 90 case ObjcObjectType: { 91 JSLockHolder lock(exec); 91 VM& vm = exec->vm(); 92 JSLockHolder lock(vm); 92 93 93 JSGlobalObject *originGlobalObject = exec->vmEntryGlobalObject();94 JSGlobalObject *originGlobalObject = vm.vmEntryGlobalObject(exec); 94 95 RootObject* originRootObject = findRootObject(originGlobalObject); 95 96 -
trunk/Source/WebCore/testing/Internals.cpp
r235158 r235254 4123 4123 { 4124 4124 JSC::VM& vm = state.vm(); 4125 JSGlobalObject* globalObject = state.vmEntryGlobalObject();4125 JSGlobalObject* globalObject = vm.vmEntryGlobalObject(&state); 4126 4126 JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); 4127 4127 const Identifier& privateName = clientData->builtinNames().cloneArrayBufferPrivateName(); -
trunk/Source/WebKitLegacy/mac/ChangeLog
r235251 r235254 1 2018-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 1 12 2018-08-23 Andy Estes <aestes@apple.com> 2 13 -
trunk/Source/WebKitLegacy/mac/WebView/WebScriptDebugger.mm
r212448 r235254 94 94 int firstLine = sourceProvider->startPosition().m_line.oneBasedInt(); 95 95 96 WebFrame *webFrame = toWebFrame(exec->vmEntryGlobalObject()); 96 VM& vm = exec->vm(); 97 WebFrame *webFrame = toWebFrame(vm.vmEntryGlobalObject(exec)); 97 98 WebView *webView = [webFrame webView]; 98 99 WebScriptDebugDelegateImplementationCache* implementations = WebViewGetScriptDebugDelegateImplementations(webView);
Note: See TracChangeset
for help on using the changeset viewer.