summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Debugger-onNativeCall-10.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Debugger-onNativeCall-10.js')
-rw-r--r--js/src/jit-test/tests/debug/Debugger-onNativeCall-10.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Debugger-onNativeCall-10.js b/js/src/jit-test/tests/debug/Debugger-onNativeCall-10.js
new file mode 100644
index 0000000000..bb8c36ca67
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Debugger-onNativeCall-10.js
@@ -0,0 +1,95 @@
+// Test that the onNativeCall get additional info
+// when using inspectNativeCallArguments
+
+load(libdir + "asserts.js");
+
+var g = newGlobal({ newCompartment: true });
+var dbg = new Debugger();
+var gdbg = dbg.addDebuggee(g);
+
+g.eval(`
+var x = [1];
+var callArg = () => true;
+function f() {
+ x.push(42, 26);
+ x.find(callArg);
+ x.toString.call(2);
+ new Function("code");
+}
+`);
+
+let rv = [];
+dbg.onNativeCall = (callee, reason, object, args) => {
+ rv.push({
+ name: callee.name,
+ cls: object?.class || null,
+ args: args ? args.unsafeDereference().map(a => a.unsafeDereference ? a.unsafeDereference() : a) : null,
+ });
+};
+
+g.f();
+
+// Trace without native arguments
+assertEq(dbg.inspectNativeCallArguments, false);
+assertEq(rv.length, 5);
+assertDeepEq(rv, [
+ {
+ name: "push",
+ cls: null,
+ args: null,
+ },
+ {
+ name: "find",
+ cls: null,
+ args: null,
+ },
+ {
+ name: "call",
+ cls: null,
+ args: null,
+ },
+ {
+ name: "toString",
+ cls: null,
+ args: null,
+ },
+ {
+ name: "Function",
+ cls:null,
+ args:null,
+ },
+]);
+
+// Trace with native arguments
+rv = [];
+dbg.inspectNativeCallArguments = true;
+assertEq(dbg.inspectNativeCallArguments, true);
+g.f();
+assertEq(rv.length, 5);
+assertDeepEq(rv, [
+ {
+ name: "push",
+ cls: "Array",
+ args: [42, 26],
+ },
+ {
+ name: "find",
+ cls: "Array",
+ args: [g.callArg],
+ },
+ {
+ name: "call",
+ cls: "Function",
+ args: [2],
+ },
+ {
+ name: "toString",
+ cls: null,
+ args: [],
+ },
+ {
+ name: "Function",
+ cls: null,
+ args:["code"],
+ },
+]);