This commit is contained in:
2026-01-20 01:23:52 -08:00
parent 243a012d3e
commit 4c04e71078
11 changed files with 145 additions and 33 deletions
+20 -8
View File
@@ -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, ",@");