sclass VarContext { gettable VarContext parent; *() {} *(VarContext *parent) {} abstract O get(S name); abstract void set aka put(S name, O value); abstract AutoCloseable tempSet aka tempPut(S name, O value); // either undefines variable completely or just sets variable to null abstract void unset(S name); abstract MapSO varMap(); void printMe { pnl(varMap()); print(+parent); } // mechanism for returning from a script settable O exitFromScript; settable O returnValue; bool exiting() { ping(); ret exitFromScript != null; } }