Builtin function argument parsing
This commit is contained in:
+26
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user