altos/lisp: Use poly stashes for stacks
[fw/altos] / src / lisp / ao_lisp.h
index a8e1715a8dc88bd3ca8cc4e79e5823b4b3561efc..e238d4fed8507af928939192f0be1527751ec4d9 100644 (file)
@@ -15,6 +15,9 @@
 #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>
@@ -326,6 +329,10 @@ ao_lisp_poly_other(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;
 }
 
@@ -461,22 +468,26 @@ struct ao_lisp_cons *
 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;
@@ -743,7 +754,6 @@ ao_lisp_frames_dump(void)
 #define DBG_FRAMES()
 #endif
 
-#define DBG_MEM                0
 #define DBG_MEM_START  1
 
 #if DBG_MEM