You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
var global = require('../internals/global'); |
|
var DESCRIPTORS = require('../internals/descriptors'); |
|
var defineBuiltInAccessor = require('../internals/define-built-in-accessor'); |
|
var regExpFlags = require('../internals/regexp-flags'); |
|
var fails = require('../internals/fails'); |
|
|
|
// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError |
|
var RegExp = global.RegExp; |
|
var RegExpPrototype = RegExp.prototype; |
|
|
|
var FORCED = DESCRIPTORS && fails(function () { |
|
var INDICES_SUPPORT = true; |
|
try { |
|
RegExp('.', 'd'); |
|
} catch (error) { |
|
INDICES_SUPPORT = false; |
|
} |
|
|
|
var O = {}; |
|
// modern V8 bug |
|
var calls = ''; |
|
var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy'; |
|
|
|
var addGetter = function (key, chr) { |
|
// eslint-disable-next-line es-x/no-object-defineproperty -- safe |
|
Object.defineProperty(O, key, { get: function () { |
|
calls += chr; |
|
return true; |
|
} }); |
|
}; |
|
|
|
var pairs = { |
|
dotAll: 's', |
|
global: 'g', |
|
ignoreCase: 'i', |
|
multiline: 'm', |
|
sticky: 'y' |
|
}; |
|
|
|
if (INDICES_SUPPORT) pairs.hasIndices = 'd'; |
|
|
|
for (var key in pairs) addGetter(key, pairs[key]); |
|
|
|
// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe |
|
var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O); |
|
|
|
return result !== expected || calls !== expected; |
|
}); |
|
|
|
// `RegExp.prototype.flags` getter |
|
// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags |
|
if (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', { |
|
configurable: true, |
|
get: regExpFlags |
|
});
|
|
|