#393, Bug 1281739 - Do not match K, S, k, s, KELVIN SIGN, LATIN SMALL LETTER LONG S with \W in unicode ignoreCase RegExp. r=till

This commit is contained in:
Tooru Fujisawa 2016-06-26 00:50:43 +09:00 committed by Cameron Kaiser
parent 3e39760c8c
commit 3c5d4bab84
2 changed files with 41 additions and 9 deletions

View File

@ -94,10 +94,10 @@ static const int kWordAndSurrogateRanges[] = {
static const int kWordAndSurrogateRangeCount = ArrayLength(kWordAndSurrogateRanges);
static const int kNegatedIgnoreCaseWordAndSurrogateRanges[] = {
0, '0', '9' + 1, 'A',
'K', 'K' + 1, 'S', 'S' + 1,
'Z' + 1, '_', '_' + 1, 'a',
'k', 'k' + 1, 's', 's' + 1,
'z' + 1, unicode::LeadSurrogateMin,
'z' + 1, 0x017F,
0x017F + 1, 0x212A,
0x212A + 1, unicode::LeadSurrogateMin,
unicode::TrailSurrogateMax + 1, 0x10000,
0x10000 };
static const int kNegatedIgnoreCaseWordAndSurrogateRangeCount =

View File

@ -1,6 +1,10 @@
var BUGNUMBER = 1135377;
var summary = "Implement RegExp unicode flag -- ignoreCase flag with character class escape.";
// \W doesn't match S or K from the change in
// https://github.com/tc39/ecma262/pull/525
// (bug 1281739)
print(BUGNUMBER + ": " + summary);
// LATIN SMALL LETTER LONG S
@ -12,13 +16,27 @@ assertEqArray(/\w/iu.exec("s"),
assertEqArray(/\w/iu.exec("\u017F"),
["\u017F"]);
assertEqArray(/\W/iu.exec("S"),
assertEqArray(/[^\W]/iu.exec("S"),
["S"]);
assertEqArray(/\W/iu.exec("s"),
assertEqArray(/[^\W]/iu.exec("s"),
["s"]);
assertEqArray(/\W/iu.exec("\u017F"),
assertEqArray(/[^\W]/iu.exec("\u017F"),
["\u017F"]);
assertEq(/\W/iu.exec("S"),
null);
assertEq(/\W/iu.exec("s"),
null);
assertEq(/\W/iu.exec("\u017F"),
null);
assertEq(/[^\w]/iu.exec("S"),
null);
assertEq(/[^\w]/iu.exec("s"),
null);
assertEq(/[^\w]/iu.exec("\u017F"),
null);
// KELVIN SIGN
assertEqArray(/\w/iu.exec("k"),
@ -28,12 +46,26 @@ assertEqArray(/\w/iu.exec("k"),
assertEqArray(/\w/iu.exec("\u212A"),
["\u212A"]);
assertEqArray(/\W/iu.exec("k"),
assertEqArray(/[^\W]/iu.exec("k"),
["k"]);
assertEqArray(/\W/iu.exec("k"),
assertEqArray(/[^\W]/iu.exec("k"),
["k"]);
assertEqArray(/\W/iu.exec("\u212A"),
assertEqArray(/[^\W]/iu.exec("\u212A"),
["\u212A"]);
assertEq(/\W/iu.exec("k"),
null);
assertEq(/\W/iu.exec("k"),
null);
assertEq(/\W/iu.exec("\u212A"),
null);
assertEq(/[^\w]/iu.exec("k"),
null);
assertEq(/[^\w]/iu.exec("k"),
null);
assertEq(/[^\w]/iu.exec("\u212A"),
null);
if (typeof reportCompare === "function")
reportCompare(true, true);