mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
60 lines
1.1 KiB
JavaScript
60 lines
1.1 KiB
JavaScript
function assert(b) {
|
|
if (!b)
|
|
throw new Error("uh oh");
|
|
}
|
|
|
|
let flag = false;
|
|
let o = {
|
|
valueOf() {
|
|
if (flag)
|
|
throw new Error("by by");
|
|
return 13.5;
|
|
}
|
|
};
|
|
noInline(o.valueOf);
|
|
|
|
function baz() { return 1.5; }
|
|
noInline(baz);
|
|
|
|
function foo(x, o) {
|
|
let r = baz();
|
|
try {
|
|
r = x - o - r;
|
|
} catch(e) { }
|
|
return r;
|
|
}
|
|
noInline(foo);
|
|
|
|
let x = 20.5;
|
|
for (let i = 0; i < 10000; i++) {
|
|
assert(foo(x, o) === 5.5);
|
|
}
|
|
flag = true;
|
|
assert(foo(x, o) === 1.5);
|
|
|
|
|
|
function bar(x, o) {
|
|
let caughtException = false;
|
|
var r = null;
|
|
try {
|
|
// This tests aliasing of left/right with result register in a SubGenerator
|
|
// and ensures that the sub will spill the register properly and that we value
|
|
// recover properly.
|
|
r = x - o;
|
|
} catch(e) {
|
|
caughtException = true;
|
|
assert(r === null);
|
|
}
|
|
if (!caughtException)
|
|
assert(r === 7);
|
|
return caughtException;
|
|
}
|
|
noInline(bar);
|
|
|
|
flag = false;
|
|
for (let i = 0; i < 10000; i++) {
|
|
assert(bar(x, o) === false);
|
|
}
|
|
flag = true;
|
|
assert(bar(x, o) === true);
|