Skip to content

Commit

Permalink
make helpers and wrappers .next and .return incompatible between …
Browse files Browse the repository at this point in the history
…different prototypes
  • Loading branch information
zloirock committed Jul 12, 2022
1 parent 33370f5 commit b40b742
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
14 changes: 9 additions & 5 deletions packages/core-js/internals/async-iterator-create-proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,17 @@ var iteratorClose = require('../internals/iterator-close');

var Promise = getBuiltIn('Promise');

var ASYNC_ITERATOR_PROXY = 'AsyncIteratorProxy';
var ASYNC_ITERATOR_HELPER = 'AsyncIteratorHelper';
var WRAP_FOR_VALID_ASYNC_ITERATOR = 'WrapForValidAsyncIterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ASYNC_ITERATOR_PROXY);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

var createAsyncIteratorProxyPrototype = function (IS_ITERATOR) {
var ASYNC_ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;

var getInternalState = InternalStateModule.getterFor(ASYNC_ITERATOR_PROXY);

var AsyncIteratorProxyPrototype = defineBuiltIns(create(AsyncIteratorPrototype), {
next: function next() {
var that = this;
Expand Down Expand Up @@ -68,6 +72,8 @@ var AsyncIteratorHelperPrototype = createAsyncIteratorProxyPrototype(false);
var WrapForValidAsyncIteratorPrototype = createAsyncIteratorProxyPrototype(true);

module.exports = function (nextHandler, IS_ITERATOR) {
var ASYNC_ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;

var AsyncIteratorProxy = function AsyncIterator(record, state) {
if (state) {
state.iterator = record.iterator;
Expand All @@ -79,9 +85,7 @@ module.exports = function (nextHandler, IS_ITERATOR) {
setInternalState(this, state);
};

AsyncIteratorProxy.prototype = IS_ITERATOR
? WrapForValidAsyncIteratorPrototype
: AsyncIteratorHelperPrototype;
AsyncIteratorProxy.prototype = IS_ITERATOR ? WrapForValidAsyncIteratorPrototype : AsyncIteratorHelperPrototype;

return AsyncIteratorProxy;
};
14 changes: 9 additions & 5 deletions packages/core-js/internals/iterator-create-proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@ var getMethod = require('../internals/get-method');
var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
var iteratorClose = require('../internals/iterator-close');

var ITERATOR_PROXY = 'IteratorProxy';
var ITERATOR_HELPER = 'IteratorHelper';
var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ITERATOR_PROXY);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

var createIteratorProxyPrototype = function (IS_ITERATOR) {
var ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;

var getInternalState = InternalStateModule.getterFor(ITERATOR_PROXY);

var IteratorProxyPrototype = defineBuiltIns(create(IteratorPrototype), {
next: function next() {
var state = getInternalState(this);
Expand Down Expand Up @@ -49,6 +53,8 @@ var IteratorHelperPrototype = createIteratorProxyPrototype(false);
var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);

module.exports = function (nextHandler, IS_ITERATOR) {
var ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;

var IteratorProxy = function Iterator(record, state) {
if (state) {
state.iterator = record.iterator;
Expand All @@ -60,9 +66,7 @@ module.exports = function (nextHandler, IS_ITERATOR) {
setInternalState(this, state);
};

IteratorProxy.prototype = IS_ITERATOR
? WrapForValidIteratorPrototype
: IteratorHelperPrototype;
IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;

return IteratorProxy;
};

0 comments on commit b40b742

Please sign in to comment.