sclass VarContext { VarContext parent; MapSO vars; *() {} *(VarContext *parent) {} O get(S name) { if (containsKey(vars, name)) ret mapGet(vars, name); if (parent != null) ret parent.get(name); null; } void set(S name, O value) { vars = mapPutOrCreate(vars, name, value); } }