diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lisp/ao_lisp.h | 2 | ||||
| -rw-r--r-- | src/lisp/ao_lisp_builtin.c | 11 | ||||
| -rw-r--r-- | src/lisp/ao_lisp_make_const.c | 1 | 
3 files changed, 14 insertions, 0 deletions
| diff --git a/src/lisp/ao_lisp.h b/src/lisp/ao_lisp.h index 1f7c85e1..1a8e7e91 100644 --- a/src/lisp/ao_lisp.h +++ b/src/lisp/ao_lisp.h @@ -79,6 +79,7 @@ extern uint8_t ao_lisp_const[AO_LISP_POOL_CONST];  #define _ao_lisp_atom_save	_atom("save")  #define _ao_lisp_atom_restore	_atom("restore")  #define _ao_lisp_atom_call2fcc	_atom("call/cc") +#define _ao_lisp_atom_collect	_atom("collect")  #else  #include "ao_lisp_const.h"  #ifndef AO_LISP_POOL @@ -291,6 +292,7 @@ enum ao_lisp_builtin_id {  	builtin_save,  	builtin_restore,  	builtin_call_cc, +	builtin_collect,  	_builtin_last  }; diff --git a/src/lisp/ao_lisp_builtin.c b/src/lisp/ao_lisp_builtin.c index 4c845307..7cd131f5 100644 --- a/src/lisp/ao_lisp_builtin.c +++ b/src/lisp/ao_lisp_builtin.c @@ -87,6 +87,7 @@ static const ao_poly builtin_names[] = {  	[builtin_save] = _ao_lisp_atom_save,  	[builtin_restore] = _ao_lisp_atom_restore,  	[builtin_call_cc] = _ao_lisp_atom_call2fcc, +	[builtin_collect] = _ao_lisp_atom_collect,  }; @@ -561,6 +562,15 @@ ao_lisp_do_read(struct ao_lisp_cons *cons)  	return ao_lisp_read();  } +ao_poly +ao_lisp_do_collect(struct ao_lisp_cons *cons) +{ +	int	free; +	(void) cons; +	free = ao_lisp_collect(AO_LISP_COLLECT_FULL); +	return ao_lisp_int_poly(free); +} +  const ao_lisp_func_t ao_lisp_builtins[] = {  	[builtin_eval] = ao_lisp_do_eval,  	[builtin_read] = ao_lisp_do_read, @@ -599,5 +609,6 @@ const ao_lisp_func_t ao_lisp_builtins[] = {  	[builtin_save] = ao_lisp_save,  	[builtin_restore] = ao_lisp_restore,  	[builtin_call_cc] = ao_lisp_call_cc, +	[builtin_collect] = ao_lisp_do_collect,  }; diff --git a/src/lisp/ao_lisp_make_const.c b/src/lisp/ao_lisp_make_const.c index de9c5725..49f989e6 100644 --- a/src/lisp/ao_lisp_make_const.c +++ b/src/lisp/ao_lisp_make_const.c @@ -72,6 +72,7 @@ struct builtin_func funcs[] = {  	{ .name = "save",	.args = AO_LISP_FUNC_F_LAMBDA,	.func = builtin_save },  	{ .name = "restore",	.args = AO_LISP_FUNC_F_LAMBDA,	.func = builtin_restore },  	{ .name = "call/cc",	.args = AO_LISP_FUNC_F_LAMBDA,	.func = builtin_call_cc }, +	{ .name = "collect",	.args = AO_LISP_FUNC_F_LAMBDA,	.func = builtin_collect },  };  #define N_FUNC (sizeof funcs / sizeof funcs[0]) | 
