# HG changeset patch # User Mike Pavone # Date 1342294225 25200 # Node ID 25b697c916299ad7f28e078d1e698c7141b41c93 # Parent b4190db72288d50151dbfd1bdc3ee52d6b586b33 Finish implementation of external module access diff -r b4190db72288 -r 25b697c91629 cbackend.js --- 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; } diff -r b4190db72288 -r 25b697c91629 compiler.js --- 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; diff -r b4190db72288 -r 25b697c91629 tpc.js --- 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); }