Skip to content

Commit 72c5cb4

Browse files
committed
[js] Fix how exceptions are thrown in continuations
1 parent 82973f1 commit 72c5cb4

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/vm/js/nqp-runtime/async-continuations.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@ function findReset(tag, ctx) {
2727
op.continuationreset = function(ctx, currentHLL, tag, block) {
2828
return new Promise(function(resolve, reject) {
2929
if (block instanceof Cont) {
30-
block.resetCtx.$$outside = resolve;
30+
block.resetCtx.$$outsideResolve = resolve;
31+
block.resetCtx.$$outsideReject = reject;
3132
block.inside(Null);
3233
} else {
3334
const newCtx = new CtxJustReset(ctx, ctx, null);
34-
newCtx.$$outside = resolve;
35+
newCtx.$$outsideResolve = resolve;
36+
newCtx.$$outsideReject = reject;
3537
newCtx.$$tag = tag;
36-
block.$$call(newCtx, null).then(value => newCtx.$$outside(nqp.retval(currentHLL, value)), reject);
38+
block.$$call(newCtx, null).then(
39+
value => newCtx.$$outsideResolve(nqp.retval(currentHLL, value)),
40+
error => newCtx.$$outsideReject(error));
3741
}
3842
});
3943
};
@@ -58,14 +62,16 @@ op.continuationcontrol = function(ctx, currentHLL, protect, tag, closure) {
5862
return new Promise(function(resolve, reject) {
5963
const resetCtx = findReset(tag, ctx);
6064
const cont = new Cont(ctx, resolve, resetCtx);
61-
closure.$$call(protect ? resetCtx : resetCtx.$$caller, null, cont).then(value => resetCtx.$$outside(nqp.retval(currentHLL, value)), reject);
65+
closure.$$call(protect ? resetCtx : resetCtx.$$caller, null, cont).then(value => resetCtx.$$outsideResolve(nqp.retval(currentHLL, value)), reject);
6266
});
6367
};
6468

6569
op.continuationinvoke = function(ctx, currentHLL, cont, inject) {
6670
return new Promise(function(resolve, reject) {
6771
cont.resetCtx.$$caller = ctx;
68-
cont.resetCtx.$$outside = resolve;
72+
cont.resetCtx.$$outsideResolve = resolve;
73+
cont.resetCtx.$$outsideReject = reject;
74+
6975
inject.$$call(cont.ctx, null).then(value => {
7076
cont.inside(nqp.retval(currentHLL, value));
7177
}, reject);

0 commit comments

Comments
 (0)