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

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

Issue 2364003002: Fix test-parsing/InnerAssignment. (Closed)
Patch Set: Created 4 years, 3 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 | « no previous file | 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 3352 matching lines...) Expand 10 before | Expand all | Expand 10 after
3363 { "function h() { eval(''); }", true, false }, 3363 { "function h() { eval(''); }", true, false },
3364 { "(function() { eval(''); })", true, false }, 3364 { "(function() { eval(''); })", true, false },
3365 // Shadowing not recognized because of eval approximation. 3365 // Shadowing not recognized because of eval approximation.
3366 { "var x; eval('');", true, false }, 3366 { "var x; eval('');", true, false },
3367 { "'use strict'; let x; eval('');", true, false }, 3367 { "'use strict'; let x; eval('');", true, false },
3368 { "try {} catch(x) { eval(''); }", true, false }, 3368 { "try {} catch(x) { eval(''); }", true, false },
3369 { "function x() { eval(''); }", true, false }, 3369 { "function x() { eval(''); }", true, false },
3370 { "(function(x) { eval(''); })", true, false }, 3370 { "(function(x) { eval(''); })", true, false },
3371 }; 3371 };
3372 3372
3373 // Used to trigger lazy compilation of function 3373 // Used to trigger lazy parsing of the outer function.
3374 int comment_len = 2048; 3374 int comment_len = 2048;
3375 i::ScopedVector<char> comment(comment_len + 1); 3375 i::ScopedVector<char> comment(comment_len + 1);
3376 i::SNPrintF(comment, "/*%0*d*/", comment_len - 4, 0); 3376 i::SNPrintF(comment, "/*%0*d*/", comment_len - 4, 0);
3377 int prefix_len = Utf8LengthHelper(prefix); 3377 int prefix_len = Utf8LengthHelper(prefix);
3378 int midfix_len = Utf8LengthHelper(midfix); 3378 int midfix_len = Utf8LengthHelper(midfix);
3379 int suffix_len = Utf8LengthHelper(suffix); 3379 int suffix_len = Utf8LengthHelper(suffix);
3380 for (unsigned i = 0; i < arraysize(outers); ++i) { 3380 for (unsigned i = 0; i < arraysize(outers); ++i) {
3381 const char* outer = outers[i].source; 3381 const char* outer = outers[i].source;
3382 int outer_len = Utf8LengthHelper(outer); 3382 int outer_len = Utf8LengthHelper(outer);
3383 for (unsigned j = 0; j < arraysize(inners); ++j) { 3383 for (unsigned j = 0; j < arraysize(inners); ++j) {
3384 for (unsigned outer_lazy = 0; outer_lazy < 2; ++outer_lazy) { 3384 for (unsigned lazy = 0; lazy < 2; ++lazy) {
3385 for (unsigned inner_lazy = 0; inner_lazy < 2; ++inner_lazy) { 3385 if (outers[i].strict && inners[j].with) continue;
3386 if (outers[i].strict && inners[j].with) continue; 3386 const char* inner = inners[j].source;
3387 const char* inner = inners[j].source; 3387 int inner_len = Utf8LengthHelper(inner);
3388 int inner_len = Utf8LengthHelper(inner);
3389 3388
3390 int outer_comment_len = outer_lazy ? comment_len : 0; 3389 const char* comment_chars = lazy ? comment.start() : "";
3391 int inner_comment_len = inner_lazy ? comment_len : 0; 3390 int len = prefix_len + (lazy ? comment_len : 0) + outer_len +
3392 const char* outer_comment = outer_lazy ? comment.start() : ""; 3391 midfix_len + inner_len + suffix_len;
3393 const char* inner_comment = inner_lazy ? comment.start() : ""; 3392 i::ScopedVector<char> program(len + 1);
3394 int len = prefix_len + outer_comment_len + outer_len + midfix_len +
3395 inner_comment_len + inner_len + suffix_len;
3396 i::ScopedVector<char> program(len + 1);
3397 3393
3398 i::SNPrintF(program, "%s%s%s%s%s%s%s", prefix, outer_comment, outer, 3394 i::SNPrintF(program, "%s%s%s%s%s%s", comment_chars, prefix, outer,
3399 midfix, inner_comment, inner, suffix); 3395 midfix, inner, suffix);
3400 i::Handle<i::String> source = 3396 i::Handle<i::String> source =
3401 factory->InternalizeUtf8String(program.start()); 3397 factory->InternalizeUtf8String(program.start());
3402 source->PrintOn(stdout); 3398 source->PrintOn(stdout);
3403 printf("\n"); 3399 printf("\n");
3404 3400
3405 i::Handle<i::Script> script = factory->NewScript(source); 3401 i::Handle<i::Script> script = factory->NewScript(source);
3406 i::Zone zone(CcTest::i_isolate()->allocator()); 3402 i::Zone zone(CcTest::i_isolate()->allocator());
3407 i::ParseInfo info(&zone, script); 3403 i::ParseInfo info(&zone, script);
3408 i::Parser parser(&info); 3404 i::Parser parser(&info);
3409 CHECK(parser.Parse(&info)); 3405 CHECK(parser.Parse(&info));
3410 CHECK(i::Compiler::Analyze(&info)); 3406 CHECK(i::Compiler::Analyze(&info));
3411 CHECK(info.literal() != NULL); 3407 CHECK(info.literal() != NULL);
3412 3408
3413 i::Scope* scope = info.literal()->scope(); 3409 i::Scope* scope = info.literal()->scope();
3414 i::Scope* inner_scope = scope->inner_scope(); 3410 i::Scope* inner_scope = scope->inner_scope();
3415 DCHECK_NOT_NULL(inner_scope); 3411 DCHECK_NOT_NULL(inner_scope);
3416 DCHECK_NULL(inner_scope->sibling()); 3412 DCHECK_NULL(inner_scope->sibling());
3417 const i::AstRawString* var_name = 3413 const i::AstRawString* var_name =
3418 info.ast_value_factory()->GetOneByteString("x"); 3414 info.ast_value_factory()->GetOneByteString("x");
3419 i::Variable* var = inner_scope->Lookup(var_name); 3415 i::Variable* var = inner_scope->Lookup(var_name);
3420 bool expected = outers[i].assigned || inners[j].assigned; 3416 bool expected = outers[i].assigned || inners[j].assigned;
3421 CHECK(var != NULL); 3417 CHECK(var != NULL);
3422 CHECK(var->is_used() || !expected); 3418 CHECK(var->is_used() || !expected);
3423 CHECK((var->maybe_assigned() == i::kMaybeAssigned) == expected); 3419 CHECK((var->maybe_assigned() == i::kMaybeAssigned) == expected);
3424 }
3425 } 3420 }
3426 } 3421 }
3427 } 3422 }
3428 } 3423 }
3429 3424
3430 namespace { 3425 namespace {
3431 3426
3432 int* global_use_counts = NULL; 3427 int* global_use_counts = NULL;
3433 3428
3434 void MockUseCounterCallback(v8::Isolate* isolate, 3429 void MockUseCounterCallback(v8::Isolate* isolate,
(...skipping 4893 matching lines...) Expand 10 before | Expand all | Expand 10 after
8328 const char* data[] = { 8323 const char* data[] = {
8329 "const arguments = 1", 8324 "const arguments = 1",
8330 "let arguments", 8325 "let arguments",
8331 "var arguments", 8326 "var arguments",
8332 NULL 8327 NULL
8333 }; 8328 };
8334 // clang-format on 8329 // clang-format on
8335 RunParserSyncTest(context_data, data, kSuccess); 8330 RunParserSyncTest(context_data, data, kSuccess);
8336 } 8331 }
8337 } 8332 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698