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;
static struct ao_lisp_cons *save_cons[2];
static char *save_string[2];
-static struct ao_lisp_stack *save_stack[3];
-static ao_poly save_poly[2];
+static ao_poly save_poly[3];
static const struct ao_lisp_root ao_lisp_root[] = {
{
.type = &ao_lisp_cons_type,
.addr = (void **) &save_cons[1],
},
- {
- .type = &ao_lisp_stack_type,
- .addr = (void **) &save_stack[0]
- },
- {
- .type = &ao_lisp_stack_type,
- .addr = (void **) &save_stack[1]
- },
- {
- .type = &ao_lisp_stack_type,
- .addr = (void **) &save_stack[2]
- },
{
.type = &ao_lisp_string_type,
- .addr = (void **) &save_string[0]
+ .addr = (void **) &save_string[0],
},
{
.type = &ao_lisp_string_type,
- .addr = (void **) &save_string[1]
+ .addr = (void **) &save_string[1],
},
{
.type = NULL,
.type = NULL,
.addr = (void **) &save_poly[1]
},
+ {
+ .type = NULL,
+ .addr = (void **) &save_poly[2]
+ },
{
.type = &ao_lisp_atom_type,
.addr = (void **) &ao_lisp_atoms
}
void
-ao_lisp_stack_stash(int id, struct ao_lisp_stack *stack)
+ao_lisp_poly_stash(int id, ao_poly poly)
{
- save_stack[id] = stack;
+ save_poly[id] = poly;
}
-struct ao_lisp_stack *
-ao_lisp_stack_fetch(int id)
+ao_poly
+ao_lisp_poly_fetch(int id)
{
- struct ao_lisp_stack *stack = save_stack[id];
- save_stack[id] = NULL;
- return stack;
+ ao_poly poly = save_poly[id];
+ save_poly[id] = AO_LISP_NIL;
+ return poly;
}
void
save_string[id] = NULL;
return string;
}
-void
-ao_lisp_poly_stash(int id, ao_poly poly)
-{
- save_poly[id] = poly;
-}
-ao_poly
-ao_lisp_poly_fetch(int id)
-{
- ao_poly poly = save_poly[id];
- save_poly[id] = AO_LISP_NIL;
- return poly;
-}
ao_lisp_cons_stash(1, tail);
ao_lisp_string_stash(0, a);
struct ao_lisp_cons *n = ao_lisp_cons_cons(ao_lisp_int_poly(c), NULL);
+ a = ao_lisp_string_fetch(0);
cons = ao_lisp_cons_fetch(0);
tail = ao_lisp_cons_fetch(1);
- a = ao_lisp_string_fetch(0);
if (!n) {
cons = NULL;