Mercurial > repos > tabletprog
changeset 50:3e8d2a91102c
Improve tpc.js compiler driver with some nice swithc handling and fix a small bug in syntax error reporting.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 13 Jul 2012 17:03:59 -0700 |
parents | f2cda2e6f70e |
children | 90542a7077a9 |
files | tpc.js |
diffstat | 1 files changed, 53 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/tpc.js Fri Jul 13 14:16:51 2012 -0700 +++ b/tpc.js Fri Jul 13 17:03:59 2012 -0700 @@ -1,24 +1,65 @@ var module = {exports: {}}; var PEG; -if (arguments.length < 1) { - print('usage: d8 tpc.js -- filename'); - os.exit(); -} else { - compileFile(arguments[0]); +var file = null; +var argtype = 'normal'; +var includes = []; +var basedir = ''; +for (var i = 0; i < arguments.length; i++) { + switch (argtype) { + case 'normal': + switch (arguments[i]) { + case '-basedir': + case '-i': + argtype = arguments[i]; + break; + default: + if (arguments[i].charAt(0) == '-') { + print("unrecognized switch", arguments[i]); + quit(1); + } + file = arguments[i]; + } + break; + case '-basedir': + if (basedir == '') { + basedir = arguments[i]; + argtype = 'normal'; + } else { + print("only one -basedir option allowed"); + quit(1); + } + break; + case '-i': + includes.push(arguments[i]); + argtype = 'normal'; + break; + } +} +if (argtype != 'normal') { + print("switch", argtype, "expects a parameter"); + quit(1); } -function compileFile(filename) +if (!file) { + print('usage: d8 tpc.js -- filename'); + quit(1); +} + +compileFile(file, basedir, includes); + + +function compileFile(filename, basedir, includes) { var text = read(filename); - load('peg.js'); + load(basedir + 'peg.js'); PEG = module.exports; - load('parser.js'); - load('compiler.js'); - load('cbackend.js'); + load(basedir + 'parser.js'); + load(basedir + 'compiler.js'); + load(basedir + 'cbackend.js'); try { var parsed = parser.parse(text); - } catch (e) { + } catch (error) { print('SyntaxError on at', error.line, ',', error.column, ':', error.message); var lines = text.split('\n'); print(lines[error.line-1]); @@ -31,7 +72,7 @@ } } print(spacer + '^'); - exit(1); + quit(1); } var c = parsed.toCModule(); print(c);