-
https://github.com/domenic/promises-unwrappingweinig@apple.com authored
https://bugs.webkit.org/show_bug.cgi?id=120954 Reviewed by Filip Pizlo. Source/JavaScriptCore: Update Promises to the revised spec. Notable changes: - JSPromiseResolver is gone. - TaskContext has been renamed Microtask and now has a virtual run() function. - Instead of using custom InternalFunction subclasses, JSFunctions are used with PrivateName properties for internal slots. * CMakeLists.txt: * DerivedSources.make: * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: * JavaScriptCore.xcodeproj/project.pbxproj: * interpreter/CallFrame.h: (JSC::ExecState::promiseConstructorTable): * runtime/CommonIdentifiers.cpp: (JSC::CommonIdentifiers::CommonIdentifiers): * runtime/CommonIdentifiers.h: * runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::reset): (JSC::JSGlobalObject::visitChildren): (JSC::JSGlobalObject::queueMicrotask): * runtime/JSGlobalObject.h: (JSC::JSGlobalObject::promiseConstructor): (JSC::JSGlobalObject::promisePrototype): (JSC::JSGlobalObject::promiseStructure): * runtime/JSPromise.cpp: (JSC::JSPromise::create): (JSC::JSPromise::JSPromise): (JSC::JSPromise::finishCreation): (JSC::JSPromise::visitChildren): (JSC::JSPromise::reject): (JSC::JSPromise::resolve): (JSC::JSPromise::appendResolveReaction): (JSC::JSPromise::appendRejectReaction): (JSC::triggerPromiseReactions): * runtime/JSPromise.h: (JSC::JSPromise::status): (JSC::JSPromise::result): (JSC::JSPromise::constructor): * runtime/JSPromiseCallback.cpp: Removed. * runtime/JSPromiseCallback.h: Removed. * runtime/JSPromiseConstructor.cpp: (JSC::constructPromise): (JSC::JSPromiseConstructor::getCallData): (JSC::JSPromiseConstructorFuncCast): (JSC::JSPromiseConstructorFuncResolve): (JSC::JSPromiseConstructorFuncReject): * runtime/JSPromiseConstructor.h: * runtime/JSPromiseDeferred.cpp: Added. (JSC::JSPromiseDeferred::create): (JSC::JSPromiseDeferred::JSPromiseDeferred): (JSC::JSPromiseDeferred::finishCreation): (JSC::JSPromiseDeferred::visitChildren): (JSC::createJSPromiseDeferredFromConstructor): (JSC::updateDeferredFromPotentialThenable): * runtime/JSPromiseDeferred.h: Added. (JSC::JSPromiseDeferred::createStructure): (JSC::JSPromiseDeferred::promise): (JSC::JSPromiseDeferred::resolve): (JSC::JSPromiseDeferred::reject): * runtime/JSPromiseFunctions.cpp: Added. (JSC::deferredConstructionFunction): (JSC::createDeferredConstructionFunction): (JSC::identifyFunction): (JSC::createIdentifyFunction): (JSC::promiseAllCountdownFunction): (JSC::createPromiseAllCountdownFunction): (JSC::promiseResolutionHandlerFunction): (JSC::createPromiseResolutionHandlerFunction): (JSC::rejectPromiseFunction): (JSC::createRejectPromiseFunction): (JSC::resolvePromiseFunction): (JSC::createResolvePromiseFunction): (JSC::throwerFunction): (JSC::createThrowerFunction): * runtime/JSPromiseFunctions.h: Added. * runtime/JSPromisePrototype.cpp: (JSC::JSPromisePrototypeFuncThen): (JSC::JSPromisePrototypeFuncCatch): * runtime/JSPromiseReaction.cpp: Added. (JSC::createExecutePromiseReactionMicroTask): (JSC::ExecutePromiseReactionMicroTask::run): (JSC::JSPromiseReaction::create): (JSC::JSPromiseReaction::JSPromiseReaction): (JSC::JSPromiseReaction::finishCreation): (JSC::JSPromiseReaction::visitChildren): * runtime/JSPromiseReaction.h: Added. (JSC::JSPromiseReaction::createStructure): (JSC::JSPromiseReaction::deferred): (JSC::JSPromiseReaction::handler): * runtime/JSPromiseResolver.cpp: Removed. * runtime/JSPromiseResolver.h: Removed. * runtime/JSPromiseResolverConstructor.cpp: Removed. * runtime/JSPromiseResolverConstructor.h: Removed. * runtime/JSPromiseResolverPrototype.cpp: Removed. * runtime/JSPromiseResolverPrototype.h: Removed. * runtime/Microtask.h: Added. * runtime/VM.cpp: (JSC::VM::VM): (JSC::VM::~VM): * runtime/VM.h: Source/WebCore: * ForwardingHeaders/runtime/JSPromiseDeferred.h: Added. * ForwardingHeaders/runtime/JSPromiseResolver.h: Removed. * bindings/js/JSDOMGlobalObjectTask.cpp: (WebCore::JSGlobalObjectTask::JSGlobalObjectTask): * bindings/js/JSDOMGlobalObjectTask.h: * bindings/js/JSDOMPromise.cpp: (WebCore::DeferredWrapper::DeferredWrapper): (WebCore::DeferredWrapper::promise): (WebCore::DeferredWrapper::resolve): (WebCore::DeferredWrapper::reject): * bindings/js/JSDOMPromise.h: (WebCore::DeferredWrapper::resolve): (WebCore::DeferredWrapper::reject): (WebCore::DeferredWrapper::resolve<String>): (WebCore::DeferredWrapper::resolve<bool>): (WebCore::char>>): (WebCore::DeferredWrapper::reject<String>): * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::queueTaskToEventLoop): * bindings/js/JSDOMWindowBase.h: * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::encrypt): (WebCore::JSSubtleCrypto::decrypt): (WebCore::JSSubtleCrypto::sign): (WebCore::JSSubtleCrypto::verify): (WebCore::JSSubtleCrypto::digest): (WebCore::JSSubtleCrypto::generateKey): (WebCore::JSSubtleCrypto::importKey): (WebCore::JSSubtleCrypto::exportKey): (WebCore::JSSubtleCrypto::wrapKey): (WebCore::JSSubtleCrypto::unwrapKey): * bindings/js/JSWorkerGlobalScopeBase.cpp: (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop): * bindings/js/JSWorkerGlobalScopeBase.h: LayoutTests: * crypto/subtle/argument-conversion.html: * crypto/subtle/resources/common.js: * crypto/subtle/sha-1.html: * crypto/subtle/sha-224.html: * crypto/subtle/sha-256.html: * crypto/subtle/sha-384.html: * crypto/subtle/sha-512.html: * js/dom/Promise-already-fulfilled-expected.txt: Removed. * js/dom/Promise-already-fulfilled.html: Removed. * js/dom/Promise-already-rejected.html: * js/dom/Promise-already-resolved.html: * js/dom/Promise-catch-expected.txt: * js/dom/Promise-catch-in-workers-expected.txt: * js/dom/Promise-catch.html: * js/dom/Promise-chain.html: * js/dom/Promise-exception-expected.txt: * js/dom/Promise-exception.html: * js/dom/Promise-expected.txt: * js/dom/Promise-fulfill-expected.txt: Removed. * js/dom/Promise-fulfill-in-workers-expected.txt: Removed. * js/dom/Promise-fulfill-in-workers.html: Removed. * js/dom/Promise-fulfill.html: Removed. * js/dom/Promise-init-callback-receiver-expected.txt: Added. * js/dom/Promise-init-callback-receiver.html: Added. * js/dom/Promise-init-expected.txt: * js/dom/Promise-init-in-workers-expected.txt: * js/dom/Promise-init.html: * js/dom/Promise-onFulfilled-deep-expected.txt: Added. * js/dom/Promise-onFulfilled-deep.html: Added. * js/dom/Promise-onRejected-deep-expected.txt: Added. * js/dom/Promise-onRejected-deep.html: Added. * js/dom/Promise-reject.html: * js/dom/Promise-resolve-chain.html: * js/dom/Promise-resolve-expected.txt: * js/dom/Promise-resolve-in-workers-expected.txt: * js/dom/Promise-resolve-state-expected.txt: Added. * js/dom/Promise-resolve-state-in-workers-expected.txt: Added. * js/dom/Promise-resolve-state-in-workers.html: Added. * js/dom/Promise-resolve-state.html: Added. * js/dom/Promise-resolve-with-itself-expected.txt: Added. * js/dom/Promise-resolve-with-itself.html: Added. * js/dom/Promise-resolve-with-then-exception.html: * js/dom/Promise-resolve-with-then-fulfill-expected.txt: * js/dom/Promise-resolve-with-then-fulfill.html: * js/dom/Promise-resolve-with-then-reject-expected.txt: * js/dom/Promise-resolve-with-then-reject.html: * js/dom/Promise-resolve.html: * js/dom/Promise-simple-expected.txt: * js/dom/Promise-simple-fulfill-expected.txt: Removed. * js/dom/Promise-simple-fulfill-inside-callback-expected.txt: Removed. * js/dom/Promise-simple-fulfill-inside-callback.html: Removed. * js/dom/Promise-simple-fulfill.html: Removed. * js/dom/Promise-simple-in-workers-expected.txt: * js/dom/Promise-simple-resolve-expected.txt: Added. * js/dom/Promise-simple-resolve.html: Added. * js/dom/Promise-simple.html: * js/dom/Promise-static-all-expected.txt: Added. * js/dom/Promise-static-all.html: Added. * js/dom/Promise-static-cast-expected.txt: Added. * js/dom/Promise-static-cast.html: Added. * js/dom/Promise-static-fulfill-expected.txt: Removed. * js/dom/Promise-static-fulfill.html: Removed. * js/dom/Promise-static-race-expected.txt: Added. * js/dom/Promise-static-race.html: Added. * js/dom/Promise-static-resolve.html: * js/dom/Promise-then-callback-receiver-expected.txt: Added. * js/dom/Promise-then-callback-receiver.html: Added. * js/dom/Promise-then-expected.txt: * js/dom/Promise-then-in-workers-expected.txt: * js/dom/Promise-then-without-callbacks.html: * js/dom/Promise-then.html: * js/dom/Promise-types-expected.txt: * js/dom/Promise-types.html: * js/dom/Promise.html: * js/resources/Promise-catch-in-workers.js: * js/resources/Promise-fulfill-in-workers.js: Removed. * js/resources/Promise-init-in-workers.js: * js/resources/Promise-reject-in-workers.js: * js/resources/Promise-resolve-in-workers.js: * js/resources/Promise-resolve-state-in-workers.js: Added. * js/resources/Promise-simple-in-workers.js: * js/resources/Promise-then-in-workers.js: * js/resources/Promise-then-without-callbacks-in-workers.js: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161241 268f45cc-cd09-0410-ab3c-d52691b4dbfc
349af4e4