diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lisp/ao_lisp.h | 24 | ||||
| -rw-r--r-- | src/lisp/ao_lisp_mem.c | 49 | ||||
| -rw-r--r-- | src/lisp/ao_lisp_string.c | 2 | 
3 files changed, 29 insertions, 46 deletions
| diff --git a/src/lisp/ao_lisp.h b/src/lisp/ao_lisp.h index cea834fc..e238d4fe 100644 --- a/src/lisp/ao_lisp.h +++ b/src/lisp/ao_lisp.h @@ -468,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; diff --git a/src/lisp/ao_lisp_mem.c b/src/lisp/ao_lisp_mem.c index 0dfad1d7..2599f719 100644 --- a/src/lisp/ao_lisp_mem.c +++ b/src/lisp/ao_lisp_mem.c @@ -144,8 +144,7 @@ struct ao_lisp_root {  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[] = {  	{ @@ -157,24 +156,12 @@ static const struct ao_lisp_root	ao_lisp_root[] = {  		.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, @@ -185,6 +172,10 @@ static const struct ao_lisp_root	ao_lisp_root[] = {  		.addr = (void **) &save_poly[1]  	},  	{ +		.type = NULL, +		.addr = (void **) &save_poly[2] +	}, +	{  		.type = &ao_lisp_atom_type,  		.addr = (void **) &ao_lisp_atoms  	}, @@ -833,17 +824,17 @@ ao_lisp_cons_fetch(int id)  }  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 @@ -859,16 +850,4 @@ ao_lisp_string_fetch(int id)  	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; -} diff --git a/src/lisp/ao_lisp_string.c b/src/lisp/ao_lisp_string.c index 207d4f3b..cd7b27a9 100644 --- a/src/lisp/ao_lisp_string.c +++ b/src/lisp/ao_lisp_string.c @@ -104,9 +104,9 @@ ao_lisp_string_unpack(char *a)  		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; | 
