Mercurial > repos > tabletprog
diff ilbackend.js @ 294:d1dc2d70bdfd
Move OS module out of backend Javascript into a proper module file. Add normal bytearray to bytearray module. Add read:to method to os module for reading into a bytearray.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 24 Jul 2014 21:58:26 -0700 |
parents | 6fe9343b1400 |
children |
line wrap: on
line diff
--- a/ilbackend.js Thu Jul 24 09:43:18 2014 -0700 +++ b/ilbackend.js Thu Jul 24 21:58:26 2014 -0700 @@ -973,157 +973,6 @@ makeArray(), makeString(), makelambda()]; } -function addBuiltinModules(toplevel) -{ - var os = new cObject('mod_obj_os'); - os.addInclude('<sys/stat.h>'); - os.addInclude('<fcntl.h>'); - os.addInclude('<stdlib.h>'); - os.addInclude('<time.h>'); - os.addInclude('<unistd.h>'); - os.addMessage('write', { - vars: {str: 'string *', intret: 'obj_int32 *', filedes: 'obj_int32 *'}, - lines: [ - 'filedes = va_arg(args, obj_int32 *);', - 'str = va_arg(args, string *);', - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = write(filedes->num, str->data, str->bytes);', - 'return &(intret->header);' - ] - }); - os.addMessage('read', { - vars: {str: 'string *', size: 'obj_int32 *', filedes: 'obj_int32 *'}, - lines: [ - 'filedes = va_arg(args, obj_int32 *);', - 'size = va_arg(args, obj_int32 *);', - 'str = (string *)make_object(&string_meta, NULL, 0);', - 'str->data = GC_MALLOC_ATOMIC(size->num + 1);', - 'str->len = str->bytes = read(filedes->num, str->data, size->num);', - 'if (str->bytes < 0) { str->bytes = str->len = 0; }', - 'str->data[str->bytes] = 0;', - 'return &(str->header);' - ] - }); - os.addMessage('open', { - vars: {str: 'string *', flags: 'obj_int32 *', filedes: 'obj_int32 *', perm: 'obj_int32 *'}, - lines: [ - 'str = va_arg(args, string *);', - 'flags = va_arg(args, obj_int32 *);', - 'filedes = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'if (num_params == 3) {', - ' filedes->num = open(str->data, flags->num);', - '} else if (num_params == 4) {', - ' perm = va_arg(args, obj_int32 *);', - ' filedes->num = open(str->data, flags->num, perm->num);', - '} else {', - ' filedes->num = -1;', - '}', - 'return &(filedes->header);' - ] - }); - os.addMessage('close', { - vars: {filedes: 'obj_int32 *', intret: 'obj_int32 *'}, - lines: [ - 'filedes = va_arg(args, obj_int32 *);', - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = close(filedes->num);', - 'return &(intret->header);' - ] - }); - os.addMessage('O_RDONLY', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = O_RDONLY;', - 'return &(intret->header);' - ] - }); - os.addMessage('O_WRONLY', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = O_WRONLY;', - 'return &(intret->header);' - ] - }); - os.addMessage('O_RDWR', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = O_RDWR;', - 'return &(intret->header);' - ] - }); - os.addMessage('O_CREAT', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = O_CREAT;', - 'return &(intret->header);' - ] - }); - os.addMessage('O_APPEND', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = O_APPEND;', - 'return &(intret->header);' - ] - }); - os.addMessage('O_TRUNC', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = O_TRUNC;', - 'return &(intret->header);' - ] - }); - os.addMessage('rand', { - vars: {intret: 'obj_int32 *'}, - lines: [ - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = rand();', - 'return &(intret->header);' - ] - }); - os.addMessage('rand64', { - vars: {intret64: 'obj_int64 *'}, - lines: [ - 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);', - 'intret64->num = (((int64_t)rand()) << 32 ) | rand();', - 'return &(intret64->header);' - ] - }); - os.addMessage('srand', { - vars: {oseed: 'object *', seed: 'obj_int32 *'}, - lines: [ - 'oseed = va_arg(args, object *);', - 'seed = mcall(' + getMethodId("int32") + ', 1, oseed);', - 'srand(seed->num);', - 'return &(seed->header);' - ] - }); - os.addMessage('time', { - vars: {intret64: 'obj_int64 *'}, - lines: [ - 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);', - 'intret64->num = time(NULL);', - 'return &(intret64->header);' - ] - }); - os.addMessage('sleep', { - vars: {osecs: 'object *', secs: 'obj_int32 *', intret: 'obj_int32 *'}, - lines: [ - 'osecs = va_arg(args, object *);', - 'secs = mcall(' + getMethodId("int32") + ', 1, osecs);', - 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', - 'intret->num = sleep(secs->num);', - 'return &(intret->header);' - ] - }); - toplevel.names['os'] = os; -} - modulefile.prototype.toIL = function(){ return this.ast.toILModuleInstance(); }; @@ -1175,7 +1024,6 @@ forwarddec += builtins[i].toEarlyCDef(); toplevelcode += builtins[i].toILDef(); } - addBuiltinModules(toplevel); debugprint('//------POPULATING SYMBOLS-----'); obj.populateSymbols(toplevel); var moduleinit = processUsedToplevel(toplevel);