1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 'use strict';
- var globalThis = require('../internals/global-this');
- 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 = globalThis.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/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/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
- });
|