fpizlo@apple.com | 45e4565 | 2016-01-07 21:20:37 +0000 | [diff] [blame] | 1 | function 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 | |
| 13 | noInline(foo); |
| 14 | |
| 15 | // Warm up foo() with polymorphic objects. |
| 16 | for (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. |
| 36 | var result; |
| 37 | try { |
| 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 | } |
| 48 | if (result.outcome !== "exception") |
| 49 | throw "Error at end: bad outcome: " + result.outcome; |