michael@0: // setVariable can create a new property on a with block's bindings object, if michael@0: // it is shadowing an existing property on the prototype chain. michael@0: michael@0: var g = newGlobal(); michael@0: var dbg = Debugger(g); michael@0: dbg.onDebuggerStatement = function (frame) { michael@0: var env = frame.environment.find("x"); michael@0: env.setVariable("x", 2); michael@0: }; michael@0: g.eval("var obj1 = {x: 1}, obj2 = Object.create(obj1), z; with (obj2) { debugger; z = x; }"); michael@0: assertEq(g.obj1.x, 1); michael@0: assertEq(g.obj2.x, 2); michael@0: assertEq(g.z, 2); michael@0: michael@0: // The property created by setVariable is like the one created by ordinary michael@0: // assignment in a with-block. michael@0: var desc = Object.getOwnPropertyDescriptor(g.obj2, "x"); michael@0: assertEq(desc.configurable, true); michael@0: assertEq(desc.enumerable, true); michael@0: assertEq(desc.writable, true); michael@0: assertEq(desc.value, 2);