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

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

Issue 909463003: PreParser / Parser consistency: Make PreParser aware of Zone and AstValueFactory. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: . Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/preparser.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 CcTest::i_isolate()->stack_guard()->SetStackLimit( 150 CcTest::i_isolate()->stack_guard()->SetStackLimit(
151 i::GetCurrentStackPosition() - 128 * 1024); 151 i::GetCurrentStackPosition() - 128 * 1024);
152 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 152 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
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::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); 160 i::Zone zone;
161 i::AstValueFactory ast_value_factory(
162 &zone, CcTest::i_isolate()->heap()->HashSeed());
163 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
164 &ast_value_factory, &log, stack_limit);
161 preparser.set_allow_lazy(true); 165 preparser.set_allow_lazy(true);
162 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 166 i::PreParser::PreParseResult result = preparser.PreParseProgram();
163 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 167 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
164 CHECK(!log.HasError()); 168 CHECK(!log.HasError());
165 } 169 }
166 170
167 for (int i = 0; fail_tests[i]; i++) { 171 for (int i = 0; fail_tests[i]; i++) {
168 const i::byte* source = 172 const i::byte* source =
169 reinterpret_cast<const i::byte*>(fail_tests[i]); 173 reinterpret_cast<const i::byte*>(fail_tests[i]);
170 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i])); 174 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i]));
171 i::CompleteParserRecorder log; 175 i::CompleteParserRecorder log;
172 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); 176 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
173 scanner.Initialize(&stream); 177 scanner.Initialize(&stream);
174 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); 178 i::Zone zone;
179 i::AstValueFactory ast_value_factory(
180 &zone, CcTest::i_isolate()->heap()->HashSeed());
181 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
182 &ast_value_factory, &log, stack_limit);
175 preparser.set_allow_lazy(true); 183 preparser.set_allow_lazy(true);
176 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 184 i::PreParser::PreParseResult result = preparser.PreParseProgram();
177 // Even in the case of a syntax error, kPreParseSuccess is returned. 185 // Even in the case of a syntax error, kPreParseSuccess is returned.
178 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 186 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
179 CHECK(log.HasError()); 187 CHECK(log.HasError());
180 } 188 }
181 } 189 }
182 190
183 191
184 class ScriptResource : public v8::String::ExternalOneByteStringResource { 192 class ScriptResource : public v8::String::ExternalOneByteStringResource {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 318 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
311 for (int i = 0; programs[i]; i++) { 319 for (int i = 0; programs[i]; i++) {
312 const char* program = programs[i]; 320 const char* program = programs[i];
313 i::Utf8ToUtf16CharacterStream stream( 321 i::Utf8ToUtf16CharacterStream stream(
314 reinterpret_cast<const i::byte*>(program), 322 reinterpret_cast<const i::byte*>(program),
315 static_cast<unsigned>(strlen(program))); 323 static_cast<unsigned>(strlen(program)));
316 i::CompleteParserRecorder log; 324 i::CompleteParserRecorder log;
317 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); 325 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
318 scanner.Initialize(&stream); 326 scanner.Initialize(&stream);
319 327
320 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); 328 i::Zone zone;
329 i::AstValueFactory ast_value_factory(
330 &zone, CcTest::i_isolate()->heap()->HashSeed());
331 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
332 &ast_value_factory, &log, stack_limit);
321 preparser.set_allow_lazy(true); 333 preparser.set_allow_lazy(true);
322 preparser.set_allow_natives(true); 334 preparser.set_allow_natives(true);
323 preparser.set_allow_harmony_arrow_functions(true); 335 preparser.set_allow_harmony_arrow_functions(true);
324 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 336 i::PreParser::PreParseResult result = preparser.PreParseProgram();
325 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 337 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
326 CHECK(!log.HasError()); 338 CHECK(!log.HasError());
327 } 339 }
328 } 340 }
329 341
330 342
(...skipping 13 matching lines...) Expand all
344 for (int i = 0; programs[i]; i++) { 356 for (int i = 0; programs[i]; i++) {
345 const char* program = programs[i]; 357 const char* program = programs[i];
346 i::Utf8ToUtf16CharacterStream stream( 358 i::Utf8ToUtf16CharacterStream stream(
347 reinterpret_cast<const i::byte*>(program), 359 reinterpret_cast<const i::byte*>(program),
348 static_cast<unsigned>(strlen(program))); 360 static_cast<unsigned>(strlen(program)));
349 i::CompleteParserRecorder log; 361 i::CompleteParserRecorder log;
350 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); 362 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
351 scanner.Initialize(&stream); 363 scanner.Initialize(&stream);
352 364
353 // Preparser defaults to disallowing natives syntax. 365 // Preparser defaults to disallowing natives syntax.
354 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); 366 i::Zone zone;
367 i::AstValueFactory ast_value_factory(
368 &zone, CcTest::i_isolate()->heap()->HashSeed());
369 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
370 &ast_value_factory, &log, stack_limit);
355 preparser.set_allow_lazy(true); 371 preparser.set_allow_lazy(true);
356 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 372 i::PreParser::PreParseResult result = preparser.PreParseProgram();
357 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 373 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
358 CHECK(log.HasError()); 374 CHECK(log.HasError());
359 } 375 }
360 } 376 }
361 377
362 378
363 TEST(PreparsingObjectLiterals) { 379 TEST(PreparsingObjectLiterals) {
364 // 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), 425 // Before fix, didn't check *ok after Expect(Token::Identifier, ok),
410 // and then used the invalid currently scanned literal. This always 426 // and then used the invalid currently scanned literal. This always
411 // failed in debug mode, and sometimes crashed in release mode. 427 // failed in debug mode, and sometimes crashed in release mode.
412 428
413 i::Utf8ToUtf16CharacterStream stream( 429 i::Utf8ToUtf16CharacterStream stream(
414 reinterpret_cast<const i::byte*>(program), 430 reinterpret_cast<const i::byte*>(program),
415 static_cast<unsigned>(strlen(program))); 431 static_cast<unsigned>(strlen(program)));
416 i::CompleteParserRecorder log; 432 i::CompleteParserRecorder log;
417 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); 433 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
418 scanner.Initialize(&stream); 434 scanner.Initialize(&stream);
419 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, 435 i::Zone zone;
436 i::AstValueFactory ast_value_factory(&zone,
437 CcTest::i_isolate()->heap()->HashSeed());
438 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
439 &ast_value_factory, &log,
420 CcTest::i_isolate()->stack_guard()->real_climit()); 440 CcTest::i_isolate()->stack_guard()->real_climit());
421 preparser.set_allow_lazy(true); 441 preparser.set_allow_lazy(true);
422 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 442 i::PreParser::PreParseResult result = preparser.PreParseProgram();
423 // Even in the case of a syntax error, kPreParseSuccess is returned. 443 // Even in the case of a syntax error, kPreParseSuccess is returned.
424 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 444 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
425 CHECK(log.HasError()); 445 CHECK(log.HasError());
426 } 446 }
427 447
428 448
429 TEST(Regress928) { 449 TEST(Regress928) {
(...skipping 11 matching lines...) Expand all
441 const char* program = 461 const char* program =
442 "try { } catch (e) { var foo = function () { /* first */ } }" 462 "try { } catch (e) { var foo = function () { /* first */ } }"
443 "var bar = function () { /* second */ }"; 463 "var bar = function () { /* second */ }";
444 464
445 v8::HandleScope handles(CcTest::isolate()); 465 v8::HandleScope handles(CcTest::isolate());
446 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); 466 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program);
447 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); 467 i::GenericStringUtf16CharacterStream stream(source, 0, source->length());
448 i::CompleteParserRecorder log; 468 i::CompleteParserRecorder log;
449 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); 469 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
450 scanner.Initialize(&stream); 470 scanner.Initialize(&stream);
451 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, 471 i::Zone zone;
472 i::AstValueFactory ast_value_factory(&zone,
473 CcTest::i_isolate()->heap()->HashSeed());
474 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
475 &ast_value_factory, &log,
452 CcTest::i_isolate()->stack_guard()->real_climit()); 476 CcTest::i_isolate()->stack_guard()->real_climit());
453 preparser.set_allow_lazy(true); 477 preparser.set_allow_lazy(true);
454 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 478 i::PreParser::PreParseResult result = preparser.PreParseProgram();
455 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 479 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
456 i::ScriptData* sd = log.GetScriptData(); 480 i::ScriptData* sd = log.GetScriptData();
457 i::ParseData* pd = i::ParseData::FromCachedData(sd); 481 i::ParseData* pd = i::ParseData::FromCachedData(sd);
458 pd->Initialize(); 482 pd->Initialize();
459 483
460 int first_function = 484 int first_function =
461 static_cast<int>(strstr(program, "function") - program); 485 static_cast<int>(strstr(program, "function") - program);
(...skipping 28 matching lines...) Expand all
490 514
491 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); 515 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit();
492 516
493 i::Utf8ToUtf16CharacterStream stream( 517 i::Utf8ToUtf16CharacterStream stream(
494 reinterpret_cast<const i::byte*>(program.get()), 518 reinterpret_cast<const i::byte*>(program.get()),
495 static_cast<unsigned>(kProgramSize)); 519 static_cast<unsigned>(kProgramSize));
496 i::CompleteParserRecorder log; 520 i::CompleteParserRecorder log;
497 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); 521 i::Scanner scanner(CcTest::i_isolate()->unicode_cache());
498 scanner.Initialize(&stream); 522 scanner.Initialize(&stream);
499 523
500 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); 524 i::Zone zone;
525 i::AstValueFactory ast_value_factory(&zone,
526 CcTest::i_isolate()->heap()->HashSeed());
527 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
528 &ast_value_factory, &log, stack_limit);
501 preparser.set_allow_lazy(true); 529 preparser.set_allow_lazy(true);
502 preparser.set_allow_harmony_arrow_functions(true); 530 preparser.set_allow_harmony_arrow_functions(true);
503 i::PreParser::PreParseResult result = preparser.PreParseProgram(); 531 i::PreParser::PreParseResult result = preparser.PreParseProgram();
504 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); 532 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result);
505 } 533 }
506 534
507 535
508 class TestExternalResource: public v8::String::ExternalStringResource { 536 class TestExternalResource: public v8::String::ExternalStringResource {
509 public: 537 public:
510 explicit TestExternalResource(uint16_t* data, int length) 538 explicit TestExternalResource(uint16_t* data, int length)
(...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 1430
1403 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); 1431 uintptr_t stack_limit = isolate->stack_guard()->real_climit();
1404 int preparser_materialized_literals = -1; 1432 int preparser_materialized_literals = -1;
1405 int parser_materialized_literals = -2; 1433 int parser_materialized_literals = -2;
1406 1434
1407 // Preparse the data. 1435 // Preparse the data.
1408 i::CompleteParserRecorder log; 1436 i::CompleteParserRecorder log;
1409 { 1437 {
1410 i::Scanner scanner(isolate->unicode_cache()); 1438 i::Scanner scanner(isolate->unicode_cache());
1411 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); 1439 i::GenericStringUtf16CharacterStream stream(source, 0, source->length());
1412 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); 1440 i::Zone zone;
1441 i::AstValueFactory ast_value_factory(
1442 &zone, CcTest::i_isolate()->heap()->HashSeed());
1443 i::PreParser preparser(CcTest::i_isolate(), &zone, &scanner,
1444 &ast_value_factory, &log, stack_limit);
1413 SetParserFlags(&preparser, flags); 1445 SetParserFlags(&preparser, flags);
1414 scanner.Initialize(&stream); 1446 scanner.Initialize(&stream);
1415 i::PreParser::PreParseResult result = preparser.PreParseProgram( 1447 i::PreParser::PreParseResult result = preparser.PreParseProgram(
1416 &preparser_materialized_literals); 1448 &preparser_materialized_literals);
1417 CHECK_EQ(i::PreParser::kPreParseSuccess, result); 1449 CHECK_EQ(i::PreParser::kPreParseSuccess, result);
1418 } 1450 }
1419 1451
1420 bool preparse_error = log.HasError(); 1452 bool preparse_error = log.HasError();
1421 1453
1422 // Parse the data 1454 // Parse the data
(...skipping 3554 matching lines...) Expand 10 before | Expand all | Expand 10 after
4977 "const x = 1;", 5009 "const x = 1;",
4978 "class C {}", 5010 "class C {}",
4979 NULL}; 5011 NULL};
4980 5012
4981 static const ParserFlag always_flags[] = { 5013 static const ParserFlag always_flags[] = {
4982 kAllowHarmonyClasses, kAllowHarmonyScoping 5014 kAllowHarmonyClasses, kAllowHarmonyScoping
4983 }; 5015 };
4984 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, 5016 RunParserSyncTest(context_data, statement_data, kError, NULL, 0,
4985 always_flags, arraysize(always_flags)); 5017 always_flags, arraysize(always_flags));
4986 } 5018 }
OLDNEW
« no previous file with comments | « src/preparser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698