comparison cbackend.js @ 162:157cc497a7f1

Add rand srand and time to os module
author Mike Pavone <pavone@retrodev.com>
date Sat, 10 Aug 2013 18:58:40 -0700
parents fc8eecad71e6
children 224071eed9dd
comparison
equal deleted inserted replaced
161:fc8eecad71e6 162:157cc497a7f1
771 function addBuiltinModules(toplevel) 771 function addBuiltinModules(toplevel)
772 { 772 {
773 var os = new cObject('mod_obj_os'); 773 var os = new cObject('mod_obj_os');
774 os.addInclude('<sys/stat.h>'); 774 os.addInclude('<sys/stat.h>');
775 os.addInclude('<fcntl.h>'); 775 os.addInclude('<fcntl.h>');
776 os.addInclude('<stdlib.h>');
777 os.addInclude('<time.h>');
776 os.addMessage('write', { 778 os.addMessage('write', {
777 vars: {str: 'string *', intret: 'obj_int32 *', filedes: 'obj_int32 *'}, 779 vars: {str: 'string *', intret: 'obj_int32 *', filedes: 'obj_int32 *'},
778 lines: [ 780 lines: [
779 'filedes = va_arg(args, obj_int32 *);', 781 'filedes = va_arg(args, obj_int32 *);',
780 'str = va_arg(args, string *);', 782 'str = va_arg(args, string *);',
788 lines: [ 790 lines: [
789 'filedes = va_arg(args, obj_int32 *);', 791 'filedes = va_arg(args, obj_int32 *);',
790 'size = va_arg(args, obj_int32 *);', 792 'size = va_arg(args, obj_int32 *);',
791 'str = (string *)make_object(&string_meta, NULL, 0);', 793 'str = (string *)make_object(&string_meta, NULL, 0);',
792 'str->data = GC_MALLOC_ATOMIC(size->num + 1);', 794 'str->data = GC_MALLOC_ATOMIC(size->num + 1);',
793 'str->length = str->bytes = read(filedes->num, str->data, size->num);', 795 'str->len = str->bytes = read(filedes->num, str->data, size->num);',
794 'if (str->bytes < 0) { str->bytes = str->length = 0; }', 796 'if (str->bytes < 0) { str->bytes = str->len = 0; }',
795 'str->data[str->bytes] = 0;', 797 'str->data[str->bytes] = 0;',
796 'return &(str->header);' 798 'return &(str->header);'
797 ] 799 ]
798 }); 800 });
799 os.addMessage('open', { 801 os.addMessage('open', {
868 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', 870 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);',
869 'intret->num = O_TRUNC;', 871 'intret->num = O_TRUNC;',
870 'return &(intret->header);' 872 'return &(intret->header);'
871 ] 873 ]
872 }); 874 });
875 os.addMessage('rand', {
876 vars: {intret: 'obj_int32 *'},
877 lines: [
878 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);',
879 'intret->num = rand();',
880 'return &(intret->header);'
881 ]
882 });
883 os.addMessage('rand64', {
884 vars: {intret64: 'obj_int64 *'},
885 lines: [
886 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);',
887 'intret64->num = (((int64_t)rand()) << 32 ) | rand();',
888 'return &(intret64->header);'
889 ]
890 });
891 os.addMessage('srand', {
892 vars: {oseed: 'object *', seed: 'obj_int32 *'},
893 lines: [
894 'oseed = va_arg(args, object *);',
895 'seed = mcall(' + getMethodId("int32") + ', 1, oseed);',
896 'srand(seed->num);',
897 'return &(seed->header);'
898 ]
899 });
900 os.addMessage('time', {
901 vars: {intret64: 'obj_int64 *'},
902 lines: [
903 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);',
904 'intret64->num = time(NULL);',
905 'return &(intret64->header);'
906 ]
907 });
873 toplevel.names['os'] = os; 908 toplevel.names['os'] = os;
874 } 909 }
875 910
876 modulefile.prototype.toC = function(){ 911 modulefile.prototype.toC = function(){
877 return this.ast.toCModuleInstance(); 912 return this.ast.toCModuleInstance();