| return {outcome: "return", values: [o, p, x]}; |
| // Warm up foo() with polymorphic objects and getters. |
| for (var i = 0; i < 100000; ++i) { |
| o.__defineSetter__("f", function(value) { |
| o["i" + i] = i; // Make it polymorphic. |
| 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]; |
| throw "Error in loop: bad value of o._f: " + o._f; |
| // Now throw an exception. |
| o.__defineSetter__("f", function() { |
| throw "Error at end: bad exception: " + e; |
| result = {outcome: "exception"}; |
| if (result.outcome !== "exception") |
| throw "Error at end: bad outcome: " + result.outcome; |
| throw "Error at end: o has _f"; |