Skip to content

Commit da84216

Browse files
committed
Handle rejected promises of synchronously executed modules, too.
(cherry picked from commit 23cb1f1)
1 parent 9a5a328 commit da84216

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

graal-js/src/com.oracle.truffle.js.parser/src/com/oracle/truffle/js/parser/GraalJSEvaluator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,19 +304,21 @@ private Object evalModule(JSRealm realm) {
304304
// Note: If loading failed, we must not perform module linking.
305305

306306
moduleRecord.link(realm);
307+
// On failure, an exception is thrown and this module's [[Status]] remains unlinked.
308+
307309
Object promise = moduleRecord.evaluate(realm);
308-
boolean isAsync = context.isOptionTopLevelAwait() && moduleRecord.isAsyncEvaluation();
309-
if (isAsync) {
310+
if (context.isOptionTopLevelAwait()) {
310311
JSFunctionObject onRejected = createTopLevelAwaitReject(context, realm);
311312
JSFunctionObject onAccepted = createTopLevelAwaitResolve(context, realm);
312313
// Non-standard: throw error from onRejected handler.
313314
performPromiseThenNode.execute((JSPromiseObject) promise, onAccepted, onRejected, null);
314315
}
316+
315317
if (context.getLanguageOptions().esmEvalReturnsExports()) {
316318
JSDynamicObject moduleNamespace = moduleRecord.getModuleNamespace();
317319
assert moduleNamespace != null;
318320
return moduleNamespace;
319-
} else if (isAsync) {
321+
} else if (context.isOptionTopLevelAwait() && moduleRecord.isAsyncEvaluation()) {
320322
return promise;
321323
} else {
322324
return moduleRecord.getExecutionResultOrThrow();

0 commit comments

Comments
 (0)