// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


// Check that the we are still in function context when we break on return.

var Debug = debug.Debug;

function listener(event, exec_state, event_data, data) {
  if (event == Debug.DebugEvent.Break) {
    // Access scope details to check the context is correct.
    var scope_count = exec_state.frame().scopeCount();
    // Do steps until we reach the global scope again.
    exec_state.prepareStep(Debug.StepAction.StepIn);
  }
}

Debug.setListener(listener);

function f() {
  debugger;

  L: with ({x:12}) {
    break L;
  }

  return;
}
f();
