public object VisitClassStmt(Stmt.ClassDefinition stmt, object options = null) { var previousTypeTable = SymbolTable.Types; SymbolTable.Types = AddSymbolDefinition(stmt.token.lexeme, null, AccessModifier.Public, false, new Token[] { stmt.token }); foreach (Stmt.Var memb in stmt.members) { memb.Accept(this, new Options { InClassDefinition = true }); } foreach (Stmt.Function method in stmt.methods) { method.Accept(this, new Options { InClassDefinition = true }); } SymbolTable.Types = previousTypeTable; return(null); }
public object VisitClassStmt(Stmt.ClassDefinition obj, object options) { StringBuilder builder = new(); builder.Append($"({obj.token.lexeme}: "); List <string> memberStr = new(); foreach (Stmt.Var memb in obj.members) { memberStr.Add((string)memb.Accept(this, null)); } builder.Append(Parenthesize2("members: ", memberStr.ToArray())); List <string> methodStr = new(); foreach (Stmt.Function memb in obj.methods) { methodStr.Add((string)memb.Accept(this, null)); } builder.Append(Parenthesize2("methods:", methodStr.ToArray())); builder.Append(')'); return(builder.ToString()); }