blob: c506df46e4c73a9756126615037602d564a11a5c [file] [edit]
var err = new Error();
err.e = "foo";
function assert(x) {
if (!x)
throw new Error("Bad assertion!");
}
function shouldThrow(func, errorMessage) {
let error;
try {
func();
} catch (e) {
error = e;
}
if (!error)
throw new Error(`Didn't throw!`);
if (String(error) !== errorMessage)
throw new Error(`Bad error: ${error}`);
}
(function() {
var e = 1;
try {
throw err;
} catch (e) {
eval(`function e() { return 1; }`); // no error
assert(e === err);
}
assert(e() === 1);
})();
(function() {
var e = 1;
try {
throw err;
} catch (e) {
eval(`if (true) { function e() { return 1; } }`); // no error
assert(e === err);
}
assert(e() === 1);
})();
(function() {
var e = 1;
try {
throw err;
} catch ({e}) {
eval(`if (true) { function e() { return 1; } }`); // no error
assert(e === "foo");
}
assert(e === 1);
})();
shouldThrow(function() {
var e = 2;
try {
throw err;
} catch ({e}) {
eval(`function e() { return 1; }`); // syntax error
}
}, "SyntaxError: Can't create duplicate variable in eval: 'e'");
shouldThrow(function() {
var e = 2;
try {
throw err;
} catch ({e}) {
eval(`var e = 1;`); // syntax error
}
}, "SyntaxError: Can't create duplicate variable in eval: 'e'");
shouldThrow(function() {
try {
throw err;
} catch ({...e}) {
eval(`var e;`); // syntax error
}
}, "SyntaxError: Can't create duplicate variable in eval: 'e'");