Changeset 251691 in webkit
- Timestamp:
- Oct 28, 2019 6:37:12 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 deleted
- 38 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r251689 r251691 1 2019-10-28 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Remove JSPromiseDeferred 4 https://bugs.webkit.org/show_bug.cgi?id=203400 5 6 Reviewed by Keith Miller. 7 8 * js/dom/promise-stack-overflow-expected.txt: Added. 9 * js/dom/promise-stack-overflow.html: Added. 10 1 11 2019-10-28 Simon Fraser <simon.fraser@apple.com> 2 12 -
trunk/Source/JavaScriptCore/API/JSAPIGlobalObject.mm
r251584 r251691 37 37 #import "JSContextInternal.h" 38 38 #import "JSInternalPromise.h" 39 #import "JSInternalPromiseDeferred.h"40 39 #import "JSModuleLoader.h" 41 40 #import "JSNativeStdFunction.h" 42 #import "JSPromise Deferred.h"41 #import "JSPromise.h" 43 42 #import "JSScriptInternal.h" 44 43 #import "JSSourceCode.h" … … 130 129 auto reject = [&] (JSValue exception) -> JSInternalPromise* { 131 130 scope.clearException(); 132 auto* promise = JSInternalPromiseDeferred::tryCreate(globalObject); 133 scope.clearException(); 134 return promise->reject(globalObject, exception); 131 auto* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 132 // FIXME: We could have error since any JS call can throw stack-overflow errors. 133 // https://bugs.webkit.org/show_bug.cgi?id=203402 134 promise->reject(globalObject, exception); 135 scope.clearException(); 136 return promise; 135 137 }; 136 138 … … 165 167 JSContext *context = [JSContext contextWithJSGlobalContextRef:toGlobalRef(globalObject)]; 166 168 167 JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 168 RETURN_IF_EXCEPTION(scope, nullptr); 169 JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 169 170 170 171 Identifier moduleKey = key.toPropertyKey(globalObject); … … 172 173 JSValue exception = scope.exception(); 173 174 scope.clearException(); 174 return deferred->reject(globalObject, exception); 175 } 176 177 if (UNLIKELY(![context moduleLoaderDelegate])) 178 return deferred->reject(globalObject, createError(globalObject, "No module loader provided.")); 179 180 auto deferredPromise = Strong<JSInternalPromiseDeferred>(vm, deferred); 175 promise->reject(globalObject, exception); 176 scope.clearException(); 177 return promise; 178 } 179 180 if (UNLIKELY(![context moduleLoaderDelegate])) { 181 promise->reject(globalObject, createError(globalObject, "No module loader provided.")); 182 return promise; 183 } 184 185 auto strongPromise = Strong<JSInternalPromise>(vm, promise); 181 186 auto* resolve = JSNativeStdFunction::create(vm, globalObject, 1, "resolve", [=] (JSGlobalObject* globalObject, CallFrame* callFrame) { 182 187 // This captures the globalObject but that's ok because our structure keeps it alive anyway. … … 188 193 189 194 auto rejectPromise = [&] (String message) { 190 args.append(createTypeError(globalObject, message)); 191 call(globalObject, deferredPromise->JSPromiseDeferred::reject(), args, "This should never be seen..."); 195 strongPromise.get()->reject(globalObject, createTypeError(globalObject, message)); 192 196 return encodedJSUndefined(); 193 197 }; … … 207 211 return rejectPromise(makeString("The same JSScript was provided for two different identifiers, previously: ", oldModuleKey, " and now: ", moduleKey.string())); 208 212 209 args.append(source); 210 call(globalObject, deferredPromise->JSPromiseDeferred::resolve(), args, "This should never be seen..."); 213 strongPromise.get()->resolve(globalObject, source); 211 214 return encodedJSUndefined(); 212 215 }); 213 216 214 217 auto* reject = JSNativeStdFunction::create(vm, globalObject, 1, "reject", [=] (JSGlobalObject*, CallFrame* callFrame) { 215 MarkedArgumentBuffer args; 216 args.append(callFrame->argument(0)); 217 218 call(globalObject, deferredPromise->JSPromiseDeferred::reject(), args, "This should never be seen..."); 218 strongPromise.get()->reject(globalObject, callFrame->argument(0)); 219 219 return encodedJSUndefined(); 220 220 }); … … 222 222 [[context moduleLoaderDelegate] context:context fetchModuleForIdentifier:[::JSValue valueWithJSValueRef:toRef(globalObject, key) inContext:context] withResolveHandler:[::JSValue valueWithJSValueRef:toRef(globalObject, resolve) inContext:context] andRejectHandler:[::JSValue valueWithJSValueRef:toRef(globalObject, reject) inContext:context]]; 223 223 if (context.exception) { 224 deferred->reject(globalObject, toJS(globalObject, [context.exception JSValueRef]));224 promise->reject(globalObject, toJS(globalObject, [context.exception JSValueRef])); 225 225 context.exception = nil; 226 226 } 227 return deferred->promise();227 return promise; 228 228 } 229 229 … … 278 278 JSInternalPromise* promise = importModule(this, key, jsUndefined(), jsUndefined()); 279 279 RETURN_IF_EXCEPTION(scope, { }); 280 auto result = JSPromiseDeferred::tryCreate(this); 280 auto* result = JSPromise::create(vm, this->promiseStructure()); 281 result->resolve(this, promise); 281 282 RETURN_IF_EXCEPTION(scope, { }); 282 result->resolve(this, promise); 283 return result->promise(); 283 return result; 284 284 } 285 285 -
trunk/Source/JavaScriptCore/API/JSObjectRef.cpp
r251425 r251691 48 48 #include "JSObject.h" 49 49 #include "JSPromise.h" 50 #include "JSPromiseDeferred.h"51 50 #include "JSRetainPtr.h" 52 51 #include "JSString.h" … … 290 289 auto scope = DECLARE_CATCH_SCOPE(vm); 291 290 292 JSPromise Deferred::DeferredData data = JSPromiseDeferred::createDeferredData(globalObject, globalObject->promiseConstructor());291 JSPromise::DeferredData data = JSPromise::createDeferredData(globalObject, globalObject->promiseConstructor()); 293 292 if (handleExceptionIfNeeded(scope, ctx, exception) == ExceptionStatus::DidThrow) 294 293 return nullptr; -
trunk/Source/JavaScriptCore/CMakeLists.txt
r251584 r251691 875 875 runtime/JSInternalFieldObjectImpl.h 876 876 runtime/JSInternalPromise.h 877 runtime/JSInternalPromiseDeferred.h878 877 runtime/JSMicrotask.h 879 878 runtime/JSLock.h … … 889 888 runtime/JSPromise.h 890 889 runtime/JSPromiseConstructor.h 891 runtime/JSPromiseDeferred.h892 890 runtime/JSPropertyNameEnumerator.h 893 891 runtime/JSProxy.h … … 932 930 runtime/PrivateName.h 933 931 runtime/ProgramExecutable.h 934 runtime/Promise DeferredTimer.h932 runtime/PromiseTimer.h 935 933 runtime/PropertyDescriptor.h 936 934 runtime/PropertyMapHashTable.h -
trunk/Source/JavaScriptCore/ChangeLog
r251690 r251691 1 2019-10-28 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Remove JSPromiseDeferred 4 https://bugs.webkit.org/show_bug.cgi?id=203400 5 6 Reviewed by Keith Miller. 7 8 This patch optimizes the existing Promise usage in C++. We remove JSPromiseDeferred and JSInternalPromiseDeferred, use JSPromise and JSInternalPromise directly. 9 JSC now offers first `resolve` and `reject` operations to `JSPromise` without separating `resolve` and `reject` function from `JSPromise`. Then, we do not need 10 to have a tuple of these functions and promise, and we can just use `JSPromise::resolve` and `JSPromise::reject`. This removes unnecessary function allocations 11 and cell allocation for JSPromiseDeferred and makes API simple. 12 13 * API/JSAPIGlobalObject.mm: 14 (JSC::JSAPIGlobalObject::moduleLoaderImportModule): 15 (JSC::JSAPIGlobalObject::moduleLoaderFetch): 16 (JSC::JSAPIGlobalObject::loadAndEvaluateJSScriptModule): 17 * API/JSObjectRef.cpp: 18 (JSObjectMakeDeferredPromise): 19 * CMakeLists.txt: 20 * JavaScriptCore.xcodeproj/project.pbxproj: 21 * Sources.txt: 22 * jsc.cpp: 23 (GlobalObject::moduleLoaderImportModule): 24 (GlobalObject::moduleLoaderFetch): 25 (runJSC): 26 * runtime/Completion.cpp: 27 (JSC::rejectPromise): 28 * runtime/JSGlobalObject.cpp: 29 (JSC::JSGlobalObject::init): 30 (JSC::JSGlobalObject::visitChildren): 31 * runtime/JSGlobalObject.h: 32 (JSC::JSGlobalObject::newPromiseCapabilityFunction const): 33 (JSC::JSGlobalObject::resolvePromiseFunction const): 34 (JSC::JSGlobalObject::rejectPromiseFunction const): 35 (JSC::JSGlobalObject::numberProtoToStringFunction const): 36 * runtime/JSGlobalObjectFunctions.cpp: 37 (JSC::globalFuncImportModule): 38 * runtime/JSInternalPromise.h: 39 * runtime/JSInternalPromiseDeferred.cpp: Removed. 40 * runtime/JSInternalPromiseDeferred.h: Removed. 41 * runtime/JSModuleLoader.cpp: 42 (JSC::JSModuleLoader::importModule): 43 (JSC::JSModuleLoader::resolve): 44 (JSC::JSModuleLoader::fetch): 45 (JSC::moduleLoaderParseModule): 46 * runtime/JSPromise.cpp: 47 (JSC::JSPromise::flags const): 48 (JSC::JSPromise::isHandled const): 49 (JSC::JSPromise::createDeferredData): 50 (JSC::JSPromise::resolvedPromise): 51 (JSC::callFunction): 52 (JSC::JSPromise::resolve): 53 (JSC::JSPromise::reject): 54 * runtime/JSPromise.h: 55 * runtime/JSPromiseDeferred.cpp: Removed. 56 * runtime/JSPromiseDeferred.h: Removed. 57 * runtime/PromiseTimer.cpp: Renamed from Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp. 58 (JSC::PromiseTimer::PromiseTimer): 59 (JSC::PromiseTimer::doWork): 60 (JSC::PromiseTimer::runRunLoop): 61 (JSC::PromiseTimer::addPendingPromise): 62 (JSC::PromiseTimer::hasPendingPromise): 63 (JSC::PromiseTimer::hasDependancyInPendingPromise): 64 (JSC::PromiseTimer::cancelPendingPromise): 65 (JSC::PromiseTimer::scheduleWorkSoon): 66 * runtime/PromiseTimer.h: Renamed from Source/JavaScriptCore/runtime/PromiseDeferredTimer.h. 67 (JSC::PromiseTimer::create): 68 * runtime/StringRecursionChecker.h: 69 * runtime/VM.cpp: 70 (JSC::VM::VM): 71 (JSC::VM::~VM): 72 * runtime/VM.h: 73 * wasm/js/JSWebAssembly.cpp: 74 (JSC::reject): 75 (JSC::webAssemblyModuleValidateAsyncInternal): 76 (JSC::webAssemblyCompileFunc): 77 (JSC::resolve): 78 (JSC::JSWebAssembly::webAssemblyModuleValidateAsync): 79 (JSC::instantiate): 80 (JSC::compileAndInstantiate): 81 (JSC::JSWebAssembly::instantiate): 82 (JSC::webAssemblyModuleInstantinateAsyncInternal): 83 (JSC::JSWebAssembly::webAssemblyModuleInstantinateAsync): 84 (JSC::webAssemblyInstantiateFunc): 85 (JSC::webAssemblyCompileStreamingInternal): 86 (JSC::webAssemblyInstantiateStreamingInternal): 87 * wasm/js/JSWebAssembly.h: 88 * wasm/js/JSWebAssemblyCodeBlock.h: 89 1 90 2019-10-28 Adrian Perez de Castro <aperez@igalia.com> 2 91 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r251584 r251691 933 933 5341FC721DAC343C00E7E4D7 /* B3WasmBoundsCheckValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5341FC711DAC343C00E7E4D7 /* B3WasmBoundsCheckValue.h */; }; 934 934 534638711E70CF3D00F12AC1 /* JSRunLoopTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 534638701E70CF3D00F12AC1 /* JSRunLoopTimer.h */; settings = {ATTRIBUTES = (Private, ); }; }; 935 534638751E70DDEC00F12AC1 /* Promise DeferredTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 534638741E70DDEC00F12AC1 /* PromiseDeferredTimer.h */; settings = {ATTRIBUTES = (Private, ); }; };935 534638751E70DDEC00F12AC1 /* PromiseTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 534638741E70DDEC00F12AC1 /* PromiseTimer.h */; settings = {ATTRIBUTES = (Private, ); }; }; 936 936 53486BB71C1795C300F6F3AF /* JSTypedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 53486BB61C1795C300F6F3AF /* JSTypedArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; 937 937 534902851C7276B70012BCB8 /* TypedArrayCTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 534902821C7242C80012BCB8 /* TypedArrayCTest.cpp */; }; … … 1219 1219 7A9774A8206B82E4008D03D0 /* JSWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A9774A7206B82C9008D03D0 /* JSWeakValue.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1220 1220 7BC547D31B6959A100959B58 /* WasmFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BC547D21B69599B00959B58 /* WasmFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1221 7C008CDB187124BB00955C24 /* JSPromiseDeferred.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CD9187124BB00955C24 /* JSPromiseDeferred.h */; settings = {ATTRIBUTES = (Private, ); }; };1222 1221 7C008CE7187631B600955C24 /* Microtask.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CE5187631B600955C24 /* Microtask.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1223 1222 7C184E1B17BEDBD3007CB63A /* JSPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C184E1917BEDBD3007CB63A /* JSPromise.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1799 1798 E33F50791B84225700413856 /* JSInternalPromiseConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F50771B84225700413856 /* JSInternalPromiseConstructor.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1800 1799 E33F50811B8429A400413856 /* JSInternalPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F507F1B8429A400413856 /* JSInternalPromise.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1801 E33F50851B8437A000413856 /* JSInternalPromiseDeferred.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F50831B8437A000413856 /* JSInternalPromiseDeferred.h */; settings = {ATTRIBUTES = (Private, ); }; };1802 1800 E33F50871B8449EF00413856 /* JSInternalPromiseConstructor.lut.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F50861B8449EF00413856 /* JSInternalPromiseConstructor.lut.h */; }; 1803 1801 E3400EC122A1CC7B009DED54 /* FunctionExecutableInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E3400EC022A1CC78009DED54 /* FunctionExecutableInlines.h */; }; … … 3589 3587 534638701E70CF3D00F12AC1 /* JSRunLoopTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSRunLoopTimer.h; sourceTree = "<group>"; }; 3590 3588 534638721E70D01500F12AC1 /* JSRunLoopTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRunLoopTimer.cpp; sourceTree = "<group>"; }; 3591 534638741E70DDEC00F12AC1 /* Promise DeferredTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PromiseDeferredTimer.h; sourceTree = "<group>"; };3592 534638761E71E06E00F12AC1 /* Promise DeferredTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PromiseDeferredTimer.cpp; sourceTree = "<group>"; };3589 534638741E70DDEC00F12AC1 /* PromiseTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PromiseTimer.h; sourceTree = "<group>"; }; 3590 534638761E71E06E00F12AC1 /* PromiseTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PromiseTimer.cpp; sourceTree = "<group>"; }; 3593 3591 53486BB61C1795C300F6F3AF /* JSTypedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypedArray.h; sourceTree = "<group>"; }; 3594 3592 53486BBA1C18E84500F6F3AF /* JSTypedArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTypedArray.cpp; sourceTree = "<group>"; }; … … 4011 4009 7A9774A7206B82C9008D03D0 /* JSWeakValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWeakValue.h; sourceTree = "<group>"; }; 4012 4010 7BC547D21B69599B00959B58 /* WasmFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmFormat.h; sourceTree = "<group>"; }; 4013 7C008CD8187124BB00955C24 /* JSPromiseDeferred.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPromiseDeferred.cpp; sourceTree = "<group>"; };4014 7C008CD9187124BB00955C24 /* JSPromiseDeferred.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPromiseDeferred.h; sourceTree = "<group>"; };4015 4011 7C008CE5187631B600955C24 /* Microtask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Microtask.h; sourceTree = "<group>"; }; 4016 4012 7C184E1817BEDBD3007CB63A /* JSPromise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPromise.cpp; sourceTree = "<group>"; }; … … 4903 4899 E33F507E1B8429A400413856 /* JSInternalPromise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSInternalPromise.cpp; sourceTree = "<group>"; }; 4904 4900 E33F507F1B8429A400413856 /* JSInternalPromise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInternalPromise.h; sourceTree = "<group>"; }; 4905 E33F50821B8437A000413856 /* JSInternalPromiseDeferred.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSInternalPromiseDeferred.cpp; sourceTree = "<group>"; };4906 E33F50831B8437A000413856 /* JSInternalPromiseDeferred.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInternalPromiseDeferred.h; sourceTree = "<group>"; };4907 4901 E33F50861B8449EF00413856 /* JSInternalPromiseConstructor.lut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInternalPromiseConstructor.lut.h; sourceTree = "<group>"; }; 4908 4902 E33F50881B844A1A00413856 /* InternalPromiseConstructor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = InternalPromiseConstructor.js; sourceTree = "<group>"; }; … … 7089 7083 14788EE521501B2900A561C8 /* GetPutInfo.cpp */, 7090 7084 796465681B952FF0003059EE /* GetPutInfo.h */, 7091 FE1D6D6E236258FE007A5C26 /* GetVM.h */,7092 7085 BC02E9B80E184545000F9297 /* GetterSetter.cpp */, 7093 7086 BC337BDE0E1AF0B80076918A /* GetterSetter.h */, 7087 FE1D6D6E236258FE007A5C26 /* GetVM.h */, 7094 7088 E355D38E2244686C008F1AD6 /* GlobalExecutable.cpp */, 7095 7089 E355D38D2244686B008F1AD6 /* GlobalExecutable.h */, … … 7238 7232 E33F50761B84225700413856 /* JSInternalPromiseConstructor.cpp */, 7239 7233 E33F50771B84225700413856 /* JSInternalPromiseConstructor.h */, 7240 E33F50821B8437A000413856 /* JSInternalPromiseDeferred.cpp */,7241 E33F50831B8437A000413856 /* JSInternalPromiseDeferred.h */,7242 7234 E33F50721B8421C000413856 /* JSInternalPromisePrototype.cpp */, 7243 7235 E33F50731B8421C000413856 /* JSInternalPromisePrototype.h */, … … 7273 7265 7C184E2017BEE240007CB63A /* JSPromiseConstructor.cpp */, 7274 7266 7C184E2117BEE240007CB63A /* JSPromiseConstructor.h */, 7275 7C008CD8187124BB00955C24 /* JSPromiseDeferred.cpp */,7276 7C008CD9187124BB00955C24 /* JSPromiseDeferred.h */,7277 7267 7C184E1C17BEE22E007CB63A /* JSPromisePrototype.cpp */, 7278 7268 7C184E1D17BEE22E007CB63A /* JSPromisePrototype.h */, … … 7406 7396 147341DF1DC2CE9600AA29BA /* ProgramExecutable.cpp */, 7407 7397 147341D31DC02E6D00AA29BA /* ProgramExecutable.h */, 7408 534638761E71E06E00F12AC1 /* Promise DeferredTimer.cpp */,7409 534638741E70DDEC00F12AC1 /* Promise DeferredTimer.h */,7398 534638761E71E06E00F12AC1 /* PromiseTimer.cpp */, 7399 534638741E70DDEC00F12AC1 /* PromiseTimer.h */, 7410 7400 A7FB60A3103F7DC20017A286 /* PropertyDescriptor.cpp */, 7411 7401 A7FB604B103F5EAB0017A286 /* PropertyDescriptor.h */, … … 8851 8841 BC18C3E70E16F5CD00B34460 /* ArrayPrototype.h in Headers */, 8852 8842 0FB7F39615ED8E4600F167B2 /* ArrayStorage.h in Headers */, 8843 FE1D6D7123625AB1007A5C26 /* ArrayStorageInlines.h in Headers */, 8853 8844 9688CB150ED12B4E001D649F /* AssemblerBuffer.h in Headers */, 8854 8845 86D3B2C510156BDE002865E7 /* AssemblerBufferWithConstantPool.h in Headers */, … … 8884 8875 DCFDFBD91D1F5D9B00FE3D72 /* B3BottomProvider.h in Headers */, 8885 8876 0F6B8AE31C4EFE1700969052 /* B3BreakCriticalEdges.h in Headers */, 8886 FE1D6D752362649F007A5C26 /* ProtoCallFrameInlines.h in Headers */,8887 8877 DC9A0C201D2D9CB30085124E /* B3CaseCollection.h in Headers */, 8888 8878 DC9A0C1F1D2D9CB10085124E /* B3CaseCollectionInlines.h in Headers */, … … 8928 8918 4319DA041C1BE40D001D260B /* B3LowerMacrosAfterOptimizations.h in Headers */, 8929 8919 0FEC851E1BDACDAC0080FF74 /* B3LowerToAir.h in Headers */, 8930 FE1D6D6D2362544B007A5C26 /* RegisterInlines.h in Headers */,8931 8920 43AB26C61C1A535900D82AE6 /* B3MathExtras.h in Headers */, 8932 8921 0FEC85201BDACDAC0080FF74 /* B3MemoryValue.h in Headers */, … … 9472 9461 7964656A1B952FF0003059EE /* GetPutInfo.h in Headers */, 9473 9462 534E03581E53BF2F00213F64 /* GetterSetterAccessCase.h in Headers */, 9463 FE1D6D6F236258FE007A5C26 /* GetVM.h in Headers */, 9474 9464 0FEC3C5B1F33A48900F59B6C /* GigacageAlignedMemoryAllocator.h in Headers */, 9475 9465 14AD910E1DCA92940014F9FE /* GlobalCodeBlock.h in Headers */, … … 9493 9483 C2DA778318E259990066FCB6 /* HeapInlines.h in Headers */, 9494 9484 2AD8932B17E3868F00668276 /* HeapIterationScope.h in Headers */, 9495 FE1D6D7123625AB1007A5C26 /* ArrayStorageInlines.h in Headers */,9496 9485 A5339EC91BB4B4600054F005 /* HeapObserver.h in Headers */, 9497 9486 A5398FAB1C750DA40060A963 /* HeapProfiler.h in Headers */, … … 9714 9703 E33F50791B84225700413856 /* JSInternalPromiseConstructor.h in Headers */, 9715 9704 E33F50871B8449EF00413856 /* JSInternalPromiseConstructor.lut.h in Headers */, 9716 E33F50851B8437A000413856 /* JSInternalPromiseDeferred.h in Headers */,9717 9705 E33F50751B8421C000413856 /* JSInternalPromisePrototype.h in Headers */, 9718 9706 A503FA1E188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h in Headers */, … … 9742 9730 7C184E2317BEE240007CB63A /* JSPromiseConstructor.h in Headers */, 9743 9731 996B731E1BDA08EF00331B84 /* JSPromiseConstructor.lut.h in Headers */, 9744 7C008CDB187124BB00955C24 /* JSPromiseDeferred.h in Headers */,9745 9732 7C184E1F17BEE22E007CB63A /* JSPromisePrototype.h in Headers */, 9746 9733 996B731F1BDA08EF00331B84 /* JSPromisePrototype.lut.h in Headers */, … … 9969 9956 14AD91101DCA92940014F9FE /* ProgramCodeBlock.h in Headers */, 9970 9957 147341D41DC02E6D00AA29BA /* ProgramExecutable.h in Headers */, 9971 534638751E70DDEC00F12AC1 /* Promise DeferredTimer.h in Headers */,9958 534638751E70DDEC00F12AC1 /* PromiseTimer.h in Headers */, 9972 9959 0FD3E40E1B618B6600C80E1E /* PropertyCondition.h in Headers */, 9973 9960 A7FB61001040C38B0017A286 /* PropertyDescriptor.h in Headers */, … … 9979 9966 0FB7F39C15ED8E4600F167B2 /* PropertyStorage.h in Headers */, 9980 9967 BC18C4560E16F5CD00B34460 /* Protect.h in Headers */, 9968 FE1D6D752362649F007A5C26 /* ProtoCallFrameInlines.h in Headers */, 9981 9969 0F74B93B1F89614800B935D3 /* PrototypeKey.h in Headers */, 9982 9970 534E03561E53BEDE00213F64 /* ProxyableAccessCase.h in Headers */, … … 10011 9999 BC18C45D0E16F5CD00B34460 /* Register.h in Headers */, 10012 10000 E328C6C91DA432F900D255FD /* RegisterAtOffset.h in Headers */, 10013 FE1D6D6F236258FE007A5C26 /* GetVM.h in Headers */,10014 10001 E328C6C81DA4306100D255FD /* RegisterAtOffsetList.h in Headers */, 10015 10002 969A072B0ED1CE6900F1F681 /* RegisterID.h in Headers */, 10016 10003 9688CB160ED12B4E001D6499 /* RegisterInfo.h in Headers */, 10004 FE1D6D6D2362544B007A5C26 /* RegisterInlines.h in Headers */, 10017 10005 623A37EC1B87A7C000754209 /* RegisterMap.h in Headers */, 10018 10006 0FC314121814559100033232 /* RegisterSet.h in Headers */, -
trunk/Source/JavaScriptCore/Sources.txt
r251468 r251691 834 834 runtime/JSInternalPromise.cpp 835 835 runtime/JSInternalPromiseConstructor.cpp 836 runtime/JSInternalPromiseDeferred.cpp837 836 runtime/JSInternalPromisePrototype.cpp 838 837 runtime/JSLexicalEnvironment.cpp … … 851 850 runtime/JSPromise.cpp 852 851 runtime/JSPromiseConstructor.cpp 853 runtime/JSPromiseDeferred.cpp854 852 runtime/JSPromisePrototype.cpp 855 853 runtime/JSPropertyNameEnumerator.cpp … … 908 906 runtime/Options.cpp 909 907 runtime/ProgramExecutable.cpp 910 runtime/Promise DeferredTimer.cpp908 runtime/PromiseTimer.cpp 911 909 runtime/PropertyDescriptor.cpp 912 910 runtime/PropertySlot.cpp -
trunk/Source/JavaScriptCore/jsc.cpp
r251457 r251691 48 48 #include "JSFunction.h" 49 49 #include "JSInternalPromise.h" 50 #include "JSInternalPromiseDeferred.h"51 50 #include "JSLock.h" 52 51 #include "JSModuleLoader.h" … … 62 61 #include "ParserError.h" 63 62 #include "ProfilerDatabase.h" 64 #include "Promise DeferredTimer.h"63 #include "PromiseTimer.h" 65 64 #include "ProtoCallFrame.h" 66 65 #include "ReleaseHeapAccessScope.h" … … 827 826 auto throwScope = DECLARE_THROW_SCOPE(vm); 828 827 829 auto* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 830 RETURN_IF_EXCEPTION(throwScope, nullptr); 828 auto* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 831 829 832 830 auto catchScope = DECLARE_CATCH_SCOPE(vm); 833 831 auto reject = [&] (JSValue rejectionReason) { 834 832 catchScope.clearException(); 835 auto result = deferred->reject(globalObject, rejectionReason);833 promise->reject(globalObject, rejectionReason); 836 834 catchScope.clearException(); 837 return result;835 return promise; 838 836 }; 839 837 … … 1162 1160 { 1163 1161 VM& vm = globalObject->vm(); 1164 auto throwScope = DECLARE_THROW_SCOPE(vm); 1165 JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 1166 RETURN_IF_EXCEPTION(throwScope, nullptr); 1162 JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 1167 1163 1168 1164 auto catchScope = DECLARE_CATCH_SCOPE(vm); 1169 1165 auto reject = [&] (JSValue rejectionReason) { 1170 1166 catchScope.clearException(); 1171 auto result = deferred->reject(globalObject, rejectionReason);1167 promise->reject(globalObject, rejectionReason); 1172 1168 catchScope.clearException(); 1173 return result;1169 return promise; 1174 1170 }; 1175 1171 … … 1193 1189 auto sourceCode = JSSourceCode::create(vm, WTFMove(source)); 1194 1190 catchScope.releaseAssertNoException(); 1195 auto result = deferred->resolve(globalObject, sourceCode);1191 promise->resolve(globalObject, sourceCode); 1196 1192 catchScope.clearException(); 1197 return result;1193 return promise; 1198 1194 } 1199 1195 } … … 1202 1198 auto sourceCode = JSSourceCode::create(vm, jscSource(stringFromUTF(buffer), SourceOrigin { moduleKey }, WTFMove(moduleURL), TextPosition(), SourceProviderSourceType::Module)); 1203 1199 catchScope.releaseAssertNoException(); 1204 auto result = deferred->resolve(globalObject, sourceCode);1200 promise->resolve(globalObject, sourceCode); 1205 1201 catchScope.clearException(); 1206 return result;1202 return promise; 1207 1203 } 1208 1204 … … 3004 3000 vm.drainMicrotasks(); 3005 3001 } 3006 vm.promise DeferredTimer->runRunLoop();3002 vm.promiseTimer->runRunLoop(); 3007 3003 { 3008 3004 JSLockHolder locker(vm); -
trunk/Source/JavaScriptCore/runtime/Completion.cpp
r251425 r251691 35 35 #include "JSGlobalObject.h" 36 36 #include "JSInternalPromise.h" 37 #include "JSInternalPromiseDeferred.h"38 37 #include "JSLock.h" 39 38 #include "JSModuleLoader.h" … … 194 193 JSValue exception = scope.exception()->value(); 195 194 scope.clearException(); 196 JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 197 scope.releaseAssertNoException(); 198 deferred->reject(globalObject, exception); 199 scope.releaseAssertNoException(); 200 return deferred->promise(); 195 JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 196 promise->reject(globalObject, exception); 197 return promise; 201 198 } 202 199 -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r251671 r251691 544 544 }); 545 545 546 m_newPromiseCapabilityFunction.set(vm, this, JSFunction::create(vm, promiseOperationsNewPromiseCapabilityCodeGenerator(vm), this));547 546 m_functionProtoHasInstanceSymbolFunction.set(vm, this, hasInstanceSymbolFunction); 548 547 m_throwTypeErrorGetterSetter.initLater( … … 980 979 JSObject* setIteratorPrototype = SetIteratorPrototype::create(vm, this, SetIteratorPrototype::createStructure(vm, this, m_iteratorPrototype.get())); 981 980 setIteratorConstructorPrivateFunction->putDirect(vm, vm.propertyNames->prototype, setIteratorPrototype); 981 982 m_newPromiseCapabilityFunction.set(vm, this, newPromiseCapabilityPrivateFunction); 983 m_resolvePromiseFunction.set(vm, this, resolvePromisePrivateFunction); 984 m_rejectPromiseFunction.set(vm, this, rejectPromisePrivateFunction); 982 985 983 986 GlobalPropertyInfo staticGlobals[] = { … … 1707 1710 thisObject->m_iteratorProtocolFunction.visit(visitor); 1708 1711 thisObject->m_promiseResolveFunction.visit(visitor); 1712 visitor.append(thisObject->m_newPromiseCapabilityFunction); 1713 visitor.append(thisObject->m_resolvePromiseFunction); 1714 visitor.append(thisObject->m_rejectPromiseFunction); 1709 1715 visitor.append(thisObject->m_promiseProtoThenFunction); 1710 1716 visitor.append(thisObject->m_objectProtoValueOfFunction); 1711 1717 visitor.append(thisObject->m_numberProtoToStringFunction); 1712 visitor.append(thisObject->m_newPromiseCapabilityFunction);1713 1718 visitor.append(thisObject->m_functionProtoHasInstanceSymbolFunction); 1714 1719 thisObject->m_throwTypeErrorGetterSetter.visit(visitor); -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r251584 r251691 34 34 #include "JSClassRef.h" 35 35 #include "JSGlobalLexicalEnvironment.h" 36 #include "JSPromise Deferred.h"36 #include "JSPromise.h" 37 37 #include "JSSegmentedVariableObject.h" 38 38 #include "JSWeakObjectMapRefInternal.h" … … 227 227 DefaultLanguageFunctionPtr defaultLanguage; 228 228 229 typedef void (*CompileStreamingPtr)(JSGlobalObject*, JSPromise Deferred*, JSValue);229 typedef void (*CompileStreamingPtr)(JSGlobalObject*, JSPromise*, JSValue); 230 230 CompileStreamingPtr compileStreaming; 231 231 232 typedef void (*InstantiateStreamingPtr)(JSGlobalObject*, JSPromise Deferred*, JSValue, JSObject*);232 typedef void (*InstantiateStreamingPtr)(JSGlobalObject*, JSPromise*, JSValue, JSObject*); 233 233 InstantiateStreamingPtr instantiateStreaming; 234 234 }; … … 306 306 LazyProperty<JSGlobalObject, JSFunction> m_iteratorProtocolFunction; 307 307 LazyProperty<JSGlobalObject, JSFunction> m_promiseResolveFunction; 308 WriteBarrier<JSFunction> m_newPromiseCapabilityFunction; 309 WriteBarrier<JSFunction> m_resolvePromiseFunction; 310 WriteBarrier<JSFunction> m_rejectPromiseFunction; 308 311 WriteBarrier<JSFunction> m_promiseProtoThenFunction; 309 312 WriteBarrier<JSFunction> m_objectProtoValueOfFunction; 310 313 WriteBarrier<JSFunction> m_numberProtoToStringFunction; 311 WriteBarrier<JSFunction> m_newPromiseCapabilityFunction;312 314 WriteBarrier<JSFunction> m_functionProtoHasInstanceSymbolFunction; 313 315 LazyProperty<JSGlobalObject, GetterSetter> m_throwTypeErrorGetterSetter; … … 621 623 JSFunction* arrayProtoValuesFunction() const { return m_arrayProtoValuesFunction.get(this); } 622 624 JSFunction* iteratorProtocolFunction() const { return m_iteratorProtocolFunction.get(this); } 625 JSFunction* newPromiseCapabilityFunction() const { return m_newPromiseCapabilityFunction.get(); } 623 626 JSFunction* promiseResolveFunction() const { return m_promiseResolveFunction.get(this); } 627 JSFunction* resolvePromiseFunction() const { return m_resolvePromiseFunction.get(); } 628 JSFunction* rejectPromiseFunction() const { return m_rejectPromiseFunction.get(); } 624 629 JSFunction* promiseProtoThenFunction() const { return m_promiseProtoThenFunction.get(); } 625 630 JSFunction* objectProtoValueOfFunction() const { return m_objectProtoValueOfFunction.get(); } 626 631 JSFunction* numberProtoToStringFunction() const { return m_numberProtoToStringFunction.get(); } 627 JSFunction* newPromiseCapabilityFunction() const { return m_newPromiseCapabilityFunction.get(); }628 632 JSFunction* functionProtoHasInstanceSymbolFunction() const { return m_functionProtoHasInstanceSymbolFunction.get(); } 629 633 JSObject* regExpProtoExecFunction() const { return m_regExpProtoExec.get(); } -
trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
r251457 r251691 40 40 #include "JSModuleLoader.h" 41 41 #include "JSPromise.h" 42 #include "JSPromiseDeferred.h"43 42 #include "JSString.h" 44 43 #include "Lexer.h" … … 808 807 { 809 808 VM& vm = globalObject->vm(); 810 auto throwScope = DECLARE_THROW_SCOPE(vm); 811 812 auto* promise = JSPromiseDeferred::tryCreate(globalObject); 813 RETURN_IF_EXCEPTION(throwScope, encodedJSValue()); 809 810 auto* promise = JSPromise::create(vm, globalObject->promiseStructure()); 814 811 815 812 auto catchScope = DECLARE_CATCH_SCOPE(vm); … … 818 815 promise->reject(globalObject, rejectionReason); 819 816 catchScope.clearException(); 820 return JSValue::encode(promise ->promise());817 return JSValue::encode(promise); 821 818 }; 822 819 … … 836 833 837 834 catchScope.clearException(); 838 return JSValue::encode(promise ->promise());835 return JSValue::encode(promise); 839 836 } 840 837 -
trunk/Source/JavaScriptCore/runtime/JSInternalPromise.h
r251425 r251691 44 44 typedef JSPromise Base; 45 45 46 static JSInternalPromise* create(VM&, Structure*);46 JS_EXPORT_PRIVATE static JSInternalPromise* create(VM&, Structure*); 47 47 static Structure* createStructure(VM&, JSGlobalObject*, JSValue); 48 48 -
trunk/Source/JavaScriptCore/runtime/JSModuleLoader.cpp
r251425 r251691 36 36 #include "JSGlobalObjectFunctions.h" 37 37 #include "JSInternalPromise.h" 38 #include "JSInternalPromiseDeferred.h"39 38 #include "JSMap.h" 40 39 #include "JSModuleEnvironment.h" … … 263 262 RELEASE_AND_RETURN(throwScope, globalObject->globalObjectMethodTable()->moduleLoaderImportModule(globalObject, this, moduleName, parameters, referrer)); 264 263 265 auto* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 266 RETURN_IF_EXCEPTION(throwScope, nullptr); 264 auto* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 267 265 268 266 auto catchScope = DECLARE_CATCH_SCOPE(vm); … … 271 269 JSValue exception = catchScope.exception()->value(); 272 270 catchScope.clearException(); 273 deferred->reject(globalObject, exception);274 catchScope.clearException(); 275 return deferred->promise();271 promise->reject(globalObject, exception); 272 catchScope.clearException(); 273 return promise; 276 274 } 277 deferred->reject(globalObject, createError(globalObject, makeString("Could not import the module '", moduleNameString, "'.")));275 promise->reject(globalObject, createError(globalObject, makeString("Could not import the module '", moduleNameString, "'."))); 278 276 catchScope.clearException(); 279 return deferred->promise();277 return promise; 280 278 } 281 279 … … 293 291 { 294 292 VM& vm = globalObject->vm(); 295 auto throwScope = DECLARE_THROW_SCOPE(vm); 296 297 JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 298 RETURN_IF_EXCEPTION(throwScope, nullptr); 293 294 auto* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 299 295 300 296 auto catchScope = DECLARE_CATCH_SCOPE(vm); … … 304 300 JSValue exception = catchScope.exception(); 305 301 catchScope.clearException(); 306 auto result = deferred->reject(globalObject, exception);307 catchScope.clearException(); 308 return result;302 promise->reject(globalObject, exception); 303 catchScope.clearException(); 304 return promise; 309 305 } 310 auto result = deferred->resolve(globalObject, identifierToJSValue(vm, moduleKey));306 promise->resolve(globalObject, identifierToJSValue(vm, moduleKey)); 311 307 catchScope.clearException(); 312 return result;308 return promise; 313 309 } 314 310 … … 324 320 RELEASE_AND_RETURN(throwScope, globalObject->globalObjectMethodTable()->moduleLoaderFetch(globalObject, this, key, parameters, scriptFetcher)); 325 321 326 JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 327 RETURN_IF_EXCEPTION(throwScope, nullptr); 322 auto* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 328 323 329 324 auto catchScope = DECLARE_CATCH_SCOPE(vm); … … 333 328 JSValue exception = catchScope.exception()->value(); 334 329 catchScope.clearException(); 335 deferred->reject(globalObject, exception);336 catchScope.clearException(); 337 return deferred->promise();330 promise->reject(globalObject, exception); 331 catchScope.clearException(); 332 return promise; 338 333 } 339 deferred->reject(globalObject, createError(globalObject, makeString("Could not open the module '", moduleKey, "'.")));334 promise->reject(globalObject, createError(globalObject, makeString("Could not open the module '", moduleKey, "'."))); 340 335 catchScope.clearException(); 341 return deferred->promise();336 return promise; 342 337 } 343 338 … … 386 381 { 387 382 VM& vm = globalObject->vm(); 388 auto throwScope = DECLARE_THROW_SCOPE(vm); 389 390 JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::tryCreate(globalObject); 391 RETURN_IF_EXCEPTION(throwScope, encodedJSValue()); 383 384 auto* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 392 385 393 386 auto catchScope = DECLARE_CATCH_SCOPE(vm); 394 387 auto reject = [&] (JSValue rejectionReason) { 395 388 catchScope.clearException(); 396 auto result = deferred->reject(globalObject, rejectionReason);397 catchScope.clearException(); 398 return JSValue::encode( result);389 promise->reject(globalObject, rejectionReason); 390 catchScope.clearException(); 391 return JSValue::encode(promise); 399 392 }; 400 393 … … 409 402 #if ENABLE(WEBASSEMBLY) 410 403 if (sourceCode.provider()->sourceType() == SourceProviderSourceType::WebAssembly) 411 return JSValue::encode(JSWebAssembly::instantiate(globalObject, deferred, moduleKey, jsSourceCode));404 return JSValue::encode(JSWebAssembly::instantiate(globalObject, promise, moduleKey, jsSourceCode)); 412 405 #endif 413 406 … … 426 419 return reject(catchScope.exception()); 427 420 428 auto result = deferred->resolve(globalObject, moduleAnalyzer.analyze(*moduleProgramNode));421 promise->resolve(globalObject, moduleAnalyzer.analyze(*moduleProgramNode)); 429 422 catchScope.clearException(); 430 return JSValue::encode( result);423 return JSValue::encode(promise); 431 424 } 432 425 -
trunk/Source/JavaScriptCore/runtime/JSPromise.cpp
r251425 r251691 33 33 #include "JSPromiseConstructor.h" 34 34 #include "Microtask.h" 35 #include "PromiseTimer.h" 35 36 36 37 namespace JSC { … … 84 85 } 85 86 87 uint32_t JSPromise::flags() const 88 { 89 JSValue value = internalField(static_cast<unsigned>(Field::Flags)).get(); 90 return value.asUInt32AsAnyInt(); 91 } 92 86 93 bool JSPromise::isHandled(VM&) const 87 94 { 88 JSValue value = internalField(static_cast<unsigned>(Field::Flags)).get(); 89 uint32_t flags = value.asUInt32AsAnyInt(); 90 return flags & isHandledFlag; 95 return flags() & isHandledFlag; 91 96 } 92 97 93 JSPromise * JSPromise::resolve(JSGlobalObject* globalObject, JSValue value)98 JSPromise::DeferredData JSPromise::createDeferredData(JSGlobalObject* globalObject, JSPromiseConstructor* promiseConstructor) 94 99 { 95 auto& vm = globalObject->vm();100 VM& vm = globalObject->vm(); 96 101 auto scope = DECLARE_THROW_SCOPE(vm); 97 102 98 auto* promiseResolveFunction = globalObject->promiseResolveFunction();103 JSFunction* newPromiseCapabilityFunction = globalObject->newPromiseCapabilityFunction(); 99 104 CallData callData; 100 auto callType = JSC::getCallData(vm, promiseResolveFunction, callData); 105 CallType callType = JSC::getCallData(globalObject->vm(), newPromiseCapabilityFunction, callData); 106 ASSERT(callType != CallType::None); 107 108 MarkedArgumentBuffer arguments; 109 arguments.append(promiseConstructor); 110 ASSERT(!arguments.hasOverflowed()); 111 JSValue deferred = call(globalObject, newPromiseCapabilityFunction, callType, callData, jsUndefined(), arguments); 112 RETURN_IF_EXCEPTION(scope, { }); 113 114 DeferredData result; 115 result.promise = jsCast<JSPromise*>(deferred.get(globalObject, vm.propertyNames->builtinNames().promisePrivateName())); 116 RETURN_IF_EXCEPTION(scope, { }); 117 result.resolve = jsCast<JSFunction*>(deferred.get(globalObject, vm.propertyNames->builtinNames().resolvePrivateName())); 118 RETURN_IF_EXCEPTION(scope, { }); 119 result.reject = jsCast<JSFunction*>(deferred.get(globalObject, vm.propertyNames->builtinNames().rejectPrivateName())); 120 RETURN_IF_EXCEPTION(scope, { }); 121 122 return result; 123 } 124 125 JSPromise* JSPromise::resolvedPromise(JSGlobalObject* globalObject, JSValue value) 126 { 127 VM& vm = globalObject->vm(); 128 auto scope = DECLARE_THROW_SCOPE(vm); 129 130 JSFunction* function = globalObject->promiseResolveFunction(); 131 CallData callData; 132 CallType callType = JSC::getCallData(vm, function, callData); 101 133 ASSERT(callType != CallType::None); 102 134 103 135 MarkedArgumentBuffer arguments; 104 136 arguments.append(value); 105 ASSERT(!arguments.hasOverflowed()); 106 auto result = call(globalObject, promiseResolveFunction, callType, callData, globalObject->promiseConstructor(), arguments); 137 auto result = call(globalObject, function, callType, callData, globalObject->promiseConstructor(), arguments); 107 138 RETURN_IF_EXCEPTION(scope, nullptr); 108 139 ASSERT(result.inherits<JSPromise>(vm)); … … 110 141 } 111 142 143 static inline void callFunction(JSGlobalObject* globalObject, JSValue function, JSPromise* promise, JSValue value) 144 { 145 CallData callData; 146 CallType callType = getCallData(globalObject->vm(), function, callData); 147 ASSERT(callType != CallType::None); 148 149 MarkedArgumentBuffer arguments; 150 arguments.append(promise); 151 arguments.append(value); 152 ASSERT(!arguments.hasOverflowed()); 153 154 call(globalObject, function, callType, callData, jsUndefined(), arguments); 155 } 156 157 void JSPromise::resolve(JSGlobalObject* lexicalGlobalObject, JSValue value) 158 { 159 VM& vm = lexicalGlobalObject->vm(); 160 auto scope = DECLARE_THROW_SCOPE(vm); 161 uint32_t flags = this->flags(); 162 if (!(flags & isFirstResolvingFunctionCalledFlag)) { 163 internalField(static_cast<unsigned>(Field::Flags)).set(vm, this, jsNumber(flags | isFirstResolvingFunctionCalledFlag)); 164 JSGlobalObject* globalObject = this->globalObject(vm); 165 callFunction(lexicalGlobalObject, globalObject->resolvePromiseFunction(), this, value); 166 RETURN_IF_EXCEPTION(scope, void()); 167 } 168 vm.promiseTimer->cancelPendingPromise(this); 169 } 170 171 void JSPromise::reject(JSGlobalObject* lexicalGlobalObject, JSValue value) 172 { 173 VM& vm = lexicalGlobalObject->vm(); 174 auto scope = DECLARE_THROW_SCOPE(vm); 175 uint32_t flags = this->flags(); 176 if (!(flags & isFirstResolvingFunctionCalledFlag)) { 177 internalField(static_cast<unsigned>(Field::Flags)).set(vm, this, jsNumber(flags | isFirstResolvingFunctionCalledFlag)); 178 JSGlobalObject* globalObject = this->globalObject(vm); 179 callFunction(lexicalGlobalObject, globalObject->rejectPromiseFunction(), this, value); 180 RETURN_IF_EXCEPTION(scope, void()); 181 } 182 vm.promiseTimer->cancelPendingPromise(this); 183 } 184 185 void JSPromise::reject(JSGlobalObject* lexicalGlobalObject, Exception* reason) 186 { 187 reject(lexicalGlobalObject, reason->value()); 188 } 189 112 190 } // namespace JSC -
trunk/Source/JavaScriptCore/runtime/JSPromise.h
r251425 r251691 30 30 namespace JSC { 31 31 32 class JSPromiseConstructor; 32 33 class JSPromise : public JSInternalFieldObjectImpl<2> { 33 34 public: 34 35 using Base = JSInternalFieldObjectImpl<2>; 35 36 36 static JSPromise* create(VM&, Structure*);37 JS_EXPORT_PRIVATE static JSPromise* create(VM&, Structure*); 37 38 static Structure* createStructure(VM&, JSGlobalObject*, JSValue); 38 39 … … 58 59 JS_EXPORT_PRIVATE bool isHandled(VM&) const; 59 60 60 JS_EXPORT_PRIVATE static JSPromise* resolve(JSGlobalObject*, JSValue); 61 JS_EXPORT_PRIVATE static JSPromise* resolvedPromise(JSGlobalObject*, JSValue); 62 63 JS_EXPORT_PRIVATE void resolve(JSGlobalObject*, JSValue); 64 JS_EXPORT_PRIVATE void reject(JSGlobalObject*, JSValue); 65 JS_EXPORT_PRIVATE void reject(JSGlobalObject*, Exception*); 66 67 struct DeferredData { 68 WTF_FORBID_HEAP_ALLOCATION; 69 public: 70 JSPromise* promise { nullptr }; 71 JSFunction* resolve { nullptr }; 72 JSFunction* reject { nullptr }; 73 }; 74 static DeferredData createDeferredData(JSGlobalObject*, JSPromiseConstructor*); 61 75 62 76 static void visitChildren(JSCell*, SlotVisitor&); … … 65 79 JSPromise(VM&, Structure*); 66 80 void finishCreation(VM&); 81 82 uint32_t flags() const; 67 83 }; 68 84 -
trunk/Source/JavaScriptCore/runtime/PromiseTimer.cpp
r251690 r251691 25 25 26 26 #include "config.h" 27 #include "Promise DeferredTimer.h"27 #include "PromiseTimer.h" 28 28 29 #include "JSPromise Deferred.h"29 #include "JSPromise.h" 30 30 #include "StrongInlines.h" 31 31 #include "VM.h" … … 35 35 namespace JSC { 36 36 37 namespace Promise DeferredTimerInternal {37 namespace PromiseTimerInternal { 38 38 static constexpr bool verbose = false; 39 39 } 40 40 41 Promise DeferredTimer::PromiseDeferredTimer(VM& vm)41 PromiseTimer::PromiseTimer(VM& vm) 42 42 : Base(vm) 43 43 { 44 44 } 45 45 46 void Promise DeferredTimer::doWork(VM& vm)46 void PromiseTimer::doWork(VM& vm) 47 47 { 48 48 ASSERT(vm.currentThreadIsHoldingAPILock()); … … 56 56 while (!m_tasks.isEmpty()) { 57 57 auto [ticket, task] = m_tasks.takeLast(); 58 dataLogLnIf(Promise DeferredTimerInternal::verbose, "Doing work on promise: ", RawPointer(ticket));58 dataLogLnIf(PromiseTimerInternal::verbose, "Doing work on promise: ", RawPointer(ticket)); 59 59 60 60 // We may have already canceled these promises. … … 83 83 } 84 84 85 void Promise DeferredTimer::runRunLoop()85 void PromiseTimer::runRunLoop() 86 86 { 87 87 ASSERT(!m_apiLock->vm()->currentThreadIsHoldingAPILock()); … … 99 99 } 100 100 101 void Promise DeferredTimer::addPendingPromise(VM& vm, JSPromiseDeferred* ticket, Vector<Strong<JSCell>>&& dependencies)101 void PromiseTimer::addPendingPromise(VM& vm, JSPromise* ticket, Vector<Strong<JSCell>>&& dependencies) 102 102 { 103 103 ASSERT(vm.currentThreadIsHoldingAPILock()); … … 107 107 auto result = m_pendingPromises.add(ticket, Vector<Strong<JSCell>>()); 108 108 if (result.isNewEntry) { 109 dataLogLnIf(Promise DeferredTimerInternal::verbose, "Adding new pending promise: ", RawPointer(ticket));109 dataLogLnIf(PromiseTimerInternal::verbose, "Adding new pending promise: ", RawPointer(ticket)); 110 110 dependencies.append(Strong<JSCell>(vm, ticket)); 111 111 result.iterator->value = WTFMove(dependencies); 112 112 } else { 113 dataLogLnIf(Promise DeferredTimerInternal::verbose, "Adding new dependencies for promise: ", RawPointer(ticket));113 dataLogLnIf(PromiseTimerInternal::verbose, "Adding new dependencies for promise: ", RawPointer(ticket)); 114 114 result.iterator->value.appendVector(dependencies); 115 115 } 116 117 #ifndef NDEBUG118 ticket->promiseAsyncPending();119 #endif120 116 } 121 117 122 bool Promise DeferredTimer::hasPendingPromise(JSPromiseDeferred* ticket)118 bool PromiseTimer::hasPendingPromise(JSPromise* ticket) 123 119 { 124 120 ASSERT(ticket->vm().currentThreadIsHoldingAPILock()); … … 126 122 } 127 123 128 bool Promise DeferredTimer::hasDependancyInPendingPromise(JSPromiseDeferred* ticket, JSCell* dependency)124 bool PromiseTimer::hasDependancyInPendingPromise(JSPromise* ticket, JSCell* dependency) 129 125 { 130 126 ASSERT(ticket->vm().currentThreadIsHoldingAPILock()); … … 135 131 } 136 132 137 bool Promise DeferredTimer::cancelPendingPromise(JSPromiseDeferred* ticket)133 bool PromiseTimer::cancelPendingPromise(JSPromise* ticket) 138 134 { 139 135 ASSERT(ticket->vm().currentThreadIsHoldingAPILock()); … … 141 137 142 138 if (result) 143 dataLogLnIf(Promise DeferredTimerInternal::verbose, "Canceling promise: ", RawPointer(ticket));139 dataLogLnIf(PromiseTimerInternal::verbose, "Canceling promise: ", RawPointer(ticket)); 144 140 145 141 return result; 146 142 } 147 143 148 void Promise DeferredTimer::scheduleWorkSoon(JSPromiseDeferred* ticket, Task&& task)144 void PromiseTimer::scheduleWorkSoon(JSPromise* ticket, Task&& task) 149 145 { 150 146 LockHolder locker(m_taskLock); -
trunk/Source/JavaScriptCore/runtime/PromiseTimer.h
r251690 r251691 35 35 namespace JSC { 36 36 37 class JSPromise Deferred;37 class JSPromise; 38 38 class VM; 39 39 class JSCell; 40 40 41 class Promise DeferredTimer : public JSRunLoopTimer {41 class PromiseTimer : public JSRunLoopTimer { 42 42 public: 43 43 using Base = JSRunLoopTimer; … … 45 45 void doWork(VM&) override; 46 46 47 void addPendingPromise(VM&, JSPromise Deferred*, Vector<Strong<JSCell>>&& dependencies);48 JS_EXPORT_PRIVATE bool hasPendingPromise(JSPromise Deferred* ticket);49 JS_EXPORT_PRIVATE bool hasDependancyInPendingPromise(JSPromise Deferred* ticket, JSCell* dependency);50 // JSPromise Deferredshould handle canceling when the promise is resolved or rejected.51 bool cancelPendingPromise(JSPromise Deferred*);47 void addPendingPromise(VM&, JSPromise*, Vector<Strong<JSCell>>&& dependencies); 48 JS_EXPORT_PRIVATE bool hasPendingPromise(JSPromise* ticket); 49 JS_EXPORT_PRIVATE bool hasDependancyInPendingPromise(JSPromise* ticket, JSCell* dependency); 50 // JSPromise should handle canceling when the promise is resolved or rejected. 51 bool cancelPendingPromise(JSPromise*); 52 52 53 53 using Task = Function<void()>; 54 void scheduleWorkSoon(JSPromise Deferred*, Task&&);54 void scheduleWorkSoon(JSPromise*, Task&&); 55 55 56 56 void stopRunningTasks() { m_runTasks = false; } … … 58 58 JS_EXPORT_PRIVATE void runRunLoop(); 59 59 60 static Ref<Promise DeferredTimer> create(VM& vm)60 static Ref<PromiseTimer> create(VM& vm) 61 61 { 62 return adoptRef(*new Promise DeferredTimer(vm));62 return adoptRef(*new PromiseTimer(vm)); 63 63 } 64 64 65 65 private: 66 Promise DeferredTimer(VM&);66 PromiseTimer(VM&); 67 67 68 HashMap<JSPromise Deferred*, Vector<Strong<JSCell>>> m_pendingPromises;68 HashMap<JSPromise*, Vector<Strong<JSCell>>> m_pendingPromises; 69 69 Lock m_taskLock; 70 70 bool m_runTasks { true }; 71 71 bool m_shouldStopRunLoopWhenAllPromisesFinish { false }; 72 72 bool m_currentlyRunningTask { false }; 73 Vector<std::tuple<JSPromise Deferred*, Task>> m_tasks;73 Vector<std::tuple<JSPromise*, Task>> m_tasks; 74 74 }; 75 75 -
trunk/Source/JavaScriptCore/runtime/VM.cpp
r251425 r251691 86 86 #include "JSGlobalObjectFunctions.h" 87 87 #include "JSImmutableButterfly.h" 88 #include "JSInternalPromise Deferred.h"88 #include "JSInternalPromise.h" 89 89 #include "JSLock.h" 90 90 #include "JSMap.h" 91 91 #include "JSMapIterator.h" 92 #include "JSPromise Deferred.h"92 #include "JSPromise.h" 93 93 #include "JSPropertyNameEnumerator.h" 94 94 #include "JSScriptFetchParameters.h" … … 121 121 #include "ProgramCodeBlock.h" 122 122 #include "ProgramExecutable.h" 123 #include "Promise DeferredTimer.h"123 #include "PromiseTimer.h" 124 124 #include "PropertyMapHashTable.h" 125 125 #include "ProxyRevoke.h" … … 295 295 , topEntryFrame(nullptr) 296 296 , topCallFrame(CallFrame::noCaller()) 297 , promise DeferredTimer(PromiseDeferredTimer::create(*this))297 , promiseTimer(PromiseTimer::create(*this)) 298 298 , m_atomStringTable(vmType == Default ? Thread::current().atomStringTable() : new AtomStringTable) 299 299 , propertyNames(nullptr) … … 380 380 functionRareDataStructure.set(*this, FunctionRareData::createStructure(*this, 0, jsNull())); 381 381 exceptionStructure.set(*this, Exception::createStructure(*this, 0, jsNull())); 382 promiseDeferredStructure.set(*this, JSPromiseDeferred::createStructure(*this, 0, jsNull()));383 internalPromiseDeferredStructure.set(*this, JSInternalPromiseDeferred::createStructure(*this, 0, jsNull()));384 382 nativeStdFunctionCellStructure.set(*this, NativeStdFunctionCell::createStructure(*this, 0, jsNull())); 385 383 programCodeBlockStructure.set(*this, ProgramCodeBlock::createStructure(*this, 0, jsNull())); … … 491 489 492 490 Gigacage::removePrimitiveDisableCallback(primitiveGigacageDisabledCallback, this); 493 promise DeferredTimer->stopRunningTasks();491 promiseTimer->stopRunningTasks(); 494 492 #if ENABLE(WEBASSEMBLY) 495 493 if (Wasm::Worklist* worklist = Wasm::existingWorklistOrNull()) -
trunk/Source/JavaScriptCore/runtime/VM.h
r251556 r251691 133 133 class LLIntOffsetsExtractor; 134 134 class NativeExecutable; 135 class Promise DeferredTimer;135 class PromiseTimer; 136 136 class RegExp; 137 137 class RegExpCache; … … 537 537 Strong<Structure> functionRareDataStructure; 538 538 Strong<Structure> exceptionStructure; 539 Strong<Structure> promiseDeferredStructure;540 Strong<Structure> internalPromiseDeferredStructure;541 539 Strong<Structure> nativeStdFunctionCellStructure; 542 540 Strong<Structure> programCodeBlockStructure; … … 557 555 Strong<JSCell> m_sentinelMapBucket; 558 556 559 Ref<Promise DeferredTimer> promiseDeferredTimer;557 Ref<PromiseTimer> promiseTimer; 560 558 561 559 JSCell* currentlyDestructingCallbackObject; -
trunk/Source/JavaScriptCore/wasm/js/JSWebAssembly.cpp
r251690 r251691 35 35 #include "JSCInlines.h" 36 36 #include "JSModuleNamespaceObject.h" 37 #include "JSPromise Deferred.h"37 #include "JSPromise.h" 38 38 #include "JSToWasm.h" 39 39 #include "JSWebAssemblyHelpers.h" … … 42 42 #include "ObjectConstructor.h" 43 43 #include "Options.h" 44 #include "Promise DeferredTimer.h"44 #include "PromiseTimer.h" 45 45 #include "StrongInlines.h" 46 46 #include "ThrowScope.h" … … 125 125 } 126 126 127 static void reject(JSGlobalObject* globalObject, CatchScope& catchScope, JSPromise Deferred* promise)127 static void reject(JSGlobalObject* globalObject, CatchScope& catchScope, JSPromise* promise) 128 128 { 129 129 Exception* exception = catchScope.exception(); … … 134 134 } 135 135 136 static void webAssemblyModuleValidateAsyncInternal(JSGlobalObject* globalObject, JSPromise Deferred* promise, Vector<uint8_t>&& source)136 static void webAssemblyModuleValidateAsyncInternal(JSGlobalObject* globalObject, JSPromise* promise, Vector<uint8_t>&& source) 137 137 { 138 138 VM& vm = globalObject->vm(); … … 141 141 dependencies.append(Strong<JSCell>(vm, globalObject)); 142 142 143 vm.promise DeferredTimer->addPendingPromise(vm, promise, WTFMove(dependencies));143 vm.promiseTimer->addPendingPromise(vm, promise, WTFMove(dependencies)); 144 144 145 145 Wasm::Module::validateAsync(&vm.wasmContext, WTFMove(source), createSharedTask<Wasm::Module::CallbackType>([promise, globalObject, &vm] (Wasm::Module::ValidationResult&& result) mutable { 146 vm.promise DeferredTimer->scheduleWorkSoon(promise, [promise, globalObject, result = WTFMove(result), &vm] () mutable {146 vm.promiseTimer->scheduleWorkSoon(promise, [promise, globalObject, result = WTFMove(result), &vm] () mutable { 147 147 auto scope = DECLARE_CATCH_SCOPE(vm); 148 148 JSValue module = JSWebAssemblyModule::createStub(vm, globalObject, globalObject->webAssemblyModuleStructure(), WTFMove(result)); … … 163 163 auto throwScope = DECLARE_THROW_SCOPE(vm); 164 164 165 JSPromiseDeferred* promise = JSPromiseDeferred::tryCreate(globalObject);165 auto* promise = JSPromise::create(vm, globalObject->promiseStructure()); 166 166 RETURN_IF_EXCEPTION(throwScope, encodedJSValue()); 167 167 … … 175 175 webAssemblyModuleValidateAsyncInternal(globalObject, promise, WTFMove(source)); 176 176 177 return JSValue::encode(promise ->promise());177 return JSValue::encode(promise); 178 178 } 179 179 } 180 180 181 181 enum class Resolve { WithInstance, WithModuleRecord, WithModuleAndInstance }; 182 static void resolve(VM& vm, JSGlobalObject* globalObject, JSPromise Deferred* promise, JSWebAssemblyInstance* instance, JSWebAssemblyModule* module, JSObject* importObject, Ref<Wasm::CodeBlock>&& codeBlock, Resolve resolveKind, Wasm::CreationMode creationMode)182 static void resolve(VM& vm, JSGlobalObject* globalObject, JSPromise* promise, JSWebAssemblyInstance* instance, JSWebAssemblyModule* module, JSObject* importObject, Ref<Wasm::CodeBlock>&& codeBlock, Resolve resolveKind, Wasm::CreationMode creationMode) 183 183 { 184 184 auto scope = DECLARE_CATCH_SCOPE(vm); … … 202 202 } 203 203 204 void JSWebAssembly::webAssemblyModuleValidateAsync(JSGlobalObject* globalObject, JSPromise Deferred* promise, Vector<uint8_t>&& source)204 void JSWebAssembly::webAssemblyModuleValidateAsync(JSGlobalObject* globalObject, JSPromise* promise, Vector<uint8_t>&& source) 205 205 { 206 206 VM& vm = globalObject->vm(); … … 210 210 } 211 211 212 static void instantiate(VM& vm, JSGlobalObject* globalObject, JSPromise Deferred* promise, JSWebAssemblyModule* module, JSObject* importObject, const Identifier& moduleKey, Resolve resolveKind, Wasm::CreationMode creationMode)212 static void instantiate(VM& vm, JSGlobalObject* globalObject, JSPromise* promise, JSWebAssemblyModule* module, JSObject* importObject, const Identifier& moduleKey, Resolve resolveKind, Wasm::CreationMode creationMode) 213 213 { 214 214 auto scope = DECLARE_CATCH_SCOPE(vm); … … 221 221 dependencies.append(Strong<JSCell>(vm, instance)); 222 222 dependencies.append(Strong<JSCell>(vm, importObject)); 223 vm.promise DeferredTimer->addPendingPromise(vm, promise, WTFMove(dependencies));223 vm.promiseTimer->addPendingPromise(vm, promise, WTFMove(dependencies)); 224 224 // Note: This completion task may or may not get called immediately. 225 225 module->module().compileAsync(&vm.wasmContext, instance->memoryMode(), createSharedTask<Wasm::CodeBlock::CallbackType>([promise, instance, module, importObject, resolveKind, creationMode, &vm] (Ref<Wasm::CodeBlock>&& refCodeBlock) mutable { 226 226 RefPtr<Wasm::CodeBlock> codeBlock = WTFMove(refCodeBlock); 227 vm.promise DeferredTimer->scheduleWorkSoon(promise, [promise, instance, module, importObject, resolveKind, creationMode, &vm, codeBlock = WTFMove(codeBlock)] () mutable {227 vm.promiseTimer->scheduleWorkSoon(promise, [promise, instance, module, importObject, resolveKind, creationMode, &vm, codeBlock = WTFMove(codeBlock)] () mutable { 228 228 JSGlobalObject* globalObject = instance->globalObject(); 229 229 resolve(vm, globalObject, promise, instance, module, importObject, codeBlock.releaseNonNull(), resolveKind, creationMode); … … 232 232 } 233 233 234 static void compileAndInstantiate(VM& vm, JSGlobalObject* globalObject, JSPromise Deferred* promise, const Identifier& moduleKey, JSValue buffer, JSObject* importObject, Resolve resolveKind, Wasm::CreationMode creationMode)234 static void compileAndInstantiate(VM& vm, JSGlobalObject* globalObject, JSPromise* promise, const Identifier& moduleKey, JSValue buffer, JSObject* importObject, Resolve resolveKind, Wasm::CreationMode creationMode) 235 235 { 236 236 auto scope = DECLARE_CATCH_SCOPE(vm); … … 240 240 dependencies.append(Strong<JSCell>(vm, importObject)); 241 241 dependencies.append(Strong<JSCell>(vm, moduleKeyCell)); 242 vm.promise DeferredTimer->addPendingPromise(vm, promise, WTFMove(dependencies));242 vm.promiseTimer->addPendingPromise(vm, promise, WTFMove(dependencies)); 243 243 244 244 Vector<uint8_t> source = createSourceBufferFromValue(vm, globalObject, buffer); … … 246 246 247 247 Wasm::Module::validateAsync(&vm.wasmContext, WTFMove(source), createSharedTask<Wasm::Module::CallbackType>([promise, importObject, moduleKeyCell, globalObject, resolveKind, creationMode, &vm] (Wasm::Module::ValidationResult&& result) mutable { 248 vm.promise DeferredTimer->scheduleWorkSoon(promise, [promise, importObject, moduleKeyCell, globalObject, result = WTFMove(result), resolveKind, creationMode, &vm] () mutable {248 vm.promiseTimer->scheduleWorkSoon(promise, [promise, importObject, moduleKeyCell, globalObject, result = WTFMove(result), resolveKind, creationMode, &vm] () mutable { 249 249 auto scope = DECLARE_CATCH_SCOPE(vm); 250 250 JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, globalObject, globalObject->webAssemblyModuleStructure(), WTFMove(result)); … … 261 261 } 262 262 263 JSValue JSWebAssembly::instantiate(JSGlobalObject* globalObject, JSPromise Deferred* promise, const Identifier& moduleKey, JSValue argument)263 JSValue JSWebAssembly::instantiate(JSGlobalObject* globalObject, JSPromise* promise, const Identifier& moduleKey, JSValue argument) 264 264 { 265 265 VM& vm = globalObject->vm(); 266 266 compileAndInstantiate(vm, globalObject, promise, moduleKey, argument, nullptr, Resolve::WithModuleRecord, Wasm::CreationMode::FromModuleLoader); 267 return promise ->promise();268 } 269 270 static void webAssemblyModuleInstantinateAsyncInternal(JSGlobalObject* globalObject, JSPromise Deferred* promise, Vector<uint8_t>&& source, JSObject* importObject)267 return promise; 268 } 269 270 static void webAssemblyModuleInstantinateAsyncInternal(JSGlobalObject* globalObject, JSPromise* promise, Vector<uint8_t>&& source, JSObject* importObject) 271 271 { 272 272 VM& vm = globalObject->vm(); … … 275 275 dependencies.append(Strong<JSCell>(vm, importObject)); 276 276 dependencies.append(Strong<JSCell>(vm, globalObject)); 277 vm.promise DeferredTimer->addPendingPromise(vm, promise, WTFMove(dependencies));277 vm.promiseTimer->addPendingPromise(vm, promise, WTFMove(dependencies)); 278 278 279 279 Wasm::Module::validateAsync(&vm.wasmContext, WTFMove(source), createSharedTask<Wasm::Module::CallbackType>([promise, importObject, globalObject, &vm] (Wasm::Module::ValidationResult&& result) mutable { 280 vm.promise DeferredTimer->scheduleWorkSoon(promise, [promise, importObject, globalObject, result = WTFMove(result), &vm] () mutable {280 vm.promiseTimer->scheduleWorkSoon(promise, [promise, importObject, globalObject, result = WTFMove(result), &vm] () mutable { 281 281 auto scope = DECLARE_CATCH_SCOPE(vm); 282 282 JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, globalObject, globalObject->webAssemblyModuleStructure(), WTFMove(result)); … … 290 290 } 291 291 292 void JSWebAssembly::webAssemblyModuleInstantinateAsync(JSGlobalObject* globalObject, JSPromise Deferred* promise, Vector<uint8_t>&& source, JSObject* importedObject)292 void JSWebAssembly::webAssemblyModuleInstantinateAsync(JSGlobalObject* globalObject, JSPromise* promise, Vector<uint8_t>&& source, JSObject* importedObject) 293 293 { 294 294 VM& vm = globalObject->vm(); … … 301 301 { 302 302 VM& vm = globalObject->vm(); 303 auto throwScope = DECLARE_THROW_SCOPE(vm); 304 305 JSPromiseDeferred* promise = JSPromiseDeferred::tryCreate(globalObject); 306 RETURN_IF_EXCEPTION(throwScope, encodedJSValue()); 307 303 304 auto* promise = JSPromise::create(vm, globalObject->promiseStructure()); 308 305 { 309 306 auto catchScope = DECLARE_CATCH_SCOPE(vm); … … 314 311 promise->reject(globalObject, createTypeError(globalObject, 315 312 "second argument to WebAssembly.instantiate must be undefined or an Object"_s, defaultSourceAppender, runtimeTypeForValue(vm, importArgument))); 316 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise ->promise()));313 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise)); 317 314 } else { 318 315 JSValue firstArgument = callFrame->argument(0); … … 323 320 } 324 321 325 return JSValue::encode(promise ->promise());322 return JSValue::encode(promise); 326 323 } 327 324 } … … 345 342 auto catchScope = DECLARE_CATCH_SCOPE(vm); 346 343 347 JSPromiseDeferred* promise = JSPromiseDeferred::tryCreate(globalObject);344 auto* promise = JSPromise::create(vm, globalObject->promiseStructure()); 348 345 349 346 Vector<Strong<JSCell>> dependencies; 350 347 dependencies.append(Strong<JSCell>(vm, globalObject)); 351 vm.promise DeferredTimer->addPendingPromise(vm, promise, WTFMove(dependencies));348 vm.promiseTimer->addPendingPromise(vm, promise, WTFMove(dependencies)); 352 349 353 350 if (globalObject->globalObjectMethodTable()->compileStreaming) … … 358 355 } 359 356 360 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise ->promise()));361 362 return JSValue::encode(promise ->promise());357 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise)); 358 359 return JSValue::encode(promise); 363 360 } 364 361 … … 366 363 { 367 364 VM& vm = globalObject->vm(); 368 auto throwScope = DECLARE_THROW_SCOPE(vm); 369 370 JSPromiseDeferred* promise = JSPromiseDeferred::tryCreate(globalObject); 371 RETURN_IF_EXCEPTION(throwScope, encodedJSValue()); 365 366 auto* promise = JSPromise::create(vm, globalObject->promiseStructure()); 372 367 { 373 368 auto catchScope = DECLARE_CATCH_SCOPE(vm); … … 378 373 promise->reject(globalObject, createTypeError(globalObject, 379 374 "second argument to WebAssembly.instantiateStreaming must be undefined or an Object"_s, defaultSourceAppender, runtimeTypeForValue(vm, importArgument))); 380 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise ->promise()));375 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise)); 381 376 } else { 382 377 if (globalObject->globalObjectMethodTable()->instantiateStreaming) { … … 384 379 dependencies.append(Strong<JSCell>(vm, globalObject)); 385 380 dependencies.append(Strong<JSCell>(vm, importObject)); 386 vm.promise DeferredTimer->addPendingPromise(vm, promise, WTFMove(dependencies));381 vm.promiseTimer->addPendingPromise(vm, promise, WTFMove(dependencies)); 387 382 388 383 // FIXME: <http://webkit.org/b/184888> if there's an importObject and it contains a Memory, then we can compile the module with the right memory type (fast or not) by looking at the memory's type. … … 393 388 } 394 389 } 395 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise ->promise()));396 397 return JSValue::encode(promise ->promise());390 CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise)); 391 392 return JSValue::encode(promise); 398 393 } 399 394 } -
trunk/Source/JavaScriptCore/wasm/js/JSWebAssembly.h
r251425 r251691 29 29 30 30 #include "JSObject.h" 31 #include "JSPromise Deferred.h"31 #include "JSPromise.h" 32 32 33 33 namespace JSC { … … 43 43 DECLARE_INFO; 44 44 45 JS_EXPORT_PRIVATE static void webAssemblyModuleValidateAsync(JSGlobalObject*, JSPromise Deferred*, Vector<uint8_t>&&);46 JS_EXPORT_PRIVATE static void webAssemblyModuleInstantinateAsync(JSGlobalObject*, JSPromise Deferred*, Vector<uint8_t>&&, JSObject*);47 static JSValue instantiate(JSGlobalObject*, JSPromise Deferred*, const Identifier&, JSValue);45 JS_EXPORT_PRIVATE static void webAssemblyModuleValidateAsync(JSGlobalObject*, JSPromise*, Vector<uint8_t>&&); 46 JS_EXPORT_PRIVATE static void webAssemblyModuleInstantinateAsync(JSGlobalObject*, JSPromise*, Vector<uint8_t>&&, JSObject*); 47 static JSValue instantiate(JSGlobalObject*, JSPromise*, const Identifier&, JSValue); 48 48 49 49 protected: -
trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h
r250005 r251691 30 30 #include "CallLinkInfo.h" 31 31 #include "JSCast.h" 32 #include "Promise DeferredTimer.h"32 #include "PromiseTimer.h" 33 33 #include "Structure.h" 34 34 #include "WasmCallee.h" -
trunk/Source/WebCore/ChangeLog
r251690 r251691 1 2019-10-28 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Remove JSPromiseDeferred 4 https://bugs.webkit.org/show_bug.cgi?id=203400 5 6 Reviewed by Keith Miller. 7 8 This patch removes PromiseExecutionScope. This assumed that promise operation cannot fail in main thread. But this is 9 wrong since any JS call can fail due to stack-overflow error. This patch makes things more robust by handling errors correctly. 10 And we remove JSPromiseDeferred and use JSPromise instead. 11 12 * bindings/js/JSCustomElementRegistryCustom.cpp: 13 (WebCore::whenDefinedPromise): 14 (WebCore::JSCustomElementRegistry::whenDefined): 15 * bindings/js/JSDOMConvertPromise.h: 16 (WebCore::Converter<IDLPromise<T>>::convert): 17 * bindings/js/JSDOMGlobalObject.cpp: 18 * bindings/js/JSDOMOperationReturningPromise.h: 19 (WebCore::IDLOperationReturningPromise::call): 20 (WebCore::IDLOperationReturningPromise::callStatic): 21 * bindings/js/JSDOMPromiseDeferred.cpp: 22 (WebCore::DeferredPromise::promise const): 23 (WebCore::DeferredPromise::callFunction): 24 (WebCore::DeferredPromise::whenSettled): 25 (WebCore::rejectPromiseWithExceptionIfAny): 26 (WebCore::createDeferredPromise): 27 * bindings/js/JSDOMPromiseDeferred.h: 28 (WebCore::DeferredPromise::create): 29 (WebCore::DeferredPromise::DeferredPromise): 30 (WebCore::DeferredPromise::deferred const): 31 (WebCore::DeferredPromise::resolve): 32 (WebCore::DeferredPromise::reject): 33 (WebCore::DOMPromiseDeferredBase::DOMPromiseDeferredBase): 34 (WebCore::DOMPromiseDeferredBase::operator=): 35 (WebCore::DOMPromiseDeferredBase::reject): 36 (WebCore::DOMPromiseDeferredBase::rejectType): 37 (WebCore::DOMPromiseDeferredBase::promise const): 38 (WebCore::DOMPromiseDeferredBase::whenSettled): 39 (WebCore::DOMPromiseDeferred::resolve): 40 (WebCore::DOMPromiseDeferred<void>::resolve): 41 (WebCore::callPromiseFunction): 42 * bindings/js/JSDOMWindowBase.cpp: 43 (WebCore::JSDOMWindowBase::moduleLoaderFetch): 44 (WebCore::JSDOMWindowBase::moduleLoaderImportModule): 45 (WebCore::tryAllocate): 46 (WebCore::isResponseCorrect): 47 (WebCore::handleResponseOnStreamingAction): 48 (WebCore::JSDOMWindowBase::compileStreaming): 49 (WebCore::JSDOMWindowBase::instantiateStreaming): 50 * bindings/js/JSDOMWindowBase.h: 51 * bindings/js/ScriptModuleLoader.cpp: 52 (WebCore::ScriptModuleLoader::fetch): 53 (WebCore::rejectPromise): 54 * bindings/js/WorkerScriptController.cpp: 55 (WebCore::WorkerScriptController::addTimerSetNotification): 56 (WebCore::WorkerScriptController::removeTimerSetNotification): 57 * bindings/scripts/CodeGeneratorJS.pm: 58 (GenerateOperationTrampolineDefinition): 59 * bindings/scripts/test/JS/JSTestGlobalObject.cpp: 60 (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResult): 61 * bindings/scripts/test/JS/JSTestNode.cpp: 62 (WebCore::jsTestNodePrototypeFunctionTestWorkerPromise): 63 (WebCore::jsTestNodePrototypeFunctionCalculateSecretResult): 64 * bindings/scripts/test/JS/JSTestObj.cpp: 65 (WebCore::jsTestObjPrototypeFunctionCalculateSecretResult): 66 (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction): 67 (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument): 68 (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithException): 69 (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument): 70 (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction): 71 (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunction): 72 (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionWithException): 73 (WebCore::jsTestObjPrototypeFunctionTestCustomPromiseFunction): 74 (WebCore::jsTestObjConstructorFunctionTestStaticCustomPromiseFunction): 75 * workers/WorkerRunLoop.cpp: 76 * worklets/WorkletScriptController.cpp: 77 1 78 2019-10-28 Adrian Perez de Castro <aperez@igalia.com> 2 79 -
trunk/Source/WebCore/bindings/js/JSCustomElementRegistryCustom.cpp
r251425 r251691 176 176 177 177 // https://html.spec.whatwg.org/#dom-customelementregistry-whendefined 178 static JSValue whenDefinedPromise(JSGlobalObject& lexicalGlobalObject, CallFrame& callFrame, JSDOMGlobalObject& globalObject, CustomElementRegistry& registry, JSPromise Deferred& promiseDeferred)178 static JSValue whenDefinedPromise(JSGlobalObject& lexicalGlobalObject, CallFrame& callFrame, JSDOMGlobalObject& globalObject, CustomElementRegistry& registry, JSPromise& promise) 179 179 { 180 180 auto scope = DECLARE_THROW_SCOPE(lexicalGlobalObject.vm()); … … 192 192 193 193 if (registry.findInterface(localName)) { 194 DeferredPromise::create(globalObject, promise Deferred)->resolve();195 return promiseDeferred.promise();194 DeferredPromise::create(globalObject, promise)->resolve(); 195 return &promise; 196 196 } 197 197 198 198 auto result = registry.promiseMap().ensure(localName, [&] { 199 return DeferredPromise::create(globalObject, promise Deferred);199 return DeferredPromise::create(globalObject, promise); 200 200 }); 201 201 … … 208 208 209 209 ASSERT(globalObject()); 210 auto promiseDeferred = JSPromiseDeferred::tryCreate(globalObject()); 211 RELEASE_ASSERT(promiseDeferred); 212 JSValue promise = whenDefinedPromise(lexicalGlobalObject, callFrame, *globalObject(), wrapped(), *promiseDeferred); 210 auto* result = JSPromise::create(lexicalGlobalObject.vm(), lexicalGlobalObject.promiseStructure()); 211 JSValue promise = whenDefinedPromise(lexicalGlobalObject, callFrame, *globalObject(), wrapped(), *result); 213 212 214 213 if (UNLIKELY(scope.exception())) { 215 rejectPromiseWithExceptionIfAny(lexicalGlobalObject, *globalObject(), * promiseDeferred);214 rejectPromiseWithExceptionIfAny(lexicalGlobalObject, *globalObject(), *result); 216 215 scope.assertNoException(); 217 return promiseDeferred->promise();216 return result; 218 217 } 219 218 -
trunk/Source/WebCore/bindings/js/JSDOMConvertPromise.h
r251425 r251691 47 47 // 1. Let resolve be the original value of %Promise%.resolve. 48 48 // 2. Let promise be the result of calling resolve with %Promise% as the this value and V as the single argument value. 49 auto* promise = JSC::JSPromise::resolve (globalObject, value);49 auto* promise = JSC::JSPromise::resolvedPromise(globalObject, value); 50 50 if (scope.exception()) { 51 51 exceptionThrower(lexicalGlobalObject, scope); -
trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp
r251457 r251691 49 49 #include <JavaScriptCore/CodeBlock.h> 50 50 #include <JavaScriptCore/JSInternalPromise.h> 51 #include <JavaScriptCore/JSInternalPromiseDeferred.h>52 51 #include <JavaScriptCore/StructureInlines.h> 53 52 -
trunk/Source/WebCore/bindings/js/JSDOMOperationReturningPromise.h
r251425 r251691 36 36 using StaticOperation = JSC::EncodedJSValue(JSC::JSGlobalObject*, JSC::CallFrame*, Ref<DeferredPromise>&&, JSC::ThrowScope&); 37 37 38 template<Operation operation, PromiseExecutionScope executionScope,CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::RejectPromise>38 template<Operation operation, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::RejectPromise> 39 39 static JSC::EncodedJSValue call(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, const char* operationName) 40 40 { 41 return JSC::JSValue::encode(callPromiseFunction <executionScope>(lexicalGlobalObject, callFrame, [&operationName] (JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, Ref<DeferredPromise>&& promise) {41 return JSC::JSValue::encode(callPromiseFunction(lexicalGlobalObject, callFrame, [&operationName] (JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, Ref<DeferredPromise>&& promise) { 42 42 auto throwScope = DECLARE_THROW_SCOPE(JSC::getVM(&lexicalGlobalObject)); 43 43 … … 72 72 } 73 73 74 template<StaticOperation operation, PromiseExecutionScope executionScope,CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::RejectPromise>74 template<StaticOperation operation, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::RejectPromise> 75 75 static JSC::EncodedJSValue callStatic(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, const char*) 76 76 { 77 return JSC::JSValue::encode(callPromiseFunction <executionScope>(lexicalGlobalObject, callFrame, [] (JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, Ref<DeferredPromise>&& promise) {77 return JSC::JSValue::encode(callPromiseFunction(lexicalGlobalObject, callFrame, [] (JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, Ref<DeferredPromise>&& promise) { 78 78 auto throwScope = DECLARE_THROW_SCOPE(JSC::getVM(&lexicalGlobalObject)); 79 79 -
trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp
r251425 r251691 41 41 { 42 42 ASSERT(deferred()); 43 return deferred() ->promise();44 } 45 46 void DeferredPromise::callFunction(JSGlobalObject& lexicalGlobalObject, JSValue function, JSValue resolution)43 return deferred(); 44 } 45 46 void DeferredPromise::callFunction(JSGlobalObject& lexicalGlobalObject, ResolveMode mode, JSValue resolution) 47 47 { 48 48 if (!canInvokeCallback()) 49 49 return; 50 50 51 VM& vm = lexicalGlobalObject.vm(); 52 auto scope = DECLARE_THROW_SCOPE(vm); 53 54 CallData callData; 55 CallType callType = getCallData(vm, function, callData); 56 ASSERT(callType != CallType::None); 57 58 MarkedArgumentBuffer arguments; 59 arguments.append(resolution); 60 ASSERT(!arguments.hasOverflowed()); 61 62 call(&lexicalGlobalObject, function, callType, callData, jsUndefined(), arguments); 63 64 // DeferredPromise should only be used by internal implementations that are well behaved. 65 // In practice, the only exception we should ever see here is the TerminatedExecutionException. 66 EXCEPTION_ASSERT_UNUSED(scope, !scope.exception() || isTerminatedExecutionException(vm, scope.exception())); 51 // FIXME: We could have error since any JS call can throw stack-overflow errors. 52 // https://bugs.webkit.org/show_bug.cgi?id=203402 53 switch (mode) { 54 case ResolveMode::Resolve: 55 deferred()->resolve(&lexicalGlobalObject, resolution); 56 break; 57 case ResolveMode::Reject: 58 deferred()->reject(&lexicalGlobalObject, resolution); 59 break; 60 } 67 61 68 62 if (m_mode == Mode::ClearPromiseOnResolve) … … 72 66 void DeferredPromise::whenSettled(Function<void()>&& callback) 73 67 { 74 DOMPromise::whenPromiseIsSettled(globalObject(), deferred() ->promise(), WTFMove(callback));68 DOMPromise::whenPromiseIsSettled(globalObject(), deferred(), WTFMove(callback)); 75 69 } 76 70 … … 176 170 } 177 171 178 void rejectPromiseWithExceptionIfAny(JSC::JSGlobalObject& lexicalGlobalObject, JSDOMGlobalObject& globalObject, JSPromise Deferred& promiseDeferred)172 void rejectPromiseWithExceptionIfAny(JSC::JSGlobalObject& lexicalGlobalObject, JSDOMGlobalObject& globalObject, JSPromise& promise) 179 173 { 180 174 VM& vm = lexicalGlobalObject.vm(); … … 187 181 scope.clearException(); 188 182 189 DeferredPromise::create(globalObject, promise Deferred)->reject<IDLAny>(error);183 DeferredPromise::create(globalObject, promise)->reject<IDLAny>(error); 190 184 } 191 185 192 186 Ref<DeferredPromise> createDeferredPromise(JSC::JSGlobalObject&, JSDOMWindow& domWindow) 193 187 { 194 JSC::JSPromiseDeferred* deferred = JSC::JSPromiseDeferred::tryCreate(&domWindow); 195 // deferred can only be null in workers. 196 RELEASE_ASSERT(deferred); 197 return DeferredPromise::create(domWindow, *deferred); 188 auto* promise = JSPromise::create(domWindow.vm(), domWindow.promiseStructure()); 189 RELEASE_ASSERT(promise); 190 return DeferredPromise::create(domWindow, *promise); 198 191 } 199 192 -
trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h
r251425 r251691 30 30 #include "JSDOMGuardedObject.h" 31 31 #include <JavaScriptCore/CatchScope.h> 32 #include <JavaScriptCore/JSPromise Deferred.h>32 #include <JavaScriptCore/JSPromise.h> 33 33 34 34 namespace WebCore { … … 36 36 class JSDOMWindow; 37 37 38 class DeferredPromise : public DOMGuarded<JSC::JSPromise Deferred> {38 class DeferredPromise : public DOMGuarded<JSC::JSPromise> { 39 39 public: 40 40 enum class Mode { … … 45 45 static RefPtr<DeferredPromise> create(JSDOMGlobalObject& globalObject, Mode mode = Mode::ClearPromiseOnResolve) 46 46 { 47 auto* promiseDeferred = JSC::JSPromiseDeferred::tryCreate(&globalObject);48 if (!promiseDeferred)49 return nullptr;50 return adoptRef(new DeferredPromise(globalObject, *promise Deferred, mode));51 } 52 53 static Ref<DeferredPromise> create(JSDOMGlobalObject& globalObject, JSC::JSPromise Deferred& deferred, Mode mode = Mode::ClearPromiseOnResolve)47 JSC::VM& vm = JSC::getVM(&globalObject); 48 auto* promise = JSC::JSPromise::create(vm, globalObject.promiseStructure()); 49 ASSERT(promise); 50 return adoptRef(new DeferredPromise(globalObject, *promise, mode)); 51 } 52 53 static Ref<DeferredPromise> create(JSDOMGlobalObject& globalObject, JSC::JSPromise& deferred, Mode mode = Mode::ClearPromiseOnResolve) 54 54 { 55 55 return adoptRef(*new DeferredPromise(globalObject, deferred, mode)); … … 150 150 151 151 private: 152 DeferredPromise(JSDOMGlobalObject& globalObject, JSC::JSPromise Deferred& deferred, Mode mode)153 : DOMGuarded<JSC::JSPromise Deferred>(globalObject, deferred)152 DeferredPromise(JSDOMGlobalObject& globalObject, JSC::JSPromise& deferred, Mode mode) 153 : DOMGuarded<JSC::JSPromise>(globalObject, deferred) 154 154 , m_mode(mode) 155 155 { 156 156 } 157 157 158 JSC::JSPromiseDeferred* deferred() const { return guarded(); } 159 160 WEBCORE_EXPORT void callFunction(JSC::JSGlobalObject&, JSC::JSValue function, JSC::JSValue resolution); 161 162 void resolve(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue resolution) { callFunction(lexicalGlobalObject, deferred()->resolve(), resolution); } 163 void reject(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue resolution) { callFunction(lexicalGlobalObject, deferred()->reject(), resolution); } 158 JSC::JSPromise* deferred() const { return guarded(); } 159 160 enum class ResolveMode { Resolve, Reject }; 161 WEBCORE_EXPORT void callFunction(JSC::JSGlobalObject&, ResolveMode, JSC::JSValue resolution); 162 163 void resolve(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue resolution) { callFunction(lexicalGlobalObject, ResolveMode::Resolve, resolution); } 164 void reject(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue resolution) { callFunction(lexicalGlobalObject, ResolveMode::Reject, resolution); } 164 165 165 166 Mode m_mode; … … 170 171 public: 171 172 DOMPromiseDeferredBase(Ref<DeferredPromise>&& genericPromise) 172 : m_promise Deferred(WTFMove(genericPromise))173 : m_promise(WTFMove(genericPromise)) 173 174 { 174 175 } 175 176 176 177 DOMPromiseDeferredBase(DOMPromiseDeferredBase&& promise) 177 : m_promise Deferred(WTFMove(promise.m_promiseDeferred))178 : m_promise(WTFMove(promise.m_promise)) 178 179 { 179 180 } 180 181 181 182 DOMPromiseDeferredBase(const DOMPromiseDeferredBase& other) 182 : m_promise Deferred(other.m_promiseDeferred.copyRef())183 : m_promise(other.m_promise.copyRef()) 183 184 { 184 185 } … … 186 187 DOMPromiseDeferredBase& operator=(const DOMPromiseDeferredBase& other) 187 188 { 188 m_promise Deferred = other.m_promiseDeferred.copyRef();189 m_promise = other.m_promise.copyRef(); 189 190 return *this; 190 191 } … … 192 193 DOMPromiseDeferredBase& operator=(DOMPromiseDeferredBase&& other) 193 194 { 194 m_promise Deferred = WTFMove(other.m_promiseDeferred);195 m_promise = WTFMove(other.m_promise); 195 196 return *this; 196 197 } … … 198 199 void reject() 199 200 { 200 m_promise Deferred->reject();201 m_promise->reject(); 201 202 } 202 203 … … 204 205 void reject(ErrorType&&... error) 205 206 { 206 m_promise Deferred->reject(std::forward<ErrorType>(error)...);207 m_promise->reject(std::forward<ErrorType>(error)...); 207 208 } 208 209 … … 210 211 void rejectType(typename IDLType::ParameterType value) 211 212 { 212 m_promise Deferred->reject<IDLType>(std::forward<typename IDLType::ParameterType>(value));213 } 214 215 JSC::JSValue promise() const { return m_promise Deferred->promise(); };213 m_promise->reject<IDLType>(std::forward<typename IDLType::ParameterType>(value)); 214 } 215 216 JSC::JSValue promise() const { return m_promise->promise(); }; 216 217 217 218 void whenSettled(Function<void()>&& function) 218 219 { 219 m_promise Deferred->whenSettled(WTFMove(function));220 m_promise->whenSettled(WTFMove(function)); 220 221 } 221 222 222 223 protected: 223 Ref<DeferredPromise> m_promise Deferred;224 Ref<DeferredPromise> m_promise; 224 225 }; 225 226 … … 234 235 void resolve(typename IDLType::ParameterType value) 235 236 { 236 m_promise Deferred->resolve<IDLType>(std::forward<typename IDLType::ParameterType>(value));237 m_promise->resolve<IDLType>(std::forward<typename IDLType::ParameterType>(value)); 237 238 } 238 239 … … 256 257 void resolve() 257 258 { 258 m_promise Deferred->resolve();259 m_promise->resolve(); 259 260 } 260 261 … … 275 276 void fulfillPromiseWithArrayBuffer(Ref<DeferredPromise>&&, ArrayBuffer*); 276 277 void fulfillPromiseWithArrayBuffer(Ref<DeferredPromise>&&, const void*, size_t); 277 WEBCORE_EXPORT void rejectPromiseWithExceptionIfAny(JSC::JSGlobalObject&, JSDOMGlobalObject&, JSC::JSPromise Deferred&);278 WEBCORE_EXPORT void rejectPromiseWithExceptionIfAny(JSC::JSGlobalObject&, JSDOMGlobalObject&, JSC::JSPromise&); 278 279 279 280 enum class RejectedPromiseWithTypeErrorCause { NativeGetter, InvalidThis }; … … 282 283 using PromiseFunction = void(JSC::JSGlobalObject&, JSC::CallFrame&, Ref<DeferredPromise>&&); 283 284 284 enum class PromiseExecutionScope { WindowOnly, WindowOrWorker }; 285 286 template<PromiseFunction promiseFunction, PromiseExecutionScope executionScope> 285 template<PromiseFunction promiseFunction> 287 286 inline JSC::JSValue callPromiseFunction(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame) 288 287 { … … 291 290 292 291 auto& globalObject = callerGlobalObject(lexicalGlobalObject, callFrame); 293 JSC::JSPromiseDeferred* promiseDeferred = JSC::JSPromiseDeferred::tryCreate(&globalObject); 294 295 // promiseDeferred can be null when terminating a Worker abruptly. 296 if (executionScope == PromiseExecutionScope::WindowOrWorker && !promiseDeferred) 297 return JSC::jsUndefined(); 298 299 promiseFunction(lexicalGlobalObject, callFrame, DeferredPromise::create(globalObject, *promiseDeferred)); 300 301 rejectPromiseWithExceptionIfAny(lexicalGlobalObject, globalObject, *promiseDeferred); 302 EXCEPTION_ASSERT_UNUSED(scope, !scope.exception()); 303 return promiseDeferred->promise(); 292 auto* promise = JSC::JSPromise::create(vm, globalObject.promiseStructure()); 293 ASSERT(promise); 294 295 promiseFunction(lexicalGlobalObject, callFrame, DeferredPromise::create(globalObject, *promise)); 296 297 rejectPromiseWithExceptionIfAny(lexicalGlobalObject, globalObject, *promise); 298 // FIXME: We could have error since any JS call can throw stack-overflow errors. 299 // https://bugs.webkit.org/show_bug.cgi?id=203402 300 RETURN_IF_EXCEPTION(scope, JSC::jsUndefined()); 301 return promise; 304 302 } 305 303 306 template< PromiseExecutionScope executionScope,typename PromiseFunctor>304 template<typename PromiseFunctor> 307 305 inline JSC::JSValue callPromiseFunction(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame, PromiseFunctor functor) 308 306 { … … 311 309 312 310 auto& globalObject = callerGlobalObject(lexicalGlobalObject, callFrame); 313 JSC::JSPromiseDeferred* promiseDeferred = JSC::JSPromiseDeferred::tryCreate(&globalObject); 314 315 // promiseDeferred can be null when terminating a Worker abruptly. 316 if (executionScope == PromiseExecutionScope::WindowOrWorker && !promiseDeferred) 317 return JSC::jsUndefined(); 318 319 functor(lexicalGlobalObject, callFrame, DeferredPromise::create(globalObject, *promiseDeferred)); 320 321 rejectPromiseWithExceptionIfAny(lexicalGlobalObject, globalObject, *promiseDeferred); 322 EXCEPTION_ASSERT_UNUSED(scope, !scope.exception()); 323 return promiseDeferred->promise(); 311 auto* promise = JSC::JSPromise::create(vm, globalObject.promiseStructure()); 312 ASSERT(promise); 313 314 functor(lexicalGlobalObject, callFrame, DeferredPromise::create(globalObject, *promise)); 315 316 rejectPromiseWithExceptionIfAny(lexicalGlobalObject, globalObject, *promise); 317 // FIXME: We could have error since any JS call can throw stack-overflow errors. 318 // https://bugs.webkit.org/show_bug.cgi?id=203402 319 RETURN_IF_EXCEPTION(scope, JSC::jsUndefined()); 320 return promise; 324 321 } 325 322 … … 331 328 } 332 329 333 template<BindingPromiseFunction bindingPromiseFunction , PromiseExecutionScope executionScope>330 template<BindingPromiseFunction bindingPromiseFunction> 334 331 inline JSC::JSValue callPromiseFunction(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame& callFrame) 335 332 { 336 return callPromiseFunction<bindingPromiseFunctionAdapter<bindingPromiseFunction> , executionScope>(lexicalGlobalObject, callFrame);333 return callPromiseFunction<bindingPromiseFunctionAdapter<bindingPromiseFunction>>(lexicalGlobalObject, callFrame); 337 334 } 338 335 -
trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp
r251529 r251691 50 50 #include <JavaScriptCore/CodeBlock.h> 51 51 #include <JavaScriptCore/JSInternalPromise.h> 52 #include <JavaScriptCore/JSInternalPromiseDeferred.h>53 52 #include <JavaScriptCore/JSWebAssembly.h> 54 53 #include <JavaScriptCore/Microtask.h> 55 #include <JavaScriptCore/Promise DeferredTimer.h>54 #include <JavaScriptCore/PromiseTimer.h> 56 55 #include <JavaScriptCore/StrongInlines.h> 57 56 #include <wtf/Language.h> … … 318 317 if (RefPtr<Document> document = thisObject->wrapped().document()) 319 318 RELEASE_AND_RETURN(scope, document->moduleLoader().fetch(globalObject, moduleLoader, moduleKey, parameters, scriptFetcher)); 320 JSC::JSInternalPromiseDeferred* deferred = JSC::JSInternalPromiseDeferred::tryCreate(globalObject); 321 RETURN_IF_EXCEPTION(scope, nullptr); 322 RELEASE_AND_RETURN(scope, deferred->reject(globalObject, jsUndefined())); 319 JSC::JSInternalPromise* promise = JSC::JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 320 scope.release(); 321 promise->reject(globalObject, jsUndefined()); 322 return promise; 323 323 } 324 324 … … 338 338 if (RefPtr<Document> document = thisObject->wrapped().document()) 339 339 RELEASE_AND_RETURN(scope, document->moduleLoader().importModule(globalObject, moduleLoader, moduleName, parameters, sourceOrigin)); 340 JSC::JSInternalPromiseDeferred* deferred = JSC::JSInternalPromiseDeferred::tryCreate(globalObject); 341 RETURN_IF_EXCEPTION(scope, nullptr); 342 RELEASE_AND_RETURN(scope, deferred->reject(globalObject, jsUndefined())); 340 JSC::JSInternalPromise* promise = JSC::JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); 341 scope.release(); 342 promise->reject(globalObject, jsUndefined()); 343 return promise; 343 344 } 344 345 … … 352 353 353 354 #if ENABLE(WEBASSEMBLY) 354 static Optional<Vector<uint8_t>> tryAllocate(JSC::JSGlobalObject* lexicalGlobalObject, JSC::JSPromise Deferred* promise, const char* data, size_t byteSize)355 static Optional<Vector<uint8_t>> tryAllocate(JSC::JSGlobalObject* lexicalGlobalObject, JSC::JSPromise* promise, const char* data, size_t byteSize) 355 356 { 356 357 Vector<uint8_t> arrayBuffer; … … 366 367 } 367 368 368 static bool isResponseCorrect(JSC::JSGlobalObject* lexicalGlobalObject, FetchResponse* inputResponse, JSC::JSPromise Deferred* promise)369 static bool isResponseCorrect(JSC::JSGlobalObject* lexicalGlobalObject, FetchResponse* inputResponse, JSC::JSPromise* promise) 369 370 { 370 371 bool isResponseCorsSameOrigin = inputResponse->type() == ResourceResponse::Type::Basic || inputResponse->type() == ResourceResponse::Type::Cors || inputResponse->type() == ResourceResponse::Type::Default; … … 389 390 } 390 391 391 static void handleResponseOnStreamingAction(JSC::JSGlobalObject* globalObject, FetchResponse* inputResponse, JSC::JSPromise Deferred* promise, Function<void(JSC::JSGlobalObject* lexicalGlobalObject, const char* data, size_t byteSize)>&& actionCallback)392 static void handleResponseOnStreamingAction(JSC::JSGlobalObject* globalObject, FetchResponse* inputResponse, JSC::JSPromise* promise, Function<void(JSC::JSGlobalObject* lexicalGlobalObject, const char* data, size_t byteSize)>&& actionCallback) 392 393 { 393 394 if (!isResponseCorrect(globalObject, inputResponse, promise)) … … 434 435 } 435 436 436 void JSDOMWindowBase::compileStreaming(JSC::JSGlobalObject* globalObject, JSC::JSPromise Deferred* promise, JSC::JSValue source)437 void JSDOMWindowBase::compileStreaming(JSC::JSGlobalObject* globalObject, JSC::JSPromise* promise, JSC::JSValue source) 437 438 { 438 439 ASSERT(source); … … 440 441 VM& vm = globalObject->vm(); 441 442 442 ASSERT(vm.promise DeferredTimer->hasPendingPromise(promise));443 ASSERT(vm.promise DeferredTimer->hasDependancyInPendingPromise(promise, globalObject));443 ASSERT(vm.promiseTimer->hasPendingPromise(promise)); 444 ASSERT(vm.promiseTimer->hasDependancyInPendingPromise(promise, globalObject)); 444 445 445 446 if (auto inputResponse = JSFetchResponse::toWrapped(vm, source)) { … … 452 453 } 453 454 454 void JSDOMWindowBase::instantiateStreaming(JSC::JSGlobalObject* globalObject, JSC::JSPromise Deferred* promise, JSC::JSValue source, JSC::JSObject* importedObject)455 void JSDOMWindowBase::instantiateStreaming(JSC::JSGlobalObject* globalObject, JSC::JSPromise* promise, JSC::JSValue source, JSC::JSObject* importedObject) 455 456 { 456 457 ASSERT(source); … … 458 459 VM& vm = globalObject->vm(); 459 460 460 ASSERT(vm.promise DeferredTimer->hasPendingPromise(promise));461 ASSERT(vm.promise DeferredTimer->hasDependancyInPendingPromise(promise, globalObject));462 ASSERT(vm.promise DeferredTimer->hasDependancyInPendingPromise(promise, importedObject));461 ASSERT(vm.promiseTimer->hasPendingPromise(promise)); 462 ASSERT(vm.promiseTimer->hasDependancyInPendingPromise(promise, globalObject)); 463 ASSERT(vm.promiseTimer->hasDependancyInPendingPromise(promise, importedObject)); 463 464 464 465 if (auto inputResponse = JSFetchResponse::toWrapped(vm, source)) { -
trunk/Source/WebCore/bindings/js/JSDOMWindowBase.h
r251457 r251691 99 99 100 100 #if ENABLE(WEBASSEMBLY) 101 static void compileStreaming(JSC::JSGlobalObject*, JSC::JSPromise Deferred*, JSC::JSValue);102 static void instantiateStreaming(JSC::JSGlobalObject*, JSC::JSPromise Deferred*, JSC::JSValue, JSC::JSObject*);101 static void compileStreaming(JSC::JSGlobalObject*, JSC::JSPromise*, JSC::JSValue); 102 static void instantiateStreaming(JSC::JSGlobalObject*, JSC::JSPromise*, JSC::JSValue, JSC::JSObject*); 103 103 #endif 104 104 -
trunk/Source/WebCore/bindings/js/ScriptModuleLoader.cpp
r251582 r251691 44 44 #include <JavaScriptCore/Completion.h> 45 45 #include <JavaScriptCore/JSInternalPromise.h> 46 #include <JavaScriptCore/JSInternalPromiseDeferred.h>47 46 #include <JavaScriptCore/JSModuleRecord.h> 48 47 #include <JavaScriptCore/JSScriptFetchParameters.h> … … 148 147 149 148 auto& globalObject = *JSC::jsCast<JSDOMGlobalObject*>(jsGlobalObject); 150 auto* jsPromise = JSC::JSInternalPromise Deferred::tryCreate(&globalObject);149 auto* jsPromise = JSC::JSInternalPromise::create(vm, globalObject.internalPromiseStructure()); 151 150 RELEASE_ASSERT(jsPromise); 152 151 auto deferred = DeferredPromise::create(globalObject, *jsPromise); 153 152 if (moduleKeyValue.isSymbol()) { 154 153 deferred->reject(TypeError, "Symbol module key should be already fulfilled with the inlined resource."_s); 155 return jsPromise ->promise();154 return jsPromise; 156 155 } 157 156 158 157 if (!moduleKeyValue.isString()) { 159 158 deferred->reject(TypeError, "Module key is not Symbol or String."_s); 160 return jsPromise ->promise();159 return jsPromise; 161 160 } 162 161 … … 166 165 if (!completedURL.isValid()) { 167 166 deferred->reject(TypeError, "Module key is a valid URL."_s); 168 return jsPromise ->promise();167 return jsPromise; 169 168 } 170 169 … … 179 178 m_loaders.remove(WTFMove(loader)); 180 179 rejectToPropagateNetworkError(deferred.get(), ModuleFetchFailureKind::WasErrored, "Importing a module script failed."_s); 181 return jsPromise ->promise();182 } 183 184 return jsPromise ->promise();180 return jsPromise; 181 } 182 183 return jsPromise; 185 184 } 186 185 … … 217 216 static JSC::JSInternalPromise* rejectPromise(JSDOMGlobalObject& globalObject, ExceptionCode ec, ASCIILiteral message) 218 217 { 219 auto* jsPromise = JS C::JSInternalPromiseDeferred::tryCreate(&globalObject);218 auto* jsPromise = JSInternalPromise::create(globalObject.vm(), globalObject.internalPromiseStructure()); 220 219 RELEASE_ASSERT(jsPromise); 221 220 auto deferred = DeferredPromise::create(globalObject, *jsPromise); 222 221 deferred->reject(ec, WTFMove(message)); 223 return jsPromise ->promise();222 return jsPromise; 224 223 } 225 224 -
trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp
r251425 r251691 43 43 #include <JavaScriptCore/JSCInlines.h> 44 44 #include <JavaScriptCore/JSLock.h> 45 #include <JavaScriptCore/Promise DeferredTimer.h>45 #include <JavaScriptCore/PromiseTimer.h> 46 46 #include <JavaScriptCore/StrongInlines.h> 47 47 … … 251 251 processTimer(m_vm->heap.fullActivityCallback()); 252 252 processTimer(m_vm->heap.edenActivityCallback()); 253 processTimer(m_vm->promise DeferredTimer.ptr());253 processTimer(m_vm->promiseTimer.ptr()); 254 254 } 255 255 … … 264 264 processTimer(m_vm->heap.fullActivityCallback()); 265 265 processTimer(m_vm->heap.edenActivityCallback()); 266 processTimer(m_vm->promise DeferredTimer.ptr());266 processTimer(m_vm->promiseTimer.ptr()); 267 267 } 268 268 -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r251518 r251691 5198 5198 my @callFunctionTemplateArguments = (); 5199 5199 push(@callFunctionTemplateArguments, $functionBodyName); 5200 push(@callFunctionTemplateArguments, "PromiseExecutionScope::${exposureScope}") if $hasPromiseReturnType && !$operation->extendedAttributes->{ReturnsOwnPromise};5201 5200 push(@callFunctionTemplateArguments, "CastedThisErrorBehavior::Assert") if ($operation->extendedAttributes->{PrivateIdentifier} and not $operation->extendedAttributes->{PublicIdentifier}); 5202 5201 -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp
r251425 r251691 2686 2686 EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionCalculateSecretResult(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 2687 2687 { 2688 return IDLOperationReturningPromise<JSTestGlobalObject>::call<jsTestGlobalObjectInstanceFunctionCalculateSecretResultBody , PromiseExecutionScope::WindowOnly>(*lexicalGlobalObject, *callFrame, "calculateSecretResult");2688 return IDLOperationReturningPromise<JSTestGlobalObject>::call<jsTestGlobalObjectInstanceFunctionCalculateSecretResultBody>(*lexicalGlobalObject, *callFrame, "calculateSecretResult"); 2689 2689 } 2690 2690 -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp
r251425 r251691 307 307 EncodedJSValue JSC_HOST_CALL jsTestNodePrototypeFunctionTestWorkerPromise(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 308 308 { 309 return IDLOperationReturningPromise<JSTestNode>::call<jsTestNodePrototypeFunctionTestWorkerPromiseBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testWorkerPromise");309 return IDLOperationReturningPromise<JSTestNode>::call<jsTestNodePrototypeFunctionTestWorkerPromiseBody>(*lexicalGlobalObject, *callFrame, "testWorkerPromise"); 310 310 } 311 311 … … 322 322 EncodedJSValue JSC_HOST_CALL jsTestNodePrototypeFunctionCalculateSecretResult(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 323 323 { 324 return IDLOperationReturningPromise<JSTestNode>::call<jsTestNodePrototypeFunctionCalculateSecretResultBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "calculateSecretResult");324 return IDLOperationReturningPromise<JSTestNode>::call<jsTestNodePrototypeFunctionCalculateSecretResultBody>(*lexicalGlobalObject, *callFrame, "calculateSecretResult"); 325 325 } 326 326 -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
r251425 r251691 5630 5630 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCalculateSecretResult(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 5631 5631 { 5632 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionCalculateSecretResultBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "calculateSecretResult");5632 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionCalculateSecretResultBody>(*lexicalGlobalObject, *callFrame, "calculateSecretResult"); 5633 5633 } 5634 5634 … … 8380 8380 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunction(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8381 8381 { 8382 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testPromiseFunction");8382 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionBody>(*lexicalGlobalObject, *callFrame, "testPromiseFunction"); 8383 8383 } 8384 8384 … … 8399 8399 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8400 8400 { 8401 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testPromiseFunctionWithFloatArgument");8401 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentBody>(*lexicalGlobalObject, *callFrame, "testPromiseFunctionWithFloatArgument"); 8402 8402 } 8403 8403 … … 8414 8414 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithException(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8415 8415 { 8416 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testPromiseFunctionWithException");8416 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionBody>(*lexicalGlobalObject, *callFrame, "testPromiseFunctionWithException"); 8417 8417 } 8418 8418 … … 8431 8431 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8432 8432 { 8433 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testPromiseFunctionWithOptionalIntArgument");8433 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentBody>(*lexicalGlobalObject, *callFrame, "testPromiseFunctionWithOptionalIntArgument"); 8434 8434 } 8435 8435 … … 8479 8479 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseOverloadedFunction(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8480 8480 { 8481 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseOverloadedFunctionOverloadDispatcher , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testPromiseOverloadedFunction");8481 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestPromiseOverloadedFunctionOverloadDispatcher>(*lexicalGlobalObject, *callFrame, "testPromiseOverloadedFunction"); 8482 8482 } 8483 8483 … … 8493 8493 EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionTestStaticPromiseFunction(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8494 8494 { 8495 return IDLOperationReturningPromise<JSTestObj>::callStatic<jsTestObjConstructorFunctionTestStaticPromiseFunctionBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testStaticPromiseFunction");8495 return IDLOperationReturningPromise<JSTestObj>::callStatic<jsTestObjConstructorFunctionTestStaticPromiseFunctionBody>(*lexicalGlobalObject, *callFrame, "testStaticPromiseFunction"); 8496 8496 } 8497 8497 … … 8507 8507 EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionTestStaticPromiseFunctionWithException(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8508 8508 { 8509 return IDLOperationReturningPromise<JSTestObj>::callStatic<jsTestObjConstructorFunctionTestStaticPromiseFunctionWithExceptionBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testStaticPromiseFunctionWithException");8509 return IDLOperationReturningPromise<JSTestObj>::callStatic<jsTestObjConstructorFunctionTestStaticPromiseFunctionWithExceptionBody>(*lexicalGlobalObject, *callFrame, "testStaticPromiseFunctionWithException"); 8510 8510 } 8511 8511 … … 8520 8520 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestCustomPromiseFunction(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8521 8521 { 8522 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestCustomPromiseFunctionBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testCustomPromiseFunction");8522 return IDLOperationReturningPromise<JSTestObj>::call<jsTestObjPrototypeFunctionTestCustomPromiseFunctionBody>(*lexicalGlobalObject, *callFrame, "testCustomPromiseFunction"); 8523 8523 } 8524 8524 … … 8533 8533 EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionTestStaticCustomPromiseFunction(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame) 8534 8534 { 8535 return IDLOperationReturningPromise<JSTestObj>::callStatic<jsTestObjConstructorFunctionTestStaticCustomPromiseFunctionBody , PromiseExecutionScope::WindowOrWorker>(*lexicalGlobalObject, *callFrame, "testStaticCustomPromiseFunction");8535 return IDLOperationReturningPromise<JSTestObj>::callStatic<jsTestObjConstructorFunctionTestStaticCustomPromiseFunctionBody>(*lexicalGlobalObject, *callFrame, "testStaticCustomPromiseFunction"); 8536 8536 } 8537 8537 -
trunk/Source/WebCore/workers/WorkerRunLoop.cpp
r248846 r251691 39 39 #include "WorkerGlobalScope.h" 40 40 #include "WorkerThread.h" 41 #include <JavaScriptCore/Promise DeferredTimer.h>41 #include <JavaScriptCore/PromiseTimer.h> 42 42 43 43 #if USE(GLIB) -
trunk/Source/WebCore/worklets/WorkletScriptController.cpp
r251425 r251691 42 42 #include <JavaScriptCore/GCActivityCallback.h> 43 43 #include <JavaScriptCore/JSLock.h> 44 #include <JavaScriptCore/Promise DeferredTimer.h>44 #include <JavaScriptCore/PromiseTimer.h> 45 45 #include <JavaScriptCore/StrongInlines.h> 46 46
Note: See TracChangeset
for help on using the changeset viewer.