comparison cbackend.js @ 52:ab6217b8ae4c

Remove some C compiler warnings due to sloppy native code
author Mike Pavone <pavone@retrodev.com>
date Fri, 13 Jul 2012 18:10:38 -0700
parents f2cda2e6f70e
children 976a0924e1d4
comparison
equal deleted inserted replaced
51:90542a7077a9 52:ab6217b8ae4c
355 vars: {ret: objtype + ' *', argb: objtype +' *'}, 355 vars: {ret: objtype + ' *', argb: objtype +' *'},
356 lines: [ 356 lines: [
357 'argb = va_arg(args, ' + objtype + ' *);', 357 'argb = va_arg(args, ' + objtype + ' *);',
358 'ret = (' + objtype + ' *)make_object(&' + objtype + '_meta, NULL, 0);', 358 'ret = (' + objtype + ' *)make_object(&' + objtype + '_meta, NULL, 0);',
359 'ret->num = self->num ' + cop + ' argb->num;', 359 'ret->num = self->num ' + cop + ' argb->num;',
360 'return ret;' 360 'return &(ret->header);'
361 ] 361 ]
362 }); 362 });
363 } 363 }
364 364
365 function addCompOp(cobject, opname, cop, objtype) 365 function addCompOp(cobject, opname, cop, objtype)
388 addCompOp(int32, 'GT_', '>', 'obj_int32'); 388 addCompOp(int32, 'GT_', '>', 'obj_int32');
389 addCompOp(int32, 'EQ_', '==', 'obj_int32'); 389 addCompOp(int32, 'EQ_', '==', 'obj_int32');
390 addCompOp(int32, 'NEQ_', '!=', 'obj_int32'); 390 addCompOp(int32, 'NEQ_', '!=', 'obj_int32');
391 addCompOp(int32, 'GEQ_', '>=', 'obj_int32'); 391 addCompOp(int32, 'GEQ_', '>=', 'obj_int32');
392 addCompOp(int32, 'LEQ_', '<=', 'obj_int32'); 392 addCompOp(int32, 'LEQ_', '<=', 'obj_int32');
393 int32.addInclude('<string.h>');
393 int32.addMessage('string', { 394 int32.addMessage('string', {
394 vars: {str: 'string *'}, 395 vars: {str: 'string *'},
395 lines: [ 396 lines: [
396 'str = (string *)make_object(&string_meta, NULL, 0);', 397 'str = (string *)make_object(&string_meta, NULL, 0);',
397 'str->data = malloc(12);', 398 'str->data = malloc(12);',
398 'sprintf(str->data, "%d", self->num);', 399 'sprintf(str->data, "%d", self->num);',
399 'str->length = str->bytes = strlen(str->data);', 400 'str->length = str->bytes = strlen(str->data);',
400 'return (object *)str;' 401 'return &(str->header);'
401 ] 402 ]
402 }); 403 });
403 return int32; 404 return int32;
404 } 405 }
405 406
424 lines: [ 425 lines: [
425 'index = va_arg(args, obj_int32 *);', 426 'index = va_arg(args, obj_int32 *);',
426 'if (index->num >= 0 && index->num < self->size) {', 427 'if (index->num >= 0 && index->num < self->size) {',
427 ' self->data[index->num] = va_arg(args, object *);', 428 ' self->data[index->num] = va_arg(args, object *);',
428 '}', 429 '}',
429 'return (object *)self;' 430 'return &(self->header);'
430 ] 431 ]
431 }); 432 });
432 array.addMessage('foreach', { 433 array.addMessage('foreach', {
433 vars: {index: 'obj_int32 *', i: 'int32_t', clos: 'lambda *'}, 434 vars: {index: 'obj_int32 *', i: 'int32_t', clos: 'lambda *'},
434 lines: [ 435 lines: [
436 'for (i = 0; i < self->size; i++) {', 437 'for (i = 0; i < self->size; i++) {',
437 ' index = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', 438 ' index = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);',
438 ' index->num = i;', 439 ' index->num = i;',
439 ' ccall(clos, 2, index, self->data[i]);', 440 ' ccall(clos, 2, index, self->data[i]);',
440 '}', 441 '}',
441 'return (object *)self;' 442 'return &(self->header);'
442 ] 443 ]
443 }); 444 });
444 array.addMessage('append', { 445 array.addMessage('append', {
445 vars: {tmp: 'object *'}, 446 vars: {tmp: 'object **'},
446 lines: [ 447 lines: [
447 'if (self->storage == self->size) {', 448 'if (self->storage == self->size) {',
448 ' self->storage *= 2;', 449 ' self->storage *= 2;',
449 ' tmp = realloc(self->data, self->storage);', 450 ' tmp = realloc(self->data, self->storage);',
450 ' if (!tmp) {', 451 ' if (!tmp) {',
452 ' exit(1);', 453 ' exit(1);',
453 ' }', 454 ' }',
454 ' self->data = tmp;', 455 ' self->data = tmp;',
455 '}', 456 '}',
456 'self->data[self->size++] = va_arg(args, object *);', 457 'self->data[self->size++] = va_arg(args, object *);',
457 'return self;' 458 'return &(self->header);'
458 ] 459 ]
459 }); 460 });
460 return array; 461 return array;
461 } 462 }
462 463
494 }); 495 });
495 string.addMessage('print', { 496 string.addMessage('print', {
496 vars: {}, 497 vars: {},
497 lines: [ 498 lines: [
498 'fwrite(self->data, 1, self->bytes, stdout);', 499 'fwrite(self->data, 1, self->bytes, stdout);',
499 'return self;' 500 'return &(self->header);'
500 ] 501 ]
501 }); 502 });
502 string.addMessage('string', { 503 string.addMessage('string', {
503 vars: {}, 504 vars: {},
504 lines: [ 'return self;' ] 505 lines: [ 'return &(self->header);' ]
505 }); 506 });
506 string.addMessage('CAT_', { 507 string.addMessage('CAT_', {
507 vars: {argbo: 'object *', argb: 'string *', out: 'string *'}, 508 vars: {argbo: 'object *', argb: 'string *', out: 'string *'},
508 lines: [ 509 lines: [
509 'argbo = va_arg(args, object *);', 510 'argbo = va_arg(args, object *);',
510 'argb = mcall(' + getMethodId('string') + ', 1, argbo);', 511 'argb = (string *)mcall(' + getMethodId('string') + ', 1, argbo);',
511 'out = (string *)make_object(&string_meta, NULL, 0);', 512 'out = (string *)make_object(&string_meta, NULL, 0);',
512 'out->bytes = self->bytes + argb->bytes;', 513 'out->bytes = self->bytes + argb->bytes;',
513 'out->length = self->length + argb->length;', 514 'out->length = self->length + argb->length;',
514 'out->data = malloc(out->bytes+1);', 515 'out->data = malloc(out->bytes+1);',
515 'memcpy(out->data, self->data, self->bytes);', 516 'memcpy(out->data, self->data, self->bytes);',
516 'memcpy(out->data + self->bytes, argb->data, argb->bytes + 1);', 517 'memcpy(out->data + self->bytes, argb->data, argb->bytes + 1);',
517 'return out;' 518 'return &(out->header);'
518 ] 519 ]
519 }); 520 });
520 string.addMessage('byte', { 521 string.addMessage('byte', {
521 vars: {index: 'obj_int32 *', intret: 'obj_int32 *'}, 522 vars: {index: 'obj_int32 *', intret: 'obj_int32 *'},
522 lines: [ 523 lines: [
523 'index = va_arg(args, obj_int32 *);', 524 'index = va_arg(args, obj_int32 *);',
524 'intret = make_object(&obj_int32_meta, NULL, 0);', 525 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);',
525 'intret->num = index->num < self->bytes ? self->data[index->num] : 0;', 526 'intret->num = index->num < self->bytes ? self->data[index->num] : 0;',
526 'return intret;' 527 'return &(intret->header);'
527 ] 528 ]
528 }); 529 });
529 return string; 530 return string;
530 } 531 }
531 532