summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Debugger-onNativeCall-05.js
blob: 0b66cd666dd54f4b4106de17eba7f12d416da6f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Test that the onNativeCall hook cannot return a primitive value.

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

// Returning the callee accidentally is a common mistake when implementing C++
// methods, but the debugger should not trip any checks if it does this on
// purpose.
dbg.onNativeCall = (callee, reason) => {
    return {return: callee};
};
v = gdbg.executeInGlobal("new Object")
assertEq(v.return, gdbg.makeDebuggeeValue(g.Object));

// Returning a primitive should cause the hook to throw.
dbg.onNativeCall = (callee, reason) => {
    return {return: "primitive"};
};
v = gdbg.executeInGlobal("new Object")
assertEq(v.throw.proto, gdbg.makeDebuggeeValue(g.Error.prototype))

// A no-op hook shouldn't break any checks.
dbg.onNativeCall = (callee, reason) => { };
v = gdbg.executeInGlobal("new Object")
assertEq("return" in v, true);