// Test that instrumenting a function does not interfere with script
// disassembly when reporting errors.

var g = newGlobal({ newCompartment: true });
var dbg = Debugger(g);
var gdbg = dbg.addDebuggee(g);

function setScriptId(script) {
  script.setInstrumentationId(0);
  script.getChildScripts().forEach(setScriptId);
}

dbg.onNewScript = setScriptId;

const executedLines = [];
gdbg.setInstrumentation(
  gdbg.makeDebuggeeValue(() => {}),
  ["breakpoint"]
);

g.eval(`
function foo(v) {
  v.f().g();
}
`);

var gotException = false;
try {
  g.foo({ f: () => { return { g: 0 } } });
} catch (e) {
  gotException = true;
  assertEq(e.toString().includes("v.f(...).g is not a function"), true);
}
assertEq(gotException, true);
