Mercurial > repos > tabletprog
diff cbackend.js @ 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 | ab6f24d6945d |
children | 7f635666c73d |
line wrap: on
line diff
--- a/cbackend.js Sun Jul 15 13:13:06 2012 -0700 +++ b/cbackend.js Sun Jul 15 18:11:00 2012 -0700 @@ -442,7 +442,7 @@ vars: {str: 'string *'}, lines: [ 'str = (string *)make_object(&string_meta, NULL, 0);', - 'str->data = malloc(12);', + 'str->data = GC_MALLOC(12);', 'sprintf(str->data, "%d", self->num);', 'str->length = str->bytes = strlen(str->data);', 'return &(str->header);' @@ -494,7 +494,7 @@ lines: [ 'if (self->storage == self->size) {', ' self->storage *= 2;', - ' tmp = realloc(self->data, self->storage * sizeof(object *));', + ' tmp = GC_REALLOC(self->data, self->storage * sizeof(object *));', ' if (!tmp) {', ' fputs("Failed to increase array size\\n", stderr);', ' exit(1);', @@ -577,7 +577,7 @@ 'out = (string *)make_object(&string_meta, NULL, 0);', 'out->bytes = self->bytes + argb->bytes;', 'out->length = self->length + argb->length;', - 'out->data = malloc(out->bytes+1);', + 'out->data = GC_MALLOC_ATOMIC(out->bytes+1);', 'memcpy(out->data, self->data, self->bytes);', 'memcpy(out->data + self->bytes, argb->data, argb->bytes + 1);', 'return &(out->header);' @@ -640,7 +640,7 @@ 'filedes = va_arg(args, obj_int32 *);', 'size = va_arg(args, obj_int32 *);', 'str = (string *)make_object(&string_meta, NULL, 0);', - 'str->data = malloc(size->num + 1);', + 'str->data = GC_MALLOC_ATOMIC(size->num + 1);', 'str->length = str->bytes = read(filedes->num, str->data, size->num);', 'if (str->bytes < 0) { str->bytes = str->length = 0; }', 'str->data[str->bytes] = 0;', @@ -854,7 +854,7 @@ } forwarddec += '} lambda_' + mynum + '_env;\n' - var myenvinit = '\tlambda_' + mynum + '_env * myenv = malloc(sizeof(lambda_' + mynum + '_env));\n'; + var myenvinit = '\tlambda_' + mynum + '_env * myenv = GC_MALLOC(sizeof(lambda_' + mynum + '_env));\n'; if (this.symbols.needsParentEnv) { myenvinit += '\tmyenv->parent = env;\n'; }