Mercurial > repos > tabletprog
diff 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 |
line wrap: on
line diff
--- a/cbackend.js Tue Jul 10 23:18:14 2012 -0700 +++ b/cbackend.js Wed Jul 11 19:17:24 2012 -0700 @@ -108,17 +108,17 @@ } listlit.prototype.toC = function() { - var ret = 'make_list(' + this.val.length + ', '; + var ret = 'make_list(' + this.val.length; for (var i = 0; i < this.val.length; i++) { - ret += (i ? ', ' : '') + this.val[i].toC(); + ret += ', ' + this.val[i].toC(); } return ret + ')'; } arraylit.prototype.toC = function() { - var ret = 'make_array(' + this.val.length + ', '; + var ret = 'make_array(' + this.val.length; for (var i = 0; i < this.val.length; i++) { - ret += (i ? ', ' : '') + this.val[i].toC(); + ret += ', ' + this.val[i].toC(); } return ret + ')'; } @@ -385,6 +385,22 @@ 'return (object *)self;' ] }); + array.addMessage('append', { + vars: {tmp: 'object *'}, + lines: [ + 'if (self->storage == self->size) {', + ' self->storage *= 2;', + ' tmp = realloc(self->data, self->storage);', + ' if (!tmp) {', + ' fputs("Failed to increase array size\\n", stderr);', + ' exit(1);', + ' }', + ' self->data = tmp;', + '}', + 'self->data[self->size++] = va_arg(args, object *);', + 'return self;' + ] + }); forwarddec = toplevelcode = ''; forwarddec += int32.toEarlyCDef() + array.toEarlyCDef(); toplevelcode += int32.toCDef() + array.toCDef();