var global = require('../internals/global');
var shared = require('../internals/shared-store');
+var isCallable = require('../internals/is-callable');
+var create = require('../internals/object-create');
var getPrototypeOf = require('../internals/object-get-prototype-of');
-var has = require('../internals/has');
-var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
+var redefine = require('../internals/redefine');
var wellKnownSymbol = require('../internals/well-known-symbol');
var IS_PURE = require('../internals/is-pure');
var PassedAsyncIteratorPrototype = shared.AsyncIteratorPrototype;
var AsyncIteratorPrototype, prototype;
-if (!IS_PURE) {
- if (PassedAsyncIteratorPrototype) {
- AsyncIteratorPrototype = PassedAsyncIteratorPrototype;
- } else if (typeof AsyncIterator == 'function') {
- AsyncIteratorPrototype = AsyncIterator.prototype;
- } else if (shared[USE_FUNCTION_CONSTRUCTOR] || global[USE_FUNCTION_CONSTRUCTOR]) {
- try {
- // eslint-disable-next-line no-new-func -- we have no alternatives without usage of modern syntax
- prototype = getPrototypeOf(getPrototypeOf(getPrototypeOf(Function('return async function*(){}()')())));
- if (getPrototypeOf(prototype) === Object.prototype) AsyncIteratorPrototype = prototype;
- } catch (error) { /* empty */ }
- }
+if (PassedAsyncIteratorPrototype) {
+ AsyncIteratorPrototype = PassedAsyncIteratorPrototype;
+} else if (isCallable(AsyncIterator)) {
+ AsyncIteratorPrototype = AsyncIterator.prototype;
+} else if (shared[USE_FUNCTION_CONSTRUCTOR] || global[USE_FUNCTION_CONSTRUCTOR]) {
+ try {
+ // eslint-disable-next-line no-new-func -- we have no alternatives without usage of modern syntax
+ prototype = getPrototypeOf(getPrototypeOf(getPrototypeOf(Function('return async function*(){}()')())));
+ if (getPrototypeOf(prototype) === Object.prototype) AsyncIteratorPrototype = prototype;
+ } catch (error) { /* empty */ }
}
if (!AsyncIteratorPrototype) AsyncIteratorPrototype = {};
+else if (IS_PURE) AsyncIteratorPrototype = create(AsyncIteratorPrototype);
-if (!has(AsyncIteratorPrototype, ASYNC_ITERATOR)) {
- createNonEnumerableProperty(AsyncIteratorPrototype, ASYNC_ITERATOR, function () {
+if (!isCallable(AsyncIteratorPrototype[ASYNC_ITERATOR])) {
+ redefine(AsyncIteratorPrototype, ASYNC_ITERATOR, function () {
return this;
});
}