Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index e956947495ebdebb7da03741ce57dc1d97f31173..8bb0538dc2f71527fd94d7f3ee97b077d9b6977c 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -144,7 +144,7 @@ void HBasicBlock::AddInstruction(HInstruction* instr, |
entry->set_position(position); |
} else { |
DCHECK(!FLAG_hydrogen_track_positions || |
- !graph()->info()->IsOptimizing()); |
+ !graph()->info()->IsOptimizing() || instr->IsAbnormalExit()); |
} |
first_ = last_ = entry; |
} |
@@ -3446,8 +3446,9 @@ HGraph::HGraph(CompilationInfo* info) |
maximum_environment_size_(0), |
no_side_effects_scope_count_(0), |
disallow_adding_new_values_(false), |
- next_inline_id_(0), |
- inlined_functions_(5, info->zone()) { |
+ inlined_functions_(FLAG_hydrogen_track_positions ? 5 : 0, info->zone()), |
+ inlining_id_to_function_id_(FLAG_hydrogen_track_positions ? 5 : 0, |
+ info->zone()) { |
if (info->IsStub()) { |
CallInterfaceDescriptor descriptor = |
info->code_stub()->GetCallInterfaceDescriptor(); |
@@ -3527,7 +3528,8 @@ int HGraph::TraceInlinedFunction( |
} |
} |
- int inline_id = next_inline_id_++; |
+ int inline_id = inlining_id_to_function_id_.length(); |
+ inlining_id_to_function_id_.Add(id, zone()); |
if (inline_id != 0) { |
CodeTracer::Scope tracing_scope(isolate()->GetCodeTracer()); |
@@ -3546,8 +3548,8 @@ int HGraph::SourcePositionToScriptPosition(HSourcePosition pos) { |
return pos.raw(); |
} |
- return inlined_functions_[pos.inlining_id()].start_position() + |
- pos.position(); |
+ const int id = inlining_id_to_function_id_[pos.inlining_id()]; |
+ return inlined_functions_[id].start_position() + pos.position(); |
} |