// setVariable can create a new property on a with block's bindings object, if
// it is shadowing an existing property on the prototype chain.

var g = newGlobal();
var dbg = Debugger(g);
dbg.onDebuggerStatement = function (frame) {
    var env = frame.environment.find("x");
    env.setVariable("x", 2);
};
g.eval("var obj1 = {x: 1}, obj2 = Object.create(obj1), z; with (obj2) { debugger; z = x; }");
assertEq(g.obj1.x, 1);
assertEq(g.obj2.x, 2);
assertEq(g.z, 2);

// The property created by setVariable is like the one created by ordinary
// assignment in a with-block.
var desc = Object.getOwnPropertyDescriptor(g.obj2, "x");
assertEq(desc.configurable, true);
assertEq(desc.enumerable, true);
assertEq(desc.writable, true);
assertEq(desc.value, 2);
