comparison cbackend.js @ 40:927fd7911a01

Add append message to array
author Mike Pavone <pavone@retrodev.com>
date Wed, 11 Jul 2012 19:17:24 -0700
parents a997e42b9051
children 0558dad9d061
comparison
equal deleted inserted replaced
39:a997e42b9051 40:927fd7911a01
106 strlit.prototype.toC = function() { 106 strlit.prototype.toC = function() {
107 return 'make_str("' + this.val.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r') + '")'; 107 return 'make_str("' + this.val.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r') + '")';
108 } 108 }
109 109
110 listlit.prototype.toC = function() { 110 listlit.prototype.toC = function() {
111 var ret = 'make_list(' + this.val.length + ', '; 111 var ret = 'make_list(' + this.val.length;
112 for (var i = 0; i < this.val.length; i++) { 112 for (var i = 0; i < this.val.length; i++) {
113 ret += (i ? ', ' : '') + this.val[i].toC(); 113 ret += ', ' + this.val[i].toC();
114 } 114 }
115 return ret + ')'; 115 return ret + ')';
116 } 116 }
117 117
118 arraylit.prototype.toC = function() { 118 arraylit.prototype.toC = function() {
119 var ret = 'make_array(' + this.val.length + ', '; 119 var ret = 'make_array(' + this.val.length;
120 for (var i = 0; i < this.val.length; i++) { 120 for (var i = 0; i < this.val.length; i++) {
121 ret += (i ? ', ' : '') + this.val[i].toC(); 121 ret += ', ' + this.val[i].toC();
122 } 122 }
123 return ret + ')'; 123 return ret + ')';
124 } 124 }
125 125
126 funcall.prototype.toC = function() { 126 funcall.prototype.toC = function() {
383 ' ccall(clos, 2, index, self->data[i]);', 383 ' ccall(clos, 2, index, self->data[i]);',
384 '}', 384 '}',
385 'return (object *)self;' 385 'return (object *)self;'
386 ] 386 ]
387 }); 387 });
388 array.addMessage('append', {
389 vars: {tmp: 'object *'},
390 lines: [
391 'if (self->storage == self->size) {',
392 ' self->storage *= 2;',
393 ' tmp = realloc(self->data, self->storage);',
394 ' if (!tmp) {',
395 ' fputs("Failed to increase array size\\n", stderr);',
396 ' exit(1);',
397 ' }',
398 ' self->data = tmp;',
399 '}',
400 'self->data[self->size++] = va_arg(args, object *);',
401 'return self;'
402 ]
403 });
388 forwarddec = toplevelcode = ''; 404 forwarddec = toplevelcode = '';
389 forwarddec += int32.toEarlyCDef() + array.toEarlyCDef(); 405 forwarddec += int32.toEarlyCDef() + array.toEarlyCDef();
390 toplevelcode += int32.toCDef() + array.toCDef(); 406 toplevelcode += int32.toCDef() + array.toCDef();
391 obj.populateSymbols(toplevel); 407 obj.populateSymbols(toplevel);
392 var rest = 'object * mainModule() {\n\tmain_module = ' + obj.toC() + ';\n\treturn main_module;\n}\n'; 408 var rest = 'object * mainModule() {\n\tmain_module = ' + obj.toC() + ';\n\treturn main_module;\n}\n';