| var shouldThrow = false; |
| |
| // str concat generates op_to_primitive. |
| function toPrimitiveTarget() { |
| if (shouldThrow) { |
| return Symbol('Cocoa'); |
| } |
| return 'Cocoa'; |
| } |
| noInline(toPrimitiveTarget); |
| |
| function doToPrimitive() { |
| var value = toPrimitiveTarget(); |
| return value + "Cappuccino" + value; |
| } |
| noInline(doToPrimitive); |
| |
| for (var i = 0; i < 10000; ++i) { |
| var result = doToPrimitive(); |
| if (result !== "CocoaCappuccinoCocoa") |
| throw "Error: bad result: " + result; |
| } |
| |
| shouldThrow = true; |
| |
| var didThrow; |
| try { |
| shouldThrow = true; |
| doToPrimitive(); |
| } catch (e) { |
| didThrow = e; |
| } |
| |
| if (String(didThrow) !== "TypeError: Cannot convert a symbol to a string") |
| throw "Error: didn't throw or threw wrong exception: " + didThrow; |