| Index: src/runtime.cc | 
| diff --git a/src/runtime.cc b/src/runtime.cc | 
| index 6f96e8b32c95087992a3c5244d8bd14fb1743724..ffbe34cb6d0493cc7d27c5741eeb080576a7ab84 100644 | 
| --- a/src/runtime.cc | 
| +++ b/src/runtime.cc | 
| @@ -11574,6 +11574,58 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeCount) { | 
| } | 
|  | 
|  | 
| +// Returns the list of step-in positions (text offset) in a function of the | 
| +// stack frame in a range from the current debug break position to the end | 
| +// of the corresponding statement. | 
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) { | 
| +  HandleScope scope(isolate); | 
| +  ASSERT(args.length() == 2); | 
| + | 
| +  // Check arguments. | 
| +  Object* check; | 
| +  { MaybeObject* maybe_check = Runtime_CheckExecutionState( | 
| +      RUNTIME_ARGUMENTS(isolate, args)); | 
| +    if (!maybe_check->ToObject(&check)) return maybe_check; | 
| +  } | 
| +  CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 
| + | 
| +  // Get the frame where the debugging is performed. | 
| +  StackFrame::Id id = UnwrapFrameId(wrapped_id); | 
| +  JavaScriptFrameIterator frame_it(isolate, id); | 
| +  JavaScriptFrame* frame = frame_it.frame(); | 
| + | 
| +  Handle<SharedFunctionInfo> shared = | 
| +      Handle<SharedFunctionInfo>(JSFunction::cast(frame->function())->shared()); | 
| +  Handle<DebugInfo> debug_info = Debug::GetDebugInfo(shared); | 
| + | 
| +  int len = 0; | 
| +  Handle<JSArray> array(isolate->factory()->NewJSArray(10)); | 
| +  // Find the break point where execution has stopped. | 
| +  BreakLocationIterator break_location_iterator(debug_info, | 
| +                                                ALL_BREAK_LOCATIONS); | 
| + | 
| +  break_location_iterator.FindBreakLocationFromAddress(frame->pc()); | 
| +  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++; | 
| +    } | 
| +    // Advance iterator. | 
| +    break_location_iterator.Next(); | 
| +    if (current_statement_pos != | 
| +        break_location_iterator.statement_position()) { | 
| +      break; | 
| +    } | 
| +  } | 
| +  return *array; | 
| +} | 
| + | 
| + | 
| static const int kScopeDetailsTypeIndex = 0; | 
| static const int kScopeDetailsObjectIndex = 1; | 
| static const int kScopeDetailsSize = 2; | 
|  |