Object-defineProperty-non-primitive-key.js (780B)
1 var g = newGlobal({newCompartment: true}); 2 var dbg = new Debugger(g); 3 var gw = dbg.addDebuggee(g); 4 5 g.eval(` 6 var obj = { 7 p: 0, 8 [Symbol.iterator]: 0, 9 }; 10 `); 11 12 // Return |key| as an object. 13 function toObject(key) { 14 return { 15 [Symbol.toPrimitive]() { 16 return key; 17 } 18 }; 19 } 20 21 let obj = gw.getProperty("obj").return; 22 23 for (let key of obj.getOwnPropertyNames()) { 24 let keyObject = toObject(key); 25 26 obj.defineProperty(key, {value: 1}); 27 assertEq(g.obj[key], 1); 28 29 obj.defineProperty(keyObject, {value: 1}); 30 assertEq(g.obj[key], 1); 31 } 32 33 for (let key of obj.getOwnPropertySymbols()) { 34 let keyObject = toObject(key); 35 36 obj.defineProperty(key, {value: 1}); 37 assertEq(g.obj[key], 1); 38 39 obj.defineProperty(keyObject, {value: 1}); 40 assertEq(g.obj[key], 1); 41 }