+fn execute(self: *Interpreter, stmt: *const Stmt, err_payload: *ErrorPayload) !void {
+ try switch (stmt.*) {
+ .print => |print| self.visitPrintStmt(print, err_payload),
+ .expression => |expression| self.visitExpressionStmt(expression, err_payload),
+ };
+}
+
+fn visitExpressionStmt(self: *Interpreter, stmt: Stmt.Expression, err_payload: *ErrorPayload) !void {
+ _ = try self.evaluate(stmt.expression, err_payload);
+}
+
+fn visitPrintStmt(self: *Interpreter, stmt: Stmt.Print, err_payload: *ErrorPayload) !void {
+ const value = try self.evaluate(stmt.expression, err_payload);
+ try self.stdout.print("{s}\n", .{try self.stringify(value)});
+}
+