blob: b2165d0cce2de68c7ef141b63741e56bf40eae77 [file] [log] [blame]
load(libdir + "asserts.js");
var valid_strict_funs = [
// directive ends on next line
function () {
"use strict"
;
},
function () {
"use strict"
},
// directive ends on same line
function () { "use strict"; },
function () { "use strict" },
];
for (var f of valid_strict_funs) {
assertThrowsInstanceOf(function() { f.caller }, TypeError);
}
var binary_ops = [
"||", "&&",
"|", "^", "&",
"==", "!=", "===", "!==",
"<", "<=", ">", ">=", "in", "instanceof",
"<<", ">>", ">>>",
"+", "-",
"*", "/", "%",
];
var invalid_strict_funs = [
function () {
"use strict"
, "not";
},
function () {
"use strict"
? 1 : 0;
},
function () {
"use strict"
.length;
},
function () {
"use strict"
[0];
},
function () {
"use strict"
();
},
...([]),
...[Function("'use strict'\n " + op + " 'not'") for (op of binary_ops)],
];
for (var f of invalid_strict_funs) {
f.caller;
}
var assignment_ops = [
"=", "+=", "-=",
"|=", "^=", "&=",
"<<=", ">>=", ">>>=",
"*=", "/=", "%=",
];
var invalid_strict_funs_referror = [
...[("'use strict'\n " + op + " 'not'") for (op of assignment_ops)],
];
// assignment with string literal as LHS is an early error, therefore we
// can only test for ReferenceError
for (var f of invalid_strict_funs_referror) {
assertThrowsInstanceOf(function() { Function(f) }, ReferenceError);
}