Skip to content

Commit 3d045d5

Browse files
committed
Use concrete types in NewPromiseCapability where known.
(cherry picked from commit 2e6fcdd)
1 parent e5717b8 commit 3d045d5

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/promise/NewPromiseCapabilityNode.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -63,6 +63,7 @@
6363
import com.oracle.truffle.js.runtime.builtins.JSFunction;
6464
import com.oracle.truffle.js.runtime.builtins.JSFunctionData;
6565
import com.oracle.truffle.js.runtime.builtins.JSFunctionObject;
66+
import com.oracle.truffle.js.runtime.builtins.JSPromiseObject;
6667
import com.oracle.truffle.js.runtime.objects.JSDynamicObject;
6768
import com.oracle.truffle.js.runtime.objects.JSObjectUtil;
6869
import com.oracle.truffle.js.runtime.objects.PromiseCapabilityRecord;
@@ -101,8 +102,8 @@ public static PromiseCapabilityRecord createDefault(JSRealm realm) {
101102
JSContext context = realm.getContext();
102103
assert JSFunction.isConstructor(constructor);
103104
PromiseCapabilityRecord promiseCapability = PromiseCapabilityRecord.create(Undefined.instance, Undefined.instance, Undefined.instance);
104-
JSDynamicObject executor = getCapabilitiesExecutor(context, realm, promiseCapability);
105-
JSDynamicObject promise = (JSDynamicObject) JSFunction.construct(constructor, new Object[]{executor});
105+
JSFunctionObject executor = getCapabilitiesExecutor(context, realm, promiseCapability);
106+
JSPromiseObject promise = (JSPromiseObject) JSFunction.construct(constructor, new Object[]{executor});
106107
assert JSFunction.isJSFunction(promiseCapability.getResolve()) && JSFunction.isJSFunction(promiseCapability.getReject());
107108
promiseCapability.setPromise(promise);
108109
return promiseCapability;
@@ -114,7 +115,7 @@ public PromiseCapabilityRecord execute(Object constructor) {
114115
throw Errors.createTypeErrorNotAConstructor(constructor, context);
115116
}
116117
PromiseCapabilityRecord promiseCapability = PromiseCapabilityRecord.create(Undefined.instance, Undefined.instance, Undefined.instance);
117-
JSDynamicObject executor = getCapabilitiesExecutor(promiseCapability);
118+
JSFunctionObject executor = getCapabilitiesExecutor(promiseCapability);
118119
Object promise = newPromise.executeCall(JSArguments.create(Undefined.instance, constructor, executor));
119120
if (!(promise instanceof JSDynamicObject)) {
120121
errorBranch.enter();
@@ -128,16 +129,16 @@ public PromiseCapabilityRecord execute(Object constructor) {
128129
return promiseCapability;
129130
}
130131

131-
private JSDynamicObject getCapabilitiesExecutor(PromiseCapabilityRecord promiseCapability) {
132+
private JSFunctionObject getCapabilitiesExecutor(PromiseCapabilityRecord promiseCapability) {
132133
JSFunctionData functionData = context.getOrCreateBuiltinFunctionData(JSContext.BuiltinFunctionKey.PromiseGetCapabilitiesExecutor, (c) -> createGetCapabilitiesExecutorImpl(c));
133-
JSDynamicObject function = JSFunction.create(getRealm(), functionData);
134+
JSFunctionObject function = JSFunction.create(getRealm(), functionData);
134135
setPromiseCapability.setValue(function, promiseCapability);
135136
return function;
136137
}
137138

138-
private static JSDynamicObject getCapabilitiesExecutor(JSContext context, JSRealm realm, PromiseCapabilityRecord promiseCapability) {
139+
private static JSFunctionObject getCapabilitiesExecutor(JSContext context, JSRealm realm, PromiseCapabilityRecord promiseCapability) {
139140
JSFunctionData functionData = context.getOrCreateBuiltinFunctionData(JSContext.BuiltinFunctionKey.PromiseGetCapabilitiesExecutor, (c) -> createGetCapabilitiesExecutorImpl(c));
140-
JSDynamicObject function = JSFunction.create(realm, functionData);
141+
JSFunctionObject function = JSFunction.create(realm, functionData);
141142
JSObjectUtil.putHiddenProperty(function, PROMISE_CAPABILITY_KEY, promiseCapability);
142143
return function;
143144
}
@@ -151,7 +152,7 @@ class GetCapabilitiesExecutorNode extends JavaScriptRootNode {
151152

152153
@Override
153154
public Object execute(VirtualFrame frame) {
154-
JSDynamicObject functionObject = JSFrameUtil.getFunctionObject(frame);
155+
JSFunctionObject functionObject = JSFrameUtil.getFunctionObject(frame);
155156
PromiseCapabilityRecord capability = (PromiseCapabilityRecord) getPromiseCapability.getValue(functionObject);
156157
if (capability.getResolve() != Undefined.instance || capability.getReject() != Undefined.instance) {
157158
errorBranch.enter();

0 commit comments

Comments
 (0)