Add (read), improve error reporting
diff --git a/src/lisp/lisp.c b/src/lisp/lisp.c
index e151670..e87b9d1 100644
--- a/src/lisp/lisp.c
+++ b/src/lisp/lisp.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
struct alloc *first_a = NULL, *last_a = NULL;
@@ -20,6 +21,22 @@
exit(1);
}
+__attribute__((noreturn)) void err_at(value_t form, const char *msg, ...)
+{
+ int line = cons_line(form);
+ char *file = cons_file(form);
+
+ fprintf(stderr, "\033[31merror at\033[0m %s:%d\n", file, line);
+
+ va_list list;
+ va_start(list, msg);
+ vfprintf(stderr, msg, list);
+ va_end(list);
+ fprintf(stderr, "\n");
+
+ exit(1);
+}
+
value_t intval(int i)
{
i <<= 2;
@@ -186,6 +203,7 @@
}
else
{
+ s[i] = '\0';
is->get(is);
*val = (value_t)s;