summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/basic/function-gname.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/basic/function-gname.js')
-rw-r--r--js/src/jit-test/tests/basic/function-gname.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/basic/function-gname.js b/js/src/jit-test/tests/basic/function-gname.js
new file mode 100644
index 000000000..851ca6be2
--- /dev/null
+++ b/js/src/jit-test/tests/basic/function-gname.js
@@ -0,0 +1,49 @@
+function bytecode(f) {
+ if (typeof disassemble !== "function")
+ return "unavailable";
+ var d = disassemble(f);
+ return d.slice(d.indexOf("main:"), d.indexOf("\n\n"));
+}
+
+function hasGname(f, v) {
+ // Do a try-catch that prints the full stack, so we can tell
+ // _which_ part of this test failed.
+ try {
+ var b = bytecode(f);
+ if (b != "unavailable") {
+ assertEq(b.includes(`getgname "${v}"`), true);
+ assertEq(b.includes(`getname "${v}"`), false);
+ }
+ } catch (e) {
+ print(e.stack);
+ throw e;
+ }
+}
+
+var x = "outer";
+
+var f1 = new Function("assertEq(x, 'outer')");
+f1();
+hasGname(f1, 'x');
+
+setLazyParsingDisabled(true);
+var f2 = new Function("assertEq(x, 'outer')");
+f2();
+hasGname(f2, 'x');
+setLazyParsingDisabled(false);
+
+{
+ let x = "inner";
+ var f3 = new Function("assertEq(x, 'outer')");
+ f3();
+ hasGname(f3, 'x');
+}
+
+setLazyParsingDisabled(true);
+{
+ let x = "inner";
+ var f4 = new Function("assertEq(x, 'outer')");
+ f4();
+ hasGname(f4, 'x');
+}
+setLazyParsingDisabled(false);