diff runtime/progfoot.inc @ 78:abc6f3d644a4

Use Boehm-GC for garbage collection. Also make no_impl print on stderr rather than standard in and return a non-zero error code.
author Mike Pavone <pavone@retrodev.com>
date Sun, 15 Jul 2012 18:11:00 -0700
parents 7b454d100dc8
children 25bc8a5ab41e
line wrap: on
line diff
--- a/runtime/progfoot.inc	Sun Jul 15 13:13:06 2012 -0700
+++ b/runtime/progfoot.inc	Sun Jul 15 18:11:00 2012 -0700
@@ -1,14 +1,15 @@
 
 array * alloc_array(uint32_t num_els)
 {
-	array * arr = malloc(sizeof(array));
+	array * arr = GC_MALLOC(sizeof(array));
 	arr->header.meta = &array_meta;
 	arr->header.parent = NULL;
 	arr->storage = arr->size = num_els;
 	if (num_els < 4) {
 		arr->storage = 4;
 	}
-	arr->data = malloc(sizeof(object *) * arr->storage);
+	arr->data = GC_MALLOC(sizeof(object *) * arr->storage);
+	return arr;
 }
 
 object * make_array(uint32_t num_els, ...)
@@ -25,7 +26,7 @@
 
 object * make_lambda(void * env, closure_func func)
 {
-	lambda * ret = malloc(sizeof(lambda));
+	lambda * ret = GC_MALLOC(sizeof(lambda));
 	ret->header.meta = &lambda_meta;
 	ret->header.parent = NULL;
 	ret->env = env;
@@ -37,6 +38,7 @@
 {
 	int i;
 	string * arg;
+	GC_INIT();
 	array * arr = alloc_array(argc);
 	for (i = 0; i < argc; ++i) {
 		arg = (string *)make_object(&string_meta, NULL, 0);