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);