Skip to content

Commit 8aaad88

Browse files
authored
Merge pull request #1015 from zloirock/uc-sticky
2 parents 73804dd + ab4cc84 commit 8aaad88

5 files changed

Lines changed: 22 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## Changelog
22
##### Unreleased
3+
- Added a workaround for a UC Browser specific version bug with unobservable `RegExp#sticky` flag, [#1008](https://github.com/zloirock/core-js/issues/1008), [#1015](https://github.com/zloirock/core-js/issues/1015)
34
- Added handling of comments and specific spaces to `Function#name` polyfill, [#1010](https://github.com/zloirock/core-js/issues/1010), thanks [@ildar-shaimordanov](https://github.com/ildar-shaimordanov)
45
- Updated Deno compat data mapping
56
- Added iOS Safari 15.2 compat data mapping

packages/core-js/internals/regexp-exec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var UPDATES_LAST_INDEX_WRONG = (function () {
2828
return re1.lastIndex !== 0 || re2.lastIndex !== 0;
2929
})();
3030

31-
var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;
31+
var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;
3232

3333
// nonparticipating capturing group, copied from es5-shim's String#split patch.
3434
var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

packages/core-js/internals/regexp-sticky-helpers.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,27 @@ var global = require('../internals/global');
44
// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
55
var $RegExp = global.RegExp;
66

7-
exports.UNSUPPORTED_Y = fails(function () {
7+
var UNSUPPORTED_Y = fails(function () {
88
var re = $RegExp('a', 'y');
99
re.lastIndex = 2;
1010
return re.exec('abcd') != null;
1111
});
1212

13-
exports.BROKEN_CARET = fails(function () {
13+
// UC Browser bug
14+
// https://github.com/zloirock/core-js/issues/1008
15+
var MISSED_STICKY = UNSUPPORTED_Y || fails(function () {
16+
return !$RegExp('a', 'y').sticky;
17+
});
18+
19+
var BROKEN_CARET = UNSUPPORTED_Y || fails(function () {
1420
// https://bugzilla.mozilla.org/show_bug.cgi?id=773687
1521
var re = $RegExp('^r', 'gy');
1622
re.lastIndex = 2;
1723
return re.exec('str') != null;
1824
});
25+
26+
module.exports = {
27+
BROKEN_CARET: BROKEN_CARET,
28+
MISSED_STICKY: MISSED_STICKY,
29+
UNSUPPORTED_Y: UNSUPPORTED_Y
30+
};

packages/core-js/modules/es.regexp.constructor.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ var re2 = /a/g;
3838
// "new" should create a new object, old webkit bug
3939
var CORRECT_NEW = new NativeRegExp(re1) !== re1;
4040

41+
var MISSED_STICKY = stickyHelpers.MISSED_STICKY;
4142
var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
4243

4344
var BASE_FORCED = DESCRIPTORS &&
44-
(!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {
45+
(!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {
4546
re2[MATCH] = false;
4647
// RegExp constructor can alter flags and IsRegExp works correct with @@match
4748
return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';
@@ -146,9 +147,9 @@ if (isForced('RegExp', BASE_FORCED)) {
146147

147148
rawFlags = flags;
148149

149-
if (UNSUPPORTED_Y && 'sticky' in re1) {
150+
if (MISSED_STICKY && 'sticky' in re1) {
150151
sticky = !!flags && stringIndexOf(flags, 'y') > -1;
151-
if (sticky) flags = replace(flags, /y/g, '');
152+
if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');
152153
}
153154

154155
if (UNSUPPORTED_NCG) {

packages/core-js/modules/es.regexp.sticky.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var global = require('../internals/global');
22
var DESCRIPTORS = require('../internals/descriptors');
3-
var UNSUPPORTED_Y = require('../internals/regexp-sticky-helpers').UNSUPPORTED_Y;
3+
var MISSED_STICKY = require('../internals/regexp-sticky-helpers').MISSED_STICKY;
44
var classof = require('../internals/classof-raw');
55
var defineProperty = require('../internals/object-define-property').f;
66
var getInternalState = require('../internals/internal-state').get;
@@ -10,7 +10,7 @@ var TypeError = global.TypeError;
1010

1111
// `RegExp.prototype.sticky` getter
1212
// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky
13-
if (DESCRIPTORS && UNSUPPORTED_Y) {
13+
if (DESCRIPTORS && MISSED_STICKY) {
1414
defineProperty(RegExpPrototype, 'sticky', {
1515
configurable: true,
1616
get: function () {

0 commit comments

Comments
 (0)