Environment-names-02.js (991B)
1 // env.names() on object environments ignores property names that are not identifiers. 2 3 var g = newGlobal({newCompartment: true}); 4 var dbg = Debugger(g); 5 var withNames, globalNames; 6 g.h = function () { 7 var env = dbg.getNewestFrame().environment; 8 withNames = env.names(); 9 while (env.parent !== null) 10 env = env.parent; 11 globalNames = env.names(); 12 }; 13 14 g.eval("" + 15 function fill(obj) { 16 obj.sanityCheck = 1; 17 obj["0xcafe"] = 2; 18 obj[" "] = 3; 19 obj[""] = 4; 20 obj[0] = 5; 21 obj[Symbol.for("moon")] = 6; 22 return obj; 23 }) 24 g.eval("fill(this);\n" + 25 "with (fill({})) h();"); 26 27 for (var names of [withNames, globalNames]) { 28 assertEq(names.indexOf("sanityCheck") !== -1, true); 29 assertEq(names.indexOf("0xcafe"), -1); 30 assertEq(names.indexOf(" "), -1); 31 assertEq(names.indexOf(""), -1); 32 assertEq(names.indexOf("0"), -1); 33 assertEq(names.indexOf(Symbol.for("moon")), -1); 34 }