OLD | NEW |
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 Loading... |
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); | 73 i::Scanner scanner(&unicode_cache, false); |
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); | 81 i::Scanner scanner(&unicode_cache, false); |
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); | 92 i::Scanner scanner(&unicode_cache, false); |
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); | 102 i::Scanner scanner(&unicode_cache, false); |
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 Loading... |
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()); | 154 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
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()); | 172 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
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 } |
187 | 213 |
188 class ScriptResource : public v8::String::ExternalOneByteStringResource { | 214 class ScriptResource : public v8::String::ExternalOneByteStringResource { |
189 public: | 215 public: |
190 ScriptResource(const char* data, size_t length) | 216 ScriptResource(const char* data, size_t length) |
191 : data_(data), length_(length) { } | 217 : data_(data), length_(length) { } |
192 | 218 |
193 const char* data() const { return data_; } | 219 const char* data() const { return data_; } |
194 size_t length() const { return length_; } | 220 size_t length() const { return length_; } |
195 | 221 |
196 private: | 222 private: |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 NULL | 342 NULL |
317 }; | 343 }; |
318 | 344 |
319 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 345 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
320 for (int i = 0; programs[i]; i++) { | 346 for (int i = 0; programs[i]; i++) { |
321 const char* program = programs[i]; | 347 const char* program = programs[i]; |
322 i::Utf8ToUtf16CharacterStream stream( | 348 i::Utf8ToUtf16CharacterStream stream( |
323 reinterpret_cast<const i::byte*>(program), | 349 reinterpret_cast<const i::byte*>(program), |
324 static_cast<unsigned>(strlen(program))); | 350 static_cast<unsigned>(strlen(program))); |
325 i::CompleteParserRecorder log; | 351 i::CompleteParserRecorder log; |
326 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 352 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
327 scanner.Initialize(&stream); | 353 scanner.Initialize(&stream); |
328 | 354 |
329 i::Zone zone; | 355 i::Zone zone; |
330 i::AstValueFactory ast_value_factory( | 356 i::AstValueFactory ast_value_factory( |
331 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 357 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
332 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 358 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
333 stack_limit); | 359 stack_limit); |
334 preparser.set_allow_lazy(true); | 360 preparser.set_allow_lazy(true); |
335 preparser.set_allow_natives(true); | 361 preparser.set_allow_natives(true); |
336 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 362 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
(...skipping 15 matching lines...) Expand all Loading... |
352 NULL | 378 NULL |
353 }; | 379 }; |
354 | 380 |
355 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 381 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
356 for (int i = 0; programs[i]; i++) { | 382 for (int i = 0; programs[i]; i++) { |
357 const char* program = programs[i]; | 383 const char* program = programs[i]; |
358 i::Utf8ToUtf16CharacterStream stream( | 384 i::Utf8ToUtf16CharacterStream stream( |
359 reinterpret_cast<const i::byte*>(program), | 385 reinterpret_cast<const i::byte*>(program), |
360 static_cast<unsigned>(strlen(program))); | 386 static_cast<unsigned>(strlen(program))); |
361 i::CompleteParserRecorder log; | 387 i::CompleteParserRecorder log; |
362 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 388 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
363 scanner.Initialize(&stream); | 389 scanner.Initialize(&stream); |
364 | 390 |
365 // Preparser defaults to disallowing natives syntax. | 391 // Preparser defaults to disallowing natives syntax. |
366 i::Zone zone; | 392 i::Zone zone; |
367 i::AstValueFactory ast_value_factory( | 393 i::AstValueFactory ast_value_factory( |
368 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 394 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
369 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 395 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
370 stack_limit); | 396 stack_limit); |
371 preparser.set_allow_lazy(true); | 397 preparser.set_allow_lazy(true); |
372 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 398 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 "escape: function() {}"; | 449 "escape: function() {}"; |
424 // Fails parsing expecting an identifier after "function". | 450 // Fails parsing expecting an identifier after "function". |
425 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), | 451 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), |
426 // and then used the invalid currently scanned literal. This always | 452 // and then used the invalid currently scanned literal. This always |
427 // failed in debug mode, and sometimes crashed in release mode. | 453 // failed in debug mode, and sometimes crashed in release mode. |
428 | 454 |
429 i::Utf8ToUtf16CharacterStream stream( | 455 i::Utf8ToUtf16CharacterStream stream( |
430 reinterpret_cast<const i::byte*>(program), | 456 reinterpret_cast<const i::byte*>(program), |
431 static_cast<unsigned>(strlen(program))); | 457 static_cast<unsigned>(strlen(program))); |
432 i::CompleteParserRecorder log; | 458 i::CompleteParserRecorder log; |
433 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 459 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
434 scanner.Initialize(&stream); | 460 scanner.Initialize(&stream); |
435 i::Zone zone; | 461 i::Zone zone; |
436 i::AstValueFactory ast_value_factory(&zone, | 462 i::AstValueFactory ast_value_factory(&zone, |
437 CcTest::i_isolate()->heap()->HashSeed()); | 463 CcTest::i_isolate()->heap()->HashSeed()); |
438 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 464 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
439 CcTest::i_isolate()->stack_guard()->real_climit()); | 465 CcTest::i_isolate()->stack_guard()->real_climit()); |
440 preparser.set_allow_lazy(true); | 466 preparser.set_allow_lazy(true); |
441 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 467 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
442 // Even in the case of a syntax error, kPreParseSuccess is returned. | 468 // Even in the case of a syntax error, kPreParseSuccess is returned. |
443 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 469 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
(...skipping 14 matching lines...) Expand all Loading... |
458 128 * 1024); | 484 128 * 1024); |
459 | 485 |
460 const char* program = | 486 const char* program = |
461 "try { } catch (e) { var foo = function () { /* first */ } }" | 487 "try { } catch (e) { var foo = function () { /* first */ } }" |
462 "var bar = function () { /* second */ }"; | 488 "var bar = function () { /* second */ }"; |
463 | 489 |
464 v8::HandleScope handles(CcTest::isolate()); | 490 v8::HandleScope handles(CcTest::isolate()); |
465 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); | 491 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); |
466 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 492 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
467 i::CompleteParserRecorder log; | 493 i::CompleteParserRecorder log; |
468 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 494 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
469 scanner.Initialize(&stream); | 495 scanner.Initialize(&stream); |
470 i::Zone zone; | 496 i::Zone zone; |
471 i::AstValueFactory ast_value_factory(&zone, | 497 i::AstValueFactory ast_value_factory(&zone, |
472 CcTest::i_isolate()->heap()->HashSeed()); | 498 CcTest::i_isolate()->heap()->HashSeed()); |
473 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 499 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
474 CcTest::i_isolate()->stack_guard()->real_climit()); | 500 CcTest::i_isolate()->stack_guard()->real_climit()); |
475 preparser.set_allow_lazy(true); | 501 preparser.set_allow_lazy(true); |
476 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 502 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
477 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 503 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
478 i::ScriptData* sd = log.GetScriptData(); | 504 i::ScriptData* sd = log.GetScriptData(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 i::NewArray<char>(kProgramSize + 1)); | 536 i::NewArray<char>(kProgramSize + 1)); |
511 memset(program.get(), '(', kProgramSize); | 537 memset(program.get(), '(', kProgramSize); |
512 program[kProgramSize] = '\0'; | 538 program[kProgramSize] = '\0'; |
513 | 539 |
514 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 540 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
515 | 541 |
516 i::Utf8ToUtf16CharacterStream stream( | 542 i::Utf8ToUtf16CharacterStream stream( |
517 reinterpret_cast<const i::byte*>(program.get()), | 543 reinterpret_cast<const i::byte*>(program.get()), |
518 static_cast<unsigned>(kProgramSize)); | 544 static_cast<unsigned>(kProgramSize)); |
519 i::CompleteParserRecorder log; | 545 i::CompleteParserRecorder log; |
520 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 546 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
521 scanner.Initialize(&stream); | 547 scanner.Initialize(&stream); |
522 | 548 |
523 i::Zone zone; | 549 i::Zone zone; |
524 i::AstValueFactory ast_value_factory(&zone, | 550 i::AstValueFactory ast_value_factory(&zone, |
525 CcTest::i_isolate()->heap()->HashSeed()); | 551 CcTest::i_isolate()->heap()->HashSeed()); |
526 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 552 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
527 stack_limit); | 553 stack_limit); |
528 preparser.set_allow_lazy(true); | 554 preparser.set_allow_lazy(true); |
529 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 555 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
530 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); | 556 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 CHECK_EQU(i, stream.pos()); | 766 CHECK_EQU(i, stream.pos()); |
741 } | 767 } |
742 } | 768 } |
743 | 769 |
744 #undef CHECK_EQU | 770 #undef CHECK_EQU |
745 | 771 |
746 void TestStreamScanner(i::Utf16CharacterStream* stream, | 772 void TestStreamScanner(i::Utf16CharacterStream* stream, |
747 i::Token::Value* expected_tokens, | 773 i::Token::Value* expected_tokens, |
748 int skip_pos = 0, // Zero means not skipping. | 774 int skip_pos = 0, // Zero means not skipping. |
749 int skip_to = 0) { | 775 int skip_to = 0) { |
750 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 776 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
751 scanner.Initialize(stream); | 777 scanner.Initialize(stream); |
752 | 778 |
753 int i = 0; | 779 int i = 0; |
754 do { | 780 do { |
755 i::Token::Value expected = expected_tokens[i]; | 781 i::Token::Value expected = expected_tokens[i]; |
756 i::Token::Value actual = scanner.Next(); | 782 i::Token::Value actual = scanner.Next(); |
757 CHECK_EQ(i::Token::String(expected), i::Token::String(actual)); | 783 CHECK_EQ(i::Token::String(expected), i::Token::String(actual)); |
758 if (scanner.location().end_pos == skip_pos) { | 784 if (scanner.location().end_pos == skip_pos) { |
759 scanner.SeekForward(skip_to); | 785 scanner.SeekForward(skip_to); |
760 } | 786 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
823 TestStreamScanner(&stream3, expectations3, 1, 1 + i); | 849 TestStreamScanner(&stream3, expectations3, 1, 1 + i); |
824 } | 850 } |
825 } | 851 } |
826 | 852 |
827 | 853 |
828 void TestScanRegExp(const char* re_source, const char* expected) { | 854 void TestScanRegExp(const char* re_source, const char* expected) { |
829 i::Utf8ToUtf16CharacterStream stream( | 855 i::Utf8ToUtf16CharacterStream stream( |
830 reinterpret_cast<const i::byte*>(re_source), | 856 reinterpret_cast<const i::byte*>(re_source), |
831 static_cast<unsigned>(strlen(re_source))); | 857 static_cast<unsigned>(strlen(re_source))); |
832 i::HandleScope scope(CcTest::i_isolate()); | 858 i::HandleScope scope(CcTest::i_isolate()); |
833 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 859 i::Scanner scanner(CcTest::i_isolate()->unicode_cache(), false); |
834 scanner.Initialize(&stream); | 860 scanner.Initialize(&stream); |
835 | 861 |
836 i::Token::Value start = scanner.peek(); | 862 i::Token::Value start = scanner.peek(); |
837 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); | 863 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); |
838 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); | 864 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); |
839 scanner.Next(); // Current token is now the regexp literal. | 865 scanner.Next(); // Current token is now the regexp literal. |
840 i::Zone zone; | 866 i::Zone zone; |
841 i::AstValueFactory ast_value_factory(&zone, | 867 i::AstValueFactory ast_value_factory(&zone, |
842 CcTest::i_isolate()->heap()->HashSeed()); | 868 CcTest::i_isolate()->heap()->HashSeed()); |
843 ast_value_factory.Internalize(CcTest::i_isolate()); | 869 ast_value_factory.Internalize(CcTest::i_isolate()); |
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1543 i::Factory* factory = isolate->factory(); | 1569 i::Factory* factory = isolate->factory(); |
1544 | 1570 |
1545 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); | 1571 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); |
1546 int preparser_materialized_literals = -1; | 1572 int preparser_materialized_literals = -1; |
1547 int parser_materialized_literals = -2; | 1573 int parser_materialized_literals = -2; |
1548 bool test_preparser = !is_module; | 1574 bool test_preparser = !is_module; |
1549 | 1575 |
1550 // Preparse the data. | 1576 // Preparse the data. |
1551 i::CompleteParserRecorder log; | 1577 i::CompleteParserRecorder log; |
1552 if (test_preparser) { | 1578 if (test_preparser) { |
1553 i::Scanner scanner(isolate->unicode_cache()); | 1579 i::Scanner scanner(isolate->unicode_cache(), false); |
1554 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 1580 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
1555 i::Zone zone; | 1581 i::Zone zone; |
1556 i::AstValueFactory ast_value_factory( | 1582 i::AstValueFactory ast_value_factory( |
1557 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 1583 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
1558 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 1584 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
1559 stack_limit); | 1585 stack_limit); |
1560 SetParserFlags(&preparser, flags); | 1586 SetParserFlags(&preparser, flags); |
1561 scanner.Initialize(&stream); | 1587 scanner.Initialize(&stream); |
1562 i::PreParser::PreParseResult result = preparser.PreParseProgram( | 1588 i::PreParser::PreParseResult result = preparser.PreParseProgram( |
1563 &preparser_materialized_literals); | 1589 &preparser_materialized_literals); |
(...skipping 5846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7410 // "Array() **= 10", | 7436 // "Array() **= 10", |
7411 NULL | 7437 NULL |
7412 }; | 7438 }; |
7413 // clang-format on | 7439 // clang-format on |
7414 | 7440 |
7415 static const ParserFlag always_flags[] = { | 7441 static const ParserFlag always_flags[] = { |
7416 kAllowHarmonyExponentiationOperator}; | 7442 kAllowHarmonyExponentiationOperator}; |
7417 RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, | 7443 RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, |
7418 arraysize(always_flags)); | 7444 arraysize(always_flags)); |
7419 } | 7445 } |
OLD | NEW |