Skip to content

Commit

Permalink
Fix handling of sync error in @@asyncDispose
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Jun 16, 2023
1 parent 9d41888 commit d19626c
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 12 deletions.
2 changes: 1 addition & 1 deletion packages/babel-helpers/src/helpers-generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export default Object.freeze({
),
dispose: helper(
"7.22.0",
'function dispose_SuppressedError(suppressed,error){return"undefined"!=typeof SuppressedError?dispose_SuppressedError=SuppressedError:(dispose_SuppressedError=function(suppressed,error){this.suppressed=suppressed,this.error=error,this.stack=(new Error).stack},dispose_SuppressedError.prototype=Object.create(Error.prototype,{constructor:{value:dispose_SuppressedError,writable:!0,configurable:!0}})),new dispose_SuppressedError(suppressed,error)}export default function _dispose(stack,error,hasError){function next(){for(;stack.length>0;){var r=stack.pop();if(r.a)return Promise.resolve(r.d.call(r.v)).then(next,err);try{r.d.call(r.v)}catch(e){return err(e)}}if(hasError)throw error}function err(e){return error=hasError?new dispose_SuppressedError(e,error):e,hasError=!0,next()}return next()}',
'function dispose_SuppressedError(suppressed,error){return"undefined"!=typeof SuppressedError?dispose_SuppressedError=SuppressedError:(dispose_SuppressedError=function(suppressed,error){this.suppressed=suppressed,this.error=error,this.stack=(new Error).stack},dispose_SuppressedError.prototype=Object.create(Error.prototype,{constructor:{value:dispose_SuppressedError,writable:!0,configurable:!0}})),new dispose_SuppressedError(suppressed,error)}export default function _dispose(stack,error,hasError){function next(){for(;stack.length>0;){var r=stack.pop();try{var p=r.d.call(r.v);if(r.a)return Promise.resolve(p).then(next,err)}catch(e){return err(e)}}if(hasError)throw error}function err(e){return error=hasError?new dispose_SuppressedError(e,error):e,hasError=!0,next()}return next()}',
),
iterableToArrayLimit: helper(
"7.0.0-beta.0",
Expand Down
6 changes: 2 additions & 4 deletions packages/babel-helpers/src/helpers/dispose.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,9 @@ export default function _dispose(stack, error, hasError) {
function next() {
while (stack.length > 0) {
var r = stack.pop();
if (r.a) {
return Promise.resolve(r.d.call(r.v)).then(next, err);
}
try {
r.d.call(r.v);
var p = r.d.call(r.v);
if (r.a) return Promise.resolve(p).then(next, err);
} catch (e) {
return err(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@ return async function () {
let disposed = false;
let beforeEnd;

const err = {};
const err1 = {};
const err2 = {};
let thrown;

try {
await using x = {
[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")]() {
throw err;
throw err1;
}
};
throw err2;
} catch (e) {
thrown = e;
}

expect(thrown).toBe(err);
expect(thrown.suppressed).toBe(err1);
expect(thrown.error).toBe(err2);
}();
4 changes: 2 additions & 2 deletions packages/babel-runtime-corejs3/helpers/dispose.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ function _dispose(stack, error, hasError) {
function next() {
for (; stack.length > 0;) {
var r = stack.pop();
if (r.a) return _Promise.resolve(r.d.call(r.v)).then(next, err);
try {
r.d.call(r.v);
var p = r.d.call(r.v);
if (r.a) return _Promise.resolve(p).then(next, err);
} catch (e) {
return err(e);
}
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-runtime/helpers/dispose.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ function _dispose(stack, error, hasError) {
function next() {
for (; stack.length > 0;) {
var r = stack.pop();
if (r.a) return Promise.resolve(r.d.call(r.v)).then(next, err);
try {
r.d.call(r.v);
var p = r.d.call(r.v);
if (r.a) return Promise.resolve(p).then(next, err);
} catch (e) {
return err(e);
}
Expand Down

0 comments on commit d19626c

Please sign in to comment.