blob: 8650900dcc857adedbcf0878829c657c9254db89 [file] [log] [blame]
function assert(b, m) {
if (!b)
throw new Error(m);
}
function test(f, iters = 1000) {
noInline(f);
for (let i = 0; i < iters; i++)
f(i);
}
const globalConst = {};
class GlobalClass { }
let globalLet = {};
let f = new Function("", "return globalConst;");
test(function() {
assert(f() === globalConst);
});
f = new Function("", "return GlobalClass;");
test(function() {
let ctor = f();
assert(ctor === GlobalClass);
assert((new GlobalClass) instanceof GlobalClass);
});
f = new Function("", "return globalLet;");
test(function() {
assert(f() === globalLet);
});
f = new Function("prop", "x", "globalLet[prop] = x;");
test(function(i) {
f(i, i);
assert(globalLet[i] === i);
});
f = new Function("prop", "x", "globalConst[prop] = x;");
test(function(i) {
f(i, i);
assert(globalConst[i] === i);
});
f = new Function("", "globalConst = 25");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: Attempted to assign to readonly property.")
}
assert(threw);
});
f = new Function("", "globalConst = 25");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: Attempted to assign to readonly property.")
}
assert(threw);
});
f = new Function("", "constTDZ = 25");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "ReferenceError: Cannot access uninitialized variable.")
}
assert(threw);
});
f = new Function("", "constTDZ;");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "ReferenceError: Cannot access uninitialized variable.")
}
assert(threw);
});
f = new Function("", "letTDZ;");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "ReferenceError: Cannot access uninitialized variable.")
}
assert(threw);
});
f = new Function("", "letTDZ = 20;");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "ReferenceError: Cannot access uninitialized variable.")
}
assert(threw);
});
f = new Function("", "ClassTDZ");
test(function() {
let threw = false;
try {
f();
} catch(e) {
threw = true;
assert(e.toString() === "ReferenceError: Cannot access uninitialized variable.")
}
assert(threw);
});
const constTDZ = 25;
let letTDZ = 25;
class ClassTDZ { }