# HG changeset patch # User Mike Pavone # Date 1342059444 25200 # Node ID 927fd7911a016ce5c6448568980875f6509bc57f # Parent a997e42b9051aa63de8407caaa76794eaf4c7125 Add append message to array diff -r a997e42b9051 -r 927fd7911a01 cbackend.js --- 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(); diff -r a997e42b9051 -r 927fd7911a01 runtime/progfoot.inc --- a/runtime/progfoot.inc Tue Jul 10 23:18:14 2012 -0700 +++ b/runtime/progfoot.inc Wed Jul 11 19:17:24 2012 -0700 @@ -7,7 +7,10 @@ arr->header.meta = &array_meta; arr->header.parent = NULL; arr->storage = arr->size = num_els; - arr->data = malloc(sizeof(object *) * num_els); + if (num_els < 4) { + arr->storage = 4; + } + arr->data = malloc(sizeof(object *) * arr->storage); va_start(els, num_els); for (i = 0; i < num_els; i++) arr->data[i] = va_arg(els, object *); diff -r a997e42b9051 -r 927fd7911a01 samples/testarray.tp --- a/samples/testarray.tp Tue Jul 10 23:18:14 2012 -0700 +++ b/samples/testarray.tp Wed Jul 11 19:17:24 2012 -0700 @@ -1,11 +1,18 @@ #{ + sum <- :arr { + cursum <- 0 + foreach: arr :idx el { + cursum <- cursum + el + } + cursum + } main <- { foo <- #[42 30 28] - sum <- 0 - foreach: foo :idx el { - sum <- sum + el - } - sum + bar <- #[] + bar append: 30 + bar append: 28 + bar append: 42 + (sum: foo) + (sum: bar) } }