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)
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
function foo(o, p) {
|
|
var x = 100;
|
|
var result = 101;
|
|
try {
|
|
x = 102;
|
|
p = 103;
|
|
o.f = x + p;
|
|
o = 104;
|
|
p = 105;
|
|
x = 106;
|
|
} catch (e) {
|
|
return {outcome: "exception", values: [o, p, x]};
|
|
}
|
|
return {outcome: "return", values: [o, p, x]};
|
|
}
|
|
|
|
noInline(foo);
|
|
|
|
// Warm up foo() with polymorphic objects and getters.
|
|
for (var i = 0; i < 100000; ++i) {
|
|
var o = {};
|
|
o.__defineSetter__("f", function(value) {
|
|
this._f = value;
|
|
});
|
|
if (i & 1)
|
|
o["i" + i] = i; // Make it polymorphic.
|
|
var result = foo(o);
|
|
if (result.outcome !== "return")
|
|
throw "Error in loop: bad outcome: " + result.outcome;
|
|
if (result.values.length !== 3)
|
|
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] !== 105)
|
|
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 (o._f != 102 + 103)
|
|
throw "Error in loop: bad value of o._f: " + o._f;
|
|
}
|
|
|
|
// Now throw an exception.
|
|
var o = {};
|
|
o.__defineSetter__("f", function() {
|
|
throw "Error42";
|
|
});
|
|
var result = foo(o, 108);
|
|
if (result.outcome !== "exception")
|
|
throw "Error at end: bad outcome: " + result.outcome;
|
|
if (result.values.length !== 3)
|
|
throw "Error at end: bad number of values: " + result.values.length;
|
|
if (result.values[0] !== o)
|
|
throw "Error at end: bad values[0]: " + result.values[0];
|
|
if (result.values[1] !== 103)
|
|
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 ("_f" in o)
|
|
throw "Error at end: o has _f.";
|
|
|