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