5 #include "interpreter.h"
9 #define REPL_BUFFER_MAX 1024
11 static struct EvalResult f(Gc *gc, struct Scope *scope, struct Expr args)
16 printf("Hello from C!\n");
18 return eval_success(NIL(gc));
21 char buffer[REPL_BUFFER_MAX + 1];
23 int main(int argc, char *argv[])
29 struct Scope scope = {
33 set_scope_value(gc, &scope, SYMBOL(gc, "f"), NATIVE(gc, f));
38 if (fgets(buffer, REPL_BUFFER_MAX, stdin) == NULL) {
42 printf("Before parse:\t");
45 struct ParseResult parse_result = read_expr_from_string(gc, buffer);
46 if (parse_result.is_error) {
47 print_parse_error(stderr, buffer, parse_result);
50 printf("After parse:\t");
53 struct EvalResult eval_result = eval(gc, &scope, parse_result.expr);
54 printf("After eval:\t");
57 gc_collect(gc, CONS(gc, scope.expr, eval_result.expr));
58 printf("After collect:\t");
62 print_expr_as_sexpr(scope.expr);
65 if (eval_result.is_error) {
69 print_expr_as_sexpr(eval_result.expr);