private object LookUpVariable(Token name, Expr expr) { if (locals.TryGetValue(expr, out int distance)) { return(environment.GetAt(distance, name.Lexeme)); } else { return(Globals.Get(name)); } }
public object Get(Token name) { if (values.TryGetValue(name.Lexeme, out object value)) { return(value); } if (Enclosing != null) { return(Enclosing.Get(name)); } throw new RuntimeException(name, $"Undefined variable '{name.Lexeme}'."); }