Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index bb8cb52b75068f0aee6941880fd7d1ecfe58bd29..875f61b05cabdb62d1c9a99656cce9a6226f54c0 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -822,7 +822,7 @@ Parser::Parser(CompilationInfo* info, uintptr_t stack_limit, uint32_t hash_seed, |
} |
-FunctionLiteral* Parser::ParseProgram(CompilationInfo* info) { |
+FunctionLiteral* Parser::ParseProgram(Isolate* isolate, CompilationInfo* info) { |
// TODO(bmeurer): We temporarily need to pass allow_nesting = true here, |
// see comment for HistogramTimerScope class. |
@@ -830,7 +830,6 @@ FunctionLiteral* Parser::ParseProgram(CompilationInfo* info) { |
// called in the main thread. |
DCHECK(parsing_on_main_thread_); |
- Isolate* isolate = info->isolate(); |
HistogramTimerScope timer_scope(isolate->counters()->parse(), true); |
Handle<String> source(String::cast(info->script()->source())); |
isolate->counters()->total_parse_size()->Increment(source->length()); |
@@ -871,7 +870,7 @@ FunctionLiteral* Parser::ParseProgram(CompilationInfo* info) { |
if (eval_scope != NULL) { |
eval_scope->set_end_position(source->length()); |
} |
- HandleSourceURLComments(info); |
+ HandleSourceURLComments(isolate, info->script()); |
if (FLAG_trace_parse && result != NULL) { |
double ms = timer.Elapsed().InMillisecondsF(); |
@@ -991,13 +990,13 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, Scope** scope, |
} |
-FunctionLiteral* Parser::ParseLazy(CompilationInfo* info) { |
+FunctionLiteral* Parser::ParseLazy(Isolate* isolate, CompilationInfo* info) { |
// It's OK to use the Isolate & counters here, since this function is only |
// called in the main thread. |
DCHECK(parsing_on_main_thread_); |
- HistogramTimerScope timer_scope(info->isolate()->counters()->parse_lazy()); |
+ HistogramTimerScope timer_scope(isolate->counters()->parse_lazy()); |
Handle<String> source(String::cast(info->script()->source())); |
- info->isolate()->counters()->total_parse_size()->Increment(source->length()); |
+ isolate->counters()->total_parse_size()->Increment(source->length()); |
base::ElapsedTimer timer; |
if (FLAG_trace_parse) { |
timer.Start(); |
@@ -1012,12 +1011,12 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info) { |
Handle<ExternalTwoByteString>::cast(source), |
shared_info->start_position(), |
shared_info->end_position()); |
- result = ParseLazy(info, &stream); |
+ result = ParseLazy(isolate, info, &stream); |
} else { |
GenericStringUtf16CharacterStream stream(source, |
shared_info->start_position(), |
shared_info->end_position()); |
- result = ParseLazy(info, &stream); |
+ result = ParseLazy(isolate, info, &stream); |
} |
if (FLAG_trace_parse && result != NULL) { |
@@ -1029,7 +1028,7 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info) { |
} |
-FunctionLiteral* Parser::ParseLazy(CompilationInfo* info, |
+FunctionLiteral* Parser::ParseLazy(Isolate* isolate, CompilationInfo* info, |
Utf16CharacterStream* source) { |
Handle<SharedFunctionInfo> shared_info = info->shared_info(); |
scanner_.Initialize(source); |
@@ -1055,7 +1054,7 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info, |
// Ok to use Isolate here, since lazy function parsing is only done in the |
// main thread. |
DCHECK(parsing_on_main_thread_); |
- scope = Scope::DeserializeScopeChain(info->isolate(), zone(), |
+ scope = Scope::DeserializeScopeChain(isolate, zone(), |
info->closure()->context(), scope); |
} |
original_scope_ = scope; |
@@ -4236,16 +4235,15 @@ IterationStatement* Parser::LookupContinueTarget(const AstRawString* label, |
} |
-void Parser::HandleSourceURLComments(CompilationInfo* info) { |
+void Parser::HandleSourceURLComments(Isolate* isolate, Handle<Script> script) { |
if (scanner_.source_url()->length() > 0) { |
- Handle<String> source_url = |
- scanner_.source_url()->Internalize(info->isolate()); |
- info->script()->set_source_url(*source_url); |
+ Handle<String> source_url = scanner_.source_url()->Internalize(isolate); |
+ script->set_source_url(*source_url); |
} |
if (scanner_.source_mapping_url()->length() > 0) { |
Handle<String> source_mapping_url = |
- scanner_.source_mapping_url()->Internalize(info->isolate()); |
- info->script()->set_source_mapping_url(*source_mapping_url); |
+ scanner_.source_mapping_url()->Internalize(isolate); |
+ script->set_source_mapping_url(*source_mapping_url); |
} |
} |
@@ -4299,16 +4297,16 @@ void Parser::ThrowPendingError(Isolate* isolate, Handle<Script> script) { |
} |
-void Parser::Internalize(CompilationInfo* info) { |
+void Parser::Internalize(Isolate* isolate, Handle<Script> script, bool error) { |
// Internalize strings. |
- ast_value_factory()->Internalize(info->isolate()); |
+ ast_value_factory()->Internalize(isolate); |
// Error processing. |
- if (info->function() == NULL) { |
+ if (error) { |
if (stack_overflow()) { |
- info->isolate()->StackOverflow(); |
+ isolate->StackOverflow(); |
} else { |
- ThrowPendingError(info->isolate(), info->script()); |
+ ThrowPendingError(isolate, script); |
} |
} |
@@ -4316,10 +4314,10 @@ void Parser::Internalize(CompilationInfo* info) { |
for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; |
++feature) { |
for (int i = 0; i < use_counts_[feature]; ++i) { |
- info->isolate()->CountUsage(v8::Isolate::UseCounterFeature(feature)); |
+ isolate->CountUsage(v8::Isolate::UseCounterFeature(feature)); |
} |
} |
- info->isolate()->counters()->total_preparse_skipped()->Increment( |
+ isolate->counters()->total_preparse_skipped()->Increment( |
total_preparse_skipped_); |
} |
@@ -5267,17 +5265,17 @@ bool Parser::Parse(CompilationInfo* info) { |
if (info->is_lazy()) { |
DCHECK(!info->is_eval()); |
if (info->shared_info()->is_function()) { |
- result = ParseLazy(info); |
+ result = ParseLazy(isolate, info); |
} else { |
- result = ParseProgram(info); |
+ result = ParseProgram(isolate, info); |
} |
} else { |
SetCachedData(info); |
- result = ParseProgram(info); |
+ result = ParseProgram(isolate, info); |
} |
info->SetFunction(result); |
- Internalize(info); |
+ Internalize(isolate, info->script(), result == NULL); |
DCHECK(ast_value_factory()->IsInternalized()); |
return (result != NULL); |
} |