summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Object-makeDebuggeeNativeFunction-01.js
blob: 996ad7cffcb60600818842495ab34e0e218f0140 (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
27
28
// Debugger.Object.prototype.makeDebuggeeNativeFunction does what it is
// supposed to do.

load(libdir + "asserts.js");

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

// It would be nice if we could test that this call doesn't produce a CCW,
// and that calling makeDebuggeeValue instead does, but
// Debugger.Object.isProxy only returns true for scripted proxies.
const push = gw.makeDebuggeeNativeFunction(Array.prototype.push);

gw.setProperty("push", push);
g.eval("var x = []; push.call(x, 2); x.push(3)");
assertEq(g.x[0], 2);
assertEq(g.x[1], 3);

// Interpreted functions should throw.
assertThrowsInstanceOf(() => {
  gw.makeDebuggeeNativeFunction(() => {});
}, Error);

// Native functions which have extended slots should throw.
let f;
new Promise(resolve => { f = resolve; })
assertThrowsInstanceOf(() => gw.makeDebuggeeNativeFunction(f), Error);