summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/pic/callname-global1.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/pic/callname-global1.js')
-rw-r--r--js/src/jit-test/tests/pic/callname-global1.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/pic/callname-global1.js b/js/src/jit-test/tests/pic/callname-global1.js
new file mode 100644
index 0000000000..ed34ec6b2a
--- /dev/null
+++ b/js/src/jit-test/tests/pic/callname-global1.js
@@ -0,0 +1,35 @@
+// Check that the implicit-this logic needed for CALLNAME global stubs
+// handles non-function values correctly.
+var self = this;
+var count = 0;
+function g1() {
+ assertEq(this, self);
+ this.count++;
+}
+function g2() {
+ this.count += 10;
+}
+function f() {
+ function f1(other) {
+ eval("gc(); h = g1");
+ try {
+ for(var i=0; i<20; i++) {
+ h();
+ if (i === 9) {
+ h = other;
+ }
+ }
+ assertEq(typeof other, "function");
+ } catch(e) {
+ assertEq(typeof other !== "function", true);
+ assertEq(e instanceof TypeError, true);
+ }
+ }
+ f1(3);
+ f1(null);
+ f1({});
+ f1(Math.abs);
+ f1(g2);
+}
+f();
+assertEq(count, 150);