Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 6164e6631fa47c49cba7e59419a4806951ddc0d3..9c9371d85e39777707f8ce4e6d5e6fa8913add72 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -12011,8 +12011,15 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) { |
JavaScriptFrameIterator frame_it(isolate, id); |
JavaScriptFrame* frame = frame_it.frame(); |
+ Handle<JSFunction> fun = |
+ Handle<JSFunction>(frame->function()); |
Handle<SharedFunctionInfo> shared = |
- Handle<SharedFunctionInfo>(frame->function()->shared()); |
+ Handle<SharedFunctionInfo>(fun->shared()); |
+ |
+ if (!isolate->debug()->EnsureDebugInfo(shared, fun)) { |
+ return isolate->heap()->undefined_value(); |
+ } |
+ |
Handle<DebugInfo> debug_info = Debug::GetDebugInfo(shared); |
int len = 0; |
@@ -12025,12 +12032,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) { |
int current_statement_pos = break_location_iterator.statement_position(); |
while (!break_location_iterator.Done()) { |
- if (break_location_iterator.IsStepInLocation(isolate)) { |
- Smi* position_value = Smi::FromInt(break_location_iterator.position()); |
- JSObject::SetElement(array, len, |
- Handle<Object>(position_value, isolate), |
- NONE, kNonStrictMode); |
- len++; |
+ if (break_location_iterator.pc() > frame->pc()) { |
+ if (break_location_iterator.IsStepInLocation(isolate)) { |
+ Smi* position_value = Smi::FromInt(break_location_iterator.position()); |
+ JSObject::SetElement(array, len, |
+ Handle<Object>(position_value, isolate), |
+ NONE, kNonStrictMode); |
+ len++; |
+ } |
} |
// Advance iterator. |
break_location_iterator.Next(); |