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

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

Issue 2632123006: Reland: [Parse] ParseInfo owns the parsing Zone. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 int kProgramByteSize = i::StrLength(surroundings[j].prefix) + 818 int kProgramByteSize = i::StrLength(surroundings[j].prefix) +
819 i::StrLength(surroundings[j].suffix) + 819 i::StrLength(surroundings[j].suffix) +
820 i::StrLength(source_data[i].body); 820 i::StrLength(source_data[i].body);
821 i::ScopedVector<char> program(kProgramByteSize + 1); 821 i::ScopedVector<char> program(kProgramByteSize + 1);
822 i::SNPrintF(program, "%s%s%s", surroundings[j].prefix, 822 i::SNPrintF(program, "%s%s%s", surroundings[j].prefix,
823 source_data[i].body, surroundings[j].suffix); 823 source_data[i].body, surroundings[j].suffix);
824 i::Handle<i::String> source = 824 i::Handle<i::String> source =
825 factory->NewStringFromUtf8(i::CStrVector(program.start())) 825 factory->NewStringFromUtf8(i::CStrVector(program.start()))
826 .ToHandleChecked(); 826 .ToHandleChecked();
827 i::Handle<i::Script> script = factory->NewScript(source); 827 i::Handle<i::Script> script = factory->NewScript(source);
828 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 828 i::ParseInfo info(script);
829 i::ParseInfo info(&zone, script);
830 // The information we're checking is only produced when eager parsing. 829 // The information we're checking is only produced when eager parsing.
831 info.set_allow_lazy_parsing(false); 830 info.set_allow_lazy_parsing(false);
832 CHECK(i::parsing::ParseProgram(&info)); 831 CHECK(i::parsing::ParseProgram(&info));
833 CHECK(i::Rewriter::Rewrite(&info)); 832 CHECK(i::Rewriter::Rewrite(&info));
834 i::DeclarationScope::Analyze(&info, i::AnalyzeMode::kRegular); 833 i::DeclarationScope::Analyze(&info, i::AnalyzeMode::kRegular);
835 CHECK(info.literal() != NULL); 834 CHECK(info.literal() != NULL);
836 835
837 i::DeclarationScope* script_scope = info.literal()->scope(); 836 i::DeclarationScope* script_scope = info.literal()->scope();
838 CHECK(script_scope->is_script_scope()); 837 CHECK(script_scope->is_script_scope());
839 838
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 std::string full_source = "function f() { return "; 874 std::string full_source = "function f() { return ";
876 full_source += source; 875 full_source += source;
877 full_source += "; }"; 876 full_source += "; }";
878 877
879 i::Handle<i::String> source_code = 878 i::Handle<i::String> source_code =
880 factory->NewStringFromUtf8(i::CStrVector(full_source.c_str())) 879 factory->NewStringFromUtf8(i::CStrVector(full_source.c_str()))
881 .ToHandleChecked(); 880 .ToHandleChecked();
882 881
883 i::Handle<i::Script> script = factory->NewScript(source_code); 882 i::Handle<i::Script> script = factory->NewScript(source_code);
884 883
885 i::ParseInfo info(handles.main_zone(), script); 884 i::ParseInfo info(script);
886 i::Parser parser(&info); 885 i::Parser parser(&info);
887 info.set_allow_lazy_parsing(false); 886 info.set_allow_lazy_parsing(false);
888 info.set_toplevel(true); 887 info.set_toplevel(true);
889 888
890 CHECK(i::Compiler::ParseAndAnalyze(&info)); 889 CHECK(i::Compiler::ParseAndAnalyze(&info));
891 890
892 CHECK_EQ(1, info.scope()->declarations()->LengthForTest()); 891 CHECK_EQ(1, info.scope()->declarations()->LengthForTest());
893 i::Declaration* decl = info.scope()->declarations()->AtForTest(0); 892 i::Declaration* decl = info.scope()->declarations()->AtForTest(0);
894 i::FunctionLiteral* fun = decl->AsFunctionDeclaration()->fun(); 893 i::FunctionLiteral* fun = decl->AsFunctionDeclaration()->fun();
895 CHECK(fun->body()->length() == 1); 894 CHECK(fun->body()->length() == 1);
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1173 i::SNPrintF(program, "%s%s%s", 1172 i::SNPrintF(program, "%s%s%s",
1174 source_data[i].outer_prefix, 1173 source_data[i].outer_prefix,
1175 source_data[i].inner_source, 1174 source_data[i].inner_source,
1176 source_data[i].outer_suffix); 1175 source_data[i].outer_suffix);
1177 1176
1178 // Parse program source. 1177 // Parse program source.
1179 i::Handle<i::String> source = factory->NewStringFromUtf8( 1178 i::Handle<i::String> source = factory->NewStringFromUtf8(
1180 i::CStrVector(program.start())).ToHandleChecked(); 1179 i::CStrVector(program.start())).ToHandleChecked();
1181 CHECK_EQ(source->length(), kProgramSize); 1180 CHECK_EQ(source->length(), kProgramSize);
1182 i::Handle<i::Script> script = factory->NewScript(source); 1181 i::Handle<i::Script> script = factory->NewScript(source);
1183 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 1182 i::ParseInfo info(script);
1184 i::ParseInfo info(&zone, script);
1185 info.set_language_mode(source_data[i].language_mode); 1183 info.set_language_mode(source_data[i].language_mode);
1186 i::parsing::ParseProgram(&info); 1184 i::parsing::ParseProgram(&info);
1187 CHECK_NOT_NULL(info.literal()); 1185 CHECK_NOT_NULL(info.literal());
1188 1186
1189 // Check scope types and positions. 1187 // Check scope types and positions.
1190 i::Scope* scope = info.literal()->scope(); 1188 i::Scope* scope = info.literal()->scope();
1191 CHECK(scope->is_script_scope()); 1189 CHECK(scope->is_script_scope());
1192 CHECK_EQ(scope->start_position(), 0); 1190 CHECK_EQ(scope->start_position(), 0);
1193 CHECK_EQ(scope->end_position(), kProgramSize); 1191 CHECK_EQ(scope->end_position(), kProgramSize);
1194 1192
(...skipping 25 matching lines...) Expand all
1220 i::Isolate* isolate = CcTest::i_isolate(); 1218 i::Isolate* isolate = CcTest::i_isolate();
1221 i::Factory* factory = isolate->factory(); 1219 i::Factory* factory = isolate->factory();
1222 v8::HandleScope handles(CcTest::isolate()); 1220 v8::HandleScope handles(CcTest::isolate());
1223 i::FunctionLiteral* function; 1221 i::FunctionLiteral* function;
1224 1222
1225 for (int i = 0; discard_sources[i]; i++) { 1223 for (int i = 0; discard_sources[i]; i++) {
1226 const char* source = discard_sources[i]; 1224 const char* source = discard_sources[i];
1227 i::Handle<i::String> source_code = 1225 i::Handle<i::String> source_code =
1228 factory->NewStringFromUtf8(i::CStrVector(source)).ToHandleChecked(); 1226 factory->NewStringFromUtf8(i::CStrVector(source)).ToHandleChecked();
1229 i::Handle<i::Script> script = factory->NewScript(source_code); 1227 i::Handle<i::Script> script = factory->NewScript(source_code);
1230 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 1228 i::ParseInfo info(script);
1231 i::ParseInfo info(&zone, script);
1232 i::parsing::ParseProgram(&info); 1229 i::parsing::ParseProgram(&info);
1233 function = info.literal(); 1230 function = info.literal();
1234 CHECK_NOT_NULL(function); 1231 CHECK_NOT_NULL(function);
1235 CHECK_NOT_NULL(function->body()); 1232 CHECK_NOT_NULL(function->body());
1236 CHECK_EQ(1, function->body()->length()); 1233 CHECK_EQ(1, function->body()->length());
1237 i::FunctionLiteral* inner = 1234 i::FunctionLiteral* inner =
1238 function->body()->first()->AsExpressionStatement()->expression()-> 1235 function->body()->first()->AsExpressionStatement()->expression()->
1239 AsCall()->expression()->AsFunctionLiteral(); 1236 AsCall()->expression()->AsFunctionLiteral();
1240 i::Scope* inner_scope = inner->scope(); 1237 i::Scope* inner_scope = inner->scope();
1241 i::FunctionLiteral* fun = nullptr; 1238 i::FunctionLiteral* fun = nullptr;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 scanner.Initialize(stream.get()); 1343 scanner.Initialize(stream.get());
1347 i::PreParser::PreParseResult result = 1344 i::PreParser::PreParseResult result =
1348 preparser.PreParseProgram(&preparser_materialized_literals, is_module); 1345 preparser.PreParseProgram(&preparser_materialized_literals, is_module);
1349 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 1346 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
1350 } 1347 }
1351 1348
1352 // Parse the data 1349 // Parse the data
1353 i::FunctionLiteral* function; 1350 i::FunctionLiteral* function;
1354 { 1351 {
1355 i::Handle<i::Script> script = factory->NewScript(source); 1352 i::Handle<i::Script> script = factory->NewScript(source);
1356 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 1353 i::ParseInfo info(script);
1357 i::ParseInfo info(&zone, script);
1358 info.set_allow_lazy_parsing(flags.Contains(kAllowLazy)); 1354 info.set_allow_lazy_parsing(flags.Contains(kAllowLazy));
1359 SetGlobalFlags(flags); 1355 SetGlobalFlags(flags);
1360 if (is_module) info.set_module(); 1356 if (is_module) info.set_module();
1361 i::parsing::ParseProgram(&info); 1357 i::parsing::ParseProgram(&info);
1362 function = info.literal(); 1358 function = info.literal();
1363 if (function) { 1359 if (function) {
1364 parser_materialized_literals = function->materialized_literal_count(); 1360 parser_materialized_literals = function->materialized_literal_count();
1365 } 1361 }
1366 } 1362 }
1367 1363
(...skipping 1110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2478 {"function lazy() { var x = {get foo(){} } }", 1}, 2474 {"function lazy() { var x = {get foo(){} } }", 1},
2479 {NULL, 0} 2475 {NULL, 0}
2480 }; 2476 };
2481 2477
2482 for (int i = 0; test_cases[i].program; i++) { 2478 for (int i = 0; test_cases[i].program; i++) {
2483 const char* program = test_cases[i].program; 2479 const char* program = test_cases[i].program;
2484 i::Factory* factory = CcTest::i_isolate()->factory(); 2480 i::Factory* factory = CcTest::i_isolate()->factory();
2485 i::Handle<i::String> source = 2481 i::Handle<i::String> source =
2486 factory->NewStringFromUtf8(i::CStrVector(program)).ToHandleChecked(); 2482 factory->NewStringFromUtf8(i::CStrVector(program)).ToHandleChecked();
2487 i::Handle<i::Script> script = factory->NewScript(source); 2483 i::Handle<i::Script> script = factory->NewScript(source);
2488 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 2484 i::ParseInfo info(script);
2489 i::ParseInfo info(&zone, script);
2490 i::ScriptData* sd = NULL; 2485 i::ScriptData* sd = NULL;
2491 info.set_cached_data(&sd); 2486 info.set_cached_data(&sd);
2492 info.set_compile_options(v8::ScriptCompiler::kProduceParserCache); 2487 info.set_compile_options(v8::ScriptCompiler::kProduceParserCache);
2493 i::parsing::ParseProgram(&info); 2488 i::parsing::ParseProgram(&info);
2494 i::ParseData* pd = i::ParseData::FromCachedData(sd); 2489 i::ParseData* pd = i::ParseData::FromCachedData(sd);
2495 2490
2496 if (pd->FunctionCount() != test_cases[i].functions) { 2491 if (pd->FunctionCount() != test_cases[i].functions) {
2497 v8::base::OS::Print( 2492 v8::base::OS::Print(
2498 "Expected preparse data for program:\n" 2493 "Expected preparse data for program:\n"
2499 "\t%s\n" 2494 "\t%s\n"
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after
3366 if (outers[i].strict && inners[j].with) continue; 3361 if (outers[i].strict && inners[j].with) continue;
3367 const char* inner = inners[j].source; 3362 const char* inner = inners[j].source;
3368 int inner_len = Utf8LengthHelper(inner); 3363 int inner_len = Utf8LengthHelper(inner);
3369 3364
3370 int len = prefix_len + outer_len + midfix_len + inner_len + suffix_len; 3365 int len = prefix_len + outer_len + midfix_len + inner_len + suffix_len;
3371 i::ScopedVector<char> program(len + 1); 3366 i::ScopedVector<char> program(len + 1);
3372 3367
3373 i::SNPrintF(program, "%s%s%s%s%s", prefix, outer, midfix, inner, 3368 i::SNPrintF(program, "%s%s%s%s%s", prefix, outer, midfix, inner,
3374 suffix); 3369 suffix);
3375 3370
3376 i::Zone zone(isolate->allocator(), ZONE_NAME);
3377 std::unique_ptr<i::ParseInfo> info; 3371 std::unique_ptr<i::ParseInfo> info;
3378 if (lazy) { 3372 if (lazy) {
3379 printf("%s\n", program.start()); 3373 printf("%s\n", program.start());
3380 v8::Local<v8::Value> v = CompileRun(program.start()); 3374 v8::Local<v8::Value> v = CompileRun(program.start());
3381 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); 3375 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v);
3382 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); 3376 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o);
3383 i::Handle<i::SharedFunctionInfo> shared = i::handle(f->shared()); 3377 i::Handle<i::SharedFunctionInfo> shared = i::handle(f->shared());
3384 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(&zone, shared)); 3378 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(shared));
3385 CHECK(i::parsing::ParseFunction(info.get())); 3379 CHECK(i::parsing::ParseFunction(info.get()));
3386 } else { 3380 } else {
3387 i::Handle<i::String> source = 3381 i::Handle<i::String> source =
3388 factory->InternalizeUtf8String(program.start()); 3382 factory->InternalizeUtf8String(program.start());
3389 source->PrintOn(stdout); 3383 source->PrintOn(stdout);
3390 printf("\n"); 3384 printf("\n");
3391 i::Handle<i::Script> script = factory->NewScript(source); 3385 i::Handle<i::Script> script = factory->NewScript(source);
3392 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(&zone, script)); 3386 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(script));
3393 info->set_allow_lazy_parsing(false); 3387 info->set_allow_lazy_parsing(false);
3394 CHECK(i::parsing::ParseProgram(info.get())); 3388 CHECK(i::parsing::ParseProgram(info.get()));
3395 } 3389 }
3396 CHECK(i::Compiler::Analyze(info.get())); 3390 CHECK(i::Compiler::Analyze(info.get()));
3397 CHECK(info->literal() != NULL); 3391 CHECK(info->literal() != NULL);
3398 3392
3399 i::Scope* scope = info->literal()->scope(); 3393 i::Scope* scope = info->literal()->scope();
3400 if (!lazy) { 3394 if (!lazy) {
3401 scope = scope->inner_scope(); 3395 scope = scope->inner_scope();
3402 } 3396 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
3481 3475
3482 const char* suffix = "; f"; 3476 const char* suffix = "; f";
3483 3477
3484 for (unsigned i = 0; i < arraysize(tests); ++i) { 3478 for (unsigned i = 0; i < arraysize(tests); ++i) {
3485 bool assigned = tests[i].arg_assigned; 3479 bool assigned = tests[i].arg_assigned;
3486 const char* source = tests[i].source; 3480 const char* source = tests[i].source;
3487 for (unsigned allow_lazy = 0; allow_lazy < 2; ++allow_lazy) { 3481 for (unsigned allow_lazy = 0; allow_lazy < 2; ++allow_lazy) {
3488 i::ScopedVector<char> program(Utf8LengthHelper(source) + 3482 i::ScopedVector<char> program(Utf8LengthHelper(source) +
3489 Utf8LengthHelper(suffix) + 1); 3483 Utf8LengthHelper(suffix) + 1);
3490 i::SNPrintF(program, "%s%s", source, suffix); 3484 i::SNPrintF(program, "%s%s", source, suffix);
3491 i::Zone zone(isolate->allocator(), ZONE_NAME);
3492 std::unique_ptr<i::ParseInfo> info; 3485 std::unique_ptr<i::ParseInfo> info;
3493 printf("%s\n", program.start()); 3486 printf("%s\n", program.start());
3494 v8::Local<v8::Value> v = CompileRun(program.start()); 3487 v8::Local<v8::Value> v = CompileRun(program.start());
3495 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); 3488 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v);
3496 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); 3489 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o);
3497 i::Handle<i::SharedFunctionInfo> shared = i::handle(f->shared()); 3490 i::Handle<i::SharedFunctionInfo> shared = i::handle(f->shared());
3498 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(&zone, shared)); 3491 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(shared));
3499 info->set_allow_lazy_parsing(allow_lazy); 3492 info->set_allow_lazy_parsing(allow_lazy);
3500 CHECK(i::parsing::ParseFunction(info.get())); 3493 CHECK(i::parsing::ParseFunction(info.get()));
3501 CHECK(i::Compiler::Analyze(info.get())); 3494 CHECK(i::Compiler::Analyze(info.get()));
3502 CHECK_NOT_NULL(info->literal()); 3495 CHECK_NOT_NULL(info->literal());
3503 3496
3504 i::Scope* scope = info->literal()->scope(); 3497 i::Scope* scope = info->literal()->scope();
3505 CHECK(!scope->AsDeclarationScope()->was_lazily_parsed()); 3498 CHECK(!scope->AsDeclarationScope()->was_lazily_parsed());
3506 CHECK_NULL(scope->sibling()); 3499 CHECK_NULL(scope->sibling());
3507 CHECK(scope->is_function_scope()); 3500 CHECK(scope->is_function_scope());
3508 const i::AstRawString* var_name = 3501 const i::AstRawString* var_name =
(...skipping 24 matching lines...) Expand all
3533 "function* bar() {eval(ext)}; ext(bar); ext(foo)", 3526 "function* bar() {eval(ext)}; ext(bar); ext(foo)",
3534 }; 3527 };
3535 3528
3536 for (unsigned i = 0; i < arraysize(prefixes); ++i) { 3529 for (unsigned i = 0; i < arraysize(prefixes); ++i) {
3537 const char* prefix = prefixes[i]; 3530 const char* prefix = prefixes[i];
3538 for (unsigned j = 0; j < arraysize(sources); ++j) { 3531 for (unsigned j = 0; j < arraysize(sources); ++j) {
3539 const char* source = sources[j]; 3532 const char* source = sources[j];
3540 i::ScopedVector<char> program(Utf8LengthHelper(prefix) + 3533 i::ScopedVector<char> program(Utf8LengthHelper(prefix) +
3541 Utf8LengthHelper(source) + 1); 3534 Utf8LengthHelper(source) + 1);
3542 i::SNPrintF(program, "%s%s", prefix, source); 3535 i::SNPrintF(program, "%s%s", prefix, source);
3543 i::Zone zone(isolate->allocator(), ZONE_NAME);
3544 3536
3545 i::Handle<i::String> string = 3537 i::Handle<i::String> string =
3546 factory->InternalizeUtf8String(program.start()); 3538 factory->InternalizeUtf8String(program.start());
3547 string->PrintOn(stdout); 3539 string->PrintOn(stdout);
3548 printf("\n"); 3540 printf("\n");
3549 i::Handle<i::Script> script = factory->NewScript(string); 3541 i::Handle<i::Script> script = factory->NewScript(string);
3550 3542
3551 for (unsigned allow_lazy = 0; allow_lazy < 2; ++allow_lazy) { 3543 for (unsigned allow_lazy = 0; allow_lazy < 2; ++allow_lazy) {
3552 for (unsigned module = 0; module < 2; ++module) { 3544 for (unsigned module = 0; module < 2; ++module) {
3553 std::unique_ptr<i::ParseInfo> info; 3545 std::unique_ptr<i::ParseInfo> info;
3554 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(&zone, script)); 3546 info = std::unique_ptr<i::ParseInfo>(new i::ParseInfo(script));
3555 info->set_module(module); 3547 info->set_module(module);
3556 info->set_allow_lazy_parsing(allow_lazy); 3548 info->set_allow_lazy_parsing(allow_lazy);
3557 3549
3558 CHECK(i::parsing::ParseProgram(info.get())); 3550 CHECK(i::parsing::ParseProgram(info.get()));
3559 CHECK(i::Compiler::Analyze(info.get())); 3551 CHECK(i::Compiler::Analyze(info.get()));
3560 3552
3561 CHECK_NOT_NULL(info->literal()); 3553 CHECK_NOT_NULL(info->literal());
3562 i::Scope* scope = info->literal()->scope(); 3554 i::Scope* scope = info->literal()->scope();
3563 CHECK(!scope->AsDeclarationScope()->was_lazily_parsed()); 3555 CHECK(!scope->AsDeclarationScope()->was_lazily_parsed());
3564 CHECK_NULL(scope->sibling()); 3556 CHECK_NULL(scope->sibling());
(...skipping 2298 matching lines...) Expand 10 before | Expand all | Expand 10 after
5863 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5855 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5864 128 * 1024); 5856 128 * 1024);
5865 5857
5866 for (unsigned i = 0; i < arraysize(kSources); ++i) { 5858 for (unsigned i = 0; i < arraysize(kSources); ++i) {
5867 i::Handle<i::String> source = 5859 i::Handle<i::String> source =
5868 factory->NewStringFromAsciiChecked(kSources[i]); 5860 factory->NewStringFromAsciiChecked(kSources[i]);
5869 5861
5870 // Show that parsing as a module works 5862 // Show that parsing as a module works
5871 { 5863 {
5872 i::Handle<i::Script> script = factory->NewScript(source); 5864 i::Handle<i::Script> script = factory->NewScript(source);
5873 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 5865 i::ParseInfo info(script);
5874 i::ParseInfo info(&zone, script);
5875 info.set_module(); 5866 info.set_module();
5876 if (!i::parsing::ParseProgram(&info)) { 5867 if (!i::parsing::ParseProgram(&info)) {
5877 i::Handle<i::JSObject> exception_handle( 5868 i::Handle<i::JSObject> exception_handle(
5878 i::JSObject::cast(isolate->pending_exception())); 5869 i::JSObject::cast(isolate->pending_exception()));
5879 i::Handle<i::String> message_string = i::Handle<i::String>::cast( 5870 i::Handle<i::String> message_string = i::Handle<i::String>::cast(
5880 i::JSReceiver::GetProperty(isolate, exception_handle, "message") 5871 i::JSReceiver::GetProperty(isolate, exception_handle, "message")
5881 .ToHandleChecked()); 5872 .ToHandleChecked());
5882 isolate->clear_pending_exception(); 5873 isolate->clear_pending_exception();
5883 5874
5884 v8::base::OS::Print( 5875 v8::base::OS::Print(
5885 "Parser failed on:\n" 5876 "Parser failed on:\n"
5886 "\t%s\n" 5877 "\t%s\n"
5887 "with error:\n" 5878 "with error:\n"
5888 "\t%s\n" 5879 "\t%s\n"
5889 "However, we expected no error.", 5880 "However, we expected no error.",
5890 source->ToCString().get(), message_string->ToCString().get()); 5881 source->ToCString().get(), message_string->ToCString().get());
5891 CHECK(false); 5882 CHECK(false);
5892 } 5883 }
5893 } 5884 }
5894 5885
5895 // And that parsing a script does not. 5886 // And that parsing a script does not.
5896 { 5887 {
5897 i::Handle<i::Script> script = factory->NewScript(source); 5888 i::Handle<i::Script> script = factory->NewScript(source);
5898 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 5889 i::ParseInfo info(script);
5899 i::ParseInfo info(&zone, script);
5900 CHECK(!i::parsing::ParseProgram(&info)); 5890 CHECK(!i::parsing::ParseProgram(&info));
5901 isolate->clear_pending_exception(); 5891 isolate->clear_pending_exception();
5902 } 5892 }
5903 } 5893 }
5904 } 5894 }
5905 5895
5906 5896
5907 TEST(ImportExportParsingErrors) { 5897 TEST(ImportExportParsingErrors) {
5908 // clang-format off 5898 // clang-format off
5909 const char* kErrorSources[] = { 5899 const char* kErrorSources[] = {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
5979 v8::Context::Scope context_scope(context); 5969 v8::Context::Scope context_scope(context);
5980 5970
5981 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5971 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5982 128 * 1024); 5972 128 * 1024);
5983 5973
5984 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { 5974 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) {
5985 i::Handle<i::String> source = 5975 i::Handle<i::String> source =
5986 factory->NewStringFromAsciiChecked(kErrorSources[i]); 5976 factory->NewStringFromAsciiChecked(kErrorSources[i]);
5987 5977
5988 i::Handle<i::Script> script = factory->NewScript(source); 5978 i::Handle<i::Script> script = factory->NewScript(source);
5989 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 5979 i::ParseInfo info(script);
5990 i::ParseInfo info(&zone, script);
5991 info.set_module(); 5980 info.set_module();
5992 CHECK(!i::parsing::ParseProgram(&info)); 5981 CHECK(!i::parsing::ParseProgram(&info));
5993 isolate->clear_pending_exception(); 5982 isolate->clear_pending_exception();
5994 } 5983 }
5995 } 5984 }
5996 5985
5997 TEST(ModuleTopLevelFunctionDecl) { 5986 TEST(ModuleTopLevelFunctionDecl) {
5998 // clang-format off 5987 // clang-format off
5999 const char* kErrorSources[] = { 5988 const char* kErrorSources[] = {
6000 "function f() {} function f() {}", 5989 "function f() {} function f() {}",
(...skipping 15 matching lines...) Expand all
6016 v8::Context::Scope context_scope(context); 6005 v8::Context::Scope context_scope(context);
6017 6006
6018 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 6007 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
6019 128 * 1024); 6008 128 * 1024);
6020 6009
6021 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { 6010 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) {
6022 i::Handle<i::String> source = 6011 i::Handle<i::String> source =
6023 factory->NewStringFromAsciiChecked(kErrorSources[i]); 6012 factory->NewStringFromAsciiChecked(kErrorSources[i]);
6024 6013
6025 i::Handle<i::Script> script = factory->NewScript(source); 6014 i::Handle<i::Script> script = factory->NewScript(source);
6026 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 6015 i::ParseInfo info(script);
6027 i::ParseInfo info(&zone, script);
6028 info.set_module(); 6016 info.set_module();
6029 CHECK(!i::parsing::ParseProgram(&info)); 6017 CHECK(!i::parsing::ParseProgram(&info));
6030 isolate->clear_pending_exception(); 6018 isolate->clear_pending_exception();
6031 } 6019 }
6032 } 6020 }
6033 6021
6034 TEST(ModuleAwaitReserved) { 6022 TEST(ModuleAwaitReserved) {
6035 // clang-format off 6023 // clang-format off
6036 const char* kErrorSources[] = { 6024 const char* kErrorSources[] = {
6037 "await;", 6025 "await;",
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
6214 "import 'q.js';" 6202 "import 'q.js';"
6215 "let nonexport = 42;" 6203 "let nonexport = 42;"
6216 "import {m as mm} from 'm.js';" 6204 "import {m as mm} from 'm.js';"
6217 "import {aa} from 'm.js';" 6205 "import {aa} from 'm.js';"
6218 "export {aa as bb, x};" 6206 "export {aa as bb, x};"
6219 "import * as loo from 'bar.js';" 6207 "import * as loo from 'bar.js';"
6220 "import * as foob from 'bar.js';" 6208 "import * as foob from 'bar.js';"
6221 "export {foob};"; 6209 "export {foob};";
6222 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(kSource); 6210 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(kSource);
6223 i::Handle<i::Script> script = factory->NewScript(source); 6211 i::Handle<i::Script> script = factory->NewScript(source);
6224 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 6212 i::ParseInfo info(script);
6225 i::ParseInfo info(&zone, script);
6226 info.set_module(); 6213 info.set_module();
6227 CHECK(i::parsing::ParseProgram(&info)); 6214 CHECK(i::parsing::ParseProgram(&info));
6228 CHECK(i::Compiler::Analyze(&info)); 6215 CHECK(i::Compiler::Analyze(&info));
6229 i::FunctionLiteral* func = info.literal(); 6216 i::FunctionLiteral* func = info.literal();
6230 i::ModuleScope* module_scope = func->scope()->AsModuleScope(); 6217 i::ModuleScope* module_scope = func->scope()->AsModuleScope();
6231 i::Scope* outer_scope = module_scope->outer_scope(); 6218 i::Scope* outer_scope = module_scope->outer_scope();
6232 CHECK(outer_scope->is_script_scope()); 6219 CHECK(outer_scope->is_script_scope());
6233 CHECK_NULL(outer_scope->outer_scope()); 6220 CHECK_NULL(outer_scope->outer_scope());
6234 CHECK(module_scope->is_module_scope()); 6221 CHECK(module_scope->is_module_scope());
6235 const i::ModuleDescriptor::Entry* entry; 6222 const i::ModuleDescriptor::Entry* entry;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
6474 i::Isolate* isolate = CcTest::i_isolate(); 6461 i::Isolate* isolate = CcTest::i_isolate();
6475 i::Factory* factory = isolate->factory(); 6462 i::Factory* factory = isolate->factory();
6476 v8::HandleScope handles(CcTest::isolate()); 6463 v8::HandleScope handles(CcTest::isolate());
6477 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); 6464 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
6478 v8::Context::Scope context_scope(context); 6465 v8::Context::Scope context_scope(context);
6479 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 6466 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
6480 128 * 1024); 6467 128 * 1024);
6481 6468
6482 i::Handle<i::Script> script = 6469 i::Handle<i::Script> script =
6483 factory->NewScript(factory->NewStringFromAsciiChecked(source)); 6470 factory->NewScript(factory->NewStringFromAsciiChecked(source));
6484 i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); 6471 i::ParseInfo info(script);
6485 i::ParseInfo info(&zone, script);
6486 i::parsing::ParseProgram(&info); 6472 i::parsing::ParseProgram(&info);
6487 CHECK(info.literal() != NULL); 6473 CHECK(info.literal() != NULL);
6488 CHECK_EQ(expected_language_mode, info.literal()->language_mode()); 6474 CHECK_EQ(expected_language_mode, info.literal()->language_mode());
6489 } 6475 }
6490 6476
6491 6477
6492 TEST(LanguageModeDirectives) { 6478 TEST(LanguageModeDirectives) {
6493 TestLanguageMode("\"use nothing\"", i::SLOPPY); 6479 TestLanguageMode("\"use nothing\"", i::SLOPPY);
6494 TestLanguageMode("\"use strict\"", i::STRICT); 6480 TestLanguageMode("\"use strict\"", i::STRICT);
6495 6481
(...skipping 2370 matching lines...) Expand 10 before | Expand all | Expand 10 after
8866 i::SNPrintF( 8852 i::SNPrintF(
8867 program + prefix_len + inner_function_len + params_len + source_len, 8853 program + prefix_len + inner_function_len + params_len + source_len,
8868 "%s", suffix); 8854 "%s", suffix);
8869 8855
8870 i::Handle<i::String> source = 8856 i::Handle<i::String> source =
8871 factory->InternalizeUtf8String(program.start()); 8857 factory->InternalizeUtf8String(program.start());
8872 source->PrintOn(stdout); 8858 source->PrintOn(stdout);
8873 printf("\n"); 8859 printf("\n");
8874 8860
8875 i::Handle<i::Script> script = factory->NewScript(source); 8861 i::Handle<i::Script> script = factory->NewScript(source);
8876 i::Zone zone(isolate->allocator(), ZONE_NAME); 8862 i::ParseInfo info(script);
8877 i::ParseInfo info(&zone, script);
8878 8863
8879 CHECK(i::parsing::ParseProgram(&info)); 8864 CHECK(i::parsing::ParseProgram(&info));
8880 CHECK(i::Compiler::Analyze(&info)); 8865 CHECK(i::Compiler::Analyze(&info));
8881 CHECK(info.literal() != NULL); 8866 CHECK(info.literal() != NULL);
8882 8867
8883 i::Scope* scope = info.literal()->scope()->inner_scope(); 8868 i::Scope* scope = info.literal()->scope()->inner_scope();
8884 DCHECK_NOT_NULL(scope); 8869 DCHECK_NOT_NULL(scope);
8885 DCHECK_NULL(scope->sibling()); 8870 DCHECK_NULL(scope->sibling());
8886 DCHECK(scope->is_function_scope()); 8871 DCHECK(scope->is_function_scope());
8887 const i::AstRawString* var_name = 8872 const i::AstRawString* var_name =
8888 info.ast_value_factory()->GetOneByteString("my_var"); 8873 info.ast_value_factory()->GetOneByteString("my_var");
8889 i::Variable* var = scope->Lookup(var_name); 8874 i::Variable* var = scope->Lookup(var_name);
8890 CHECK_EQ(inners[i].ctxt_allocate, 8875 CHECK_EQ(inners[i].ctxt_allocate,
8891 i::ScopeTestHelper::MustAllocateInContext(var)); 8876 i::ScopeTestHelper::MustAllocateInContext(var));
8892 } 8877 }
8893 } 8878 }
8894 } 8879 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698