| 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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 i::GetCurrentStackPosition() - 128 * 1024); | 166 i::GetCurrentStackPosition() - 128 * 1024); |
| 167 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 167 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
| 168 for (int i = 0; tests[i]; i++) { | 168 for (int i = 0; tests[i]; i++) { |
| 169 const char* source = tests[i]; | 169 const char* source = tests[i]; |
| 170 auto stream = i::ScannerStream::ForTesting(source); | 170 auto stream = i::ScannerStream::ForTesting(source); |
| 171 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 171 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
| 172 scanner.Initialize(stream.get()); | 172 scanner.Initialize(stream.get()); |
| 173 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 173 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 174 i::AstValueFactory ast_value_factory( | 174 i::AstValueFactory ast_value_factory( |
| 175 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 175 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
| 176 i::PreParser preparser(&zone, &scanner, &ast_value_factory, stack_limit); | 176 i::PendingCompilationErrorHandler pending_error_handler; |
| 177 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 178 &pending_error_handler, stack_limit); |
| 177 preparser.set_allow_lazy(true); | 179 preparser.set_allow_lazy(true); |
| 178 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 180 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
| 179 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 181 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
| 180 CHECK(!preparser.logger()->has_error()); | 182 CHECK(!pending_error_handler.has_pending_error()); |
| 181 } | 183 } |
| 182 | 184 |
| 183 for (int i = 0; fail_tests[i]; i++) { | 185 for (int i = 0; fail_tests[i]; i++) { |
| 184 const char* source = fail_tests[i]; | 186 const char* source = fail_tests[i]; |
| 185 auto stream = i::ScannerStream::ForTesting(source); | 187 auto stream = i::ScannerStream::ForTesting(source); |
| 186 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 188 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
| 187 scanner.Initialize(stream.get()); | 189 scanner.Initialize(stream.get()); |
| 188 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 190 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 189 i::AstValueFactory ast_value_factory( | 191 i::AstValueFactory ast_value_factory( |
| 190 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 192 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
| 191 i::PreParser preparser(&zone, &scanner, &ast_value_factory, stack_limit); | 193 i::PendingCompilationErrorHandler pending_error_handler; |
| 194 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 195 &pending_error_handler, stack_limit); |
| 192 preparser.set_allow_lazy(true); | 196 preparser.set_allow_lazy(true); |
| 193 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 197 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
| 194 // Even in the case of a syntax error, kPreParseSuccess is returned. | 198 // Even in the case of a syntax error, kPreParseSuccess is returned. |
| 195 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 199 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
| 196 CHECK(preparser.logger()->has_error()); | 200 CHECK(pending_error_handler.has_pending_error()); |
| 197 } | 201 } |
| 198 } | 202 } |
| 199 | 203 |
| 200 | 204 |
| 201 class ScriptResource : public v8::String::ExternalOneByteStringResource { | 205 class ScriptResource : public v8::String::ExternalOneByteStringResource { |
| 202 public: | 206 public: |
| 203 ScriptResource(const char* data, size_t length) | 207 ScriptResource(const char* data, size_t length) |
| 204 : data_(data), length_(length) { } | 208 : data_(data), length_(length) { } |
| 205 | 209 |
| 206 const char* data() const { return data_; } | 210 const char* data() const { return data_; } |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 | 357 |
| 354 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 358 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
| 355 for (int i = 0; programs[i]; i++) { | 359 for (int i = 0; programs[i]; i++) { |
| 356 auto stream = i::ScannerStream::ForTesting(programs[i]); | 360 auto stream = i::ScannerStream::ForTesting(programs[i]); |
| 357 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 361 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
| 358 scanner.Initialize(stream.get()); | 362 scanner.Initialize(stream.get()); |
| 359 | 363 |
| 360 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 364 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 361 i::AstValueFactory ast_value_factory( | 365 i::AstValueFactory ast_value_factory( |
| 362 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 366 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
| 363 i::PreParser preparser(&zone, &scanner, &ast_value_factory, stack_limit); | 367 i::PendingCompilationErrorHandler pending_error_handler; |
| 368 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 369 &pending_error_handler, stack_limit); |
| 364 preparser.set_allow_lazy(true); | 370 preparser.set_allow_lazy(true); |
| 365 preparser.set_allow_natives(true); | 371 preparser.set_allow_natives(true); |
| 366 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 372 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
| 367 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 373 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
| 368 CHECK(!preparser.logger()->has_error()); | 374 CHECK(!pending_error_handler.has_pending_error()); |
| 369 } | 375 } |
| 370 } | 376 } |
| 371 | 377 |
| 372 | 378 |
| 373 TEST(StandAlonePreParserNoNatives) { | 379 TEST(StandAlonePreParserNoNatives) { |
| 374 v8::V8::Initialize(); | 380 v8::V8::Initialize(); |
| 375 | 381 |
| 376 CcTest::i_isolate()->stack_guard()->SetStackLimit( | 382 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
| 377 i::GetCurrentStackPosition() - 128 * 1024); | 383 i::GetCurrentStackPosition() - 128 * 1024); |
| 378 | 384 |
| 379 const char* programs[] = { | 385 const char* programs[] = { |
| 380 "%ArgleBargle(glop);", | 386 "%ArgleBargle(glop);", |
| 381 "var x = %_IsSmi(42);", | 387 "var x = %_IsSmi(42);", |
| 382 NULL | 388 NULL |
| 383 }; | 389 }; |
| 384 | 390 |
| 385 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 391 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
| 386 for (int i = 0; programs[i]; i++) { | 392 for (int i = 0; programs[i]; i++) { |
| 387 auto stream = i::ScannerStream::ForTesting(programs[i]); | 393 auto stream = i::ScannerStream::ForTesting(programs[i]); |
| 388 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 394 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
| 389 scanner.Initialize(stream.get()); | 395 scanner.Initialize(stream.get()); |
| 390 | 396 |
| 391 // Preparser defaults to disallowing natives syntax. | 397 // Preparser defaults to disallowing natives syntax. |
| 392 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 398 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 393 i::AstValueFactory ast_value_factory( | 399 i::AstValueFactory ast_value_factory( |
| 394 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 400 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
| 395 i::PreParser preparser(&zone, &scanner, &ast_value_factory, stack_limit); | 401 i::PendingCompilationErrorHandler pending_error_handler; |
| 402 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 403 &pending_error_handler, stack_limit); |
| 396 preparser.set_allow_lazy(true); | 404 preparser.set_allow_lazy(true); |
| 397 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 405 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
| 398 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 406 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
| 399 CHECK(preparser.logger()->has_error()); | 407 CHECK(pending_error_handler.has_pending_error()); |
| 400 } | 408 } |
| 401 } | 409 } |
| 402 | 410 |
| 403 | 411 |
| 404 TEST(PreparsingObjectLiterals) { | 412 TEST(PreparsingObjectLiterals) { |
| 405 // Regression test for a bug where the symbol stream produced by PreParser | 413 // Regression test for a bug where the symbol stream produced by PreParser |
| 406 // didn't match what Parser wanted to consume. | 414 // didn't match what Parser wanted to consume. |
| 407 v8::Isolate* isolate = CcTest::isolate(); | 415 v8::Isolate* isolate = CcTest::isolate(); |
| 408 v8::HandleScope handles(isolate); | 416 v8::HandleScope handles(isolate); |
| 409 v8::Local<v8::Context> context = v8::Context::New(isolate); | 417 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), | 458 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), |
| 451 // and then used the invalid currently scanned literal. This always | 459 // and then used the invalid currently scanned literal. This always |
| 452 // failed in debug mode, and sometimes crashed in release mode. | 460 // failed in debug mode, and sometimes crashed in release mode. |
| 453 | 461 |
| 454 auto stream = i::ScannerStream::ForTesting(program); | 462 auto stream = i::ScannerStream::ForTesting(program); |
| 455 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 463 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
| 456 scanner.Initialize(stream.get()); | 464 scanner.Initialize(stream.get()); |
| 457 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 465 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 458 i::AstValueFactory ast_value_factory(&zone, | 466 i::AstValueFactory ast_value_factory(&zone, |
| 459 CcTest::i_isolate()->heap()->HashSeed()); | 467 CcTest::i_isolate()->heap()->HashSeed()); |
| 468 i::PendingCompilationErrorHandler pending_error_handler; |
| 460 i::PreParser preparser(&zone, &scanner, &ast_value_factory, | 469 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 470 &pending_error_handler, |
| 461 CcTest::i_isolate()->stack_guard()->real_climit()); | 471 CcTest::i_isolate()->stack_guard()->real_climit()); |
| 462 preparser.set_allow_lazy(true); | 472 preparser.set_allow_lazy(true); |
| 463 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 473 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
| 464 // Even in the case of a syntax error, kPreParseSuccess is returned. | 474 // Even in the case of a syntax error, kPreParseSuccess is returned. |
| 465 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 475 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
| 466 CHECK(preparser.logger()->has_error()); | 476 CHECK(pending_error_handler.has_pending_error()); |
| 467 } | 477 } |
| 468 | 478 |
| 469 | 479 |
| 470 TEST(Regress928) { | 480 TEST(Regress928) { |
| 471 // Test only applies when lazy parsing. | 481 // Test only applies when lazy parsing. |
| 472 if (!i::FLAG_lazy) return; | 482 if (!i::FLAG_lazy) return; |
| 473 i::FLAG_min_preparse_length = 0; | 483 i::FLAG_min_preparse_length = 0; |
| 474 | 484 |
| 475 // Tests that the first non-toplevel function is not included in the preparse | 485 // Tests that the first non-toplevel function is not included in the preparse |
| 476 // data. | 486 // data. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 | 533 |
| 524 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 534 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
| 525 | 535 |
| 526 auto stream = i::ScannerStream::ForTesting(program.get(), kProgramSize); | 536 auto stream = i::ScannerStream::ForTesting(program.get(), kProgramSize); |
| 527 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 537 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
| 528 scanner.Initialize(stream.get()); | 538 scanner.Initialize(stream.get()); |
| 529 | 539 |
| 530 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 540 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 531 i::AstValueFactory ast_value_factory(&zone, | 541 i::AstValueFactory ast_value_factory(&zone, |
| 532 CcTest::i_isolate()->heap()->HashSeed()); | 542 CcTest::i_isolate()->heap()->HashSeed()); |
| 533 i::PreParser preparser(&zone, &scanner, &ast_value_factory, stack_limit); | 543 i::PendingCompilationErrorHandler pending_error_handler; |
| 544 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 545 &pending_error_handler, stack_limit); |
| 534 preparser.set_allow_lazy(true); | 546 preparser.set_allow_lazy(true); |
| 535 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 547 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
| 536 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); | 548 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); |
| 537 } | 549 } |
| 538 | 550 |
| 539 | 551 |
| 540 void TestStreamScanner(i::Utf16CharacterStream* stream, | 552 void TestStreamScanner(i::Utf16CharacterStream* stream, |
| 541 i::Token::Value* expected_tokens, | 553 i::Token::Value* expected_tokens, |
| 542 int skip_pos = 0, // Zero means not skipping. | 554 int skip_pos = 0, // Zero means not skipping. |
| 543 int skip_to = 0) { | 555 int skip_to = 0) { |
| (...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1263 int length = start[0]; | 1275 int length = start[0]; |
| 1264 char* result = i::NewArray<char>(length + 1); | 1276 char* result = i::NewArray<char>(length + 1); |
| 1265 for (int i = 0; i < length; i++) { | 1277 for (int i = 0; i < length; i++) { |
| 1266 result[i] = start[i + 1]; | 1278 result[i] = start[i + 1]; |
| 1267 } | 1279 } |
| 1268 result[length] = '\0'; | 1280 result[length] = '\0'; |
| 1269 return result; | 1281 return result; |
| 1270 } | 1282 } |
| 1271 | 1283 |
| 1272 | 1284 |
| 1273 i::Handle<i::String> FormatMessage(i::Vector<unsigned> data) { | |
| 1274 i::Isolate* isolate = CcTest::i_isolate(); | |
| 1275 int message = data[i::PreparseDataConstants::kMessageTemplatePos]; | |
| 1276 int arg_count = data[i::PreparseDataConstants::kMessageArgCountPos]; | |
| 1277 i::Handle<i::Object> arg_object; | |
| 1278 if (arg_count == 1) { | |
| 1279 // Position after text found by skipping past length field and | |
| 1280 // length field content words. | |
| 1281 const char* arg = | |
| 1282 ReadString(&data[i::PreparseDataConstants::kMessageArgPos]); | |
| 1283 arg_object = v8::Utils::OpenHandle(*v8_str(arg)); | |
| 1284 i::DeleteArray(arg); | |
| 1285 } else { | |
| 1286 CHECK_EQ(0, arg_count); | |
| 1287 arg_object = isolate->factory()->undefined_value(); | |
| 1288 } | |
| 1289 | |
| 1290 data.Dispose(); | |
| 1291 return i::MessageTemplate::FormatMessage(isolate, message, arg_object); | |
| 1292 } | |
| 1293 | |
| 1294 enum ParserFlag { | 1285 enum ParserFlag { |
| 1295 kAllowLazy, | 1286 kAllowLazy, |
| 1296 kAllowNatives, | 1287 kAllowNatives, |
| 1297 kAllowHarmonyFunctionSent, | 1288 kAllowHarmonyFunctionSent, |
| 1298 kAllowHarmonyAsyncAwait, | 1289 kAllowHarmonyAsyncAwait, |
| 1299 kAllowHarmonyRestrictiveGenerators, | 1290 kAllowHarmonyRestrictiveGenerators, |
| 1300 kAllowHarmonyTrailingCommas, | 1291 kAllowHarmonyTrailingCommas, |
| 1301 kAllowHarmonyClassFields, | 1292 kAllowHarmonyClassFields, |
| 1302 }; | 1293 }; |
| 1303 | 1294 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1331 bool is_module = false, | 1322 bool is_module = false, |
| 1332 bool test_preparser = true) { | 1323 bool test_preparser = true) { |
| 1333 i::Isolate* isolate = CcTest::i_isolate(); | 1324 i::Isolate* isolate = CcTest::i_isolate(); |
| 1334 i::Factory* factory = isolate->factory(); | 1325 i::Factory* factory = isolate->factory(); |
| 1335 | 1326 |
| 1336 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); | 1327 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); |
| 1337 int preparser_materialized_literals = -1; | 1328 int preparser_materialized_literals = -1; |
| 1338 int parser_materialized_literals = -2; | 1329 int parser_materialized_literals = -2; |
| 1339 | 1330 |
| 1340 // Preparse the data. | 1331 // Preparse the data. |
| 1341 i::ParserLogger log; | 1332 i::PendingCompilationErrorHandler pending_error_handler; |
| 1342 if (test_preparser) { | 1333 if (test_preparser) { |
| 1343 i::Scanner scanner(isolate->unicode_cache()); | 1334 i::Scanner scanner(isolate->unicode_cache()); |
| 1344 std::unique_ptr<i::Utf16CharacterStream> stream( | 1335 std::unique_ptr<i::Utf16CharacterStream> stream( |
| 1345 i::ScannerStream::For(source)); | 1336 i::ScannerStream::For(source)); |
| 1346 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 1337 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 1347 i::AstValueFactory ast_value_factory( | 1338 i::AstValueFactory ast_value_factory( |
| 1348 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 1339 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
| 1349 i::PreParser preparser(&zone, &scanner, &ast_value_factory, stack_limit); | 1340 i::PreParser preparser(&zone, &scanner, &ast_value_factory, |
| 1341 &pending_error_handler, stack_limit); |
| 1350 SetParserFlags(&preparser, flags); | 1342 SetParserFlags(&preparser, flags); |
| 1351 scanner.Initialize(stream.get()); | 1343 scanner.Initialize(stream.get()); |
| 1352 i::PreParser::PreParseResult result = | 1344 i::PreParser::PreParseResult result = |
| 1353 preparser.PreParseProgram(&preparser_materialized_literals, is_module); | 1345 preparser.PreParseProgram(&preparser_materialized_literals, is_module); |
| 1354 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 1346 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
| 1355 i::PreParserLogger* logger = preparser.logger(); | |
| 1356 // Convert to complete log. | |
| 1357 if (logger->has_error()) { | |
| 1358 log.LogMessage(logger->start(), logger->end(), logger->message(), | |
| 1359 logger->argument_opt(), logger->error_type()); | |
| 1360 } | |
| 1361 } | 1347 } |
| 1362 bool preparse_error = log.HasError(); | |
| 1363 | 1348 |
| 1364 // Parse the data | 1349 // Parse the data |
| 1365 i::FunctionLiteral* function; | 1350 i::FunctionLiteral* function; |
| 1366 { | 1351 { |
| 1367 i::Handle<i::Script> script = factory->NewScript(source); | 1352 i::Handle<i::Script> script = factory->NewScript(source); |
| 1368 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); | 1353 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); |
| 1369 i::ParseInfo info(&zone, script); | 1354 i::ParseInfo info(&zone, script); |
| 1370 i::Parser parser(&info); | 1355 i::Parser parser(&info); |
| 1371 SetParserFlags(&parser, flags); | 1356 SetParserFlags(&parser, flags); |
| 1372 if (is_module) info.set_module(); | 1357 if (is_module) info.set_module(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1392 v8::base::OS::Print( | 1377 v8::base::OS::Print( |
| 1393 "Parser failed on:\n" | 1378 "Parser failed on:\n" |
| 1394 "\t%s\n" | 1379 "\t%s\n" |
| 1395 "with error:\n" | 1380 "with error:\n" |
| 1396 "\t%s\n" | 1381 "\t%s\n" |
| 1397 "However, we expected no error.", | 1382 "However, we expected no error.", |
| 1398 source->ToCString().get(), message_string->ToCString().get()); | 1383 source->ToCString().get(), message_string->ToCString().get()); |
| 1399 CHECK(false); | 1384 CHECK(false); |
| 1400 } | 1385 } |
| 1401 | 1386 |
| 1402 if (test_preparser && !preparse_error) { | 1387 if (test_preparser && !pending_error_handler.has_pending_error()) { |
| 1403 v8::base::OS::Print( | 1388 v8::base::OS::Print( |
| 1404 "Parser failed on:\n" | 1389 "Parser failed on:\n" |
| 1405 "\t%s\n" | 1390 "\t%s\n" |
| 1406 "with error:\n" | 1391 "with error:\n" |
| 1407 "\t%s\n" | 1392 "\t%s\n" |
| 1408 "However, the preparser succeeded", | 1393 "However, the preparser succeeded", |
| 1409 source->ToCString().get(), message_string->ToCString().get()); | 1394 source->ToCString().get(), message_string->ToCString().get()); |
| 1410 CHECK(false); | 1395 CHECK(false); |
| 1411 } | 1396 } |
| 1412 // Check that preparser and parser produce the same error. | 1397 // Check that preparser and parser produce the same error. |
| 1413 if (test_preparser) { | 1398 if (test_preparser) { |
| 1414 i::Handle<i::String> preparser_message = | 1399 i::Handle<i::String> preparser_message = |
| 1415 FormatMessage(log.ErrorMessageData()); | 1400 pending_error_handler.FormatMessage(CcTest::i_isolate()); |
| 1416 if (!i::String::Equals(message_string, preparser_message)) { | 1401 if (!i::String::Equals(message_string, preparser_message)) { |
| 1417 v8::base::OS::Print( | 1402 v8::base::OS::Print( |
| 1418 "Expected parser and preparser to produce the same error on:\n" | 1403 "Expected parser and preparser to produce the same error on:\n" |
| 1419 "\t%s\n" | 1404 "\t%s\n" |
| 1420 "However, found the following error messages\n" | 1405 "However, found the following error messages\n" |
| 1421 "\tparser: %s\n" | 1406 "\tparser: %s\n" |
| 1422 "\tpreparser: %s\n", | 1407 "\tpreparser: %s\n", |
| 1423 source->ToCString().get(), message_string->ToCString().get(), | 1408 source->ToCString().get(), message_string->ToCString().get(), |
| 1424 preparser_message->ToCString().get()); | 1409 preparser_message->ToCString().get()); |
| 1425 CHECK(false); | 1410 CHECK(false); |
| 1426 } | 1411 } |
| 1427 } | 1412 } |
| 1428 } else if (test_preparser && preparse_error) { | 1413 } else if (test_preparser && pending_error_handler.has_pending_error()) { |
| 1429 v8::base::OS::Print( | 1414 v8::base::OS::Print( |
| 1430 "Preparser failed on:\n" | 1415 "Preparser failed on:\n" |
| 1431 "\t%s\n" | 1416 "\t%s\n" |
| 1432 "with error:\n" | 1417 "with error:\n" |
| 1433 "\t%s\n" | 1418 "\t%s\n" |
| 1434 "However, the parser succeeded", | 1419 "However, the parser succeeded", |
| 1435 source->ToCString().get(), | 1420 source->ToCString().get(), |
| 1436 FormatMessage(log.ErrorMessageData())->ToCString().get()); | 1421 pending_error_handler.FormatMessage(CcTest::i_isolate()) |
| 1422 ->ToCString() |
| 1423 .get()); |
| 1437 CHECK(false); | 1424 CHECK(false); |
| 1438 } else if (result == kError) { | 1425 } else if (result == kError) { |
| 1439 v8::base::OS::Print( | 1426 v8::base::OS::Print( |
| 1440 "Expected error on:\n" | 1427 "Expected error on:\n" |
| 1441 "\t%s\n" | 1428 "\t%s\n" |
| 1442 "However, parser and preparser succeeded", | 1429 "However, parser and preparser succeeded", |
| 1443 source->ToCString().get()); | 1430 source->ToCString().get()); |
| 1444 CHECK(false); | 1431 CHECK(false); |
| 1445 } else if (test_preparser && | 1432 } else if (test_preparser && |
| 1446 preparser_materialized_literals != parser_materialized_literals) { | 1433 preparser_materialized_literals != parser_materialized_literals) { |
| (...skipping 6876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8323 const char* data[] = { | 8310 const char* data[] = { |
| 8324 "const arguments = 1", | 8311 "const arguments = 1", |
| 8325 "let arguments", | 8312 "let arguments", |
| 8326 "var arguments", | 8313 "var arguments", |
| 8327 NULL | 8314 NULL |
| 8328 }; | 8315 }; |
| 8329 // clang-format on | 8316 // clang-format on |
| 8330 RunParserSyncTest(context_data, data, kSuccess); | 8317 RunParserSyncTest(context_data, data, kSuccess); |
| 8331 } | 8318 } |
| 8332 } | 8319 } |
| OLD | NEW |