| var global = require('./_global'); |
| var inheritIfRequired = require('./_inherit-if-required'); |
| var dP = require('./_object-dp').f; |
| var gOPN = require('./_object-gopn').f; |
| var isRegExp = require('./_is-regexp'); |
| var $flags = require('./_flags'); |
| var $RegExp = global.RegExp; |
| var Base = $RegExp; |
| var proto = $RegExp.prototype; |
| var re1 = /a/g; |
| var re2 = /a/g; |
| // "new" creates a new object, old webkit buggy here |
| var CORRECT_NEW = new $RegExp(re1) !== re1; |
| |
| if (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () { |
| re2[require('./_wks')('match')] = false; |
| // RegExp constructor can alter flags and IsRegExp works correct with @@match |
| return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; |
| }))) { |
| $RegExp = function RegExp(p, f) { |
| var tiRE = this instanceof $RegExp; |
| var piRE = isRegExp(p); |
| var fiU = f === undefined; |
| return !tiRE && piRE && p.constructor === $RegExp && fiU ? p |
| : inheritIfRequired(CORRECT_NEW |
| ? new Base(piRE && !fiU ? p.source : p, f) |
| : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f) |
| , tiRE ? this : proto, $RegExp); |
| }; |
| var proxy = function (key) { |
| key in $RegExp || dP($RegExp, key, { |
| configurable: true, |
| get: function () { return Base[key]; }, |
| set: function (it) { Base[key] = it; } |
| }); |
| }; |
| for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]); |
| proto.constructor = $RegExp; |
| $RegExp.prototype = proto; |
| require('./_redefine')(global, 'RegExp', $RegExp); |
| } |
| |
| require('./_set-species')('RegExp'); |