| // 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); |