// Copyright 2019 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.

Debug = debug.Debug
var exception = null;

function listener(event, exec_state, event_data, data) {
  try {
    if (event == Debug.DebugEvent.Break) {
      assertEquals("n", exec_state.frame(0).evaluate("n").value());
      assertEquals("m", exec_state.frame(0).evaluate("m").value());
    }
  } catch(e) {
    exception = e;
    print(e, e.stack);
  }
};

Debug.setListener(listener);

(function foo () {
   var n = "n";
   var m = "m";
   (function bar() {
     assertEquals("m", eval("m")); // force context-allocation.
     debugger;
   })();
})();

assertNull(exception);
Debug.setListener(null);
