Skip to content

Commit 7f38ebb

Browse files
committed
[JSC] Apply Promise.try spec change
https://bugs.webkit.org/show_bug.cgi?id=321890 rdar://185064567 Reviewed by Sosuke Suzuki. Test262 is updated[1] to include the latest spec change proposal for Promise.try[2], which uses PromiseResolve instead of a promise created by NewPromiseCapability. This simplifies our Promise.try implementation since we can just use @promiseResolve and @promisereject helpers instead. Also this removes the reference to @newPromiseCapability in JSC code. So we drop PromiseOperations.js and its JS builtins, and replace @newPromiseCapability with C++ version for remaining WebCore users. WebCore users can be replaced by using normal Promise + first-resolving handler. This is fixed in a subsequent change. [1]: tc39/test262#5072 [2]: tc39/ecma262#3883 * JSTests/test262/expectations.yaml: * Source/JavaScriptCore/CMakeLists.txt: * Source/JavaScriptCore/DerivedSources-input.xcfilelist: * Source/JavaScriptCore/DerivedSources.make: * Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: * Source/JavaScriptCore/builtins/BuiltinNames.h: * Source/JavaScriptCore/builtins/PromiseConstructor.js: (try): * Source/JavaScriptCore/builtins/PromiseOperations.js: Removed. * Source/JavaScriptCore/bytecode/LinkTimeConstant.h: * Source/JavaScriptCore/runtime/JSGlobalObject.cpp: (JSC::JSC_DEFINE_HOST_FUNCTION): (JSC::JSGlobalObject::init): Canonical link: https://commits.webkit.org/319276@main
1 parent b1701b3 commit 7f38ebb

10 files changed

Lines changed: 14 additions & 97 deletions

File tree

‎JSTests/test262/expectations.yaml‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ test/built-ins/Function/prototype/caller/prop-desc.js:
3737
test/built-ins/Function/prototype/toString/built-in-function-object.js:
3838
default: 3
3939
strict mode: 3
40-
test/built-ins/Promise/try/avoids-wrap-for-subclass.js:
41-
default: 3
42-
strict mode: 3
43-
test/built-ins/Promise/try/avoids-wrap.js:
44-
default: 3
45-
strict mode: 3
4640
test/built-ins/Proxy/apply/arguments-realm.js:
4741
default: 3
4842
strict mode: 3

‎Source/JavaScriptCore/CMakeLists.txt‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,6 @@ set(JavaScriptCore_BUILTINS_SOURCES
382382
${JAVASCRIPTCORE_DIR}/builtins/MapPrototype.js
383383
${JAVASCRIPTCORE_DIR}/builtins/ObjectConstructor.js
384384
${JAVASCRIPTCORE_DIR}/builtins/PromiseConstructor.js
385-
${JAVASCRIPTCORE_DIR}/builtins/PromiseOperations.js
386385
${JAVASCRIPTCORE_DIR}/builtins/ProxyHelpers.js
387386
${JAVASCRIPTCORE_DIR}/builtins/ReflectObject.js
388387
${JAVASCRIPTCORE_DIR}/builtins/SetPrototype.js

‎Source/JavaScriptCore/DerivedSources-input.xcfilelist‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ $(PROJECT_DIR)/builtins/MapConstructor.js
6060
$(PROJECT_DIR)/builtins/MapPrototype.js
6161
$(PROJECT_DIR)/builtins/ObjectConstructor.js
6262
$(PROJECT_DIR)/builtins/PromiseConstructor.js
63-
$(PROJECT_DIR)/builtins/PromiseOperations.js
6463
$(PROJECT_DIR)/builtins/ProxyHelpers.js
6564
$(PROJECT_DIR)/builtins/ReflectObject.js
6665
$(PROJECT_DIR)/builtins/SetPrototype.js

‎Source/JavaScriptCore/DerivedSources.make‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ JavaScriptCore_BUILTINS_SOURCES = \
122122
$(JavaScriptCore)/builtins/MapPrototype.js \
123123
$(JavaScriptCore)/builtins/ObjectConstructor.js \
124124
$(JavaScriptCore)/builtins/PromiseConstructor.js \
125-
$(JavaScriptCore)/builtins/PromiseOperations.js \
126125
$(JavaScriptCore)/builtins/ProxyHelpers.js \
127126
$(JavaScriptCore)/builtins/ReflectObject.js \
128127
$(JavaScriptCore)/builtins/SetPrototype.js \

‎Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4972,7 +4972,6 @@
49724972
7CF9BC581B65D9A3009DB1EF /* ArrayConstructor.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = ArrayConstructor.js; sourceTree = "<group>"; };
49734973
7CF9BC591B65D9A3009DB1EF /* ArrayIteratorPrototype.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = ArrayIteratorPrototype.js; sourceTree = "<group>"; };
49744974
7CF9BC5C1B65D9B1009DB1EF /* ObjectConstructor.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = ObjectConstructor.js; sourceTree = "<group>"; };
4975-
7CF9BC5D1B65D9B1009DB1EF /* PromiseOperations.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = PromiseOperations.js; sourceTree = "<group>"; };
49764975
7CF9BC5E1B65D9B1009DB1EF /* PromiseConstructor.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = PromiseConstructor.js; sourceTree = "<group>"; };
49774976
7CF9BC5F1B65D9B1009DB1EF /* ReflectObject.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = ReflectObject.js; sourceTree = "<group>"; };
49784977
7D5FB18D20744AE8005DDF64 /* IntlPluralRulesPrototype.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IntlPluralRulesPrototype.h; sourceTree = "<group>"; };
@@ -10667,7 +10666,6 @@
1066710666
E30677971B8BC6F5003F87F0 /* ModuleLoader.js */,
1066810667
7CF9BC5C1B65D9B1009DB1EF /* ObjectConstructor.js */,
1066910668
7CF9BC5E1B65D9B1009DB1EF /* PromiseConstructor.js */,
10670-
7CF9BC5D1B65D9B1009DB1EF /* PromiseOperations.js */,
1067110669
E34AE50028B75C07006088FA /* ProxyHelpers.js */,
1067210670
7CF9BC5F1B65D9B1009DB1EF /* ReflectObject.js */,
1067310671
7035587D1C418419004BD7BF /* SetPrototype.js */,

‎Source/JavaScriptCore/builtins/BuiltinNames.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ namespace JSC {
9292
macro(promiseReturnUndefinedOnFulfilled) \
9393
macro(promiseResolve) \
9494
macro(promiseReject) \
95+
macro(newPromiseCapability) \
9596
macro(performPromiseThen) \
9697
macro(push) \
9798
macro(repeatCharacter) \

‎Source/JavaScriptCore/builtins/PromiseConstructor.js‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,12 @@ function try(callback /*, ...args */)
3434
for (var i = 1; i < @argumentCount(); i++)
3535
@putByValDirect(args, i - 1, arguments[i]);
3636

37-
var promiseCapability = @newPromiseCapability(this);
3837
try {
3938
var value = callback.@apply(@undefined, args);
40-
promiseCapability.resolve.@call(@undefined, value);
4139
} catch (error) {
42-
promiseCapability.reject.@call(@undefined, error);
40+
return @promiseReject(this, error);
4341
}
44-
45-
return promiseCapability.promise;
42+
return @promiseResolve(this, value);
4643
}
4744

4845
@nakedConstructor

‎Source/JavaScriptCore/builtins/PromiseOperations.js‎

Lines changed: 0 additions & 81 deletions
This file was deleted.

‎Source/JavaScriptCore/bytecode/LinkTimeConstant.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class JSGlobalObject;
6868
v(promiseReturnUndefinedOnFulfilled, nullptr) \
6969
v(promiseResolve, nullptr) \
7070
v(promiseReject, nullptr) \
71+
v(newPromiseCapability, nullptr) \
7172
v(performPromiseThen, nullptr) \
7273
v(makeTypeError, nullptr) \
7374
v(AggregateError, nullptr) \

‎Source/JavaScriptCore/runtime/JSGlobalObject.cpp‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ static JSC_DECLARE_HOST_FUNCTION(newHandledRejectedPromise);
381381
static JSC_DECLARE_HOST_FUNCTION(promiseReturnUndefinedOnFulfilled);
382382
static JSC_DECLARE_HOST_FUNCTION(promiseResolve);
383383
static JSC_DECLARE_HOST_FUNCTION(promiseReject);
384+
static JSC_DECLARE_HOST_FUNCTION(newPromiseCapability);
384385
static JSC_DECLARE_HOST_FUNCTION(performPromiseThen);
385386
#if ASSERT_ENABLED
386387
static JSC_DECLARE_HOST_FUNCTION(assertCall);
@@ -868,6 +869,12 @@ JSC_DEFINE_HOST_FUNCTION(promiseReject, (JSGlobalObject* globalObject, CallFrame
868869
return JSValue::encode(JSPromise::promiseReject(globalObject, constructor, argument));
869870
}
870871

872+
JSC_DEFINE_HOST_FUNCTION(newPromiseCapability, (JSGlobalObject* globalObject, CallFrame* callFrame))
873+
{
874+
ASSERT(callFrame->argumentCount() == 1);
875+
return JSValue::encode(JSPromise::createNewPromiseCapability(globalObject, callFrame->uncheckedArgument(0)));
876+
}
877+
871878
JSC_DEFINE_HOST_FUNCTION(performPromiseThen, (JSGlobalObject* globalObject, CallFrame* callFrame))
872879
{
873880
auto* promise = uncheckedDowncast<JSPromise>(callFrame->uncheckedArgument(0));
@@ -1991,6 +1998,9 @@ capitalName ## Constructor* lowerName ## Constructor = featureFlag ? capitalName
19911998
m_linkTimeConstants[static_cast<unsigned>(LinkTimeConstant::promiseReject)].initLater([] (const Initializer<JSCell>& init) {
19921999
init.set(JSFunction::create(init.vm, init.owner, 2, "promiseReject"_s, promiseReject, ImplementationVisibility::Private, PromiseRejectIntrinsic));
19932000
});
2001+
m_linkTimeConstants[static_cast<unsigned>(LinkTimeConstant::newPromiseCapability)].initLater([] (const Initializer<JSCell>& init) {
2002+
init.set(JSFunction::create(init.vm, init.owner, 1, "newPromiseCapability"_s, newPromiseCapability, ImplementationVisibility::Private));
2003+
});
19942004
m_linkTimeConstants[static_cast<unsigned>(LinkTimeConstant::performPromiseThen)].initLater([] (const Initializer<JSCell>& init) {
19952005
init.set(JSFunction::create(init.vm, init.owner, 4, "performPromiseThen"_s, performPromiseThen, ImplementationVisibility::Private));
19962006
});

0 commit comments

Comments
 (0)