@@ -11,7 +11,6 @@ var $then = callBound('Promise.prototype.then', true);
1111
1212var CompletionRecord = require ( 'es-abstract/2025/CompletionRecord' ) ;
1313var Dispose = require ( './Dispose' ) ;
14- var NormalCompletion = require ( 'es-abstract/2025/NormalCompletion' ) ;
1514var PromiseResolve = require ( 'es-abstract/2025/PromiseResolve' ) ;
1615var ThrowCompletion = require ( 'es-abstract/2025/ThrowCompletion' ) ;
1716
@@ -56,9 +55,8 @@ module.exports = function DisposeResources(disposeCapability, completion) {
5655 } ;
5756
5857 var getPromise = actualHint === 'ASYNC-DISPOSE' && function getPromise ( resource ) {
59- return $then (
60- promise ,
61- function ( ) {
58+ var runDispose = function ( ) {
59+ try {
6260 var result = Dispose ( // step 2.a
6361 resource [ '[[ResourceValue]]' ] ,
6462 resource [ '[[Hint]]' ] ,
@@ -67,9 +65,19 @@ module.exports = function DisposeResources(disposeCapability, completion) {
6765 if ( ! result ) {
6866 throw new $SyntaxError ( 'Assertion failed: non-`~ASYNC-DISPOSE~` resource returned a promise from Dispose' ) ;
6967 }
70- return $then ( result , NormalCompletion ) ;
71- } ,
72- rejecter
68+ return $then ( result , void undefined , rejecter ) ;
69+ } catch ( e ) {
70+ rejecter ( e ) ;
71+ }
72+ return void undefined ;
73+ } ;
74+ return $then (
75+ promise ,
76+ runDispose ,
77+ function ( e ) {
78+ rejecter ( e ) ;
79+ return runDispose ( ) ;
80+ }
7381 ) ;
7482 } ;
7583
@@ -96,5 +104,10 @@ module.exports = function DisposeResources(disposeCapability, completion) {
96104 // eslint-disable-next-line no-param-reassign
97105 disposeCapability [ '[[DisposableResourceStack]]' ] = null ; // step 3
98106
99- return actualHint === 'ASYNC-DISPOSE' ? promise : completion ; // step 4
107+ if ( actualHint === 'ASYNC-DISPOSE' ) { // step 4
108+ return $then ( promise , function ( ) {
109+ return completion ;
110+ } ) ;
111+ }
112+ return completion ;
100113} ;
0 commit comments