diff options
| author | Keith Packard <keithp@keithp.com> | 2016-11-14 21:25:38 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2017-02-20 11:16:50 -0800 | 
| commit | 5557f6b87a9b8bc9716de8191f2062a772a6ae6c (patch) | |
| tree | 65f437f42e7ab4b49587c7f70f4105b99409e45c /src/lisp/ao_lisp_make_const.c | |
| parent | ce549b2c11e6b2571590021e1c0503d8a6e7a702 (diff) | |
altos/lisp: Cache freed cons and stack items
Track freed cons cells and stack items from the eval process where
possible so that they can be re-used without needing to collect.
This dramatically reduces the number of collect calls.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lisp/ao_lisp_make_const.c')
| -rw-r--r-- | src/lisp/ao_lisp_make_const.c | 54 | 
1 files changed, 27 insertions, 27 deletions
| diff --git a/src/lisp/ao_lisp_make_const.c b/src/lisp/ao_lisp_make_const.c index 6a29f402..178b041e 100644 --- a/src/lisp/ao_lisp_make_const.c +++ b/src/lisp/ao_lisp_make_const.c @@ -33,42 +33,42 @@ struct builtin_func {  };  struct builtin_func funcs[] = { -	"eval",		AO_LISP_FUNC_LAMBDA,	builtin_eval, -	"read",		AO_LISP_FUNC_LAMBDA,	builtin_read, +	"eval",		AO_LISP_FUNC_F_LAMBDA,	builtin_eval, +	"read",		AO_LISP_FUNC_F_LAMBDA,	builtin_read,  	"lambda",	AO_LISP_FUNC_NLAMBDA,	builtin_lambda,  	"lexpr",	AO_LISP_FUNC_NLAMBDA,	builtin_lexpr,  	"nlambda",	AO_LISP_FUNC_NLAMBDA,	builtin_nlambda,  	"macro",	AO_LISP_FUNC_NLAMBDA,	builtin_macro, -	"car",		AO_LISP_FUNC_LAMBDA,	builtin_car, -	"cdr",		AO_LISP_FUNC_LAMBDA,	builtin_cdr, -	"cons",		AO_LISP_FUNC_LAMBDA,	builtin_cons, -	"last",		AO_LISP_FUNC_LAMBDA,	builtin_last, -	"length",	AO_LISP_FUNC_LAMBDA,	builtin_length, +	"car",		AO_LISP_FUNC_F_LAMBDA,	builtin_car, +	"cdr",		AO_LISP_FUNC_F_LAMBDA,	builtin_cdr, +	"cons",		AO_LISP_FUNC_F_LAMBDA,	builtin_cons, +	"last",		AO_LISP_FUNC_F_LAMBDA,	builtin_last, +	"length",	AO_LISP_FUNC_F_LAMBDA,	builtin_length,  	"quote",	AO_LISP_FUNC_NLAMBDA,	builtin_quote, -	"set",		AO_LISP_FUNC_LAMBDA,	builtin_set, +	"set",		AO_LISP_FUNC_F_LAMBDA,	builtin_set,  	"setq",		AO_LISP_FUNC_MACRO,	builtin_setq,  	"cond",		AO_LISP_FUNC_NLAMBDA,	builtin_cond,  	"progn",	AO_LISP_FUNC_NLAMBDA,	builtin_progn,  	"while",	AO_LISP_FUNC_NLAMBDA,	builtin_while, -	"print",	AO_LISP_FUNC_LEXPR,	builtin_print, -	"patom",	AO_LISP_FUNC_LEXPR,	builtin_patom, -	"+",		AO_LISP_FUNC_LEXPR,	builtin_plus, -	"-",		AO_LISP_FUNC_LEXPR,	builtin_minus, -	"*",		AO_LISP_FUNC_LEXPR,	builtin_times, -	"/",		AO_LISP_FUNC_LEXPR,	builtin_divide, -	"%",		AO_LISP_FUNC_LEXPR,	builtin_mod, -	"=",		AO_LISP_FUNC_LEXPR,	builtin_equal, -	"<",		AO_LISP_FUNC_LEXPR,	builtin_less, -	">",		AO_LISP_FUNC_LEXPR,	builtin_greater, -	"<=",		AO_LISP_FUNC_LEXPR,	builtin_less_equal, -	">=",		AO_LISP_FUNC_LEXPR,	builtin_greater_equal, -	"pack",		AO_LISP_FUNC_LAMBDA,	builtin_pack, -	"unpack",	AO_LISP_FUNC_LAMBDA,	builtin_unpack, -	"flush",	AO_LISP_FUNC_LAMBDA,	builtin_flush, -	"delay",	AO_LISP_FUNC_LAMBDA,	builtin_delay, -	"led",		AO_LISP_FUNC_LEXPR,	builtin_led, -	"save",		AO_LISP_FUNC_LAMBDA,	builtin_save, -	"restore",	AO_LISP_FUNC_LAMBDA,	builtin_restore, +	"print",	AO_LISP_FUNC_F_LEXPR,	builtin_print, +	"patom",	AO_LISP_FUNC_F_LEXPR,	builtin_patom, +	"+",		AO_LISP_FUNC_F_LEXPR,	builtin_plus, +	"-",		AO_LISP_FUNC_F_LEXPR,	builtin_minus, +	"*",		AO_LISP_FUNC_F_LEXPR,	builtin_times, +	"/",		AO_LISP_FUNC_F_LEXPR,	builtin_divide, +	"%",		AO_LISP_FUNC_F_LEXPR,	builtin_mod, +	"=",		AO_LISP_FUNC_F_LEXPR,	builtin_equal, +	"<",		AO_LISP_FUNC_F_LEXPR,	builtin_less, +	">",		AO_LISP_FUNC_F_LEXPR,	builtin_greater, +	"<=",		AO_LISP_FUNC_F_LEXPR,	builtin_less_equal, +	">=",		AO_LISP_FUNC_F_LEXPR,	builtin_greater_equal, +	"pack",		AO_LISP_FUNC_F_LAMBDA,	builtin_pack, +	"unpack",	AO_LISP_FUNC_F_LAMBDA,	builtin_unpack, +	"flush",	AO_LISP_FUNC_F_LAMBDA,	builtin_flush, +	"delay",	AO_LISP_FUNC_F_LAMBDA,	builtin_delay, +	"led",		AO_LISP_FUNC_F_LEXPR,	builtin_led, +	"save",		AO_LISP_FUNC_F_LAMBDA,	builtin_save, +	"restore",	AO_LISP_FUNC_F_LAMBDA,	builtin_restore,  };  #define N_FUNC (sizeof funcs / sizeof funcs[0]) | 
