Version 1
[yaffs-website] / node_modules / core-js / modules / es6.regexp.constructor.js
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
8   , Base              = $RegExp
9   , proto             = $RegExp.prototype
10   , re1               = /a/g
11   , re2               = /a/g
12   // "new" creates a new object, old webkit buggy here
13   , CORRECT_NEW       = new $RegExp(re1) !== re1;
14
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';
19 }))){
20   $RegExp = function RegExp(p, f){
21     var tiRE = this instanceof $RegExp
22       , piRE = isRegExp(p)
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);
29   };
30   var proxy = function(key){
31     key in $RegExp || dP($RegExp, key, {
32       configurable: true,
33       get: function(){ return Base[key]; },
34       set: function(it){ Base[key] = it; }
35     });
36   };
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);
41 }
42
43 require('./_set-species')('RegExp');