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

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

Issue 1817163003: Revert of Parser: Make skipping HTML comments optional. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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 | « test/cctest/test-api.cc ('k') | no next file » | 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 KeywordToken key_token; 63 KeywordToken key_token;
64 i::UnicodeCache unicode_cache; 64 i::UnicodeCache unicode_cache;
65 i::byte buffer[32]; 65 i::byte buffer[32];
66 for (int i = 0; (key_token = keywords[i]).keyword != NULL; i++) { 66 for (int i = 0; (key_token = keywords[i]).keyword != NULL; i++) {
67 const i::byte* keyword = 67 const i::byte* keyword =
68 reinterpret_cast<const i::byte*>(key_token.keyword); 68 reinterpret_cast<const i::byte*>(key_token.keyword);
69 int length = i::StrLength(key_token.keyword); 69 int length = i::StrLength(key_token.keyword);
70 CHECK(static_cast<int>(sizeof(buffer)) >= length); 70 CHECK(static_cast<int>(sizeof(buffer)) >= length);
71 { 71 {
72 i::Utf8ToUtf16CharacterStream stream(keyword, length); 72 i::Utf8ToUtf16CharacterStream stream(keyword, length);
73 i::Scanner scanner(&unicode_cache, false); 73 i::Scanner scanner(&unicode_cache);
74 scanner.Initialize(&stream); 74 scanner.Initialize(&stream);
75 CHECK_EQ(key_token.token, scanner.Next()); 75 CHECK_EQ(key_token.token, scanner.Next());
76 CHECK_EQ(i::Token::EOS, scanner.Next()); 76 CHECK_EQ(i::Token::EOS, scanner.Next());
77 } 77 }
78 // Removing characters will make keyword matching fail. 78 // Removing characters will make keyword matching fail.
79 { 79 {
80 i::Utf8ToUtf16CharacterStream stream(keyword, length - 1); 80 i::Utf8ToUtf16CharacterStream stream(keyword, length - 1);
81 i::Scanner scanner(&unicode_cache, false); 81 i::Scanner scanner(&unicode_cache);
82 scanner.Initialize(&stream); 82 scanner.Initialize(&stream);
83 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next()); 83 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next());
84 CHECK_EQ(i::Token::EOS, scanner.Next()); 84 CHECK_EQ(i::Token::EOS, scanner.Next());
85 } 85 }
86 // Adding characters will make keyword matching fail. 86 // Adding characters will make keyword matching fail.
87 static const char chars_to_append[] = { 'z', '0', '_' }; 87 static const char chars_to_append[] = { 'z', '0', '_' };
88 for (int j = 0; j < static_cast<int>(arraysize(chars_to_append)); ++j) { 88 for (int j = 0; j < static_cast<int>(arraysize(chars_to_append)); ++j) {
89 i::MemMove(buffer, keyword, length); 89 i::MemMove(buffer, keyword, length);
90 buffer[length] = chars_to_append[j]; 90 buffer[length] = chars_to_append[j];
91 i::Utf8ToUtf16CharacterStream stream(buffer, length + 1); 91 i::Utf8ToUtf16CharacterStream stream(buffer, length + 1);
92 i::Scanner scanner(&unicode_cache, false); 92 i::Scanner scanner(&unicode_cache);
93 scanner.Initialize(&stream); 93 scanner.Initialize(&stream);
94 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next()); 94 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next());
95 CHECK_EQ(i::Token::EOS, scanner.Next()); 95 CHECK_EQ(i::Token::EOS, scanner.Next());
96 } 96 }
97 // Replacing characters will make keyword matching fail. 97 // Replacing characters will make keyword matching fail.
98 { 98 {
99 i::MemMove(buffer, keyword, length); 99 i::MemMove(buffer, keyword, length);
100 buffer[length - 1] = '_'; 100 buffer[length - 1] = '_';
101 i::Utf8ToUtf16CharacterStream stream(buffer, length); 101 i::Utf8ToUtf16CharacterStream stream(buffer, length);
102 i::Scanner scanner(&unicode_cache, false); 102 i::Scanner scanner(&unicode_cache);
103 scanner.Initialize(&stream); 103 scanner.Initialize(&stream);
104 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next()); 104 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next());
105 CHECK_EQ(i::Token::EOS, scanner.Next()); 105 CHECK_EQ(i::Token::EOS, scanner.Next());
106 } 106 }
107 } 107 }
108 } 108 }
109 109
110 110
111 TEST(ScanHTMLEndComments) { 111 TEST(ScanHTMLEndComments) {
112 v8::V8::Initialize(); 112 v8::V8::Initialize();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 144
145 // Parser/Scanner needs a stack limit. 145 // Parser/Scanner needs a stack limit.
146 CcTest::i_isolate()->stack_guard()->SetStackLimit( 146 CcTest::i_isolate()->stack_guard()->SetStackLimit(
147 i::GetCurrentStackPosition() - 128 * 1024); 147 i::GetCurrentStackPosition() - 128 * 1024);
148 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 148 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
149 for (int i = 0; tests[i]; i++) { 149 for (int i = 0; tests[i]; i++) {
150 const i::byte* source = 150 const i::byte* source =
151 reinterpret_cast<const i::byte*>(tests[i]); 151 reinterpret_cast<const i::byte*>(tests[i]);
152 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); 152 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i]));
153 i::CompleteParserRecorder log; 153 i::CompleteParserRecorder log;
154 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 154 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
155 scanner.Initialize(&stream); 155 scanner.Initialize(&stream);
156 i::Zone zone; 156 i::Zone zone;
157 i::AstValueFactory ast_value_factory( 157 i::AstValueFactory ast_value_factory(
158 &zone, CcTest::i_isolate()->heap()->HashSeed()); 158 &zone, CcTest::i_isolate()->heap()->HashSeed());
159 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 159 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
160 stack_limit); 160 stack_limit);
161 preparser.set_allow_lazy(true); 161 preparser.set_allow_lazy(true);
162 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 162 i::PreParser::PreParseResult result = preparser.PreParseProgram();
163 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 163 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
164 CHECK(!log.HasError()); 164 CHECK(!log.HasError());
165 } 165 }
166 166
167 for (int i = 0; fail_tests[i]; i++) { 167 for (int i = 0; fail_tests[i]; i++) {
168 const i::byte* source = 168 const i::byte* source =
169 reinterpret_cast<const i::byte*>(fail_tests[i]); 169 reinterpret_cast<const i::byte*>(fail_tests[i]);
170 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i])); 170 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i]));
171 i::CompleteParserRecorder log; 171 i::CompleteParserRecorder log;
172 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 172 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
173 scanner.Initialize(&stream); 173 scanner.Initialize(&stream);
174 i::Zone zone; 174 i::Zone zone;
175 i::AstValueFactory ast_value_factory( 175 i::AstValueFactory ast_value_factory(
176 &zone, CcTest::i_isolate()->heap()->HashSeed()); 176 &zone, CcTest::i_isolate()->heap()->HashSeed());
177 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 177 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
178 stack_limit); 178 stack_limit);
179 preparser.set_allow_lazy(true); 179 preparser.set_allow_lazy(true);
180 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 180 i::PreParser::PreParseResult result = preparser.PreParseProgram();
181 // Even in the case of a syntax error, kPreParseSuccess is returned. 181 // Even in the case of a syntax error, kPreParseSuccess is returned.
182 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 182 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
183 CHECK(log.HasError()); 183 CHECK(log.HasError());
184 } 184 }
185 } 185 }
186 186
187 TEST(ScanHtmlComments) {
188 const char* src = "a <!-- b --> c";
189 i::UnicodeCache unicode_cache;
190
191 // Skip HTML comments:
192 {
193 i::Utf8ToUtf16CharacterStream stream(reinterpret_cast<const i::byte*>(src),
194 i::StrLength(src));
195 i::Scanner scanner(&unicode_cache, true);
196 scanner.Initialize(&stream);
197 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next());
198 CHECK_EQ(i::Token::EOS, scanner.Next());
199 }
200
201 // Parse (don't skip) HTML comments:
202 {
203 i::Utf8ToUtf16CharacterStream stream(reinterpret_cast<const i::byte*>(src),
204 i::StrLength(src));
205 i::Scanner scanner(&unicode_cache, false);
206 scanner.Initialize(&stream);
207 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next());
208 CHECK_EQ(i::Token::LT, scanner.Next());
209 CHECK_EQ(i::Token::NOT, scanner.Next());
210 CHECK_EQ(i::Token::DEC, scanner.Next());
211 }
212 }
213 187
214 class ScriptResource : public v8::String::ExternalOneByteStringResource { 188 class ScriptResource : public v8::String::ExternalOneByteStringResource {
215 public: 189 public:
216 ScriptResource(const char* data, size_t length) 190 ScriptResource(const char* data, size_t length)
217 : data_(data), length_(length) { } 191 : data_(data), length_(length) { }
218 192
219 const char* data() const { return data_; } 193 const char* data() const { return data_; }
220 size_t length() const { return length_; } 194 size_t length() const { return length_; }
221 195
222 private: 196 private:
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 NULL 316 NULL
343 }; 317 };
344 318
345 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 319 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
346 for (int i = 0; programs[i]; i++) { 320 for (int i = 0; programs[i]; i++) {
347 const char* program = programs[i]; 321 const char* program = programs[i];
348 i::Utf8ToUtf16CharacterStream stream( 322 i::Utf8ToUtf16CharacterStream stream(
349 reinterpret_cast<const i::byte*>(program), 323 reinterpret_cast<const i::byte*>(program),
350 static_cast<unsigned>(strlen(program))); 324 static_cast<unsigned>(strlen(program)));
351 i::CompleteParserRecorder log; 325 i::CompleteParserRecorder log;
352 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 326 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
353 scanner.Initialize(&stream); 327 scanner.Initialize(&stream);
354 328
355 i::Zone zone; 329 i::Zone zone;
356 i::AstValueFactory ast_value_factory( 330 i::AstValueFactory ast_value_factory(
357 &zone, CcTest::i_isolate()->heap()->HashSeed()); 331 &zone, CcTest::i_isolate()->heap()->HashSeed());
358 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 332 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
359 stack_limit); 333 stack_limit);
360 preparser.set_allow_lazy(true); 334 preparser.set_allow_lazy(true);
361 preparser.set_allow_natives(true); 335 preparser.set_allow_natives(true);
362 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 336 i::PreParser::PreParseResult result = preparser.PreParseProgram();
(...skipping 15 matching lines...) Expand all
378 NULL 352 NULL
379 }; 353 };
380 354
381 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 355 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
382 for (int i = 0; programs[i]; i++) { 356 for (int i = 0; programs[i]; i++) {
383 const char* program = programs[i]; 357 const char* program = programs[i];
384 i::Utf8ToUtf16CharacterStream stream( 358 i::Utf8ToUtf16CharacterStream stream(
385 reinterpret_cast<const i::byte*>(program), 359 reinterpret_cast<const i::byte*>(program),
386 static_cast<unsigned>(strlen(program))); 360 static_cast<unsigned>(strlen(program)));
387 i::CompleteParserRecorder log; 361 i::CompleteParserRecorder log;
388 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 362 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
389 scanner.Initialize(&stream); 363 scanner.Initialize(&stream);
390 364
391 // Preparser defaults to disallowing natives syntax. 365 // Preparser defaults to disallowing natives syntax.
392 i::Zone zone; 366 i::Zone zone;
393 i::AstValueFactory ast_value_factory( 367 i::AstValueFactory ast_value_factory(
394 &zone, CcTest::i_isolate()->heap()->HashSeed()); 368 &zone, CcTest::i_isolate()->heap()->HashSeed());
395 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 369 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
396 stack_limit); 370 stack_limit);
397 preparser.set_allow_lazy(true); 371 preparser.set_allow_lazy(true);
398 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 372 i::PreParser::PreParseResult result = preparser.PreParseProgram();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 "escape: function() {}"; 423 "escape: function() {}";
450 // Fails parsing expecting an identifier after "function". 424 // Fails parsing expecting an identifier after "function".
451 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), 425 // Before fix, didn't check *ok after Expect(Token::Identifier, ok),
452 // and then used the invalid currently scanned literal. This always 426 // and then used the invalid currently scanned literal. This always
453 // failed in debug mode, and sometimes crashed in release mode. 427 // failed in debug mode, and sometimes crashed in release mode.
454 428
455 i::Utf8ToUtf16CharacterStream stream( 429 i::Utf8ToUtf16CharacterStream stream(
456 reinterpret_cast<const i::byte*>(program), 430 reinterpret_cast<const i::byte*>(program),
457 static_cast<unsigned>(strlen(program))); 431 static_cast<unsigned>(strlen(program)));
458 i::CompleteParserRecorder log; 432 i::CompleteParserRecorder log;
459 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 433 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
460 scanner.Initialize(&stream); 434 scanner.Initialize(&stream);
461 i::Zone zone; 435 i::Zone zone;
462 i::AstValueFactory ast_value_factory(&zone, 436 i::AstValueFactory ast_value_factory(&zone,
463 CcTest::i_isolate()->heap()->HashSeed()); 437 CcTest::i_isolate()->heap()->HashSeed());
464 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 438 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
465 CcTest::i_isolate()->stack_guard()->real_climit()); 439 CcTest::i_isolate()->stack_guard()->real_climit());
466 preparser.set_allow_lazy(true); 440 preparser.set_allow_lazy(true);
467 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 441 i::PreParser::PreParseResult result = preparser.PreParseProgram();
468 // Even in the case of a syntax error, kPreParseSuccess is returned. 442 // Even in the case of a syntax error, kPreParseSuccess is returned.
469 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 443 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
(...skipping 14 matching lines...) Expand all
484 128 * 1024); 458 128 * 1024);
485 459
486 const char* program = 460 const char* program =
487 "try { } catch (e) { var foo = function () { /* first */ } }" 461 "try { } catch (e) { var foo = function () { /* first */ } }"
488 "var bar = function () { /* second */ }"; 462 "var bar = function () { /* second */ }";
489 463
490 v8::HandleScope handles(CcTest::isolate()); 464 v8::HandleScope handles(CcTest::isolate());
491 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); 465 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program);
492 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); 466 i::GenericStringUtf16CharacterStream stream(source, 0, source->length());
493 i::CompleteParserRecorder log; 467 i::CompleteParserRecorder log;
494 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 468 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
495 scanner.Initialize(&stream); 469 scanner.Initialize(&stream);
496 i::Zone zone; 470 i::Zone zone;
497 i::AstValueFactory ast_value_factory(&zone, 471 i::AstValueFactory ast_value_factory(&zone,
498 CcTest::i_isolate()->heap()->HashSeed()); 472 CcTest::i_isolate()->heap()->HashSeed());
499 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 473 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
500 CcTest::i_isolate()->stack_guard()->real_climit()); 474 CcTest::i_isolate()->stack_guard()->real_climit());
501 preparser.set_allow_lazy(true); 475 preparser.set_allow_lazy(true);
502 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 476 i::PreParser::PreParseResult result = preparser.PreParseProgram();
503 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 477 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
504 i::ScriptData* sd = log.GetScriptData(); 478 i::ScriptData* sd = log.GetScriptData();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 i::NewArray<char>(kProgramSize + 1)); 510 i::NewArray<char>(kProgramSize + 1));
537 memset(program.get(), '(', kProgramSize); 511 memset(program.get(), '(', kProgramSize);
538 program[kProgramSize] = '\0'; 512 program[kProgramSize] = '\0';
539 513
540 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 514 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
541 515
542 i::Utf8ToUtf16CharacterStream stream( 516 i::Utf8ToUtf16CharacterStream stream(
543 reinterpret_cast<const i::byte*>(program.get()), 517 reinterpret_cast<const i::byte*>(program.get()),
544 static_cast<unsigned>(kProgramSize)); 518 static_cast<unsigned>(kProgramSize));
545 i::CompleteParserRecorder log; 519 i::CompleteParserRecorder log;
546 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 520 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
547 scanner.Initialize(&stream); 521 scanner.Initialize(&stream);
548 522
549 i::Zone zone; 523 i::Zone zone;
550 i::AstValueFactory ast_value_factory(&zone, 524 i::AstValueFactory ast_value_factory(&zone,
551 CcTest::i_isolate()->heap()->HashSeed()); 525 CcTest::i_isolate()->heap()->HashSeed());
552 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 526 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
553 stack_limit); 527 stack_limit);
554 preparser.set_allow_lazy(true); 528 preparser.set_allow_lazy(true);
555 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 529 i::PreParser::PreParseResult result = preparser.PreParseProgram();
556 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); 530 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 CHECK_EQU(i, stream.pos()); 740 CHECK_EQU(i, stream.pos());
767 } 741 }
768 } 742 }
769 743
770 #undef CHECK_EQU 744 #undef CHECK_EQU
771 745
772 void TestStreamScanner(i::Utf16CharacterStream* stream, 746 void TestStreamScanner(i::Utf16CharacterStream* stream,
773 i::Token::Value* expected_tokens, 747 i::Token::Value* expected_tokens,
774 int skip_pos = 0, // Zero means not skipping. 748 int skip_pos = 0, // Zero means not skipping.
775 int skip_to = 0) { 749 int skip_to = 0) {
776 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 750 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
777 scanner.Initialize(stream); 751 scanner.Initialize(stream);
778 752
779 int i = 0; 753 int i = 0;
780 do { 754 do {
781 i::Token::Value expected = expected_tokens[i]; 755 i::Token::Value expected = expected_tokens[i];
782 i::Token::Value actual = scanner.Next(); 756 i::Token::Value actual = scanner.Next();
783 CHECK_EQ(i::Token::String(expected), i::Token::String(actual)); 757 CHECK_EQ(i::Token::String(expected), i::Token::String(actual));
784 if (scanner.location().end_pos == skip_pos) { 758 if (scanner.location().end_pos == skip_pos) {
785 scanner.SeekForward(skip_to); 759 scanner.SeekForward(skip_to);
786 } 760 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 TestStreamScanner(&stream3, expectations3, 1, 1 + i); 823 TestStreamScanner(&stream3, expectations3, 1, 1 + i);
850 } 824 }
851 } 825 }
852 826
853 827
854 void TestScanRegExp(const char* re_source, const char* expected) { 828 void TestScanRegExp(const char* re_source, const char* expected) {
855 i::Utf8ToUtf16CharacterStream stream( 829 i::Utf8ToUtf16CharacterStream stream(
856 reinterpret_cast<const i::byte*>(re_source), 830 reinterpret_cast<const i::byte*>(re_source),
857 static_cast<unsigned>(strlen(re_source))); 831 static_cast<unsigned>(strlen(re_source)));
858 i::HandleScope scope(CcTest::i_isolate()); 832 i::HandleScope scope(CcTest::i_isolate());
859 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); 833 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
860 scanner.Initialize(&stream); 834 scanner.Initialize(&stream);
861 835
862 i::Token::Value start = scanner.peek(); 836 i::Token::Value start = scanner.peek();
863 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); 837 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV);
864 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); 838 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV));
865 scanner.Next(); // Current token is now the regexp literal. 839 scanner.Next(); // Current token is now the regexp literal.
866 i::Zone zone; 840 i::Zone zone;
867 i::AstValueFactory ast_value_factory(&zone, 841 i::AstValueFactory ast_value_factory(&zone,
868 CcTest::i_isolate()->heap()->HashSeed()); 842 CcTest::i_isolate()->heap()->HashSeed());
869 ast_value_factory.Internalize(CcTest::i_isolate()); 843 ast_value_factory.Internalize(CcTest::i_isolate());
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 i::Factory* factory = isolate->factory(); 1543 i::Factory* factory = isolate->factory();
1570 1544
1571 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); 1545 uintptr_t stack_limit = isolate->stack_guard()->real_climit();
1572 int preparser_materialized_literals = -1; 1546 int preparser_materialized_literals = -1;
1573 int parser_materialized_literals = -2; 1547 int parser_materialized_literals = -2;
1574 bool test_preparser = !is_module; 1548 bool test_preparser = !is_module;
1575 1549
1576 // Preparse the data. 1550 // Preparse the data.
1577 i::CompleteParserRecorder log; 1551 i::CompleteParserRecorder log;
1578 if (test_preparser) { 1552 if (test_preparser) {
1579 i::Scanner scanner(isolate->unicode_cache(), false); 1553 i::Scanner scanner(isolate->unicode_cache());
1580 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); 1554 i::GenericStringUtf16CharacterStream stream(source, 0, source->length());
1581 i::Zone zone; 1555 i::Zone zone;
1582 i::AstValueFactory ast_value_factory( 1556 i::AstValueFactory ast_value_factory(
1583 &zone, CcTest::i_isolate()->heap()->HashSeed()); 1557 &zone, CcTest::i_isolate()->heap()->HashSeed());
1584 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, 1558 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log,
1585 stack_limit); 1559 stack_limit);
1586 SetParserFlags(&preparser, flags); 1560 SetParserFlags(&preparser, flags);
1587 scanner.Initialize(&stream); 1561 scanner.Initialize(&stream);
1588 i::PreParser::PreParseResult result = preparser.PreParseProgram( 1562 i::PreParser::PreParseResult result = preparser.PreParseProgram(
1589 &preparser_materialized_literals); 1563 &preparser_materialized_literals);
(...skipping 5846 matching lines...) Expand 10 before | Expand all | Expand 10 after
7436 // "Array() **= 10", 7410 // "Array() **= 10",
7437 NULL 7411 NULL
7438 }; 7412 };
7439 // clang-format on 7413 // clang-format on
7440 7414
7441 static const ParserFlag always_flags[] = { 7415 static const ParserFlag always_flags[] = {
7442 kAllowHarmonyExponentiationOperator}; 7416 kAllowHarmonyExponentiationOperator};
7443 RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, 7417 RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags,
7444 arraysize(always_flags)); 7418 arraysize(always_flags));
7445 } 7419 }
OLDNEW
« no previous file with comments | « test/cctest/test-api.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698