test262/implementation-contributed/javascriptcore/stress/ftl-call-exception-interesting-live-state.js
test262-automation e9a5a7f918 [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) (#1620)
* [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)
2018-07-03 15:59:58 -04:00

61 lines
1.7 KiB
JavaScript

function foo(f, p) {
var x = 100;
var result = 101;
var pf = p.g;
try {
x = 102;
pf++;
result = f();
f = 104;
pf++;
x = 106;
} catch (e) {
return {outcome: "exception", values: [f, pf, x, result]};
}
return {outcome: "return", values: [f, pf, x, result]};
}
noInline(foo);
function bar() {
return 107;
}
noInline(bar);
// Warm up foo().
for (var i = 0; i < 100000; ++i) {
var result = foo(bar, {g:200});
if (result.outcome !== "return")
throw "Error in loop: bad outcome: " + result.outcome;
if (result.values.length !== 4)
throw "Error in loop: bad number of values: " + result.values.length;
if (result.values[0] !== 104)
throw "Error in loop: bad values[0]: " + result.values[0];
if (result.values[1] !== 202)
throw "Error in loop: bad values[1]: " + result.values[1];
if (result.values[2] !== 106)
throw "Error in loop: bad values[2]: " + result.values[2];
if (result.values[3] !== 107)
throw "Error in loop: bad values[3]: " + result.values[3];
}
// Now throw an exception.
bar = function() {
throw "Error42";
}
var result = foo(bar, {g:300});
if (result.outcome !== "exception")
throw "Error at end: bad outcome: " + result.outcome;
if (result.values.length !== 4)
throw "Error at end: bad number of values: " + result.values.length;
if (result.values[0] !== bar)
throw "Error at end: bad values[0]: " + result.values[0];
if (result.values[1] !== 301)
throw "Error at end: bad values[1]: " + result.values[1];
if (result.values[2] !== 102)
throw "Error at end: bad values[2]: " + result.values[2];
if (result.values[3] !== 101)
throw "Error at end: bad values[3]: " + result.values[3];