1 var global = require('./_global')
2 , inheritIfRequired = require('./_inherit-if-required')
3 , dP = require('./_object-dp').f
4 , gOPN = require('./_object-gopn').f
5 , isRegExp = require('./_is-regexp')
6 , $flags = require('./_flags')
7 , $RegExp = global.RegExp
9 , proto = $RegExp.prototype
12 // "new" creates a new object, old webkit buggy here
13 , CORRECT_NEW = new $RegExp(re1) !== re1;
15 if(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){
16 re2[require('./_wks')('match')] = false;
17 // RegExp constructor can alter flags and IsRegExp works correct with @@match
18 return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
20 $RegExp = function RegExp(p, f){
21 var tiRE = this instanceof $RegExp
23 , fiU = f === undefined;
24 return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
25 : inheritIfRequired(CORRECT_NEW
26 ? new Base(piRE && !fiU ? p.source : p, f)
27 : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
28 , tiRE ? this : proto, $RegExp);
30 var proxy = function(key){
31 key in $RegExp || dP($RegExp, key, {
33 get: function(){ return Base[key]; },
34 set: function(it){ Base[key] = it; }
37 for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);
38 proto.constructor = $RegExp;
39 $RegExp.prototype = proto;
40 require('./_redefine')(global, 'RegExp', $RegExp);
43 require('./_set-species')('RegExp');