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';
 		}