summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-eval-20.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Frame-eval-20.js')
-rw-r--r--js/src/jit-test/tests/debug/Frame-eval-20.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Frame-eval-20.js b/js/src/jit-test/tests/debug/Frame-eval-20.js
new file mode 100644
index 000000000..4622e5a8a
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Frame-eval-20.js
@@ -0,0 +1,46 @@
+// Eval-in-frame with different type on non-youngest Ion frame.
+
+load(libdir + "jitopts.js");
+
+if (!jitTogglesMatch(Opts_Ion2NoOffthreadCompilation))
+ quit(0);
+
+withJitOptions(Opts_Ion2NoOffthreadCompilation, function () {
+ function test(shadow) {
+ var g = newGlobal();
+ var dbg = new Debugger;
+
+ // Note that we depend on CCW scripted functions being opaque to Ion
+ // optimization for this test.
+ g.h = function h(d) {
+ if (d) {
+ dbg.addDebuggee(g);
+ var f = dbg.getNewestFrame().older;
+ assertEq(f.implementation, "ion");
+ assertEq(f.environment.getVariable("foo"), 42);
+
+ // EIF of a different type too.
+ f.eval((shadow ? "var " : "") + "foo = 'string of 42'");
+ g.expected = shadow ? 42 : "string of 42";
+ }
+ }
+
+ g.eval("" + function f(d) {
+ var foo = 42;
+ g(d);
+ return foo;
+ });
+ g.eval("" + function g(d) {
+ h(d);
+ });
+
+ g.eval("(" + function () {
+ for (i = 0; i < 5; i++)
+ f(false);
+ assertEq(f(true), "string of 42");
+ } + ")();");
+ }
+
+ test(false);
+ test(true);
+});