summaryrefslogtreecommitdiff
path: root/lisp.h
diff options
context:
space:
mode:
authorFelix Perktold <Felix.Perktold@student.uibk.ac.at>2026-01-24 18:33:31 +0100
committerFelix Perktold <Felix.Perktold@student.uibk.ac.at>2026-01-24 18:33:31 +0100
commitdc1fc66181cba96cc94f21f055676b952489dbd9 (patch)
tree61889b183df011298c41d314419b41e55ee02991 /lisp.h
parent991d7eaa2a9550c7be0a63d7c1ba7c38c7de2acf (diff)
start implementing mark&sweep
Diffstat (limited to 'lisp.h')
-rw-r--r--lisp.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/lisp.h b/lisp.h
index a747b8d..c857b02 100644
--- a/lisp.h
+++ b/lisp.h
@@ -3,6 +3,7 @@
typedef struct value value;
typedef struct env env;
+typedef struct reg reg;
// environments, TODO: make this use hashtable
// symbol->val
@@ -16,7 +17,6 @@ typedef struct env {
env *env_create(env *parent);
env *env_define(env *e, const char *sym, value *val);
value *env_lookup(env *e, const char *sym);
-
extern env *global_env;
value *eval_pair(env *e, value *val);
@@ -25,4 +25,16 @@ value *apply(value *lambda, value *args);
value *procedure_load_module(env *e, value *args);
+typedef struct reg {
+ value *value;
+ reg *next;
+} 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);
+int sweep();
+
#endif