summaryrefslogtreecommitdiff
path: root/lisp.h
diff options
context:
space:
mode:
authorFelix Perktold <Felix.Perktold@student.uibk.ac.at>2026-01-24 23:53:16 +0100
committerFelix Perktold <Felix.Perktold@student.uibk.ac.at>2026-01-24 23:53:16 +0100
commit15b883e68f620592cafada6ef7f6c698a2c216c2 (patch)
treee059f68846a53717a2e2d1fd4b9ecfd73b182063 /lisp.h
parentdc1fc66181cba96cc94f21f055676b952489dbd9 (diff)
garbage collection
Diffstat (limited to 'lisp.h')
-rw-r--r--lisp.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/lisp.h b/lisp.h
index c857b02..631cee4 100644
--- a/lisp.h
+++ b/lisp.h
@@ -8,10 +8,11 @@ typedef struct reg reg;
// environments, TODO: make this use hashtable
// symbol->val
typedef struct env {
- const char *symbol;
+ char *symbol;
value *value;
env *next;
env *parent;
+ int marked;
} env;
env *env_create(env *parent);
@@ -31,10 +32,14 @@ typedef struct reg {
} reg;
reg *reg_add(value *val);
-void free_value(reg *r);
extern reg *global_reg;
-int mark_env(env *e);
-int mark_val(value *v);
+void mark_env(env *e);
+void mark_val(value *v);
int sweep();
+void free_env(env *e);
+void free_value(value *v);
+void reset_env_marks(env *e);
+void reset_marks();
+void print_register();
#endif