Mercurial > repos > tabletprog
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);