Mercurial > repos > tabletprog
comparison 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 |
comparison
equal
deleted
inserted
replaced
77:8a9b96888b7d | 78:abc6f3d644a4 |
---|---|
1 | 1 |
2 array * alloc_array(uint32_t num_els) | 2 array * alloc_array(uint32_t num_els) |
3 { | 3 { |
4 array * arr = malloc(sizeof(array)); | 4 array * arr = GC_MALLOC(sizeof(array)); |
5 arr->header.meta = &array_meta; | 5 arr->header.meta = &array_meta; |
6 arr->header.parent = NULL; | 6 arr->header.parent = NULL; |
7 arr->storage = arr->size = num_els; | 7 arr->storage = arr->size = num_els; |
8 if (num_els < 4) { | 8 if (num_els < 4) { |
9 arr->storage = 4; | 9 arr->storage = 4; |
10 } | 10 } |
11 arr->data = malloc(sizeof(object *) * arr->storage); | 11 arr->data = GC_MALLOC(sizeof(object *) * arr->storage); |
12 return arr; | |
12 } | 13 } |
13 | 14 |
14 object * make_array(uint32_t num_els, ...) | 15 object * make_array(uint32_t num_els, ...) |
15 { | 16 { |
16 va_list els; | 17 va_list els; |
23 return &(arr->header); | 24 return &(arr->header); |
24 } | 25 } |
25 | 26 |
26 object * make_lambda(void * env, closure_func func) | 27 object * make_lambda(void * env, closure_func func) |
27 { | 28 { |
28 lambda * ret = malloc(sizeof(lambda)); | 29 lambda * ret = GC_MALLOC(sizeof(lambda)); |
29 ret->header.meta = &lambda_meta; | 30 ret->header.meta = &lambda_meta; |
30 ret->header.parent = NULL; | 31 ret->header.parent = NULL; |
31 ret->env = env; | 32 ret->env = env; |
32 ret->func = func; | 33 ret->func = func; |
33 return (object *) ret; | 34 return (object *) ret; |
35 | 36 |
36 int main(int argc, char ** argv) | 37 int main(int argc, char ** argv) |
37 { | 38 { |
38 int i; | 39 int i; |
39 string * arg; | 40 string * arg; |
41 GC_INIT(); | |
40 array * arr = alloc_array(argc); | 42 array * arr = alloc_array(argc); |
41 for (i = 0; i < argc; ++i) { | 43 for (i = 0; i < argc; ++i) { |
42 arg = (string *)make_object(&string_meta, NULL, 0); | 44 arg = (string *)make_object(&string_meta, NULL, 0); |
43 arg->data = argv[i]; | 45 arg->data = argv[i]; |
44 arg->bytes = arg->length = strlen(argv[i]); | 46 arg->bytes = arg->length = strlen(argv[i]); |