|
2 | 2 | var $ = require('../internals/export');
|
3 | 3 | var iterate = require('../internals/iterate');
|
4 | 4 | var anObject = require('../internals/an-object');
|
| 5 | +var aCallable = require('../internals/a-callable'); |
5 | 6 | var getIteratorDirect = require('../internals/get-iterator-direct');
|
6 | 7 | var iteratorClose = require('../internals/iterator-close');
|
7 | 8 | var globalThis = require('../internals/global-this');
|
8 | 9 | var checkIteratorClosingOnEarlyError = require('../internals/check-iterator-closing-on-early-error');
|
9 | 10 | var call = require('../internals/function-call');
|
10 |
| -var aCallable = require('../internals/a-callable'); |
| 11 | +var fails = require('../internals/fails'); |
11 | 12 |
|
12 | 13 | var $TypeError = TypeError;
|
13 | 14 | var Iterator = globalThis.Iterator;
|
14 | 15 | var nativeReduce = Iterator && Iterator.prototype && Iterator.prototype.reduce;
|
15 | 16 |
|
16 | 17 | // https://bugs.webkit.org/show_bug.cgi?id=291651
|
17 |
| -var nativeMethodFailsOnUndefinedInitialParam = function () { |
18 |
| - try { |
19 |
| - // eslint-disable-next-line es/no-iterator-prototype-reduce, es/no-array-prototype-keys -- required for testing |
20 |
| - [].keys().reduce(function () { return false; }, undefined); |
21 |
| - return false; |
22 |
| - } catch (err) { |
23 |
| - return true; |
24 |
| - } |
25 |
| -}; |
| 18 | +var FAILS_ON_INITIAL_UNDEFINED = nativeReduce && fails(function () { |
| 19 | + // eslint-disable-next-line es/no-iterator-prototype-reduce, es/no-array-prototype-keys, array-callback-return -- required for testing |
| 20 | + [].keys().reduce(function () { /* empty */ }, undefined); |
| 21 | +}); |
26 | 22 |
|
27 |
| -var NATIVE_METHOD_WITHOUT_CLOSING_ON_EARLY_ERROR = false; |
28 |
| -var nativeMethodWithoutClosingOnEarlyError = function () { |
29 |
| - NATIVE_METHOD_WITHOUT_CLOSING_ON_EARLY_ERROR = !checkIteratorClosingOnEarlyError(TypeError, nativeReduce, null); |
30 |
| - return NATIVE_METHOD_WITHOUT_CLOSING_ON_EARLY_ERROR; |
31 |
| -}; |
| 23 | +var NATIVE_METHOD_WITHOUT_CLOSING_ON_EARLY_ERROR = nativeReduce && !FAILS_ON_INITIAL_UNDEFINED && |
| 24 | + !checkIteratorClosingOnEarlyError(TypeError, nativeReduce, null); |
32 | 25 |
|
33 |
| -var FORCED = !nativeReduce || nativeMethodFailsOnUndefinedInitialParam() || nativeMethodWithoutClosingOnEarlyError(); |
| 26 | +var FORCED = FAILS_ON_INITIAL_UNDEFINED || NATIVE_METHOD_WITHOUT_CLOSING_ON_EARLY_ERROR; |
34 | 27 |
|
35 | 28 | // `Iterator.prototype.reduce` method
|
36 | 29 | // https://tc39.es/ecma262/#sec-iterator.prototype.reduce
|
|
0 commit comments