Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/parser.h" | 5 #include "vm/parser.h" |
| 6 #include "vm/flags.h" | 6 #include "vm/flags.h" |
| 7 | 7 |
| 8 #ifndef DART_PRECOMPILED_RUNTIME | 8 #ifndef DART_PRECOMPILED_RUNTIME |
| 9 | 9 |
| 10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 484 } | 484 } |
| 485 | 485 |
| 486 | 486 |
| 487 void Parser::SetPosition(TokenPosition position) { | 487 void Parser::SetPosition(TokenPosition position) { |
| 488 tokens_iterator_.SetCurrentPosition(position); | 488 tokens_iterator_.SetCurrentPosition(position); |
| 489 token_kind_ = Token::kILLEGAL; | 489 token_kind_ = Token::kILLEGAL; |
| 490 prev_token_pos_ = position; | 490 prev_token_pos_ = position; |
| 491 } | 491 } |
| 492 | 492 |
| 493 | 493 |
| 494 // Set state and increments generational count so that thge background compiler | |
| 495 // can detect if loading/top-level-parsing occured during compilation. | |
| 496 class TopLevelParsingScope : public ValueObject { | |
| 497 public: | |
| 498 explicit TopLevelParsingScope(Isolate* isolate) : isolate_(isolate) { | |
| 499 isolate_->set_top_level_parsing(true); | |
| 500 isolate_->IncrLoadingInvalidationGen(); | |
| 501 } | |
| 502 ~TopLevelParsingScope() { | |
| 503 isolate_->set_top_level_parsing(false); | |
| 504 isolate_->IncrLoadingInvalidationGen(); | |
| 505 } | |
|
siva
2016/03/28 17:20:14
Both constructor and destructor are incrementing t
srdjan
2016/03/28 19:54:54
I do not need to differentiate. The only informati
| |
| 506 | |
| 507 private: | |
| 508 Isolate* isolate_; | |
| 509 }; | |
| 510 | |
| 511 | |
| 494 void Parser::ParseCompilationUnit(const Library& library, | 512 void Parser::ParseCompilationUnit(const Library& library, |
| 495 const Script& script) { | 513 const Script& script) { |
| 496 Thread* thread = Thread::Current(); | 514 Thread* thread = Thread::Current(); |
| 497 ASSERT(thread->long_jump_base()->IsSafeToJump()); | 515 ASSERT(thread->long_jump_base()->IsSafeToJump()); |
| 498 CSTAT_TIMER_SCOPE(thread, parser_timer); | 516 CSTAT_TIMER_SCOPE(thread, parser_timer); |
| 499 VMTagScope tagScope(thread, VMTag::kCompileTopLevelTagId); | 517 VMTagScope tagScope(thread, VMTag::kCompileTopLevelTagId); |
| 500 #ifndef PRODUCT | 518 #ifndef PRODUCT |
| 501 TimelineDurationScope tds(thread, | 519 TimelineDurationScope tds(thread, |
| 502 Timeline::GetCompilerStream(), | 520 Timeline::GetCompilerStream(), |
| 503 "CompileTopLevel"); | 521 "CompileTopLevel"); |
| 504 if (tds.enabled()) { | 522 if (tds.enabled()) { |
| 505 tds.SetNumArguments(1); | 523 tds.SetNumArguments(1); |
| 506 tds.CopyArgument(0, "script", String::Handle(script.url()).ToCString()); | 524 tds.CopyArgument(0, "script", String::Handle(script.url()).ToCString()); |
| 507 } | 525 } |
| 508 #endif | 526 #endif |
| 509 | 527 |
| 528 TopLevelParsingScope scope(thread->isolate()); | |
| 510 Parser parser(script, library, TokenPosition::kMinSource); | 529 Parser parser(script, library, TokenPosition::kMinSource); |
| 511 parser.ParseTopLevel(); | 530 parser.ParseTopLevel(); |
| 512 } | 531 } |
| 513 | 532 |
| 514 | 533 |
| 515 void Parser::ComputeCurrentToken() { | 534 void Parser::ComputeCurrentToken() { |
| 516 ASSERT(token_kind_ == Token::kILLEGAL); | 535 ASSERT(token_kind_ == Token::kILLEGAL); |
| 517 token_kind_ = tokens_iterator_.CurrentTokenKind(); | 536 token_kind_ = tokens_iterator_.CurrentTokenKind(); |
| 518 if (token_kind_ == Token::kERROR) { | 537 if (token_kind_ == Token::kERROR) { |
| 519 ReportError(TokenPos(), "%s", CurrentLiteral()->ToCString()); | 538 ReportError(TokenPos(), "%s", CurrentLiteral()->ToCString()); |
| (...skipping 13927 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 14447 const ArgumentListNode& function_args, | 14466 const ArgumentListNode& function_args, |
| 14448 const LocalVariable* temp_for_last_arg, | 14467 const LocalVariable* temp_for_last_arg, |
| 14449 bool is_super_invocation) { | 14468 bool is_super_invocation) { |
| 14450 UNREACHABLE(); | 14469 UNREACHABLE(); |
| 14451 return NULL; | 14470 return NULL; |
| 14452 } | 14471 } |
| 14453 | 14472 |
| 14454 } // namespace dart | 14473 } // namespace dart |
| 14455 | 14474 |
| 14456 #endif // DART_PRECOMPILED_RUNTIME | 14475 #endif // DART_PRECOMPILED_RUNTIME |
| OLD | NEW |