'use strict'; 
 | 
// TODO: Remove from `core-js@4` since it's moved to entry points 
 | 
require('../modules/es.regexp.exec'); 
 | 
var call = require('../internals/function-call'); 
 | 
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'); 
 | 
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); 
 | 
  
 | 
var SPECIES = wellKnownSymbol('species'); 
 | 
var RegExpPrototype = RegExp.prototype; 
 | 
  
 | 
module.exports = function (KEY, exec, FORCED, SHAM) { 
 | 
  var SYMBOL = wellKnownSymbol(KEY); 
 | 
  
 | 
  var DELEGATES_TO_SYMBOL = !fails(function () { 
 | 
    // String methods call symbol-named RegExp methods 
 | 
    var O = {}; 
 | 
    O[SYMBOL] = function () { return 7; }; 
 | 
    return ''[KEY](O) !== 7; 
 | 
  }); 
 | 
  
 | 
  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { 
 | 
    // Symbol-named RegExp methods call .exec 
 | 
    var execCalled = false; 
 | 
    var re = /a/; 
 | 
  
 | 
    if (KEY === 'split') { 
 | 
      // We can't use real regex here since it causes deoptimization 
 | 
      // and serious performance degradation in V8 
 | 
      // https://github.com/zloirock/core-js/issues/306 
 | 
      re = {}; 
 | 
      // RegExp[@@split] doesn't call the regex's exec method, but first creates 
 | 
      // a new one. We need to return the patched regex when creating the new one. 
 | 
      re.constructor = {}; 
 | 
      re.constructor[SPECIES] = function () { return re; }; 
 | 
      re.flags = ''; 
 | 
      re[SYMBOL] = /./[SYMBOL]; 
 | 
    } 
 | 
  
 | 
    re.exec = function () { 
 | 
      execCalled = true; 
 | 
      return null; 
 | 
    }; 
 | 
  
 | 
    re[SYMBOL](''); 
 | 
    return !execCalled; 
 | 
  }); 
 | 
  
 | 
  if ( 
 | 
    !DELEGATES_TO_SYMBOL || 
 | 
    !DELEGATES_TO_EXEC || 
 | 
    FORCED 
 | 
  ) { 
 | 
    var nativeRegExpMethod = /./[SYMBOL]; 
 | 
    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { 
 | 
      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: call(nativeRegExpMethod, regexp, str, arg2) }; 
 | 
        } 
 | 
        return { done: true, value: call(nativeMethod, str, regexp, arg2) }; 
 | 
      } 
 | 
      return { done: false }; 
 | 
    }); 
 | 
  
 | 
    defineBuiltIn(String.prototype, KEY, methods[0]); 
 | 
    defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); 
 | 
  } 
 | 
  
 | 
  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true); 
 | 
}; 
 |