blob: d19ab2e183c68afd7cb337cf1371ad170d574f40 [file] [log] [blame]
fpizlo@apple.com45e45652016-01-07 21:20:37 +00001function foo(o, p) {
2 var x = 100;
3 var result = 101;
4 x = 102;
5 p = 103;
6 result = o.f;
7 o = 104;
8 p = 105;
9 x = 106;
10 return {outcome: "return", values: [o, p, x, result]};
11}
12
13noInline(foo);
14
15// Warm up foo() with polymorphic objects.
16for (var i = 0; i < 100000; ++i) {
17 var o;
18 o = {f:107};
19 o["i" + i] = i; // Make it polymorphic.
20 var result = foo(o);
21 if (result.outcome !== "return")
22 throw "Error in loop: bad outcome: " + result.outcome;
23 if (result.values.length !== 4)
24 throw "Error in loop: bad number of values: " + result.values.length;
25 if (result.values[0] !== 104)
26 throw "Error in loop: bad values[0]: " + result.values[0];
27 if (result.values[1] !== 105)
28 throw "Error in loop: bad values[1]: " + result.values[1];
29 if (result.values[2] !== 106)
30 throw "Error in loop: bad values[2]: " + result.values[2];
31 if (result.values[3] !== 107)
32 throw "Error in loop: bad values[3]: " + result.values[3];
33}
34
35// Now throw an exception.
36var result;
37try {
38 var o = {};
39 o.__defineGetter__("f", function() {
40 throw "Error42";
41 });
42 result = foo(o, 108);
43} catch (e) {
44 if (e != "Error42")
45 throw "Error at end: bad exception: " + e;
46 result = {outcome: "exception"};
47}
48if (result.outcome !== "exception")
49 throw "Error at end: bad outcome: " + result.outcome;