commit 0cfeea541a1b495530b709755189cb945f6100cd
parent e8317d918b2434965de22d96fb4868f9c68886d0
Author: Andres Navarro <canavarro82@gmail.com>
Date:   Thu, 14 Apr 2011 20:47:07 -0300
Added primitive root marking to the GC.
Diffstat:
| M | src/kgc.c |  |  | 32 | +++++++++++++++++++++++++++++++- | 
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/src/kgc.c b/src/kgc.c
@@ -464,7 +464,37 @@ static void markroot (klisp_State *K) {
     K->grayagain = NULL; /* for now in klisp this isn't used */
     K->weak = NULL; /* for now in klisp this isn't used */
 
-    /* TODO add klisp root set */
+    /* TEMP: this is quite awfull, think of other way to do this */
+    /* MAYBE: some of these could be FIXED */
+    markvalue(K, K->symbol_table);
+    markvalue(K, K->curr_cont);
+    markvalue(K, K->next_obj);
+    markvalue(K, K->next_value);
+    markvalue(K, K->next_env);
+    /* NOTE: next_x_params is protected by next_obj */
+    markvalue(K, K->eval_op);
+    markvalue(K, K->list_app);
+    markvalue(K, K->ground_env);
+    markvalue(K, K->module_params_sym);
+    markvalue(K, K->root_cont);
+    markvalue(K, K->error_cont);
+
+    markvalue(K, K->kd_in_port_key);
+    markvalue(K, K->kd_out_port_key);
+    markvalue(K, K->empty_string);
+
+    markvalue(K, K->ktok_lparen);
+    markvalue(K, K->ktok_rparen);
+    markvalue(K, K->ktok_dot);
+    markvalue(K, K->shared_dict);
+
+    /* Mark all objects in the auxiliary stack,
+       all valid indexes are below top */
+    TValue *ptr = K->sbuf;
+    for (int i = 0, top = K->stop; i < top; i++, ptr++) {
+	markvalue(K, *ptr);
+    }
+
 /*    markmt(g); */
     K->gcstate = GCSpropagate;
 }