diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-11-26 09:54:49 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-11-26 09:54:49 -0800 |
commit | bb83f68455149edd0acd6996115de881ed0e77a2 (patch) | |
tree | ebb45a058cc59b2c3b8a3c9e63fc2c0864c1ae6e /gc.c | |
parent | 21d250ce79f3c3a109731eeee7d67d757031dc1d (diff) | |
download | txr-bb83f68455149edd0acd6996115de881ed0e77a2.tar.gz txr-bb83f68455149edd0acd6996115de881ed0e77a2.tar.bz2 txr-bb83f68455149edd0acd6996115de881ed0e77a2.zip |
Task #11436
Lisp interpreter added.
* gc.c (finalize, mark_obj): Handle ENV objects.
* hash.c (struct hash): acons_new_l_fun function
pointer order of arguments change.
(equal_hash): Handle ENV.
(make_hash, gethash_l): Use cobj_handle for
type safety. Follow change in acons_new_l.
(gethash, gethash_f, remhash, hash_count,
hash_get_userdata, hash_set_userdata, hash_next): Use cobj_handle.
(gethash_n): New function.
* hash.h (gethash_n): Declared.
* lib.c (env_s): New symbol variable.
(code2type, equal): Handle ENV. (plusv, minusv, mul, mulv, trunc, mod,
gtv, ltv, gev, lev, maxv, minv, int_str): New functions.
(rehome_sym): New static function.
(func_f0, func_f1, func_f2, func_f3, func_f4, func_n0, func_n1,
func_n2, func_n3, func_n4): Initialize new fields of struct func.
(func_f0v, func_f1v, func_f2v, func_f3v, func_f4v,
func_n0v, func_n1v, func_n2v, func_n3v, func_n4v,
func_interp): New functions.
(apply): Function removed: sanely re-implemented in new eval.c file.
(funcall, funcall1, funcall2, funcall3, funcall4): Handle
variadic and interpreted functions.
(acons, acons_new, acons_new_l, aconsq_new, aconsq_new_l): Reordered
arguments for compatibility with Common Lisp acons.
(obj_init): Special hack to prepare hash_s symbol, which is
needed for type checking inside the hash table funtions invoked
by make_package, at a time when the symbol is not yet interned.
Initialize new env_s variable.
(obj_print, obj_pprint): Handle ENV. Fix confusing rendering of
of function type.
(init): Call new function eval_init.
* lib.h (enum type): New enumeration member ENV.
(struct func): functype member changed to bitfield.
New bitfied members minparam and variadic.
New members in f union: f0v, f1v, f2v, f3v,
f4v, n0v, n1v, n2v, n3v, n4v.
(struct env): New type.
(union obj): New member e of type struct env.
(env_s): Variable declared.
(plusv, minusv, mul, mulv, trunc, mod, gtv, ltv, gev, lev, maxv, minv,
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -39,6 +39,7 @@ #include "stream.h" #include "hash.h" #include "txr.h" +#include "eval.h" #include "gc.h" #define PROT_STACK_SIZE 1024 @@ -202,6 +203,8 @@ static void finalize(val obj) case COBJ: obj->co.ops->destroy(obj); return; + case ENV: + return; } assert (0 && "corrupt type field"); @@ -287,6 +290,10 @@ tail_call: case COBJ: obj->co.ops->mark(obj); mark_obj_tail(obj->co.cls); + case ENV: + mark_obj(obj->e.vbindings); + mark_obj(obj->e.fbindings); + mark_obj_tail(obj->e.up_env); } assert (0 && "corrupt type field"); |