Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: test/cctest/test-regexp.cc

Issue 1568623004: [regexp] correctly parse non-BMP unicode escapes in atoms. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase correctly Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/regexp/regexp-parser.cc ('k') | test/mjsunit/harmony/unicode-escapes-in-regexps.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 static bool CheckParse(const char* input) { 93 static bool CheckParse(const char* input) {
94 v8::HandleScope scope(CcTest::isolate()); 94 v8::HandleScope scope(CcTest::isolate());
95 Zone zone; 95 Zone zone;
96 FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); 96 FlatStringReader reader(CcTest::i_isolate(), CStrVector(input));
97 RegExpCompileData result; 97 RegExpCompileData result;
98 return v8::internal::RegExpParser::ParseRegExp( 98 return v8::internal::RegExpParser::ParseRegExp(
99 CcTest::i_isolate(), &zone, &reader, false, false, &result); 99 CcTest::i_isolate(), &zone, &reader, false, false, &result);
100 } 100 }
101 101
102 102
103 static void CheckParseEq(const char* input, const char* expected) { 103 static void CheckParseEq(const char* input, const char* expected,
104 bool unicode = false) {
104 v8::HandleScope scope(CcTest::isolate()); 105 v8::HandleScope scope(CcTest::isolate());
105 Zone zone; 106 Zone zone;
106 FlatStringReader reader(CcTest::i_isolate(), CStrVector(input)); 107 FlatStringReader reader(CcTest::i_isolate(), CStrVector(input));
107 RegExpCompileData result; 108 RegExpCompileData result;
108 CHECK(v8::internal::RegExpParser::ParseRegExp( 109 CHECK(v8::internal::RegExpParser::ParseRegExp(
109 CcTest::i_isolate(), &zone, &reader, false, false, &result)); 110 CcTest::i_isolate(), &zone, &reader, false, unicode, &result));
110 CHECK(result.tree != NULL); 111 CHECK(result.tree != NULL);
111 CHECK(result.error.is_null()); 112 CHECK(result.error.is_null());
112 std::ostringstream os; 113 std::ostringstream os;
113 result.tree->Print(os, &zone); 114 result.tree->Print(os, &zone);
114 if (strcmp(expected, os.str().c_str()) != 0) { 115 if (strcmp(expected, os.str().c_str()) != 0) {
115 printf("%s | %s\n", expected, os.str().c_str()); 116 printf("%s | %s\n", expected, os.str().c_str());
116 } 117 }
117 CHECK_EQ(0, strcmp(expected, os.str().c_str())); 118 CHECK_EQ(0, strcmp(expected, os.str().c_str()));
118 } 119 }
119 120
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 #define CHECK_SIMPLE(input, simple) CHECK_EQ(simple, CheckSimple(input)); 157 #define CHECK_SIMPLE(input, simple) CHECK_EQ(simple, CheckSimple(input));
157 #define CHECK_MIN_MAX(input, min, max) \ 158 #define CHECK_MIN_MAX(input, min, max) \
158 { MinMaxPair min_max = CheckMinMaxMatch(input); \ 159 { MinMaxPair min_max = CheckMinMaxMatch(input); \
159 CHECK_EQ(min, min_max.min_match); \ 160 CHECK_EQ(min, min_max.min_match); \
160 CHECK_EQ(max, min_max.max_match); \ 161 CHECK_EQ(max, min_max.max_match); \
161 } 162 }
162 163
163 164
164 void TestRegExpParser(bool lookbehind) { 165 void TestRegExpParser(bool lookbehind) {
165 FLAG_harmony_regexp_lookbehind = lookbehind; 166 FLAG_harmony_regexp_lookbehind = lookbehind;
167 FLAG_harmony_unicode_regexps = true;
166 168
167 CHECK_PARSE_ERROR("?"); 169 CHECK_PARSE_ERROR("?");
168 170
169 CheckParseEq("abc", "'abc'"); 171 CheckParseEq("abc", "'abc'");
170 CheckParseEq("", "%"); 172 CheckParseEq("", "%");
171 CheckParseEq("abc|def", "(| 'abc' 'def')"); 173 CheckParseEq("abc|def", "(| 'abc' 'def')");
172 CheckParseEq("abc|def|ghi", "(| 'abc' 'def' 'ghi')"); 174 CheckParseEq("abc|def|ghi", "(| 'abc' 'def' 'ghi')");
173 CheckParseEq("^xxx$", "(: @^i 'xxx' @$i)"); 175 CheckParseEq("^xxx$", "(: @^i 'xxx' @$i)");
174 CheckParseEq("ab\\b\\d\\bcd", "(: 'ab' @b [0-9] @b 'cd')"); 176 CheckParseEq("ab\\b\\d\\bcd", "(: 'ab' @b [0-9] @b 'cd')");
175 CheckParseEq("\\w|\\d", "(| [0-9 A-Z _ a-z] [0-9])"); 177 CheckParseEq("\\w|\\d", "(| [0-9 A-Z _ a-z] [0-9])");
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 CheckParseEq("[\\111]", "[I]"); 300 CheckParseEq("[\\111]", "[I]");
299 CheckParseEq("[\\1111]", "[I 1]"); 301 CheckParseEq("[\\1111]", "[I 1]");
300 CheckParseEq("\\x34", "'\x34'"); 302 CheckParseEq("\\x34", "'\x34'");
301 CheckParseEq("\\x60", "'\x60'"); 303 CheckParseEq("\\x60", "'\x60'");
302 CheckParseEq("\\x3z", "'x3z'"); 304 CheckParseEq("\\x3z", "'x3z'");
303 CheckParseEq("\\c", "'\\c'"); 305 CheckParseEq("\\c", "'\\c'");
304 CheckParseEq("\\u0034", "'\x34'"); 306 CheckParseEq("\\u0034", "'\x34'");
305 CheckParseEq("\\u003z", "'u003z'"); 307 CheckParseEq("\\u003z", "'u003z'");
306 CheckParseEq("foo[z]*", "(: 'foo' (# 0 - g [z]))"); 308 CheckParseEq("foo[z]*", "(: 'foo' (# 0 - g [z]))");
307 309
310 // Unicode regexps
311 CheckParseEq("\\u{12345}", "'\\ud808\\udf45'", true);
312 CheckParseEq("\\u{12345}\\u{23456}", "'\\ud808\\udf45\\ud84d\\udc56'", true);
313 CheckParseEq("\\u{12345}|\\u{23456}", "(| '\\ud808\\udf45' '\\ud84d\\udc56')",
314 true);
315
308 CHECK_SIMPLE("", false); 316 CHECK_SIMPLE("", false);
309 CHECK_SIMPLE("a", true); 317 CHECK_SIMPLE("a", true);
310 CHECK_SIMPLE("a|b", false); 318 CHECK_SIMPLE("a|b", false);
311 CHECK_SIMPLE("a\\n", false); 319 CHECK_SIMPLE("a\\n", false);
312 CHECK_SIMPLE("^a", false); 320 CHECK_SIMPLE("^a", false);
313 CHECK_SIMPLE("a$", false); 321 CHECK_SIMPLE("a$", false);
314 CHECK_SIMPLE("a\\b!", false); 322 CHECK_SIMPLE("a\\b!", false);
315 CHECK_SIMPLE("a\\Bb", false); 323 CHECK_SIMPLE("a\\Bb", false);
316 CHECK_SIMPLE("a*", false); 324 CHECK_SIMPLE("a*", false);
317 CHECK_SIMPLE("a*?", false); 325 CHECK_SIMPLE("a*?", false);
(...skipping 1602 matching lines...) Expand 10 before | Expand all | Expand 10 after
1920 // .toString() throws on non-RegExps that aren't RegExp.prototype 1928 // .toString() throws on non-RegExps that aren't RegExp.prototype
1921 v8::Local<v8::Value> resultToStringError = CompileRun( 1929 v8::Local<v8::Value> resultToStringError = CompileRun(
1922 "var exception;" 1930 "var exception;"
1923 "try { RegExp.prototype.toString.call(null) }" 1931 "try { RegExp.prototype.toString.call(null) }"
1924 "catch (e) { exception = e; }" 1932 "catch (e) { exception = e; }"
1925 "exception"); 1933 "exception");
1926 CHECK_EQ(1, use_counts[v8::Isolate::kRegExpPrototypeStickyGetter]); 1934 CHECK_EQ(1, use_counts[v8::Isolate::kRegExpPrototypeStickyGetter]);
1927 CHECK_EQ(1, use_counts[v8::Isolate::kRegExpPrototypeToString]); 1935 CHECK_EQ(1, use_counts[v8::Isolate::kRegExpPrototypeToString]);
1928 CHECK(resultToStringError->IsObject()); 1936 CHECK(resultToStringError->IsObject());
1929 } 1937 }
OLDNEW
« no previous file with comments | « src/regexp/regexp-parser.cc ('k') | test/mjsunit/harmony/unicode-escapes-in-regexps.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698