Builtin function argument parsing

This commit is contained in:
2026-01-19 23:29:14 -08:00
parent c63b104bc6
commit 243a012d3e
11 changed files with 243 additions and 50 deletions
+26
View File
@@ -164,6 +164,12 @@ static ALWAYS_INLINE void internal_CHECK_TYPE(LispVal *obj, size_t count,
} \
struct __ignored
DEFOBJTYPE(String, STRING, STRINGP, {
size_t length;
char *data;
bool owned;
});
DEFOBJTYPE(Symbol, SYMBOL, SYMBOLP, {
LispVal *name; // string
LispVal *function;
@@ -171,6 +177,14 @@ DEFOBJTYPE(Symbol, SYMBOL, SYMBOLP, {
LispVal *plist;
});
static ALWAYS_INLINE bool KEYWORDP(LispVal *val) {
if (!SYMBOLP(val)) {
return false;
}
LispString *sym = (LispString *) ((LispSymbol *) val)->name;
return sym->length && *sym->data == ':';
}
DEFOBJTYPE(Vector, VECTOR, VECTORP, {
size_t length;
LispVal **data;
@@ -205,6 +219,18 @@ DEFOBJTYPE(Vector, VECTOR, VECTORP, {
LispVal *Q##cname; \
LispVal *F##cname cargs
#define REGISTER_GLOBAL_SYMBOL(cname) \
{ \
Q##cname = Fintern(make_lisp_string(internal_Q##cname##_name, \
internal_Q##cname##_name_len, \
false, false)); \
}
#define REGISTER_GLOBAL_FUNCTION(cname) \
{ \
REGISTER_GLOBAL_SYMBOL(cname); \
((LispSymbol *) Q##cname)->function = BUILTIN_FUNCTION_OBJ(cname); \
}
DECLARE_SYMBOL(nil);
DECLARE_SYMBOL(t);
DECLARE_SYMBOL(unbound);