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