Mercurial > repos > tabletprog
diff cbackend.js @ 58:7b454d100dc8
Add length method to array. Pass array of arguments to main method. Initialize parent field of environment struct for closures
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 14 Jul 2012 00:35:50 -0700 |
parents | 08ae75d90dc2 |
children | 0fd06e077afe |
line wrap: on
line diff
--- a/cbackend.js Sat Jul 14 00:00:24 2012 -0700 +++ b/cbackend.js Sat Jul 14 00:35:50 2012 -0700 @@ -462,6 +462,14 @@ 'return &(self->header);' ] }); + array.addMessage('length', { + vars: {intret: 'obj_int32 *'}, + lines: [ + 'intret = make_object(&obj_int32_meta, NULL, 0);', + 'intret->num = self->size;', + 'return intret;' + ] + }); return array; } @@ -592,7 +600,8 @@ 'str = make_object(&string_meta, NULL, 0);', 'str->data = malloc(size->num + 1);', 'str->length = str->bytes = read(filedes->num, str->data, size->num);', - 'str->data[str->bytes+1] = 0;', + 'if (str->bytes < 0) { str->bytes = str->length = 0; }', + 'str->data[str->bytes] = 0;', 'return str;' ] }); @@ -761,6 +770,9 @@ forwarddec += '} lambda_' + mynum + '_env;\n' var myenvinit = '\tlambda_' + mynum + '_env * myenv = malloc(sizeof(lambda_' + mynum + '_env));\n'; + if (this.symbols.needsParentEnv) { + myenvinit += '\tmyenv->parent = env;\n'; + } this.symbols.envtype = 'lambda_' + mynum + '_env'; } else { var myenvinit = '';