#ifndef _AO_LISP_H_
#define _AO_LISP_H_
+#define DBG_MEM 0
+#define DBG_EVAL 0
+
#include <stdint.h>
#include <string.h>
//#include <stdio.h>
#define AO_LISP_IS_CONST(a) (ao_lisp_const <= ((uint8_t *) (a)) && ((uint8_t *) (a)) < ao_lisp_const + AO_LISP_POOL_CONST)
#define AO_LISP_IS_POOL(a) (ao_lisp_pool <= ((uint8_t *) (a)) && ((uint8_t *) (a)) < ao_lisp_pool + AO_LISP_POOL)
+#define AO_LISP_IS_INT(p) (ao_lisp_base_type(p) == AO_LISP_INT);
void *
ao_lisp_ref(ao_poly poly);
static inline uint8_t
ao_lisp_other_type(void *other) {
+#if DBG_MEM
+ if ((*((uint8_t *) other) & AO_LISP_OTHER_TYPE_MASK) >= AO_LISP_NUM_TYPE)
+ ao_lisp_abort();
+#endif
return *((uint8_t *) other) & AO_LISP_OTHER_TYPE_MASK;
}
ao_lisp_cons_fetch(int id);
void
-ao_lisp_string_stash(int id, char *string);
+ao_lisp_poly_stash(int id, ao_poly poly);
-char *
-ao_lisp_string_fetch(int id);
+ao_poly
+ao_lisp_poly_fetch(int id);
void
-ao_lisp_stack_stash(int id, struct ao_lisp_stack *stack);
+ao_lisp_string_stash(int id, char *string);
-struct ao_lisp_stack *
-ao_lisp_stack_fetch(int id);
+char *
+ao_lisp_string_fetch(int id);
-void
-ao_lisp_poly_stash(int id, ao_poly poly);
+static inline void
+ao_lisp_stack_stash(int id, struct ao_lisp_stack *stack) {
+ ao_lisp_poly_stash(id, ao_lisp_stack_poly(stack));
+}
-ao_poly
-ao_lisp_poly_fetch(int id);
+static inline struct ao_lisp_stack *
+ao_lisp_stack_fetch(int id) {
+ return ao_lisp_poly_stack(ao_lisp_poly_fetch(id));
+}
/* cons */
extern const struct ao_lisp_type ao_lisp_cons_type;
#define DBG_FRAMES()
#endif
-#define DBG_MEM 0
#define DBG_MEM_START 1
#if DBG_MEM