[Intl] Fix RegExp [\W] with i flag

Add special condiction in
ecma262 #sec-runtime-semantics-canonicalize-ch Step 3.g-h.

Bug: chromium:971636
Change-Id: Id533beb66749af6e38ee114cf79f995a1156df20
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1652795
Reviewed-by: Yang Guo <yangguo@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#62105}
This commit is contained in:
Frank Tang 2019-06-11 12:31:40 -07:00 committed by Commit Bot
parent de93514575
commit 1945392a4e
2 changed files with 19 additions and 1 deletions

View File

@ -5963,7 +5963,15 @@ void CharacterRange::AddCaseEquivalents(Isolate* isolate, Zone* zone,
upper2.toUpper(locale);
// Only add if the upper case are the same.
if (upper[0] == upper2[0]) {
others.add(start);
// #sec-runtime-semantics-canonicalize-ch
// 3.g. If the numeric value of ch ≥ 128 and the numeric value of
// cu < 128, return ch.
if (bottom >= 128 && start < 128) {
others.add(bottom);
} else {
// 3.h. 3.h. 3.h. Return cu.
others.add(start);
}
}
start++;
}

View File

@ -0,0 +1,10 @@
// Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Regression test about \W w/ i will match S
assertEquals("RST", "RST".replace(/[\W_]/gi, ""));
assertEquals("RST", "RST".replace(/[\W]/gi, ""));
assertEquals("RST", "RST".replace(/[\Wa]/gi, ""));
assertEquals(null, "s".match(/[\u00A0-\u0180]/i));