var g = newGlobal({newCompartment: true});
var dbg = new Debugger(g);
// We're going to need to eval with a thrown exception from inside
// onExceptionUnwind, so guard against infinite recursion.
var exceptionCount = 0;
dbg.onDebuggerStatement = function (frame) {
    var x = frame.evalWithBindings("throw 'haha'", { rightSpelling: 4 }).throw;
    assertEq(x, "haha");
};
dbg.onExceptionUnwind = function (frame, exc) {
    ++exceptionCount;
    if (exceptionCount == 1) {
	var y = frame.evalWithBindings("throw 'haha2'", { rightSpelling: 2 }).throw;
	assertEq(y, "haha2");
    } else {
	assertEq(frame.evalWithBindings("rightSpelling + three", { three : 3 }).return, 5);
    }
};
g.eval("(function () { var rightSpelling = 7; debugger; })();");
assertEq(exceptionCount, 2);
