Mercurial > repos > tabletprog
comparison 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 |
comparison
equal
deleted
inserted
replaced
57:08ae75d90dc2 | 58:7b454d100dc8 |
---|---|
460 '}', | 460 '}', |
461 'self->data[self->size++] = va_arg(args, object *);', | 461 'self->data[self->size++] = va_arg(args, object *);', |
462 'return &(self->header);' | 462 'return &(self->header);' |
463 ] | 463 ] |
464 }); | 464 }); |
465 array.addMessage('length', { | |
466 vars: {intret: 'obj_int32 *'}, | |
467 lines: [ | |
468 'intret = make_object(&obj_int32_meta, NULL, 0);', | |
469 'intret->num = self->size;', | |
470 'return intret;' | |
471 ] | |
472 }); | |
465 return array; | 473 return array; |
466 } | 474 } |
467 | 475 |
468 function makeString() | 476 function makeString() |
469 { | 477 { |
590 'filedes = va_arg(args, obj_int32 *);', | 598 'filedes = va_arg(args, obj_int32 *);', |
591 'size = va_arg(args, obj_int32 *);', | 599 'size = va_arg(args, obj_int32 *);', |
592 'str = make_object(&string_meta, NULL, 0);', | 600 'str = make_object(&string_meta, NULL, 0);', |
593 'str->data = malloc(size->num + 1);', | 601 'str->data = malloc(size->num + 1);', |
594 'str->length = str->bytes = read(filedes->num, str->data, size->num);', | 602 'str->length = str->bytes = read(filedes->num, str->data, size->num);', |
595 'str->data[str->bytes+1] = 0;', | 603 'if (str->bytes < 0) { str->bytes = str->length = 0; }', |
604 'str->data[str->bytes] = 0;', | |
596 'return str;' | 605 'return str;' |
597 ] | 606 ] |
598 }); | 607 }); |
599 os.addMessage('open', { | 608 os.addMessage('open', { |
600 vars: {str: 'string *', flags: 'obj_int32 *', filedes: 'obj_int32 *', perm: 'obj_int32 *'}, | 609 vars: {str: 'string *', flags: 'obj_int32 *', filedes: 'obj_int32 *', perm: 'obj_int32 *'}, |
759 } | 768 } |
760 } | 769 } |
761 forwarddec += '} lambda_' + mynum + '_env;\n' | 770 forwarddec += '} lambda_' + mynum + '_env;\n' |
762 | 771 |
763 var myenvinit = '\tlambda_' + mynum + '_env * myenv = malloc(sizeof(lambda_' + mynum + '_env));\n'; | 772 var myenvinit = '\tlambda_' + mynum + '_env * myenv = malloc(sizeof(lambda_' + mynum + '_env));\n'; |
773 if (this.symbols.needsParentEnv) { | |
774 myenvinit += '\tmyenv->parent = env;\n'; | |
775 } | |
764 this.symbols.envtype = 'lambda_' + mynum + '_env'; | 776 this.symbols.envtype = 'lambda_' + mynum + '_env'; |
765 } else { | 777 } else { |
766 var myenvinit = ''; | 778 var myenvinit = ''; |
767 } | 779 } |
768 | 780 |