Skip to content

Commit

Permalink
don't pass arguments to methods from the extended iterators protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Jul 24, 2022
1 parent b21b574 commit 41f834e
Show file tree
Hide file tree
Showing 14 changed files with 39 additions and 48 deletions.
8 changes: 2 additions & 6 deletions packages/core-js/internals/async-iterator-create-proxy.js
Expand Up @@ -26,19 +26,15 @@ module.exports = function (nextHandler, IS_ITERATOR) {
} else state = record;
state.type = ASYNC_ITERATOR_PROXY;
state.done = false;
state.ignoreArgument = !IS_ITERATOR;
setInternalState(this, state);
};

AsyncIteratorProxy.prototype = defineBuiltIns(create(AsyncIteratorPrototype), {
next: function next(arg) {
next: function next() {
var that = this;
var hasArgument = !!arguments.length;
return new Promise(function (resolve) {
var state = getInternalState(that);
var args = hasArgument ? [state.ignoreArgument ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
state.ignoreArgument = false;
resolve(state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise, args)));
resolve(state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise)));
});
},
'return': function (value) {
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/internals/async-iterator-indexed.js
@@ -1,15 +1,15 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
var state = this;
var iterator = state.iterator;

return Promise.resolve(anObject(apply(state.next, iterator, args))).then(function (step) {
return Promise.resolve(anObject(call(state.next, iterator))).then(function (step) {
if (anObject(step).done) {
state.done = true;
return { done: true, value: undefined };
Expand Down
7 changes: 2 additions & 5 deletions packages/core-js/internals/iterator-create-proxy.js
Expand Up @@ -23,16 +23,13 @@ module.exports = function (nextHandler, IS_ITERATOR) {
} else state = record;
state.type = ITERATOR_PROXY;
state.done = false;
state.ignoreArg = !IS_ITERATOR;
setInternalState(this, state);
};

IteratorProxy.prototype = defineBuiltIns(create(IteratorPrototype), {
next: function next(arg) {
next: function next() {
var state = getInternalState(this);
var args = arguments.length ? [state.ignoreArg ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
state.ignoreArg = false;
var result = state.done ? undefined : call(nextHandler, state, args);
var result = state.done ? undefined : call(nextHandler, state);
return { done: state.done, value: result };
},
'return': function (value) {
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/internals/iterator-indexed.js
@@ -1,12 +1,12 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var createIteratorProxy = require('../internals/iterator-create-proxy');

var IteratorProxy = createIteratorProxy(function (args) {
var result = anObject(apply(this.next, this.iterator, args));
var IteratorProxy = createIteratorProxy(function () {
var result = anObject(call(this.next, this.iterator));
var done = this.done = !!result.done;
if (!done) return [this.index++, result.value];
});
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.async-iterator.drop.js
@@ -1,21 +1,21 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
var state = this;

return new Promise(function (resolve, reject) {
var loop = function () {
try {
Promise.resolve(
anObject(apply(state.next, state.iterator, state.remaining ? [] : args))
anObject(call(state.next, state.iterator))
).then(function (step) {
try {
if (anObject(step).done) {
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.async-iterator.filter.js
@@ -1,20 +1,20 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var aCallable = require('../internals/a-callable');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
var state = this;
var filterer = state.filterer;

return new Promise(function (resolve, reject) {
var loop = function () {
try {
Promise.resolve(anObject(apply(state.next, state.iterator, args))).then(function (step) {
Promise.resolve(anObject(call(state.next, state.iterator))).then(function (step) {
try {
if (anObject(step).done) {
state.done = true;
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.async-iterator.from.js
@@ -1,6 +1,6 @@
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var toObject = require('../internals/to-object');
var isPrototypeOf = require('../internals/object-is-prototype-of');
Expand All @@ -16,8 +16,8 @@ var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator');

var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator');

var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
return anObject(apply(this.next, this.iterator, args));
var AsyncIteratorProxy = createAsyncIteratorProxy(function () {
return anObject(call(this.next, this.iterator));
}, true);

$({ target: 'AsyncIterator', stat: true, forced: true }, {
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.async-iterator.map.js
@@ -1,17 +1,17 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var aCallable = require('../internals/a-callable');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
var state = this;
var mapper = state.mapper;

return Promise.resolve(anObject(apply(state.next, state.iterator, args))).then(function (step) {
return Promise.resolve(anObject(call(state.next, state.iterator))).then(function (step) {
if (anObject(step).done) {
state.done = true;
return { done: true, value: undefined };
Expand Down
7 changes: 3 additions & 4 deletions packages/core-js/modules/esnext.async-iterator.take.js
@@ -1,27 +1,26 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
var iterator = this.iterator;
var returnMethod, result;
if (!this.remaining--) {
result = { done: true, value: undefined };
this.done = true;
returnMethod = iterator['return'];
if (returnMethod !== undefined) {
return Promise.resolve(call(returnMethod, iterator)).then(function () {
return Promise.resolve(call(returnMethod, iterator, undefined)).then(function () {
return result;
});
}
return result;
} return apply(this.next, iterator, args);
} return call(this.next, iterator);
});

$({ target: 'AsyncIterator', proto: true, real: true, forced: true }, {
Expand Down
5 changes: 2 additions & 3 deletions packages/core-js/modules/esnext.iterator.drop.js
@@ -1,15 +1,14 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createIteratorProxy = require('../internals/iterator-create-proxy');

var IteratorProxy = createIteratorProxy(function (args) {
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var next = this.next;
var result, done;
Expand All @@ -19,7 +18,7 @@ var IteratorProxy = createIteratorProxy(function (args) {
done = this.done = !!result.done;
if (done) return;
}
result = anObject(apply(next, iterator, args));
result = anObject(call(next, iterator));
done = this.done = !!result.done;
if (!done) return result.value;
});
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.iterator.filter.js
@@ -1,20 +1,20 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var aCallable = require('../internals/a-callable');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var createIteratorProxy = require('../internals/iterator-create-proxy');
var callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');

var IteratorProxy = createIteratorProxy(function (args) {
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var filterer = this.filterer;
var next = this.next;
var result, done, value;
while (true) {
result = anObject(apply(next, iterator, args));
result = anObject(call(next, iterator));
done = this.done = !!result.done;
if (done) return;
value = result.value;
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.iterator.from.js
@@ -1,6 +1,6 @@
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var toObject = require('../internals/to-object');
var isPrototypeOf = require('../internals/object-is-prototype-of');
Expand All @@ -10,8 +10,8 @@ var getIterator = require('../internals/get-iterator');
var getIteratorDirect = require('../internals/get-iterator-direct');
var getIteratorMethod = require('../internals/get-iterator-method');

var IteratorProxy = createIteratorProxy(function (args) {
var result = anObject(apply(this.next, this.iterator, args));
var IteratorProxy = createIteratorProxy(function () {
var result = anObject(call(this.next, this.iterator));
var done = this.done = !!result.done;
if (!done) return result.value;
}, true);
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.iterator.map.js
@@ -1,16 +1,16 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var aCallable = require('../internals/a-callable');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var createIteratorProxy = require('../internals/iterator-create-proxy');
var callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');

var IteratorProxy = createIteratorProxy(function (args) {
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var result = anObject(apply(this.next, iterator, args));
var result = anObject(call(this.next, iterator));
var done = this.done = !!result.done;
if (!done) return callWithSafeIterationClosing(iterator, this.mapper, result.value);
});
Expand Down
6 changes: 3 additions & 3 deletions packages/core-js/modules/esnext.iterator.take.js
@@ -1,21 +1,21 @@
'use strict';
// https://github.com/tc39/proposal-iterator-helpers
var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createIteratorProxy = require('../internals/iterator-create-proxy');
var iteratorClose = require('../internals/iterator-close');

var IteratorProxy = createIteratorProxy(function (args) {
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
if (!this.remaining--) {
this.done = true;
return iteratorClose(iterator, 'normal', undefined);
}
var result = anObject(apply(this.next, iterator, args));
var result = anObject(call(this.next, iterator));
var done = this.done = !!result.done;
if (!done) return result.value;
});
Expand Down

0 comments on commit 41f834e

Please sign in to comment.