Debug = debug.Debug
listenerComplete = false;
breakPointCount = 0;
exception = null;
function listener(event, exec_state, event_data, data) {
if (event != Debug.DebugEvent.Break) return;
try {
breakPointCount++;
if (breakPointCount == 1) {
assertEquals('default', exec_state.frame(0).evaluate('mode').value());
assertThrows(() => exec_state.frame(1).evaluate('b'));
assertThrows(() => exec_state.frame(1).evaluate('c'));
} else if (breakPointCount == 2) {
assertEquals('modeFn', exec_state.frame(1).evaluate('a.name').value());
assertEquals('default', exec_state.frame(1).evaluate('b').value());
assertThrows(() => exec_state.frame(1).evaluate('c'));
} else if (breakPointCount == 3) {
assertEquals('modeFn', exec_state.frame(0).evaluate('a.name').value());
assertEquals('default', exec_state.frame(0).evaluate('b').value());
assertEquals('local', exec_state.frame(0).evaluate('d').value());
}
} catch (e) {
exception = e;
}
};
Debug.setListener(listener);
function f(a = function modeFn(mode) { debugger; return mode; },
b = a("default"),
c = (function() { debugger; })()) {
var d = 'local';
debugger;
};
f();
assertEquals(3, breakPointCount);
assertNull(exception);