#ifndef INTERPRETER_H_ #define INTERPRETER_H_ #include #include #include #include "expr.h" struct Scope; struct Gc; struct EvalResult eval_success(struct Expr expr); struct EvalResult eval_failure(struct Expr expr); struct EvalResult wrong_argument_type(Gc *gc, const char *type, struct Expr obj); struct EvalResult wrong_number_of_arguments(Gc *gc, long int count); struct EvalResult not_implemented(Gc *gc); struct EvalResult car(void *param, Gc *gc, struct Scope *scope, struct Expr args); struct EvalResult eval(Gc *gc, struct Scope *scope, struct Expr expr); struct EvalResult eval_block(Gc *gc, struct Scope *scope, struct Expr block); struct EvalResult match_list(struct Gc *gc, const char *format, struct Expr args, ...); struct Expr format_list(Gc *gc, const char *format, ...); #endif // INTERPRETER_H_