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

// Flags: --no-always-opt --no-stress-opt

Debug = debug.Debug

var exception = null;
function listener(event, exec_state, event_data, data) {
  if (event != Debug.DebugEvent.Break) return;
  try {
    exec_state.frame(0).evaluate("a = 2");
    exec_state.frame(0).evaluate("e = 3");
    exec_state.frame(0).evaluate("bar()");
    exec_state.frame(0).evaluate("a++");
    exec_state.frame(0).evaluate("e++");
  } catch (e) {
    exception = e;
    print(e + e.stack);
  }
}

Debug.setListener(listener);

(function() {
  "use strict";
  try {
    throw 1;
  } catch (e) {
    let a = 1;
    function bar() {
      a *= 2;
      e *= 2;
    }
    // Make sure bar is 'used' so that it is visible to the debugger.
    bar;
    debugger;
    assertEquals(5, a);
    assertEquals(7, e);
  }
})();

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