Mercurial > repos > tabletprog
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); }