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

main
Last change on this file was 79a0317, checked in by stefan toskovski <stefantoska84@…>, 2 weeks ago

F4 Finalna Verzija

  • Property mode set to 100644
File size: 3.2 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');
12
13var TO_STRING_TAG = wellKnownSymbol('toStringTag');
14var ITERATOR_HELPER = 'IteratorHelper';
15var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
16var setInternalState = InternalStateModule.set;
17
18var createIteratorProxyPrototype = function (IS_ITERATOR) {
19 var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
20
21 return defineBuiltIns(create(IteratorPrototype), {
22 next: function next() {
23 var state = getInternalState(this);
24 // for simplification:
25 // for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`
26 // for `%IteratorHelperPrototype%.next` - just a value
27 if (IS_ITERATOR) return state.nextHandler();
28 if (state.done) return createIterResultObject(undefined, true);
29 try {
30 var result = state.nextHandler();
31 return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
32 } catch (error) {
33 state.done = true;
34 throw error;
35 }
36 },
37 'return': function () {
38 var state = getInternalState(this);
39 var iterator = state.iterator;
40 state.done = true;
41 if (IS_ITERATOR) {
42 var returnMethod = getMethod(iterator, 'return');
43 return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);
44 }
45 if (state.inner) try {
46 iteratorClose(state.inner.iterator, 'normal');
47 } catch (error) {
48 return iteratorClose(iterator, 'throw', error);
49 }
50 if (iterator) iteratorClose(iterator, 'normal');
51 return createIterResultObject(undefined, true);
52 }
53 });
54};
55
56var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
57var IteratorHelperPrototype = createIteratorProxyPrototype(false);
58
59createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');
60
61module.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
62 var IteratorProxy = function Iterator(record, state) {
63 if (state) {
64 state.iterator = record.iterator;
65 state.next = record.next;
66 } else state = record;
67 state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
68 state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
69 state.nextHandler = nextHandler;
70 state.counter = 0;
71 state.done = false;
72 setInternalState(this, state);
73 };
74
75 IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
76
77 return IteratorProxy;
78};
Note: See TracBrowser for help on using the repository browser.