Mercurial > repos > tabletprog
changeset 39:a997e42b9051
Add foreach method to array and add fib sample that can work in C environment and array example
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 10 Jul 2012 23:18:14 -0700 |
parents | e7be612fd3ae |
children | 927fd7911a01 |
files | cbackend.js samples/fibnof.tp samples/testarray.tp |
diffstat | 3 files changed, 50 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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();
--- /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 +} + +}