package evaluator import ( "monkey/ast" "monkey/object" ) func Eval(node ast.Node) object.Object { switch node := node.(type) { // Statements case *ast.Program: return eval_statements(node.Statements) case *ast.ExpressionStatement: return Eval(node.Expression) // Expressions case *ast.IntegerLiteral: return &object.Integer{Value: node.Value} } return nil } func eval_statements(statements []ast.Statement) object.Object { var result object.Object for _, statement := range statements { result = Eval(statement) } return result }