| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
							- 'use strict';
 
- // https://github.com/tc39/proposal-explicit-resource-management
 
- var $ = require('../internals/export');
 
- var DESCRIPTORS = require('../internals/descriptors');
 
- var getBuiltIn = require('../internals/get-built-in');
 
- var aCallable = require('../internals/a-callable');
 
- var anInstance = require('../internals/an-instance');
 
- var defineBuiltIn = require('../internals/define-built-in');
 
- var defineBuiltIns = require('../internals/define-built-ins');
 
- var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
 
- var wellKnownSymbol = require('../internals/well-known-symbol');
 
- var InternalStateModule = require('../internals/internal-state');
 
- var addDisposableResource = require('../internals/add-disposable-resource');
 
- var SuppressedError = getBuiltIn('SuppressedError');
 
- var $ReferenceError = ReferenceError;
 
- var DISPOSE = wellKnownSymbol('dispose');
 
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
 
- var DISPOSABLE_STACK = 'DisposableStack';
 
- var setInternalState = InternalStateModule.set;
 
- var getDisposableStackInternalState = InternalStateModule.getterFor(DISPOSABLE_STACK);
 
- var HINT = 'sync-dispose';
 
- var DISPOSED = 'disposed';
 
- var PENDING = 'pending';
 
- var getPendingDisposableStackInternalState = function (stack) {
 
-   var internalState = getDisposableStackInternalState(stack);
 
-   if (internalState.state === DISPOSED) throw new $ReferenceError(DISPOSABLE_STACK + ' already disposed');
 
-   return internalState;
 
- };
 
- var $DisposableStack = function DisposableStack() {
 
-   setInternalState(anInstance(this, DisposableStackPrototype), {
 
-     type: DISPOSABLE_STACK,
 
-     state: PENDING,
 
-     stack: []
 
-   });
 
-   if (!DESCRIPTORS) this.disposed = false;
 
- };
 
- var DisposableStackPrototype = $DisposableStack.prototype;
 
- defineBuiltIns(DisposableStackPrototype, {
 
-   dispose: function dispose() {
 
-     var internalState = getDisposableStackInternalState(this);
 
-     if (internalState.state === DISPOSED) return;
 
-     internalState.state = DISPOSED;
 
-     if (!DESCRIPTORS) this.disposed = true;
 
-     var stack = internalState.stack;
 
-     var i = stack.length;
 
-     var thrown = false;
 
-     var suppressed;
 
-     while (i) {
 
-       var disposeMethod = stack[--i];
 
-       stack[i] = null;
 
-       try {
 
-         disposeMethod();
 
-       } catch (errorResult) {
 
-         if (thrown) {
 
-           suppressed = new SuppressedError(errorResult, suppressed);
 
-         } else {
 
-           thrown = true;
 
-           suppressed = errorResult;
 
-         }
 
-       }
 
-     }
 
-     internalState.stack = null;
 
-     if (thrown) throw suppressed;
 
-   },
 
-   use: function use(value) {
 
-     addDisposableResource(getPendingDisposableStackInternalState(this), value, HINT);
 
-     return value;
 
-   },
 
-   adopt: function adopt(value, onDispose) {
 
-     var internalState = getPendingDisposableStackInternalState(this);
 
-     aCallable(onDispose);
 
-     addDisposableResource(internalState, undefined, HINT, function () {
 
-       onDispose(value);
 
-     });
 
-     return value;
 
-   },
 
-   defer: function defer(onDispose) {
 
-     var internalState = getPendingDisposableStackInternalState(this);
 
-     aCallable(onDispose);
 
-     addDisposableResource(internalState, undefined, HINT, onDispose);
 
-   },
 
-   move: function move() {
 
-     var internalState = getPendingDisposableStackInternalState(this);
 
-     var newDisposableStack = new $DisposableStack();
 
-     getDisposableStackInternalState(newDisposableStack).stack = internalState.stack;
 
-     internalState.stack = [];
 
-     internalState.state = DISPOSED;
 
-     if (!DESCRIPTORS) this.disposed = true;
 
-     return newDisposableStack;
 
-   }
 
- });
 
- if (DESCRIPTORS) defineBuiltInAccessor(DisposableStackPrototype, 'disposed', {
 
-   configurable: true,
 
-   get: function disposed() {
 
-     return getDisposableStackInternalState(this).state === DISPOSED;
 
-   }
 
- });
 
- defineBuiltIn(DisposableStackPrototype, DISPOSE, DisposableStackPrototype.dispose, { name: 'dispose' });
 
- defineBuiltIn(DisposableStackPrototype, TO_STRING_TAG, DISPOSABLE_STACK, { nonWritable: true });
 
- $({ global: true, constructor: true }, {
 
-   DisposableStack: $DisposableStack
 
- });
 
 
  |