public void Visit(ClassStmt stmt) { _currentEnvironment.Define(stmt.Name.Lexeme, null); var methods = stmt.Methods.Select(m => new { Name = m.Name.Lexeme, Method = new LoxFunctionCallable(m, _currentEnvironment, isInitializer: m.Name.Lexeme.Equals("init")) }).ToDictionary(tuple => tuple.Name, tuple => tuple.Method); var classDefinition = new LoxClass(stmt.Name.Lexeme, methods); _currentEnvironment.Assign(stmt.Name, classDefinition); }
public void Assign(Token name, object value) { if (_state.ContainsKey(name.Lexeme)) { _state[name.Lexeme] = value; return; } if (_enclosingEnvironment != null) { _enclosingEnvironment.Assign(name, value); return; } throw new LoxRuntimeErrorException(name, $"Undefined variable '{name.Lexeme}'"); }