diff options
Diffstat (limited to 'src/interp.c')
| -rw-r--r-- | src/interp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/interp.c b/src/interp.c index 983ba8e..5a23d0b 100644 --- a/src/interp.c +++ b/src/interp.c @@ -140,6 +140,7 @@ void Interp_init(Interp *self) { Interp_add_userfunc(self, "_gcstat", builtin_gcstat); + Interp_add_userfunc(self, "_alwaysgc", builtin_alwaysgc); SExpRef ret = Interp_eval_string(self, bamboo_lisp_prelude); Interp *interp = self; @@ -249,7 +250,7 @@ void Interp_add_primitive(Interp *self, const char *name, LispPrimitive fn) { void Interp_gc(Interp *interp, SExpRef tmproot) { int freesize = IntVector_len(&interp->empty_space); int heapsize = SExpVector_len(&interp->objs); - if (freesize > heapsize >> 4) { + if (freesize > (heapsize >> 4) && !interp->alwaysgc) { return; } SExpRefVector gcstack; |
