| | |
| | | 'use strict'; |
| | | // TODO: Remove from `core-js@4` since it's moved to entry points |
| | | require('../modules/es.regexp.exec'); |
| | | var redefine = require('../internals/redefine'); |
| | | var uncurryThis = require('../internals/function-uncurry-this'); |
| | | var defineBuiltIn = require('../internals/define-built-in'); |
| | | var regexpExec = require('../internals/regexp-exec'); |
| | | var fails = require('../internals/fails'); |
| | | var wellKnownSymbol = require('../internals/well-known-symbol'); |
| | |
| | | !DELEGATES_TO_EXEC || |
| | | FORCED |
| | | ) { |
| | | var nativeRegExpMethod = /./[SYMBOL]; |
| | | var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]); |
| | | var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { |
| | | var uncurriedNativeMethod = uncurryThis(nativeMethod); |
| | | var $exec = regexp.exec; |
| | | if ($exec === regexpExec || $exec === RegExpPrototype.exec) { |
| | | if (DELEGATES_TO_SYMBOL && !forceStringMethod) { |
| | | // The native String method already delegates to @@method (this |
| | | // polyfilled function), leasing to infinite recursion. |
| | | // We avoid it by directly calling the native @@method method. |
| | | return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; |
| | | return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) }; |
| | | } |
| | | return { done: true, value: nativeMethod.call(str, regexp, arg2) }; |
| | | return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) }; |
| | | } |
| | | return { done: false }; |
| | | }); |
| | | |
| | | redefine(String.prototype, KEY, methods[0]); |
| | | redefine(RegExpPrototype, SYMBOL, methods[1]); |
| | | defineBuiltIn(String.prototype, KEY, methods[0]); |
| | | defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); |
| | | } |
| | | |
| | | if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true); |