summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/envChain_frame-eval-relazify.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/envChain_frame-eval-relazify.js')
-rw-r--r--js/src/jit-test/tests/debug/envChain_frame-eval-relazify.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/envChain_frame-eval-relazify.js b/js/src/jit-test/tests/debug/envChain_frame-eval-relazify.js
new file mode 100644
index 0000000000..bcdc108b9a
--- /dev/null
+++ b/js/src/jit-test/tests/debug/envChain_frame-eval-relazify.js
@@ -0,0 +1,41 @@
+// |jit-test| skip-if: isLcovEnabled()
+
+function func(doEval) {
+ if (doEval) {
+ const dbg = this.newGlobal({sameZoneAs: {}}).Debugger({});
+ dbg.getNewestFrame().eval(`
+ function reaction() {
+ // Access global variable to walk through the environment chain.
+ return Map;
+ };
+ Promise.resolve(1).then(reaction);
+`);
+ }
+}
+
+assertEq(isLazyFunction(func), true);
+assertEq(isRelazifiableFunction(func), false);
+
+// Delazify here.
+func(false);
+
+// Delazified function should be marked relazifiable.
+assertEq(isLazyFunction(func), false);
+assertEq(isRelazifiableFunction(func), true);
+
+// Perform Frame.prototype.eval
+func(true);
+
+// Frame.prototype.eval should mark the enclosing script non-relazifiable.
+assertEq(isLazyFunction(func), false);
+assertEq(isRelazifiableFunction(func), false);
+
+// This shouldn't relazify `func`.
+relazifyFunctions();
+relazifyFunctions();
+
+assertEq(isLazyFunction(func), false);
+assertEq(isRelazifiableFunction(func), false);
+
+// Execute the inner function to make sure the enclosing script is not lazy.
+drainJobQueue();