comparison cbackend.js @ 288:a4c2b31acba7

Add utf8 method to integer types for converting a number into a utf8 string made up of the corresponding character code
author Michael Pavone <pavone@retrodev.com>
date Tue, 22 Jul 2014 21:31:41 -0700
parents ddf38b66b2e2
children befaefdfcd8a
comparison
equal deleted inserted replaced
287:b01d7c1b4edd 288:a4c2b31acba7
758 'sprintf(str->data, "%' + (bits == 64 ? 'l' : '') + (unsigned ? 'u' : 'd') + '", self->num);', 758 'sprintf(str->data, "%' + (bits == 64 ? 'l' : '') + (unsigned ? 'u' : 'd') + '", self->num);',
759 'str->len = str->bytes = strlen(str->data);', 759 'str->len = str->bytes = strlen(str->data);',
760 'return &(str->header);' 760 'return &(str->header);'
761 ] 761 ]
762 }); 762 });
763 intObj.addMessage('utf8', {
764 vars: {str: 'string *', norm: 'uint32_t'},
765 lines: [
766 'str = (string *)make_object(&string_meta, NULL, 0);',
767 'str->len = 1;',
768 'norm = self->num;',
769 'if (norm < 0x80) {',
770 ' str->bytes = 1;',
771 ' str->data = GC_MALLOC(2);',
772 ' str->data[0] = norm;',
773 '} else if(norm < 0x800) {',
774 ' str->bytes = 2;',
775 ' str->data = GC_MALLOC(3);',
776 ' str->data[0] = 0xC0 | norm >> 6;',
777 ' str->data[1] = 0x80 | (norm & 0x3F);',
778 '} else if(norm < 0x10000) {',
779 ' str->bytes = 3;',
780 ' str->data = GC_MALLOC(4);',
781 ' str->data[0] = 0xE0 | norm >> 12;',
782 ' str->data[1] = 0x80 | ((norm >> 6) & 0x3F);',
783 ' str->data[2] = 0x80 | (norm & 0x3F);',
784 '} else if(norm < 0x10FFFF) {',
785 ' str->bytes = 4;',
786 ' str->data = GC_MALLOC(5);',
787 ' str->data[0] = 0xF0 | norm >> 18;',
788 ' str->data[1] = 0x80 | ((norm >> 12) & 0x3F);',
789 ' str->data[2] = 0x80 | ((norm >> 6) & 0x3F);',
790 ' str->data[3] = 0x80 | (norm & 0x3F);',
791 '} else {',
792 ' str->len = str->bytes = 0;',
793 ' str->data = GC_MALLOC(1);',
794 '}',
795 'str->data[str->bytes] = 0;',
796 'return &(str->header);'
797 ]
798 });
763 //7FFFFFFFFFFFFFFF 799 //7FFFFFFFFFFFFFFF
764 //01234567890123456789 800 //01234567890123456789
765 intObj.addMessage('hex', { 801 intObj.addMessage('hex', {
766 vars: {str: 'string *'}, 802 vars: {str: 'string *'},
767 lines: [ 803 lines: [