// The script and environment of a non-debuggee function are null.

var g = newGlobal();
g.eval('function f() { return "from f"; }');

var dbg = new Debugger;
var gw = dbg.makeGlobalObjectReference(g);
var fw = gw.getOwnPropertyDescriptor('f').value;

// g is not a debuggee, so we can't fetch f's script or environment.
assertEq(fw.script, null);
assertEq(fw.environment, null);

// If we add g as a debuggee, we can fetch f's script and environment.
dbg.addDebuggee(g);
var fscript = fw.script;
var fenv = fw.environment;
assertEq(fscript instanceof Debugger.Script, true);
assertEq(fenv instanceof Debugger.Environment, true);

// Removing g as a debuggee makes the script and environment inaccessible again.
dbg.removeDebuggee(g);
assertEq(fw.script, null);
assertEq(fw.environment, null);