From fc750d1d9303776cf00971b5fbf1a1c3e5d45c16 Mon Sep 17 00:00:00 2001 From: Felix Perktold Date: Sun, 25 Jan 2026 01:41:00 +0100 Subject: fix --- Makefile | 4 ++-- lisp.c | 5 +++-- lisp.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 944c62e..b465312 100644 --- a/Makefile +++ b/Makefile @@ -48,9 +48,9 @@ run_std: main modules: $(MODULE_SO) @echo "All modules built successfully." -modules/%.so: modules/%.c lisp.o +modules/%.so: modules/%.c gcc -fPIC -c $< -o $*.o - gcc -fPIC -shared $*.o lisp.o -o $@ $(MODULE_LIBS) + gcc -fPIC -shared $*.o -o $@ $(MODULE_LIBS) rm $*.o .PHONY: clean test run diff --git a/lisp.c b/lisp.c index 52f7869..c95bdf7 100644 --- a/lisp.c +++ b/lisp.c @@ -499,9 +499,9 @@ void mark_val(value *val) { void mark_env(env *e) { if (!e || e->marked) { return; } - e->marked = 1; for (env *cur = e; cur; cur = cur->next) { + cur->marked = 1; if (cur->value) { mark_val(cur->value); } @@ -546,7 +546,7 @@ void free_value(value *val) { free(val); } -int sweep() { +void sweep() { reg *r = global_reg; reg *prev = NULL; @@ -578,6 +578,7 @@ void reset_env_marks(env *e) { } void reset_marks() { + reset_env_marks(global_env); for (reg *r = global_reg; r; r = r->next) { if (r->value) { r->value->marked = 0; diff --git a/lisp.h b/lisp.h index 631cee4..fdf4027 100644 --- a/lisp.h +++ b/lisp.h @@ -35,7 +35,7 @@ reg *reg_add(value *val); extern reg *global_reg; void mark_env(env *e); void mark_val(value *v); -int sweep(); +void sweep(); void free_env(env *e); void free_value(value *v); void reset_env_marks(env *e); -- cgit v1.2.3