Index: src/compiler.cc |
diff --git a/src/compiler.cc b/src/compiler.cc |
index 5e4d17b320df0e9d2a22f0b7120cdbc52b1b6386..ed0a0c8e69b028729943f93024e3f3373b7a056c 100644 |
--- a/src/compiler.cc |
+++ b/src/compiler.cc |
@@ -665,66 +665,70 @@ static Handle<SharedFunctionInfo> MakeFunctionInfo(CompilationInfo* info) { |
} |
} |
- // Measure how long it takes to do the compilation; only take the |
- // rest of the function into account to avoid overlap with the |
- // parsing statistics. |
- HistogramTimer* rate = info->is_eval() |
- ? info->isolate()->counters()->compile_eval() |
- : info->isolate()->counters()->compile(); |
- HistogramTimerScope timer(rate); |
- |
- // Compile the code. |
FunctionLiteral* lit = info->function(); |
LiveEditFunctionTracker live_edit_tracker(isolate, lit); |
- if (!MakeCode(info)) { |
- if (!isolate->has_pending_exception()) isolate->StackOverflow(); |
- return Handle<SharedFunctionInfo>::null(); |
- } |
+ Handle<SharedFunctionInfo> result; |
+ { |
+ // Measure how long it takes to do the compilation; only take the |
+ // rest of the function into account to avoid overlap with the |
+ // parsing statistics. |
+ HistogramTimer* rate = info->is_eval() |
+ ? info->isolate()->counters()->compile_eval() |
+ : info->isolate()->counters()->compile(); |
+ HistogramTimerScope timer(rate); |
- // Allocate function. |
- ASSERT(!info->code().is_null()); |
- Handle<SharedFunctionInfo> result = |
- isolate->factory()->NewSharedFunctionInfo( |
- lit->name(), |
- lit->materialized_literal_count(), |
- lit->is_generator(), |
- info->code(), |
- ScopeInfo::Create(info->scope(), info->zone())); |
- |
- ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
- Compiler::SetFunctionInfo(result, lit, true, script); |
- |
- if (script->name()->IsString()) { |
- PROFILE(isolate, CodeCreateEvent( |
- info->is_eval() |
- ? Logger::EVAL_TAG |
- : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
- *info->code(), |
- *result, |
- info, |
- String::cast(script->name()))); |
- GDBJIT(AddCode(Handle<String>(String::cast(script->name())), |
- script, |
- info->code(), |
- info)); |
- } else { |
- PROFILE(isolate, CodeCreateEvent( |
- info->is_eval() |
- ? Logger::EVAL_TAG |
- : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
- *info->code(), |
- *result, |
- info, |
- isolate->heap()->empty_string())); |
- GDBJIT(AddCode(Handle<String>(), script, info->code(), info)); |
- } |
+ // Compile the code. |
+ if (!MakeCode(info)) { |
+ if (!isolate->has_pending_exception()) isolate->StackOverflow(); |
+ return Handle<SharedFunctionInfo>::null(); |
+ } |
+ |
+ // Allocate function. |
+ ASSERT(!info->code().is_null()); |
+ result = |
+ isolate->factory()->NewSharedFunctionInfo( |
+ lit->name(), |
+ lit->materialized_literal_count(), |
+ lit->is_generator(), |
+ info->code(), |
+ ScopeInfo::Create(info->scope(), info->zone())); |
- // Hint to the runtime system used when allocating space for initial |
- // property space by setting the expected number of properties for |
- // the instances of the function. |
- SetExpectedNofPropertiesFromEstimate(result, lit->expected_property_count()); |
+ ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
+ Compiler::SetFunctionInfo(result, lit, true, script); |
- script->set_compilation_state(Script::COMPILATION_STATE_COMPILED); |
+ if (script->name()->IsString()) { |
+ PROFILE(isolate, CodeCreateEvent( |
+ info->is_eval() |
+ ? Logger::EVAL_TAG |
+ : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
+ *info->code(), |
+ *result, |
+ info, |
+ String::cast(script->name()))); |
+ GDBJIT(AddCode(Handle<String>(String::cast(script->name())), |
+ script, |
+ info->code(), |
+ info)); |
+ } else { |
+ PROFILE(isolate, CodeCreateEvent( |
+ info->is_eval() |
+ ? Logger::EVAL_TAG |
+ : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
+ *info->code(), |
+ *result, |
+ info, |
+ isolate->heap()->empty_string())); |
+ GDBJIT(AddCode(Handle<String>(), script, info->code(), info)); |
+ } |
+ |
+ // Hint to the runtime system used when allocating space for initial |
+ // property space by setting the expected number of properties for |
+ // the instances of the function. |
+ SetExpectedNofPropertiesFromEstimate(result, |
+ lit->expected_property_count()); |
+ |
+ script->set_compilation_state(Script::COMPILATION_STATE_COMPILED); |
+ } |
#ifdef ENABLE_DEBUGGER_SUPPORT |
// Notify debugger |