40 lines
606 B
JavaScript
40 lines
606 B
JavaScript
//@ runBigIntEnabled
|
|
|
|
function assert(a, e) {
|
|
if (a !== e)
|
|
throw new Error("Bad!");
|
|
}
|
|
|
|
function foo(o) {
|
|
let c;
|
|
do {
|
|
|
|
let a = 2 * o;
|
|
o.bigInt = true;
|
|
let b = 1n * o;
|
|
for (let i = 0; i < 10000; i++) {
|
|
c = i;
|
|
}
|
|
|
|
let d = b * o;
|
|
c = a * d;
|
|
} while(false);
|
|
}
|
|
noInline(foo);
|
|
|
|
let o = {
|
|
valueOf: function () {
|
|
return this.bigInt ? 2n : 2;
|
|
}
|
|
}
|
|
|
|
for (let i = 0; i < 1000; i++) {
|
|
try {
|
|
o.bigInt = false;
|
|
foo(o);
|
|
} catch(e) {
|
|
assert(e instanceof TypeError, true);
|
|
}
|
|
}
|
|
|