Exceptions!!!
This commit is contained in:
@@ -10,6 +10,9 @@ DEFOBJTYPE(Cons, CONS, CONSP, {
|
||||
LispVal *car;
|
||||
LispVal *cdr;
|
||||
});
|
||||
static ALWAYS_INLINE bool ATOM(LispVal *val) {
|
||||
return !CONSP(val);
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE bool LISTP(LispVal *obj) {
|
||||
return NILP(obj) || CONSP(obj);
|
||||
@@ -105,6 +108,9 @@ static ALWAYS_INLINE LispVal *LIST_N(int count, ...) {
|
||||
|
||||
#define DOTAILS(v, l) for (LispVal *v = (l); !NILP(v); v = XCDR_SAFE(v))
|
||||
|
||||
DECLARE_SYMBOL(circular_list_error);
|
||||
MAKE_CONDITION_CLASS(circular_list_error);
|
||||
|
||||
// return -1 list is circular
|
||||
intptr_t list_length(LispVal *list);
|
||||
// Return true if the length of LIST == SIZE
|
||||
@@ -116,6 +122,8 @@ DECLARE_FUNCTION(length_eq, (LispVal * list, LispVal *length));
|
||||
DECLARE_FUNCTION(nreverse, (LispVal * list));
|
||||
DECLARE_FUNCTION(listp, (LispVal * obj));
|
||||
DECLARE_FUNCTION(list, (LispVal * args));
|
||||
LispVal *nth(size_t n, LispVal *list);
|
||||
DECLARE_FUNCTION(nth, (LispVal * n, LispVal *list));
|
||||
static ALWAYS_INLINE void CHECK_LISTP(LispVal *obj) {
|
||||
if (!LISTP(obj)) {
|
||||
signal_type_error(obj, LIST(Qlist));
|
||||
@@ -124,6 +132,7 @@ static ALWAYS_INLINE void CHECK_LISTP(LispVal *obj) {
|
||||
|
||||
// List utility functions
|
||||
DECLARE_FUNCTION(member, (LispVal * elt, LispVal *list, LispVal *pred));
|
||||
DECLARE_FUNCTION(member_if, (LispVal * pred, LispVal *list));
|
||||
|
||||
DECLARE_FUNCTION(plist_put, (LispVal * plist, LispVal *prop, LispVal *value));
|
||||
DECLARE_FUNCTION(plist_get, (LispVal * plist, LispVal *prop, LispVal *def));
|
||||
|
||||
Reference in New Issue
Block a user