# HG changeset patch # User Mike Pavone # Date 1341987494 25200 # Node ID a997e42b9051aa63de8407caaa76794eaf4c7125 # Parent e7be612fd3ae80098c1a3deed890f776e05ded3b Add foreach method to array and add fib sample that can work in C environment and array example diff -r e7be612fd3ae -r a997e42b9051 cbackend.js --- a/cbackend.js Tue Jul 10 23:09:44 2012 -0700 +++ b/cbackend.js Tue Jul 10 23:18:14 2012 -0700 @@ -373,6 +373,18 @@ 'return (object *)self;' ] }); + array.addMessage('foreach', { + vars: {index: 'obj_int32 *', i: 'int32_t', clos: 'closure *'}, + lines: [ + 'clos = va_arg(args, closure *);', + 'for (i = 0; i < self->size; i++) {', + ' index = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', + ' index->num = i;', + ' ccall(clos, 2, index, self->data[i]);', + '}', + 'return (object *)self;' + ] + }); forwarddec = toplevelcode = ''; forwarddec += int32.toEarlyCDef() + array.toEarlyCDef(); toplevelcode += int32.toCDef() + array.toCDef(); diff -r e7be612fd3ae -r a997e42b9051 samples/fibnof.tp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/fibnof.tp Tue Jul 10 23:18:14 2012 -0700 @@ -0,0 +1,27 @@ +#{ + +true <- #{ + if:else <- :self trueblock :elseblock { + trueblock: + } +} + +false <- #{ + if:else <- :self trueblock :elseblock { + elseblock: + } +} + +fib <- :n { + if: n < 2 { + 1 + } else: { + (fib: n-1) + (fib: n-2) + } +} + +main <- { + fib: 30 +} + +} diff -r e7be612fd3ae -r a997e42b9051 samples/testarray.tp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/testarray.tp Tue Jul 10 23:18:14 2012 -0700 @@ -0,0 +1,11 @@ +#{ + main <- { + foo <- #[42 30 28] + sum <- 0 + foreach: foo :idx el { + sum <- sum + el + } + sum + } +} +