Mercurial > repos > tabletprog
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 |