# HG changeset patch # User Mike Pavone # Date 1343055601 25200 # Node ID b5152f5ac13839bcce4ae48079a2d5acfeb2ba7b # Parent f23ecd4e22afd62f17d96517ef333302c3b00c75 Add backend selection to tpc.js compiler driver diff -r f23ecd4e22af -r b5152f5ac138 tpc.js --- a/tpc.js Mon Jul 23 07:59:34 2012 -0700 +++ b/tpc.js Mon Jul 23 08:00:01 2012 -0700 @@ -6,12 +6,14 @@ var includes = ['.']; var basedir = ''; var debugmode = false; +var backend = 'C'; for (var i = 0; i < arguments.length; i++) { switch (argtype) { case 'normal': switch (arguments[i]) { case '-basedir': case '-i': + case '-backend': argtype = arguments[i]; break; case '-compilerdebug': @@ -38,6 +40,10 @@ includes.push(arguments[i]); argtype = 'normal'; break; + case '-backend': + backend = arguments[i]; + argtype = 'normal'; + break; } } if (argtype != 'normal') { @@ -50,7 +56,7 @@ quit(1); } includes.push(basedir + 'modules'); -compileFile(file, basedir, includes, debugmode); +compileFile(file, basedir, includes, debugmode, backend); function parseFile(filename) @@ -78,19 +84,35 @@ } -function compileFile(filename, basedir, includes, debugmode) +function compileFile(filename, basedir, includes, debugmode, backend) { load(basedir + 'peg.js'); PEG = module.exports; load(basedir + 'parser.js'); load(basedir + 'compiler.js'); - load(basedir + 'cbackend.js'); + if (backend == 'C') { + load(basedir + 'cbackend.js'); + } else { + load(basedir + 'jsbackend.js'); + } + var parsed = parseFile(filename); if (debugmode) { debugprint = print; } toplevel = new topsymbols(includes); - var c = parsed.toCModule(); + switch(backend) + { + case 'C': + var c = parsed.toCModule(); + break; + case 'JS': + var c = parsed.toJSModule(); + break; + default: + print('Backend', backend, ' not recognized'); + quit(1); + } print(c); }