Add eval
This commit is contained in:
+20
-8
@@ -22,14 +22,14 @@ void *lisp_alloc_object(size_t size, LispValType type) {
|
||||
LispObject *obj = lisp_aligned_alloc(LISP_OBJECT_ALIGNMENT, size);
|
||||
obj->type = type;
|
||||
obj->gc.mark = false;
|
||||
obj->gc.local_ref_count = 0;
|
||||
obj->gc.has_local_ref = false;
|
||||
// TODO set the below
|
||||
obj->gc.entry = NULL;
|
||||
return obj;
|
||||
}
|
||||
|
||||
void signal_type_error(LispVal *obj, size_t count,
|
||||
const LispValType types[count]) {
|
||||
void internal_CHECK_TYPE_signal_type_error(LispVal *obj, size_t count,
|
||||
const LispValType types[count]) {
|
||||
// TODO actually throw an error
|
||||
fprintf(stderr, "Type error! Got: %s | Expected: (or ",
|
||||
LISP_TYPE_NAMES[TYPE_OF(obj)]);
|
||||
@@ -40,15 +40,19 @@ void signal_type_error(LispVal *obj, size_t count,
|
||||
abort();
|
||||
}
|
||||
|
||||
noreturn void signal_type_error(LispVal *obj, LispVal *typespec) {
|
||||
// TODO actually throw an error
|
||||
fprintf(stderr,
|
||||
"Type error! Got: %s | Expected: ", LISP_TYPE_NAMES[TYPE_OF(obj)]);
|
||||
debug_print(stderr, typespec);
|
||||
fputc('\n', stderr);
|
||||
abort();
|
||||
}
|
||||
|
||||
DEFINE_SYMBOL(nil, "nil");
|
||||
DEFINE_SYMBOL(t, "t");
|
||||
DEFINE_SYMBOL(unbound, "unbound");
|
||||
|
||||
DEFINE_SYMBOL(quote, "quote");
|
||||
DEFINE_SYMBOL(backquote, "`");
|
||||
DEFINE_SYMBOL(comma, ",");
|
||||
DEFINE_SYMBOL(comma_at, ",@");
|
||||
|
||||
DEFUN(id, "id", (LispVal * obj), "(id)", "") {
|
||||
// TODO not all values are handled here
|
||||
return MAKE_FIXNUM((uintptr_t) obj);
|
||||
@@ -58,6 +62,10 @@ DEFUN(eq, "eq", (LispVal * obj1, LispVal *obj2), "(obj1 obj2)", "") {
|
||||
return obj1 == obj2 ? Qt : Qnil;
|
||||
}
|
||||
|
||||
DEFSPECIAL(quote, "quote", (LispVal * form), "(form)", "") {
|
||||
return form;
|
||||
}
|
||||
|
||||
// ################
|
||||
// # Constructors #
|
||||
// ################
|
||||
@@ -109,3 +117,7 @@ DEFUN(symbol_function, "symbol-function", (LispVal * sym, LispVal *resolve),
|
||||
}
|
||||
return sym;
|
||||
}
|
||||
|
||||
DEFINE_SYMBOL(backquote, "`");
|
||||
DEFINE_SYMBOL(comma, ",");
|
||||
DEFINE_SYMBOL(comma_at, ",@");
|
||||
|
||||
Reference in New Issue
Block a user