changeset 66:25b697c91629

Finish implementation of external module access
author Mike Pavone <pavone@retrodev.com>
date Sat, 14 Jul 2012 12:30:25 -0700
parents b4190db72288
children 42d5660b30b4
files cbackend.js compiler.js tpc.js
diffstat 3 files changed, 27 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/cbackend.js	Sat Jul 14 04:56:05 2012 -0700
+++ b/cbackend.js	Sat Jul 14 12:30:25 2012 -0700
@@ -709,14 +709,22 @@
 	toplevel.names['os'] = os;
 }
 
+modulefile.prototype.toC = function(){
+	var ast = parseFile(this.path + '/' + this.file);
+	ast.populateSymbols(toplevel);
+	return ast.toCModuleInstance();
+};
+
 function processUsedToplevel(toplevel)
 {
 	var ret = '';
 	var modulenum = 0;
 	for (var symbol in toplevel.used) {
-		ret += '\tmodule_' + (modulenum) + ' = ' + toplevel.names[symbol].toC() + ';\n';
-		toplevelcode += 'object * module_' + modulenum + ';\n';
 		toplevel.names[symbol].modulevar = 'module_' + (modulenum++);
+		toplevelcode += 'object * ' + toplevel.names[symbol].modulevar + ';\n';
+	}
+	for (var symbol in toplevel.used) {
+		ret += '\t' + toplevel.names[symbol].modulevar + ' = ' + toplevel.names[symbol].toC() + ';\n';
 	}
 	return ret;
 }
--- a/compiler.js	Sat Jul 14 04:56:05 2012 -0700
+++ b/compiler.js	Sat Jul 14 12:30:25 2012 -0700
@@ -11,7 +11,7 @@
 	this.file = file;
 }
 
-var toplevel = new topsymbols();
+var toplevel = new topsymbols([]);
 function topsymbols(moduledirs)
 {
 	this.names = null;
--- a/tpc.js	Sat Jul 14 04:56:05 2012 -0700
+++ b/tpc.js	Sat Jul 14 12:30:25 2012 -0700
@@ -3,7 +3,7 @@
 
 var file = null;
 var argtype = 'normal';
-var includes = [];
+var includes = ['.'];
 var basedir = '';
 var debugmode = false;
 for (var i = 0; i < arguments.length; i++) {
@@ -53,14 +53,9 @@
 compileFile(file, basedir, includes, debugmode);
 
 
-function compileFile(filename, basedir, includes, debugmode)
+function parseFile(filename)
 {
 	var text = read(filename);
-	load(basedir + 'peg.js');
-	PEG = module.exports;
-	load(basedir + 'parser.js');
-	load(basedir + 'compiler.js');
-	load(basedir + 'cbackend.js');
 	try {
 		var parsed = parser.parse(text);	
 	} catch (error) {
@@ -78,9 +73,23 @@
 		print(spacer + '^');
 		quit(1);
 	}
+	return parsed;
+}
+
+
+function compileFile(filename, basedir, includes, debugmode)
+{
+	
+	load(basedir + 'peg.js');
+	PEG = module.exports;
+	load(basedir + 'parser.js');
+	load(basedir + 'compiler.js');
+	load(basedir + 'cbackend.js');
+	var parsed = parseFile(filename);
 	if (debugmode) {
 		debugprint = print;
 	}
+	toplevel = new topsymbols(includes);
 	var c = parsed.toCModule();
 	print(c);
 }