summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onStack-01.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Frame-onStack-01.js')
-rw-r--r--js/src/jit-test/tests/debug/Frame-onStack-01.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Frame-onStack-01.js b/js/src/jit-test/tests/debug/Frame-onStack-01.js
new file mode 100644
index 0000000000..3e69a0a8b3
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Frame-onStack-01.js
@@ -0,0 +1,41 @@
+// Debugger.Frame.prototype.onStack is true for frames on the stack and false for
+// frames that have returned
+
+var desc = Object.getOwnPropertyDescriptor(Debugger.Frame.prototype, "live");
+assertEq(typeof desc.get, "function");
+assertEq(desc.set, undefined);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+
+var loc;
+
+var g = newGlobal({newCompartment: true});
+g.debuggeeGlobal = this;
+g.eval("var hits = 0;");
+g.eval("(" + function () {
+ var a = [];
+ var dbg = Debugger(debuggeeGlobal);
+ dbg.onDebuggerStatement = function (frame) {
+ var loc = debuggeeGlobal.loc;
+ a[loc] = frame;
+ for (var i = 0; i < a.length; i++) {
+ assertEq(a[i] === frame, i === loc);
+ assertEq(!!(a[i] && a[i].onStack), i >= loc);
+ }
+ hits++;
+ };
+ } + ")()");
+
+function f(n) {
+ loc = n; debugger;
+ if (n !== 0) {
+ f(n - 1);
+ loc = n; debugger;
+ eval("f(n - 1);");
+ loc = n; debugger;
+ }
+}
+
+f(4);
+assertEq(g.hits, 16 + 8*3 + 4*3 + 2*3 + 1*3);
+