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: src/parsing/parser.cc

Issue 2417643004: Explicitly check for lazy parser when dealing with parser cache (Closed)
Patch Set: Reset compile options to kNoCompileOptions if the cache is invalid Created 4 years, 2 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/parsing/parser.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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/parsing/parser.h" 5 #include "src/parsing/parser.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/ast/ast-expression-rewriter.h" 10 #include "src/ast/ast-expression-rewriter.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 AstNodeFactory::BodyScope ast_node_factory_scope_; 143 AstNodeFactory::BodyScope ast_node_factory_scope_;
144 FuncNameInferrer fni_; 144 FuncNameInferrer fni_;
145 Parser* parser_; 145 Parser* parser_;
146 FuncNameInferrer* prev_fni_; 146 FuncNameInferrer* prev_fni_;
147 Zone* prev_zone_; 147 Zone* prev_zone_;
148 148
149 DISALLOW_COPY_AND_ASSIGN(DiscardableZoneScope); 149 DISALLOW_COPY_AND_ASSIGN(DiscardableZoneScope);
150 }; 150 };
151 151
152 void Parser::SetCachedData(ParseInfo* info) { 152 void Parser::SetCachedData(ParseInfo* info) {
153 if (compile_options_ == ScriptCompiler::kNoCompileOptions) { 153 DCHECK_NULL(cached_parse_data_);
154 cached_parse_data_ = NULL; 154 if (consume_cached_parse_data()) {
155 } else { 155 cached_parse_data_ = ParseData::FromCachedData(*info->cached_data());
156 DCHECK(info->cached_data() != NULL); 156 if (cached_parse_data_ == nullptr) {
157 if (compile_options_ == ScriptCompiler::kConsumeParserCache) { 157 compile_options_ = ScriptCompiler::kNoCompileOptions;
158 cached_parse_data_ = ParseData::FromCachedData(*info->cached_data());
159 } 158 }
160 } 159 }
161 } 160 }
162 161
163 Expression* Parser::CallClassFieldInitializer(Scope* scope, 162 Expression* Parser::CallClassFieldInitializer(Scope* scope,
164 Expression* this_expr) { 163 Expression* this_expr) {
165 // This produces the expression 164 // This produces the expression
166 // `.class_field_intializer(this_expr)`, where '.class_field_intializer' is 165 // `.class_field_intializer(this_expr)`, where '.class_field_intializer' is
167 // the name 166 // the name
168 // of a synthetic variable. 167 // of a synthetic variable.
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 } 630 }
632 631
633 Parser::Parser(ParseInfo* info) 632 Parser::Parser(ParseInfo* info)
634 : ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(), 633 : ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(),
635 info->extension(), info->ast_value_factory(), NULL), 634 info->extension(), info->ast_value_factory(), NULL),
636 scanner_(info->unicode_cache()), 635 scanner_(info->unicode_cache()),
637 reusable_preparser_(NULL), 636 reusable_preparser_(NULL),
638 original_scope_(NULL), 637 original_scope_(NULL),
639 target_stack_(NULL), 638 target_stack_(NULL),
640 compile_options_(info->compile_options()), 639 compile_options_(info->compile_options()),
641 cached_parse_data_(NULL), 640 cached_parse_data_(nullptr),
642 total_preparse_skipped_(0), 641 total_preparse_skipped_(0),
643 pre_parse_timer_(NULL), 642 pre_parse_timer_(NULL),
644 parsing_on_main_thread_(true) { 643 parsing_on_main_thread_(true) {
645 // Even though we were passed ParseInfo, we should not store it in 644 // Even though we were passed ParseInfo, we should not store it in
646 // Parser - this makes sure that Isolate is not accidentally accessed via 645 // Parser - this makes sure that Isolate is not accidentally accessed via
647 // ParseInfo during background parsing. 646 // ParseInfo during background parsing.
648 DCHECK(!info->script().is_null() || info->source_stream() != nullptr || 647 DCHECK(!info->script().is_null() || info->source_stream() != nullptr ||
649 info->character_stream() != nullptr); 648 info->character_stream() != nullptr);
650 // Determine if functions can be lazily compiled. This is necessary to 649 // Determine if functions can be lazily compiled. This is necessary to
651 // allow some of our builtin JS files to be lazily compiled. These 650 // allow some of our builtin JS files to be lazily compiled. These
(...skipping 10 matching lines...) Expand all
662 can_compile_lazily &= !(FLAG_serialize_eager && info->will_serialize()); 661 can_compile_lazily &= !(FLAG_serialize_eager && info->will_serialize());
663 662
664 // Consider compiling eagerly when compiling bytecode for Ignition. 663 // Consider compiling eagerly when compiling bytecode for Ignition.
665 can_compile_lazily &= !(FLAG_ignition && FLAG_ignition_eager && 664 can_compile_lazily &= !(FLAG_ignition && FLAG_ignition_eager &&
666 info->isolate()->serializer_enabled()); 665 info->isolate()->serializer_enabled());
667 666
668 set_default_eager_compile_hint(can_compile_lazily 667 set_default_eager_compile_hint(can_compile_lazily
669 ? FunctionLiteral::kShouldLazyCompile 668 ? FunctionLiteral::kShouldLazyCompile
670 : FunctionLiteral::kShouldEagerCompile); 669 : FunctionLiteral::kShouldEagerCompile);
671 set_allow_lazy(FLAG_lazy && info->allow_lazy_parsing() && 670 set_allow_lazy(FLAG_lazy && info->allow_lazy_parsing() &&
672 !info->is_native() && info->extension() == nullptr); 671 !info->is_native() && info->extension() == nullptr &&
672 can_compile_lazily);
673 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); 673 set_allow_natives(FLAG_allow_natives_syntax || info->is_native());
674 set_allow_tailcalls(FLAG_harmony_tailcalls && !info->is_native() && 674 set_allow_tailcalls(FLAG_harmony_tailcalls && !info->is_native() &&
675 info->isolate()->is_tail_call_elimination_enabled()); 675 info->isolate()->is_tail_call_elimination_enabled());
676 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); 676 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions);
677 set_allow_harmony_function_sent(FLAG_harmony_function_sent); 677 set_allow_harmony_function_sent(FLAG_harmony_function_sent);
678 set_allow_harmony_restrictive_declarations( 678 set_allow_harmony_restrictive_declarations(
679 FLAG_harmony_restrictive_declarations); 679 FLAG_harmony_restrictive_declarations);
680 set_allow_harmony_async_await(FLAG_harmony_async_await); 680 set_allow_harmony_async_await(FLAG_harmony_async_await);
681 set_allow_harmony_restrictive_generators(FLAG_harmony_restrictive_generators); 681 set_allow_harmony_restrictive_generators(FLAG_harmony_restrictive_generators);
682 set_allow_harmony_trailing_commas(FLAG_harmony_trailing_commas); 682 set_allow_harmony_trailing_commas(FLAG_harmony_trailing_commas);
(...skipping 4759 matching lines...) Expand 10 before | Expand all | Expand 10 after
5442 5442
5443 return final_loop; 5443 return final_loop;
5444 } 5444 }
5445 5445
5446 #undef CHECK_OK 5446 #undef CHECK_OK
5447 #undef CHECK_OK_VOID 5447 #undef CHECK_OK_VOID
5448 #undef CHECK_FAILED 5448 #undef CHECK_FAILED
5449 5449
5450 } // namespace internal 5450 } // namespace internal
5451 } // namespace v8 5451 } // namespace v8
OLDNEW
« no previous file with comments | « src/parsing/parser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698