michael@0: // Exceptions thrown by obj.defineProperties are copied into the debugger compartment. michael@0: michael@0: var g = newGlobal(); michael@0: var dbg = new Debugger; michael@0: var gw = dbg.addDebuggee(g); michael@0: michael@0: function test(objexpr, descs) { michael@0: var exca, excb; michael@0: michael@0: g.eval("obj = (" + objexpr + ");"); michael@0: var gobjw = gw.getOwnPropertyDescriptor("obj").value; michael@0: try { michael@0: gobjw.defineProperties(descs); michael@0: } catch (exc) { michael@0: exca = exc; michael@0: } michael@0: michael@0: var indirectEval = eval; michael@0: var obj = indirectEval("(" + objexpr + ");"); michael@0: try { michael@0: Object.defineProperties(obj, descs); michael@0: } catch (exc) { michael@0: excb = exc; michael@0: } michael@0: michael@0: assertEq(Object.getPrototypeOf(exca), Object.getPrototypeOf(excb)); michael@0: assertEq(exca.message, excb.message); michael@0: assertEq(typeof exca.fileName, "string"); michael@0: assertEq(typeof exca.stack, "string"); michael@0: } michael@0: michael@0: test("Object.create(null, {p: {value: 1}})", {p: {value: 2}}); michael@0: test("({})", {x: {get: 'bad'}});