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

Unified Diff: src/parsing/parser.cc

Issue 2474393003: [parser] Give preparser and parser independent loggers (Closed)
Patch Set: Addressed comment Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/parser.cc
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
index 86290f2bb66ee683eb86ba84582a4b9514248ac7..6bdbc566dda5473965f1c8a8ee5060942d581e35 100644
--- a/src/parsing/parser.cc
+++ b/src/parsing/parser.cc
@@ -586,15 +586,16 @@ Expression* Parser::NewV8Intrinsic(const AstRawString* name,
Parser::Parser(ParseInfo* info)
: ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(),
- info->extension(), info->ast_value_factory(), NULL),
+ info->extension(), info->ast_value_factory()),
scanner_(info->unicode_cache()),
- reusable_preparser_(NULL),
- original_scope_(NULL),
- target_stack_(NULL),
+ reusable_preparser_(nullptr),
+ original_scope_(nullptr),
+ target_stack_(nullptr),
compile_options_(info->compile_options()),
cached_parse_data_(nullptr),
total_preparse_skipped_(0),
- parsing_on_main_thread_(true) {
+ parsing_on_main_thread_(true),
+ log_(nullptr) {
// Even though we were passed ParseInfo, we should not store it in
// Parser - this makes sure that Isolate is not accidentally accessed via
// ParseInfo during background parsing.
@@ -681,10 +682,10 @@ FunctionLiteral* Parser::ParseProgram(Isolate* isolate, ParseInfo* info) {
fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone());
// Initialize parser state.
- CompleteParserRecorder recorder;
+ ParserLogger logger;
if (produce_cached_parse_data()) {
- log_ = &recorder;
+ log_ = &logger;
} else if (consume_cached_parse_data()) {
cached_parse_data_->Initialize();
}
@@ -704,7 +705,7 @@ FunctionLiteral* Parser::ParseProgram(Isolate* isolate, ParseInfo* info) {
}
HandleSourceURLComments(isolate, info->script());
- if (FLAG_trace_parse && result != NULL) {
+ if (FLAG_trace_parse && result != nullptr) {
double ms = timer.Elapsed().InMillisecondsF();
if (info->is_eval()) {
PrintF("[parsing eval");
@@ -717,10 +718,10 @@ FunctionLiteral* Parser::ParseProgram(Isolate* isolate, ParseInfo* info) {
}
PrintF(" - took %0.3f ms]\n", ms);
}
- if (produce_cached_parse_data()) {
- if (result != NULL) *info->cached_data() = recorder.GetScriptData();
- log_ = NULL;
+ if (produce_cached_parse_data() && result != nullptr) {
+ *info->cached_data() = logger.GetScriptData();
}
+ log_ = nullptr;
return result;
}
@@ -2776,9 +2777,8 @@ Parser::LazyParsingResult Parser::SkipFunction(
}
// With no cached data, we partially parse the function, without building an
// AST. This gathers the data needed to build a lazy function.
- SingletonLogger logger;
PreParser::PreParseResult result = ParseFunctionWithPreParser(
- kind, function_scope, &logger, is_inner_function, may_abort);
+ kind, function_scope, is_inner_function, may_abort);
// Return immediately if pre-parser decided to abort parsing.
if (result == PreParser::kPreParseAbort) return kLazyParsingAborted;
@@ -2788,25 +2788,23 @@ Parser::LazyParsingResult Parser::SkipFunction(
*ok = false;
return kLazyParsingComplete;
}
- if (logger.has_error()) {
- ReportMessageAt(Scanner::Location(logger.start(), logger.end()),
- logger.message(), logger.argument_opt(),
- logger.error_type());
+ PreParserLogger* logger = reusable_preparser_->logger();
+ if (logger->has_error()) {
+ ReportMessageAt(Scanner::Location(logger->start(), logger->end()),
+ logger->message(), logger->argument_opt(),
+ logger->error_type());
*ok = false;
return kLazyParsingComplete;
}
- function_scope->set_end_position(logger.end());
+ function_scope->set_end_position(logger->end());
Expect(Token::RBRACE, CHECK_OK_VALUE(kLazyParsingComplete));
total_preparse_skipped_ +=
function_scope->end_position() - function_scope->start_position();
- *num_parameters = logger.num_parameters();
- *function_length = logger.function_length();
- *has_duplicate_parameters = logger.has_duplicate_parameters();
- *materialized_literal_count = logger.literals();
- *expected_property_count = logger.properties();
- SetLanguageMode(function_scope, logger.language_mode());
- if (logger.uses_super_property()) function_scope->RecordSuperPropertyUsage();
- if (logger.calls_eval()) function_scope->RecordEvalCall();
+ *num_parameters = logger->num_parameters();
+ *function_length = logger->function_length();
+ *has_duplicate_parameters = logger->has_duplicate_parameters();
+ *materialized_literal_count = logger->literals();
+ *expected_property_count = logger->properties();
if (!is_inner_function && produce_cached_parse_data()) {
DCHECK(log_);
log_->LogFunction(
@@ -3289,13 +3287,13 @@ ZoneList<Statement*>* Parser::ParseEagerFunctionBody(
}
PreParser::PreParseResult Parser::ParseFunctionWithPreParser(
- FunctionKind kind, DeclarationScope* function_scope,
- SingletonLogger* logger, bool is_inner_function, bool may_abort) {
+ FunctionKind kind, DeclarationScope* function_scope, bool is_inner_function,
+ bool may_abort) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.PreParse");
if (reusable_preparser_ == NULL) {
- reusable_preparser_ = new PreParser(zone(), &scanner_, ast_value_factory(),
- NULL, stack_limit_);
+ reusable_preparser_ =
+ new PreParser(zone(), &scanner_, ast_value_factory(), stack_limit_);
reusable_preparser_->set_allow_lazy(true);
#define SET_ALLOW(name) reusable_preparser_->set_allow_##name(allow_##name());
SET_ALLOW(natives);
@@ -3312,8 +3310,8 @@ PreParser::PreParseResult Parser::ParseFunctionWithPreParser(
DCHECK(!is_inner_function || !may_abort);
PreParser::PreParseResult result = reusable_preparser_->PreParseFunction(
- kind, function_scope, parsing_module_, logger, is_inner_function,
- may_abort, use_counts_);
+ kind, function_scope, parsing_module_, is_inner_function, may_abort,
+ use_counts_);
return result;
}
@@ -3812,8 +3810,8 @@ void Parser::ParseOnBackground(ParseInfo* info) {
DCHECK(info->literal() == NULL);
FunctionLiteral* result = NULL;
- CompleteParserRecorder recorder;
- if (produce_cached_parse_data()) log_ = &recorder;
+ ParserLogger logger;
+ if (produce_cached_parse_data()) log_ = &logger;
std::unique_ptr<Utf16CharacterStream> stream;
Utf16CharacterStream* stream_ptr;
@@ -3850,7 +3848,7 @@ void Parser::ParseOnBackground(ParseInfo* info) {
// care of calling Parser::Internalize just before compilation.
if (produce_cached_parse_data()) {
- if (result != NULL) *info->cached_data() = recorder.GetScriptData();
+ if (result != NULL) *info->cached_data() = logger.GetScriptData();
log_ = NULL;
}
}
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698