source: frontend/node_modules/core-js/internals/iterator-create-proxy.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 11 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.6 KB
Line 
1'use strict';
2var call = require('../internals/function-call');
3var create = require('../internals/object-create');
4var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
5var defineBuiltIns = require('../internals/define-built-ins');
6var wellKnownSymbol = require('../internals/well-known-symbol');
7var InternalStateModule = require('../internals/internal-state');
8var getMethod = require('../internals/get-method');
9var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
10var createIterResultObject = require('../internals/create-iter-result-object');
11var iteratorClose = require('../internals/iterator-close');
12var iteratorCloseAll = require('../internals/iterator-close-all');
13
14var TO_STRING_TAG = wellKnownSymbol('toStringTag');
15var ITERATOR_HELPER = 'IteratorHelper';
16var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
17var NORMAL = 'normal';
18var THROW = 'throw';
19var setInternalState = InternalStateModule.set;
20
21var createIteratorProxyPrototype = function (IS_ITERATOR) {
22 var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
23
24 return defineBuiltIns(create(IteratorPrototype), {
25 next: function next() {
26 var state = getInternalState(this);
27 // for simplification:
28 // for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`
29 // for `%IteratorHelperPrototype%.next` - just a value
30 if (IS_ITERATOR) return state.nextHandler();
31 if (state.done) return createIterResultObject(undefined, true);
32 try {
33 var result = state.nextHandler();
34 return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
35 } catch (error) {
36 state.done = true;
37 throw error;
38 }
39 },
40 'return': function () {
41 var state = getInternalState(this);
42 var iterator = state.iterator;
43 var done = state.done;
44 state.done = true;
45 if (IS_ITERATOR) {
46 var returnMethod = getMethod(iterator, 'return');
47 return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);
48 }
49 if (done) return createIterResultObject(undefined, true);
50 if (state.inner) try {
51 iteratorClose(state.inner.iterator, NORMAL);
52 } catch (error) {
53 return iteratorClose(iterator, THROW, error);
54 }
55 if (state.openIters) try {
56 iteratorCloseAll(state.openIters, NORMAL);
57 } catch (error) {
58 if (iterator) return iteratorClose(iterator, THROW, error);
59 throw error;
60 }
61 if (iterator) iteratorClose(iterator, NORMAL);
62 return createIterResultObject(undefined, true);
63 }
64 });
65};
66
67var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
68var IteratorHelperPrototype = createIteratorProxyPrototype(false);
69
70createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');
71
72module.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
73 var IteratorProxy = function Iterator(record, state) {
74 if (state) {
75 state.iterator = record.iterator;
76 state.next = record.next;
77 } else state = record;
78 state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
79 state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
80 state.nextHandler = nextHandler;
81 state.counter = 0;
82 state.done = false;
83 setInternalState(this, state);
84 };
85
86 IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
87
88 return IteratorProxy;
89};
Note: See TracBrowser for help on using the repository browser.