summaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index df9de0fb..a945f7fd 100644
--- a/gc.c
+++ b/gc.c
@@ -44,6 +44,7 @@
#include "gc.h"
#include "signal.h"
#include "unwind.h"
+#include "args.h"
#define PROT_STACK_SIZE 1024
@@ -304,6 +305,10 @@ static void finalize(val obj)
obj->b.data = 0;
}
return;
+ case DARG:
+ free(obj->a.args);
+ obj->a.args = 0;
+ return;
}
assert (0 && "corrupt type field");
@@ -428,6 +433,20 @@ tail_call:
mark_obj(obj->tn.left);
mark_obj(obj->tn.right);
mark_obj_tail(obj->tn.key);
+ case DARG:
+ {
+ struct args *args = obj->a.args;
+ cnum i, n = args->fill;
+ val *arg = args->arg;
+
+ mark_obj(obj->a.car);
+ mark_obj(obj->a.cdr);
+
+ for (i = 0; i < n; i++)
+ mark_obj(arg[i]);
+
+ mark_obj_tail(args->list);
+ }
}
assert (0 && "corrupt type field");