Source code

Revision control

Copy as Markdown

Other Tools

/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/*
* Any copyright is dedicated to the Public Domain.
*/
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);