| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| */ |
| |
| function strictThis() { 'use strict'; return this; } |
| |
| /* Check that calls of flat closure slots get the right |this|. */ |
| function flat(g) { |
| function h() { return g(); } |
| return h; |
| } |
| assertEq(flat(strictThis)(), undefined); |
| |
| /* Check that calls up upvars get the right |this|. */ |
| function upvar(f) { |
| function h() { |
| return f(); |
| } |
| return h(); |
| } |
| assertEq(upvar(strictThis), undefined); |
| |
| /* Check that calls to with-object properties get an appropriate 'this'. */ |
| var obj = { f: strictThis }; |
| with (obj) { |
| /* |
| * The method won't compile anything containing a 'with', but it can |
| * compile 'g'. |
| */ |
| function g() { return f(); } |
| assertEq(g(), obj); |
| } |
| |
| reportCompare(true, true); |