| // After an implicit toString call throws an exception, the calling frame's |
| // onStep hook fires. |
| |
| var g = newGlobal(); |
| g.eval("var x = {toString: function () { debugger; log += 'x'; throw 'mud'; }};"); |
| |
| var dbg = Debugger(g); |
| dbg.onDebuggerStatement = function (frame) { |
| g.log += 'd'; |
| frame.older.onStep = function () { |
| if (!g.log.match(/[sy]$/)) |
| g.log += 's'; |
| }; |
| }; |
| |
| g.log = ''; |
| g.eval("try { x + ''; } catch (x) { }\n" + |
| "log += 'y';\n"); |
| assertEq(g.log, "dxsy"); |
| |
| g.log = ''; |
| g.eval("try { '' + x; } catch (x) { }\n" + |
| "log += 'y';\n"); |
| assertEq(g.log, "dxsy"); |