/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var obj = {} function strict() { "use strict"; return this; } assertEq(strict.call(""), ""); assertEq(strict.call(true), true); assertEq(strict.call(42), 42); assertEq(strict.call(null), null); assertEq(strict.call(undefined), undefined); assertEq(strict.call(obj), obj); assertEq(new strict() instanceof Object, true); /* * The compiler internally converts x['foo'] to x.foo. Writing x[s] where * s='foo' is enough to throw it off the scent for now. */ var strictString = 'strict'; Boolean.prototype.strict = strict; assertEq(true.strict(), true); assertEq(true[strictString](), true); Number.prototype.strict = strict; assertEq((42).strict(), 42); assertEq(42[strictString](), 42); String.prototype.strict = strict; assertEq("".strict(), ""); assertEq(""[strictString](), ""); function lenient() { return this; } assertEq(lenient.call("") instanceof String, true); assertEq(lenient.call(true) instanceof Boolean, true); assertEq(lenient.call(42) instanceof Number, true); assertEq(lenient.call(null), this); assertEq(lenient.call(undefined), this); assertEq(lenient.call(obj), obj); assertEq(new lenient() instanceof Object, true); var lenientString = 'lenient'; Boolean.prototype.lenient = lenient; assertEq(true.lenient() instanceof Boolean, true); assertEq(true[lenientString]() instanceof Boolean, true); Number.prototype.lenient = lenient; assertEq(42[lenientString]() instanceof Number, true); String.prototype.lenient = lenient; assertEq(""[lenientString]() instanceof String, true); reportCompare(true, true);