michael@0: // Any copyright is dedicated to the Public Domain. michael@0: // http://creativecommons.org/licenses/publicdomain/ michael@0: michael@0: var a = 9; michael@0: michael@0: function directArg(eval, s) { michael@0: var a = 1; michael@0: return eval(s); michael@0: } michael@0: michael@0: function directVar(f, s) { michael@0: var eval = f; michael@0: var a = 1; michael@0: return eval(s); michael@0: } michael@0: michael@0: function directWith(obj, s) { michael@0: var f; michael@0: with (obj) { michael@0: f = function () { michael@0: var a = 1; michael@0: return eval(s); michael@0: }; michael@0: } michael@0: return f(); michael@0: } michael@0: michael@0: // direct eval, even though 'eval' is an argument michael@0: assertEq(directArg(eval, 'a+1'), 2); michael@0: michael@0: // direct eval, even though 'eval' is a var michael@0: assertEq(directVar(eval, 'a+1'), 2); michael@0: michael@0: // direct eval, even though 'eval' is found via a with block michael@0: assertEq(directWith(this, 'a+1'), 2); michael@0: assertEq(directWith({eval: eval, a: -1000}, 'a+1'), 2); michael@0: michael@0: reportCompare(0, 0);