diff options
author | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-04-07 14:06:55 -0700 |
---|---|---|
committer | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-04-14 10:03:39 -0700 |
commit | 52af5c4eebf4de8638aef0338bd826656312a02a (patch) | |
tree | 628dc9fb0b558c3a73a2160706fef368876fe548 /deps/v8/test/cctest/test-regexp.cc | |
parent | 6e3e8acc7cc7ebd3d67db5ade1247b8b558efe09 (diff) | |
download | node-new-52af5c4eebf4de8638aef0338bd826656312a02a.tar.gz |
deps: upgrade V8 to 5.0.71.32
* Pick up the branch head for V8 5.0 stable [1]
* Edit v8 gitignore to allow trace_event copy
* Update V8 DEP trace_event as per deps/v8/DEPS [2]
[1] https://chromium.googlesource.com/v8/v8.git/+/3c67831
[2] https://chromium.googlesource.com/chromium/src/base/trace_event/common/+/4b09207e447ae5bd34643b4c6321bee7b76d35f9
Ref: https://github.com/nodejs/node/pull/5945
PR-URL: https://github.com/nodejs/node/pull/6111
Reviewed-By: targos - Michaƫl Zasso <mic.besace@gmail.com>
Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: indutny - Fedor Indutny <fedor.indutny@gmail.com>
Diffstat (limited to 'deps/v8/test/cctest/test-regexp.cc')
-rw-r--r-- | deps/v8/test/cctest/test-regexp.cc | 175 |
1 files changed, 102 insertions, 73 deletions
diff --git a/deps/v8/test/cctest/test-regexp.cc b/deps/v8/test/cctest/test-regexp.cc index a91058cc24..14ec12f21b 100644 --- a/deps/v8/test/cctest/test-regexp.cc +++ b/deps/v8/test/cctest/test-regexp.cc @@ -96,7 +96,7 @@ static bool CheckParse(const char* input) { FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); RegExpCompileData result; return v8::internal::RegExpParser::ParseRegExp( - CcTest::i_isolate(), &zone, &reader, false, false, &result); + CcTest::i_isolate(), &zone, &reader, JSRegExp::kNone, &result); } @@ -106,8 +106,10 @@ static void CheckParseEq(const char* input, const char* expected, Zone zone; FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); RegExpCompileData result; - CHECK(v8::internal::RegExpParser::ParseRegExp( - CcTest::i_isolate(), &zone, &reader, false, unicode, &result)); + JSRegExp::Flags flags = JSRegExp::kNone; + if (unicode) flags |= JSRegExp::kUnicode; + CHECK(v8::internal::RegExpParser::ParseRegExp(CcTest::i_isolate(), &zone, + &reader, flags, &result)); CHECK(result.tree != NULL); CHECK(result.error.is_null()); std::ostringstream os; @@ -125,7 +127,7 @@ static bool CheckSimple(const char* input) { FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); RegExpCompileData result; CHECK(v8::internal::RegExpParser::ParseRegExp( - CcTest::i_isolate(), &zone, &reader, false, false, &result)); + CcTest::i_isolate(), &zone, &reader, JSRegExp::kNone, &result)); CHECK(result.tree != NULL); CHECK(result.error.is_null()); return result.simple; @@ -143,7 +145,7 @@ static MinMaxPair CheckMinMaxMatch(const char* input) { FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); RegExpCompileData result; CHECK(v8::internal::RegExpParser::ParseRegExp( - CcTest::i_isolate(), &zone, &reader, false, false, &result)); + CcTest::i_isolate(), &zone, &reader, JSRegExp::kNone, &result)); CHECK(result.tree != NULL); CHECK(result.error.is_null()); int min_match = result.tree->min_match(); @@ -206,8 +208,8 @@ void TestRegExpParser(bool lookbehind) { } CheckParseEq("()", "(^ %)"); CheckParseEq("(?=)", "(-> + %)"); - CheckParseEq("[]", "^[\\x00-\\uffff]"); // Doesn't compile on windows - CheckParseEq("[^]", "[\\x00-\\uffff]"); // \uffff isn't in codepage 1252 + CheckParseEq("[]", "^[\\x00-\\u{10ffff}]"); // Doesn't compile on windows + CheckParseEq("[^]", "[\\x00-\\u{10ffff}]"); // \uffff isn't in codepage 1252 CheckParseEq("[x]", "[x]"); CheckParseEq("[xyz]", "[x y z]"); CheckParseEq("[a-zA-Z0-9]", "[a-z A-Z 0-9]"); @@ -316,6 +318,10 @@ void TestRegExpParser(bool lookbehind) { CheckParseEq("\\u{12345}{3}", "(# 3 3 g '\\ud808\\udf45')", true); CheckParseEq("\\u{12345}*", "(# 0 - g '\\ud808\\udf45')", true); + CheckParseEq("\\ud808\\udf45*", "(# 0 - g '\\ud808\\udf45')", true); + CheckParseEq("[\\ud808\\udf45-\\ud809\\udccc]", "[\\u{012345}-\\u{0124cc}]", + true); + CHECK_SIMPLE("", false); CHECK_SIMPLE("a", true); CHECK_SIMPLE("a|b", false); @@ -454,7 +460,7 @@ static void ExpectError(const char* input, FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); RegExpCompileData result; CHECK(!v8::internal::RegExpParser::ParseRegExp( - CcTest::i_isolate(), &zone, &reader, false, false, &result)); + CcTest::i_isolate(), &zone, &reader, JSRegExp::kNone, &result)); CHECK(result.tree == NULL); CHECK(!result.error.is_null()); v8::base::SmartArrayPointer<char> str = result.error->ToCString(ALLOW_NULLS); @@ -523,7 +529,7 @@ static void TestCharacterClassEscapes(uc16 c, bool (pred)(uc16 c)) { ZoneList<CharacterRange>* ranges = new(&zone) ZoneList<CharacterRange>(2, &zone); CharacterRange::AddClassEscape(c, ranges, &zone); - for (unsigned i = 0; i < (1 << 16); i++) { + for (uc32 i = 0; i < (1 << 16); i++) { bool in_class = false; for (int j = 0; !in_class && j < ranges->length(); j++) { CharacterRange& range = ranges->at(j); @@ -550,17 +556,19 @@ static RegExpNode* Compile(const char* input, bool multiline, bool unicode, Isolate* isolate = CcTest::i_isolate(); FlatStringReader reader(isolate, CStrVector(input)); RegExpCompileData compile_data; + JSRegExp::Flags flags = JSRegExp::kNone; + if (multiline) flags = JSRegExp::kMultiline; + if (unicode) flags = JSRegExp::kUnicode; if (!v8::internal::RegExpParser::ParseRegExp(CcTest::i_isolate(), zone, - &reader, multiline, unicode, - &compile_data)) + &reader, flags, &compile_data)) return NULL; Handle<String> pattern = isolate->factory() ->NewStringFromUtf8(CStrVector(input)) .ToHandleChecked(); Handle<String> sample_subject = isolate->factory()->NewStringFromUtf8(CStrVector("")).ToHandleChecked(); - RegExpEngine::Compile(isolate, zone, &compile_data, false, false, multiline, - false, pattern, sample_subject, is_one_byte); + RegExpEngine::Compile(isolate, zone, &compile_data, flags, pattern, + sample_subject, is_one_byte); return compile_data.node; } @@ -678,7 +686,7 @@ TEST(DispatchTableConstruction) { for (int i = 0; i < kRangeCount; i++) { uc16* range = ranges[i]; for (int j = 0; j < 2 * kRangeSize; j += 2) - table.AddRange(CharacterRange(range[j], range[j + 1]), i, &zone); + table.AddRange(CharacterRange::Range(range[j], range[j + 1]), i, &zone); } // Check that the table looks as we would expect for (int p = 0; p < kLimit; p++) { @@ -1178,16 +1186,16 @@ TEST(MacroAssemblerNativeBackRefNoCase) { m.WriteCurrentPositionToRegister(2, 0); m.AdvanceCurrentPosition(3); m.WriteCurrentPositionToRegister(3, 0); - m.CheckNotBackReferenceIgnoreCase(2, false, &fail); // Match "AbC". - m.CheckNotBackReferenceIgnoreCase(2, false, &fail); // Match "ABC". + m.CheckNotBackReferenceIgnoreCase(2, false, false, &fail); // Match "AbC". + m.CheckNotBackReferenceIgnoreCase(2, false, false, &fail); // Match "ABC". Label expected_fail; - m.CheckNotBackReferenceIgnoreCase(2, false, &expected_fail); + m.CheckNotBackReferenceIgnoreCase(2, false, false, &expected_fail); m.Bind(&fail); m.Fail(); m.Bind(&expected_fail); m.AdvanceCurrentPosition(3); // Skip "xYz" - m.CheckNotBackReferenceIgnoreCase(2, false, &succ); + m.CheckNotBackReferenceIgnoreCase(2, false, false, &succ); m.Fail(); m.Bind(&succ); @@ -1490,7 +1498,7 @@ TEST(AddInverseToTable) { int from = PseudoRandom(t + 87, i + 25) % kLimit; int to = from + (PseudoRandom(i + 87, t + 25) % (kLimit / 20)); if (to > kLimit) to = kLimit; - ranges->Add(CharacterRange(from, to), &zone); + ranges->Add(CharacterRange::Range(from, to), &zone); } DispatchTable table(&zone); DispatchTableConstructor cons(&table, false, &zone); @@ -1507,7 +1515,7 @@ TEST(AddInverseToTable) { Zone zone; ZoneList<CharacterRange>* ranges = new(&zone) ZoneList<CharacterRange>(1, &zone); - ranges->Add(CharacterRange(0xFFF0, 0xFFFE), &zone); + ranges->Add(CharacterRange::Range(0xFFF0, 0xFFFE), &zone); DispatchTable table(&zone); DispatchTableConstructor cons(&table, false, &zone); cons.set_choice_index(0); @@ -1621,7 +1629,9 @@ static void TestRangeCaseIndependence(Isolate* isolate, CharacterRange input, int count = expected.length(); ZoneList<CharacterRange>* list = new(&zone) ZoneList<CharacterRange>(count, &zone); - input.AddCaseEquivalents(isolate, &zone, list, false); + list->Add(input, &zone); + CharacterRange::AddCaseEquivalents(isolate, &zone, list, false); + list->Remove(0); // Remove the input before checking results. CHECK_EQ(count, list->length()); for (int i = 0; i < list->length(); i++) { CHECK_EQ(expected[i].from(), list->at(i).from()); @@ -1645,31 +1655,33 @@ TEST(CharacterRangeCaseIndependence) { CharacterRange::Singleton('A')); TestSimpleRangeCaseIndependence(isolate, CharacterRange::Singleton('z'), CharacterRange::Singleton('Z')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('a', 'z'), - CharacterRange('A', 'Z')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('c', 'f'), - CharacterRange('C', 'F')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('a', 'b'), - CharacterRange('A', 'B')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('y', 'z'), - CharacterRange('Y', 'Z')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('a' - 1, 'z' + 1), - CharacterRange('A', 'Z')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('A', 'Z'), - CharacterRange('a', 'z')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('C', 'F'), - CharacterRange('c', 'f')); - TestSimpleRangeCaseIndependence(isolate, CharacterRange('A' - 1, 'Z' + 1), - CharacterRange('a', 'z')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('a', 'z'), + CharacterRange::Range('A', 'Z')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('c', 'f'), + CharacterRange::Range('C', 'F')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('a', 'b'), + CharacterRange::Range('A', 'B')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('y', 'z'), + CharacterRange::Range('Y', 'Z')); + TestSimpleRangeCaseIndependence(isolate, + CharacterRange::Range('a' - 1, 'z' + 1), + CharacterRange::Range('A', 'Z')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('A', 'Z'), + CharacterRange::Range('a', 'z')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('C', 'F'), + CharacterRange::Range('c', 'f')); + TestSimpleRangeCaseIndependence(isolate, + CharacterRange::Range('A' - 1, 'Z' + 1), + CharacterRange::Range('a', 'z')); // Here we need to add [l-z] to complete the case independence of // [A-Za-z] but we expect [a-z] to be added since we always add a // whole block at a time. - TestSimpleRangeCaseIndependence(isolate, CharacterRange('A', 'k'), - CharacterRange('a', 'z')); + TestSimpleRangeCaseIndependence(isolate, CharacterRange::Range('A', 'k'), + CharacterRange::Range('a', 'z')); } -static bool InClass(uc16 c, ZoneList<CharacterRange>* ranges) { +static bool InClass(uc32 c, ZoneList<CharacterRange>* ranges) { if (ranges == NULL) return false; for (int i = 0; i < ranges->length(); i++) { @@ -1681,29 +1693,46 @@ static bool InClass(uc16 c, ZoneList<CharacterRange>* ranges) { } -TEST(CharClassDifference) { +TEST(UnicodeRangeSplitter) { Zone zone; ZoneList<CharacterRange>* base = new(&zone) ZoneList<CharacterRange>(1, &zone); base->Add(CharacterRange::Everything(), &zone); - Vector<const int> overlay = CharacterRange::GetWordBounds(); - ZoneList<CharacterRange>* included = NULL; - ZoneList<CharacterRange>* excluded = NULL; - CharacterRange::Split(base, overlay, &included, &excluded, &zone); - for (int i = 0; i < (1 << 16); i++) { - bool in_base = InClass(i, base); - if (in_base) { - bool in_overlay = false; - for (int j = 0; !in_overlay && j < overlay.length(); j += 2) { - if (overlay[j] <= i && i < overlay[j+1]) - in_overlay = true; - } - CHECK_EQ(in_overlay, InClass(i, included)); - CHECK_EQ(!in_overlay, InClass(i, excluded)); - } else { - CHECK(!InClass(i, included)); - CHECK(!InClass(i, excluded)); - } + UnicodeRangeSplitter splitter(&zone, base); + // BMP + for (uc32 c = 0; c < 0xd800; c++) { + CHECK(InClass(c, splitter.bmp())); + CHECK(!InClass(c, splitter.lead_surrogates())); + CHECK(!InClass(c, splitter.trail_surrogates())); + CHECK(!InClass(c, splitter.non_bmp())); + } + // Lead surrogates + for (uc32 c = 0xd800; c < 0xdbff; c++) { + CHECK(!InClass(c, splitter.bmp())); + CHECK(InClass(c, splitter.lead_surrogates())); + CHECK(!InClass(c, splitter.trail_surrogates())); + CHECK(!InClass(c, splitter.non_bmp())); + } + // Trail surrogates + for (uc32 c = 0xdc00; c < 0xdfff; c++) { + CHECK(!InClass(c, splitter.bmp())); + CHECK(!InClass(c, splitter.lead_surrogates())); + CHECK(InClass(c, splitter.trail_surrogates())); + CHECK(!InClass(c, splitter.non_bmp())); + } + // BMP + for (uc32 c = 0xe000; c < 0xffff; c++) { + CHECK(InClass(c, splitter.bmp())); + CHECK(!InClass(c, splitter.lead_surrogates())); + CHECK(!InClass(c, splitter.trail_surrogates())); + CHECK(!InClass(c, splitter.non_bmp())); + } + // Non-BMP + for (uc32 c = 0x10000; c < 0x10ffff; c++) { + CHECK(!InClass(c, splitter.bmp())); + CHECK(!InClass(c, splitter.lead_surrogates())); + CHECK(!InClass(c, splitter.trail_surrogates())); + CHECK(InClass(c, splitter.non_bmp())); } } @@ -1714,9 +1743,9 @@ TEST(CanonicalizeCharacterSets) { new(&zone) ZoneList<CharacterRange>(4, &zone); CharacterSet set(list); - list->Add(CharacterRange(10, 20), &zone); - list->Add(CharacterRange(30, 40), &zone); - list->Add(CharacterRange(50, 60), &zone); + list->Add(CharacterRange::Range(10, 20), &zone); + list->Add(CharacterRange::Range(30, 40), &zone); + list->Add(CharacterRange::Range(50, 60), &zone); set.Canonicalize(); CHECK_EQ(3, list->length()); CHECK_EQ(10, list->at(0).from()); @@ -1727,9 +1756,9 @@ TEST(CanonicalizeCharacterSets) { CHECK_EQ(60, list->at(2).to()); list->Rewind(0); - list->Add(CharacterRange(10, 20), &zone); - list->Add(CharacterRange(50, 60), &zone); - list->Add(CharacterRange(30, 40), &zone); + list->Add(CharacterRange::Range(10, 20), &zone); + list->Add(CharacterRange::Range(50, 60), &zone); + list->Add(CharacterRange::Range(30, 40), &zone); set.Canonicalize(); CHECK_EQ(3, list->length()); CHECK_EQ(10, list->at(0).from()); @@ -1740,11 +1769,11 @@ TEST(CanonicalizeCharacterSets) { CHECK_EQ(60, list->at(2).to()); list->Rewind(0); - list->Add(CharacterRange(30, 40), &zone); - list->Add(CharacterRange(10, 20), &zone); - list->Add(CharacterRange(25, 25), &zone); - list->Add(CharacterRange(100, 100), &zone); - list->Add(CharacterRange(1, 1), &zone); + list->Add(CharacterRange::Range(30, 40), &zone); + list->Add(CharacterRange::Range(10, 20), &zone); + list->Add(CharacterRange::Range(25, 25), &zone); + list->Add(CharacterRange::Range(100, 100), &zone); + list->Add(CharacterRange::Range(1, 1), &zone); set.Canonicalize(); CHECK_EQ(5, list->length()); CHECK_EQ(1, list->at(0).from()); @@ -1759,9 +1788,9 @@ TEST(CanonicalizeCharacterSets) { CHECK_EQ(100, list->at(4).to()); list->Rewind(0); - list->Add(CharacterRange(10, 19), &zone); - list->Add(CharacterRange(21, 30), &zone); - list->Add(CharacterRange(20, 20), &zone); + list->Add(CharacterRange::Range(10, 19), &zone); + list->Add(CharacterRange::Range(21, 30), &zone); + list->Add(CharacterRange::Range(20, 20), &zone); set.Canonicalize(); CHECK_EQ(1, list->length()); CHECK_EQ(10, list->at(0).from()); |