envChain_object-executeInGlobal.js (1414B)
1 // Verify the environment chain for Debugger.Object described in 2 // js/src/vm/EnvironmentObject.h. 3 4 const g = newGlobal({newCompartment: true}); 5 const dbg = new Debugger(); 6 const gw = dbg.addDebuggee(g); 7 8 const envs = JSON.parse(gw.executeInGlobal(` 9 var qualified = 10; 10 unqualified = 20; 11 let lexical = 30; 12 this.prop = 40; 13 14 const envs = []; 15 let env = getInnerMostEnvironmentObject(); 16 while (env) { 17 envs.push({ 18 type: getEnvironmentObjectType(env) || "*global*", 19 qualified: !!Object.getOwnPropertyDescriptor(env, "qualified"), 20 unqualified: !!Object.getOwnPropertyDescriptor(env, "unqualified"), 21 lexical: !!Object.getOwnPropertyDescriptor(env, "lexical"), 22 prop: !!Object.getOwnPropertyDescriptor(env, "prop"), 23 }); 24 25 env = getEnclosingEnvironmentObject(env); 26 } 27 JSON.stringify(envs); 28 `).return); 29 30 assertEq(envs.length, 2); 31 32 let i = 0, env; 33 34 env = envs[i]; i++; 35 assertEq(env.type, "GlobalLexicalEnvironmentObject"); 36 assertEq(env.qualified, false); 37 assertEq(env.unqualified, false); 38 assertEq(env.lexical, true, "lexical must live in the GlobalLexicalEnvironmentObject"); 39 assertEq(env.prop, false); 40 41 env = envs[i]; i++; 42 assertEq(env.type, "*global*"); 43 assertEq(env.qualified, true, "qualified var must live in the global"); 44 assertEq(env.unqualified, true, "unqualified name must live in the global"); 45 assertEq(env.lexical, false); 46 assertEq(env.prop, true, "this property must live in the global");