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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 for (int i = 0; tests[i]; i++) { | 153 for (int i = 0; tests[i]; i++) { |
154 const i::byte* source = | 154 const i::byte* source = |
155 reinterpret_cast<const i::byte*>(tests[i]); | 155 reinterpret_cast<const i::byte*>(tests[i]); |
156 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); | 156 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); |
157 i::CompleteParserRecorder log; | 157 i::CompleteParserRecorder log; |
158 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 158 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
159 scanner.Initialize(&stream); | 159 scanner.Initialize(&stream); |
160 i::Zone zone; | 160 i::Zone zone; |
161 i::AstValueFactory ast_value_factory( | 161 i::AstValueFactory ast_value_factory( |
162 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 162 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
163 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 163 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
164 &ast_value_factory, &log, stack_limit); | 164 stack_limit); |
165 preparser.set_allow_lazy(true); | 165 preparser.set_allow_lazy(true); |
166 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 166 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
167 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 167 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
168 CHECK(!log.HasError()); | 168 CHECK(!log.HasError()); |
169 } | 169 } |
170 | 170 |
171 for (int i = 0; fail_tests[i]; i++) { | 171 for (int i = 0; fail_tests[i]; i++) { |
172 const i::byte* source = | 172 const i::byte* source = |
173 reinterpret_cast<const i::byte*>(fail_tests[i]); | 173 reinterpret_cast<const i::byte*>(fail_tests[i]); |
174 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i])); | 174 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i])); |
175 i::CompleteParserRecorder log; | 175 i::CompleteParserRecorder log; |
176 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 176 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
177 scanner.Initialize(&stream); | 177 scanner.Initialize(&stream); |
178 i::Zone zone; | 178 i::Zone zone; |
179 i::AstValueFactory ast_value_factory( | 179 i::AstValueFactory ast_value_factory( |
180 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 180 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
181 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 181 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
182 &ast_value_factory, &log, stack_limit); | 182 stack_limit); |
183 preparser.set_allow_lazy(true); | 183 preparser.set_allow_lazy(true); |
184 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 184 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
185 // Even in the case of a syntax error, kPreParseSuccess is returned. | 185 // Even in the case of a syntax error, kPreParseSuccess is returned. |
186 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 186 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
187 CHECK(log.HasError()); | 187 CHECK(log.HasError()); |
188 } | 188 } |
189 } | 189 } |
190 | 190 |
191 | 191 |
192 class ScriptResource : public v8::String::ExternalOneByteStringResource { | 192 class ScriptResource : public v8::String::ExternalOneByteStringResource { |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 i::Utf8ToUtf16CharacterStream stream( | 321 i::Utf8ToUtf16CharacterStream stream( |
322 reinterpret_cast<const i::byte*>(program), | 322 reinterpret_cast<const i::byte*>(program), |
323 static_cast<unsigned>(strlen(program))); | 323 static_cast<unsigned>(strlen(program))); |
324 i::CompleteParserRecorder log; | 324 i::CompleteParserRecorder log; |
325 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 325 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
326 scanner.Initialize(&stream); | 326 scanner.Initialize(&stream); |
327 | 327 |
328 i::Zone zone; | 328 i::Zone zone; |
329 i::AstValueFactory ast_value_factory( | 329 i::AstValueFactory ast_value_factory( |
330 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 330 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
331 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 331 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
332 &ast_value_factory, &log, stack_limit); | 332 stack_limit); |
333 preparser.set_allow_lazy(true); | 333 preparser.set_allow_lazy(true); |
334 preparser.set_allow_natives(true); | 334 preparser.set_allow_natives(true); |
335 preparser.set_allow_harmony_arrow_functions(true); | 335 preparser.set_allow_harmony_arrow_functions(true); |
336 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 336 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
337 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 337 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
338 CHECK(!log.HasError()); | 338 CHECK(!log.HasError()); |
339 } | 339 } |
340 } | 340 } |
341 | 341 |
342 | 342 |
(...skipping 16 matching lines...) Expand all Loading... |
359 reinterpret_cast<const i::byte*>(program), | 359 reinterpret_cast<const i::byte*>(program), |
360 static_cast<unsigned>(strlen(program))); | 360 static_cast<unsigned>(strlen(program))); |
361 i::CompleteParserRecorder log; | 361 i::CompleteParserRecorder log; |
362 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 362 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
363 scanner.Initialize(&stream); | 363 scanner.Initialize(&stream); |
364 | 364 |
365 // Preparser defaults to disallowing natives syntax. | 365 // Preparser defaults to disallowing natives syntax. |
366 i::Zone zone; | 366 i::Zone zone; |
367 i::AstValueFactory ast_value_factory( | 367 i::AstValueFactory ast_value_factory( |
368 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 368 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
369 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 369 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
370 &ast_value_factory, &log, stack_limit); | 370 stack_limit); |
371 preparser.set_allow_lazy(true); | 371 preparser.set_allow_lazy(true); |
372 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 372 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
373 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 373 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
374 CHECK(log.HasError()); | 374 CHECK(log.HasError()); |
375 } | 375 } |
376 } | 376 } |
377 | 377 |
378 | 378 |
379 TEST(PreparsingObjectLiterals) { | 379 TEST(PreparsingObjectLiterals) { |
380 // Regression test for a bug where the symbol stream produced by PreParser | 380 // Regression test for a bug where the symbol stream produced by PreParser |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 | 428 |
429 i::Utf8ToUtf16CharacterStream stream( | 429 i::Utf8ToUtf16CharacterStream stream( |
430 reinterpret_cast<const i::byte*>(program), | 430 reinterpret_cast<const i::byte*>(program), |
431 static_cast<unsigned>(strlen(program))); | 431 static_cast<unsigned>(strlen(program))); |
432 i::CompleteParserRecorder log; | 432 i::CompleteParserRecorder log; |
433 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 433 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
434 scanner.Initialize(&stream); | 434 scanner.Initialize(&stream); |
435 i::Zone zone; | 435 i::Zone zone; |
436 i::AstValueFactory ast_value_factory(&zone, | 436 i::AstValueFactory ast_value_factory(&zone, |
437 CcTest::i_isolate()->heap()->HashSeed()); | 437 CcTest::i_isolate()->heap()->HashSeed()); |
438 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 438 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
439 &ast_value_factory, &log, | |
440 CcTest::i_isolate()->stack_guard()->real_climit()); | 439 CcTest::i_isolate()->stack_guard()->real_climit()); |
441 preparser.set_allow_lazy(true); | 440 preparser.set_allow_lazy(true); |
442 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 441 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
443 // Even in the case of a syntax error, kPreParseSuccess is returned. | 442 // Even in the case of a syntax error, kPreParseSuccess is returned. |
444 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 443 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
445 CHECK(log.HasError()); | 444 CHECK(log.HasError()); |
446 } | 445 } |
447 | 446 |
448 | 447 |
449 TEST(Regress928) { | 448 TEST(Regress928) { |
(...skipping 14 matching lines...) Expand all Loading... |
464 | 463 |
465 v8::HandleScope handles(CcTest::isolate()); | 464 v8::HandleScope handles(CcTest::isolate()); |
466 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); | 465 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); |
467 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 466 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
468 i::CompleteParserRecorder log; | 467 i::CompleteParserRecorder log; |
469 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 468 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
470 scanner.Initialize(&stream); | 469 scanner.Initialize(&stream); |
471 i::Zone zone; | 470 i::Zone zone; |
472 i::AstValueFactory ast_value_factory(&zone, | 471 i::AstValueFactory ast_value_factory(&zone, |
473 CcTest::i_isolate()->heap()->HashSeed()); | 472 CcTest::i_isolate()->heap()->HashSeed()); |
474 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 473 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
475 &ast_value_factory, &log, | |
476 CcTest::i_isolate()->stack_guard()->real_climit()); | 474 CcTest::i_isolate()->stack_guard()->real_climit()); |
477 preparser.set_allow_lazy(true); | 475 preparser.set_allow_lazy(true); |
478 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 476 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
479 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 477 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
480 i::ScriptData* sd = log.GetScriptData(); | 478 i::ScriptData* sd = log.GetScriptData(); |
481 i::ParseData* pd = i::ParseData::FromCachedData(sd); | 479 i::ParseData* pd = i::ParseData::FromCachedData(sd); |
482 pd->Initialize(); | 480 pd->Initialize(); |
483 | 481 |
484 int first_function = | 482 int first_function = |
485 static_cast<int>(strstr(program, "function") - program); | 483 static_cast<int>(strstr(program, "function") - program); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 i::Utf8ToUtf16CharacterStream stream( | 515 i::Utf8ToUtf16CharacterStream stream( |
518 reinterpret_cast<const i::byte*>(program.get()), | 516 reinterpret_cast<const i::byte*>(program.get()), |
519 static_cast<unsigned>(kProgramSize)); | 517 static_cast<unsigned>(kProgramSize)); |
520 i::CompleteParserRecorder log; | 518 i::CompleteParserRecorder log; |
521 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 519 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
522 scanner.Initialize(&stream); | 520 scanner.Initialize(&stream); |
523 | 521 |
524 i::Zone zone; | 522 i::Zone zone; |
525 i::AstValueFactory ast_value_factory(&zone, | 523 i::AstValueFactory ast_value_factory(&zone, |
526 CcTest::i_isolate()->heap()->HashSeed()); | 524 CcTest::i_isolate()->heap()->HashSeed()); |
527 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 525 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
528 &ast_value_factory, &log, stack_limit); | 526 stack_limit); |
529 preparser.set_allow_lazy(true); | 527 preparser.set_allow_lazy(true); |
530 preparser.set_allow_harmony_arrow_functions(true); | 528 preparser.set_allow_harmony_arrow_functions(true); |
531 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 529 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
532 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); | 530 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); |
533 } | 531 } |
534 | 532 |
535 | 533 |
536 class TestExternalResource: public v8::String::ExternalStringResource { | 534 class TestExternalResource: public v8::String::ExternalStringResource { |
537 public: | 535 public: |
538 explicit TestExternalResource(uint16_t* data, int length) | 536 explicit TestExternalResource(uint16_t* data, int length) |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1047 i::Handle<i::Script> script = factory->NewScript(source); | 1045 i::Handle<i::Script> script = factory->NewScript(source); |
1048 i::CompilationInfoWithZone info(script); | 1046 i::CompilationInfoWithZone info(script); |
1049 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 1047 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
1050 isolate->heap()->HashSeed(), | 1048 isolate->heap()->HashSeed(), |
1051 isolate->unicode_cache()}; | 1049 isolate->unicode_cache()}; |
1052 i::Parser parser(&info, &parse_info); | 1050 i::Parser parser(&info, &parse_info); |
1053 parser.set_allow_harmony_arrow_functions(true); | 1051 parser.set_allow_harmony_arrow_functions(true); |
1054 parser.set_allow_harmony_classes(true); | 1052 parser.set_allow_harmony_classes(true); |
1055 parser.set_allow_harmony_scoping(true); | 1053 parser.set_allow_harmony_scoping(true); |
1056 info.MarkAsGlobal(); | 1054 info.MarkAsGlobal(); |
1057 parser.Parse(); | 1055 parser.Parse(&info); |
1058 CHECK(i::Rewriter::Rewrite(&info)); | 1056 CHECK(i::Rewriter::Rewrite(&info)); |
1059 CHECK(i::Scope::Analyze(&info)); | 1057 CHECK(i::Scope::Analyze(&info)); |
1060 CHECK(info.function() != NULL); | 1058 CHECK(info.function() != NULL); |
1061 | 1059 |
1062 i::Scope* script_scope = info.function()->scope(); | 1060 i::Scope* script_scope = info.function()->scope(); |
1063 CHECK(script_scope->is_script_scope()); | 1061 CHECK(script_scope->is_script_scope()); |
1064 CHECK_EQ(1, script_scope->inner_scopes()->length()); | 1062 CHECK_EQ(1, script_scope->inner_scopes()->length()); |
1065 | 1063 |
1066 i::Scope* scope = script_scope->inner_scopes()->at(0); | 1064 i::Scope* scope = script_scope->inner_scopes()->at(0); |
1067 CHECK_EQ((source_data[i].expected & ARGUMENTS) != 0, | 1065 CHECK_EQ((source_data[i].expected & ARGUMENTS) != 0, |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1299 i::CompilationInfoWithZone info(script); | 1297 i::CompilationInfoWithZone info(script); |
1300 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 1298 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
1301 isolate->heap()->HashSeed(), | 1299 isolate->heap()->HashSeed(), |
1302 isolate->unicode_cache()}; | 1300 isolate->unicode_cache()}; |
1303 i::Parser parser(&info, &parse_info); | 1301 i::Parser parser(&info, &parse_info); |
1304 parser.set_allow_lazy(true); | 1302 parser.set_allow_lazy(true); |
1305 parser.set_allow_harmony_scoping(true); | 1303 parser.set_allow_harmony_scoping(true); |
1306 parser.set_allow_harmony_arrow_functions(true); | 1304 parser.set_allow_harmony_arrow_functions(true); |
1307 info.MarkAsGlobal(); | 1305 info.MarkAsGlobal(); |
1308 info.SetLanguageMode(source_data[i].language_mode); | 1306 info.SetLanguageMode(source_data[i].language_mode); |
1309 parser.Parse(); | 1307 parser.Parse(&info); |
1310 CHECK(info.function() != NULL); | 1308 CHECK(info.function() != NULL); |
1311 | 1309 |
1312 // Check scope types and positions. | 1310 // Check scope types and positions. |
1313 i::Scope* scope = info.function()->scope(); | 1311 i::Scope* scope = info.function()->scope(); |
1314 CHECK(scope->is_script_scope()); | 1312 CHECK(scope->is_script_scope()); |
1315 CHECK_EQ(scope->start_position(), 0); | 1313 CHECK_EQ(scope->start_position(), 0); |
1316 CHECK_EQ(scope->end_position(), kProgramSize); | 1314 CHECK_EQ(scope->end_position(), kProgramSize); |
1317 CHECK_EQ(scope->inner_scopes()->length(), 1); | 1315 CHECK_EQ(scope->inner_scopes()->length(), 1); |
1318 | 1316 |
1319 i::Scope* inner_scope = scope->inner_scopes()->at(0); | 1317 i::Scope* inner_scope = scope->inner_scopes()->at(0); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1435 int parser_materialized_literals = -2; | 1433 int parser_materialized_literals = -2; |
1436 | 1434 |
1437 // Preparse the data. | 1435 // Preparse the data. |
1438 i::CompleteParserRecorder log; | 1436 i::CompleteParserRecorder log; |
1439 { | 1437 { |
1440 i::Scanner scanner(isolate->unicode_cache()); | 1438 i::Scanner scanner(isolate->unicode_cache()); |
1441 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 1439 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
1442 i::Zone zone; | 1440 i::Zone zone; |
1443 i::AstValueFactory ast_value_factory( | 1441 i::AstValueFactory ast_value_factory( |
1444 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 1442 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
1445 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner, | 1443 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
1446 &ast_value_factory, &log, stack_limit); | 1444 stack_limit); |
1447 SetParserFlags(&preparser, flags); | 1445 SetParserFlags(&preparser, flags); |
1448 scanner.Initialize(&stream); | 1446 scanner.Initialize(&stream); |
1449 i::PreParser::PreParseResult result = preparser.PreParseProgram( | 1447 i::PreParser::PreParseResult result = preparser.PreParseProgram( |
1450 &preparser_materialized_literals); | 1448 &preparser_materialized_literals); |
1451 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 1449 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
1452 } | 1450 } |
1453 | 1451 |
1454 bool preparse_error = log.HasError(); | 1452 bool preparse_error = log.HasError(); |
1455 | 1453 |
1456 // Parse the data | 1454 // Parse the data |
1457 i::FunctionLiteral* function; | 1455 i::FunctionLiteral* function; |
1458 { | 1456 { |
1459 i::Handle<i::Script> script = factory->NewScript(source); | 1457 i::Handle<i::Script> script = factory->NewScript(source); |
1460 i::CompilationInfoWithZone info(script); | 1458 i::CompilationInfoWithZone info(script); |
1461 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 1459 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
1462 isolate->heap()->HashSeed(), | 1460 isolate->heap()->HashSeed(), |
1463 isolate->unicode_cache()}; | 1461 isolate->unicode_cache()}; |
1464 i::Parser parser(&info, &parse_info); | 1462 i::Parser parser(&info, &parse_info); |
1465 SetParserFlags(&parser, flags); | 1463 SetParserFlags(&parser, flags); |
1466 info.MarkAsGlobal(); | 1464 info.MarkAsGlobal(); |
1467 parser.Parse(); | 1465 parser.Parse(&info); |
1468 function = info.function(); | 1466 function = info.function(); |
1469 if (function) { | 1467 if (function) { |
1470 parser_materialized_literals = function->materialized_literal_count(); | 1468 parser_materialized_literals = function->materialized_literal_count(); |
1471 } | 1469 } |
1472 } | 1470 } |
1473 | 1471 |
1474 // Check that preparsing fails iff parsing fails. | 1472 // Check that preparsing fails iff parsing fails. |
1475 if (function == NULL) { | 1473 if (function == NULL) { |
1476 // Extract exception from the parser. | 1474 // Extract exception from the parser. |
1477 CHECK(isolate->has_pending_exception()); | 1475 CHECK(isolate->has_pending_exception()); |
(...skipping 1944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3422 source->PrintOn(stdout); | 3420 source->PrintOn(stdout); |
3423 printf("\n"); | 3421 printf("\n"); |
3424 | 3422 |
3425 i::Handle<i::Script> script = factory->NewScript(source); | 3423 i::Handle<i::Script> script = factory->NewScript(source); |
3426 i::CompilationInfoWithZone info(script); | 3424 i::CompilationInfoWithZone info(script); |
3427 i::Parser::ParseInfo parse_info = { | 3425 i::Parser::ParseInfo parse_info = { |
3428 isolate->stack_guard()->real_climit(), | 3426 isolate->stack_guard()->real_climit(), |
3429 isolate->heap()->HashSeed(), isolate->unicode_cache()}; | 3427 isolate->heap()->HashSeed(), isolate->unicode_cache()}; |
3430 i::Parser parser(&info, &parse_info); | 3428 i::Parser parser(&info, &parse_info); |
3431 parser.set_allow_harmony_scoping(true); | 3429 parser.set_allow_harmony_scoping(true); |
3432 CHECK(parser.Parse()); | 3430 CHECK(parser.Parse(&info)); |
3433 CHECK(i::Compiler::Analyze(&info)); | 3431 CHECK(i::Compiler::Analyze(&info)); |
3434 CHECK(info.function() != NULL); | 3432 CHECK(info.function() != NULL); |
3435 | 3433 |
3436 i::Scope* scope = info.function()->scope(); | 3434 i::Scope* scope = info.function()->scope(); |
3437 CHECK_EQ(scope->inner_scopes()->length(), 1); | 3435 CHECK_EQ(scope->inner_scopes()->length(), 1); |
3438 i::Scope* inner_scope = scope->inner_scopes()->at(0); | 3436 i::Scope* inner_scope = scope->inner_scopes()->at(0); |
3439 const i::AstRawString* var_name = | 3437 const i::AstRawString* var_name = |
3440 info.ast_value_factory()->GetOneByteString("x"); | 3438 info.ast_value_factory()->GetOneByteString("x"); |
3441 i::Variable* var = inner_scope->Lookup(var_name); | 3439 i::Variable* var = inner_scope->Lookup(var_name); |
3442 bool expected = outers[i].assigned || inners[j].assigned; | 3440 bool expected = outers[i].assigned || inners[j].assigned; |
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4859 i::Handle<i::Script> script = factory->NewScript(source); | 4857 i::Handle<i::Script> script = factory->NewScript(source); |
4860 i::CompilationInfoWithZone info(script); | 4858 i::CompilationInfoWithZone info(script); |
4861 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 4859 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
4862 isolate->heap()->HashSeed(), | 4860 isolate->heap()->HashSeed(), |
4863 isolate->unicode_cache()}; | 4861 isolate->unicode_cache()}; |
4864 i::Parser parser(&info, &parse_info); | 4862 i::Parser parser(&info, &parse_info); |
4865 parser.set_allow_harmony_classes(true); | 4863 parser.set_allow_harmony_classes(true); |
4866 parser.set_allow_harmony_modules(true); | 4864 parser.set_allow_harmony_modules(true); |
4867 parser.set_allow_harmony_scoping(true); | 4865 parser.set_allow_harmony_scoping(true); |
4868 info.MarkAsModule(); | 4866 info.MarkAsModule(); |
4869 if (!parser.Parse()) { | 4867 if (!parser.Parse(&info)) { |
4870 i::Handle<i::JSObject> exception_handle( | 4868 i::Handle<i::JSObject> exception_handle( |
4871 i::JSObject::cast(isolate->pending_exception())); | 4869 i::JSObject::cast(isolate->pending_exception())); |
4872 i::Handle<i::String> message_string = | 4870 i::Handle<i::String> message_string = |
4873 i::Handle<i::String>::cast(i::Object::GetProperty( | 4871 i::Handle<i::String>::cast(i::Object::GetProperty( |
4874 isolate, exception_handle, "message").ToHandleChecked()); | 4872 isolate, exception_handle, "message").ToHandleChecked()); |
4875 | 4873 |
4876 v8::base::OS::Print( | 4874 v8::base::OS::Print( |
4877 "Parser failed on:\n" | 4875 "Parser failed on:\n" |
4878 "\t%s\n" | 4876 "\t%s\n" |
4879 "with error:\n" | 4877 "with error:\n" |
4880 "\t%s\n" | 4878 "\t%s\n" |
4881 "However, we expected no error.", | 4879 "However, we expected no error.", |
4882 source->ToCString().get(), message_string->ToCString().get()); | 4880 source->ToCString().get(), message_string->ToCString().get()); |
4883 CHECK(false); | 4881 CHECK(false); |
4884 } | 4882 } |
4885 } | 4883 } |
4886 | 4884 |
4887 // And that parsing a script does not. | 4885 // And that parsing a script does not. |
4888 { | 4886 { |
4889 i::Handle<i::Script> script = factory->NewScript(source); | 4887 i::Handle<i::Script> script = factory->NewScript(source); |
4890 i::CompilationInfoWithZone info(script); | 4888 i::CompilationInfoWithZone info(script); |
4891 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 4889 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
4892 isolate->heap()->HashSeed(), | 4890 isolate->heap()->HashSeed(), |
4893 isolate->unicode_cache()}; | 4891 isolate->unicode_cache()}; |
4894 i::Parser parser(&info, &parse_info); | 4892 i::Parser parser(&info, &parse_info); |
4895 parser.set_allow_harmony_classes(true); | 4893 parser.set_allow_harmony_classes(true); |
4896 parser.set_allow_harmony_modules(true); | 4894 parser.set_allow_harmony_modules(true); |
4897 parser.set_allow_harmony_scoping(true); | 4895 parser.set_allow_harmony_scoping(true); |
4898 info.MarkAsGlobal(); | 4896 info.MarkAsGlobal(); |
4899 CHECK(!parser.Parse()); | 4897 CHECK(!parser.Parse(&info)); |
4900 } | 4898 } |
4901 } | 4899 } |
4902 } | 4900 } |
4903 | 4901 |
4904 | 4902 |
4905 TEST(ImportExportParsingErrors) { | 4903 TEST(ImportExportParsingErrors) { |
4906 const char* kErrorSources[] = { | 4904 const char* kErrorSources[] = { |
4907 "export {", | 4905 "export {", |
4908 "var a; export { a", | 4906 "var a; export { a", |
4909 "var a; export { a,", | 4907 "var a; export { a,", |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4981 i::Handle<i::Script> script = factory->NewScript(source); | 4979 i::Handle<i::Script> script = factory->NewScript(source); |
4982 i::CompilationInfoWithZone info(script); | 4980 i::CompilationInfoWithZone info(script); |
4983 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 4981 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
4984 isolate->heap()->HashSeed(), | 4982 isolate->heap()->HashSeed(), |
4985 isolate->unicode_cache()}; | 4983 isolate->unicode_cache()}; |
4986 i::Parser parser(&info, &parse_info); | 4984 i::Parser parser(&info, &parse_info); |
4987 parser.set_allow_harmony_classes(true); | 4985 parser.set_allow_harmony_classes(true); |
4988 parser.set_allow_harmony_modules(true); | 4986 parser.set_allow_harmony_modules(true); |
4989 parser.set_allow_harmony_scoping(true); | 4987 parser.set_allow_harmony_scoping(true); |
4990 info.MarkAsModule(); | 4988 info.MarkAsModule(); |
4991 CHECK(!parser.Parse()); | 4989 CHECK(!parser.Parse(&info)); |
4992 } | 4990 } |
4993 } | 4991 } |
4994 | 4992 |
4995 | 4993 |
4996 TEST(DuplicateProtoError) { | 4994 TEST(DuplicateProtoError) { |
4997 const char* context_data[][2] = { | 4995 const char* context_data[][2] = { |
4998 {"({", "});"}, | 4996 {"({", "});"}, |
4999 {"'use strict'; ({", "});"}, | 4997 {"'use strict'; ({", "});"}, |
5000 {NULL, NULL} | 4998 {NULL, NULL} |
5001 }; | 4999 }; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5075 | 5073 |
5076 i::Handle<i::Script> script = | 5074 i::Handle<i::Script> script = |
5077 factory->NewScript(factory->NewStringFromAsciiChecked(source)); | 5075 factory->NewScript(factory->NewStringFromAsciiChecked(source)); |
5078 i::CompilationInfoWithZone info(script); | 5076 i::CompilationInfoWithZone info(script); |
5079 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), | 5077 i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
5080 isolate->heap()->HashSeed(), | 5078 isolate->heap()->HashSeed(), |
5081 isolate->unicode_cache()}; | 5079 isolate->unicode_cache()}; |
5082 i::Parser parser(&info, &parse_info); | 5080 i::Parser parser(&info, &parse_info); |
5083 parser.set_allow_strong_mode(true); | 5081 parser.set_allow_strong_mode(true); |
5084 info.MarkAsGlobal(); | 5082 info.MarkAsGlobal(); |
5085 parser.Parse(); | 5083 parser.Parse(&info); |
5086 CHECK(info.function() != NULL); | 5084 CHECK(info.function() != NULL); |
5087 CHECK_EQ(expected_language_mode, info.function()->language_mode()); | 5085 CHECK_EQ(expected_language_mode, info.function()->language_mode()); |
5088 } | 5086 } |
5089 | 5087 |
5090 | 5088 |
5091 TEST(LanguageModeDirectives) { | 5089 TEST(LanguageModeDirectives) { |
5092 TestLanguageMode("\"use nothing\"", i::SLOPPY); | 5090 TestLanguageMode("\"use nothing\"", i::SLOPPY); |
5093 TestLanguageMode("\"use strict\"", i::STRICT); | 5091 TestLanguageMode("\"use strict\"", i::STRICT); |
5094 TestLanguageMode("\"use strong\"", i::STRONG); | 5092 TestLanguageMode("\"use strong\"", i::STRONG); |
5095 | 5093 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5142 "class C {static set arguments(_) {}}", | 5140 "class C {static set arguments(_) {}}", |
5143 | 5141 |
5144 NULL}; | 5142 NULL}; |
5145 | 5143 |
5146 static const ParserFlag always_flags[] = { | 5144 static const ParserFlag always_flags[] = { |
5147 kAllowHarmonyClasses, kAllowHarmonyObjectLiterals, kAllowHarmonyScoping, | 5145 kAllowHarmonyClasses, kAllowHarmonyObjectLiterals, kAllowHarmonyScoping, |
5148 kAllowStrongMode}; | 5146 kAllowStrongMode}; |
5149 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | 5147 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
5150 always_flags, arraysize(always_flags)); | 5148 always_flags, arraysize(always_flags)); |
5151 } | 5149 } |
OLD | NEW |