Commit f22a5663 authored by yangguo's avatar yangguo Committed by Commit bot

[regexp] character class for desugaring cannot be part of RegExpText.

We only do the desugaring in RegExpCharacterClass::ToNode, which is not
called if it is part of a RegExpText.

R=erik.corry@gmail.com, erikcorry@chromium.org

Review URL: https://codereview.chromium.org/1641593002

Cr-Commit-Position: refs/heads/master@{#33543}
parent e41c62a8
......@@ -1073,7 +1073,7 @@ void RegExpBuilder::AddTrailSurrogate(uc16 trail_surrogate) {
uc32 combined =
unibrow::Utf16::CombineSurrogatePair(lead_surrogate, trail_surrogate);
if (NeedsDesugaringForIgnoreCase(combined)) {
AddCharacterClass(combined);
AddCharacterClassForDesugaring(combined);
} else {
ZoneList<uc16> surrogate_pair(2, zone());
surrogate_pair.Add(lead_surrogate, zone());
......@@ -1094,7 +1094,7 @@ void RegExpBuilder::FlushPendingSurrogate() {
DCHECK(unicode());
uc32 c = pending_surrogate_;
pending_surrogate_ = kNoPendingSurrogate;
AddCharacterClass(c);
AddCharacterClassForDesugaring(c);
}
}
......@@ -1131,7 +1131,7 @@ void RegExpBuilder::AddCharacter(uc16 c) {
FlushPendingSurrogate();
pending_empty_ = false;
if (NeedsDesugaringForIgnoreCase(c)) {
AddCharacterClass(c);
AddCharacterClassForDesugaring(c);
} else {
if (characters_ == NULL) {
characters_ = new (zone()) ZoneList<uc16>(4, zone());
......@@ -1170,9 +1170,8 @@ void RegExpBuilder::AddCharacterClass(RegExpCharacterClass* cc) {
}
}
void RegExpBuilder::AddCharacterClass(uc32 c) {
AddCharacterClass(new (zone()) RegExpCharacterClass(
void RegExpBuilder::AddCharacterClassForDesugaring(uc32 c) {
AddTerm(new (zone()) RegExpCharacterClass(
CharacterRange::List(zone(), CharacterRange::Singleton(c)), false));
}
......
......@@ -106,7 +106,7 @@ class RegExpBuilder : public ZoneObject {
// following quantifier
void AddEmpty();
void AddCharacterClass(RegExpCharacterClass* cc);
void AddCharacterClass(uc32 c);
void AddCharacterClassForDesugaring(uc32 c);
void AddAtom(RegExpTree* tree);
void AddTerm(RegExpTree* tree);
void AddAssertion(RegExpTree* tree);
......
......@@ -52,3 +52,7 @@ assertEquals(["\u00e5\u212b\u00c5", "\u00e5"],
/(.)\1\1/ui.exec("\u00e5\u212b\u00c5"));
assertEquals(["\u{118aa}\u{118ca}", "\u{118aa}"],
/(.)\1/ui.exec("\u{118aa}\u{118ca}"));
// Misc.
assertTrue(/\u00e5\u00e5\u00e5/ui.test("\u212b\u00e5\u00c5"));
assertTrue(/AB\u{10400}/ui.test("ab\u{10428}"));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment