Mercurial > repos > tabletprog
comparison tpc.js @ 126:a2d2d8e09291
Merge
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 05 Aug 2013 23:37:17 -0700 |
parents | 926b65fe92b4 |
children | 5e34563f90ae |
comparison
equal
deleted
inserted
replaced
125:6f8d868e8da0 | 126:a2d2d8e09291 |
---|---|
4 var file = null; | 4 var file = null; |
5 var argtype = 'normal'; | 5 var argtype = 'normal'; |
6 var includes = ['.']; | 6 var includes = ['.']; |
7 var basedir = ''; | 7 var basedir = ''; |
8 var debugmode = false; | 8 var debugmode = false; |
9 var backend = 'C'; | |
9 for (var i = 0; i < arguments.length; i++) { | 10 for (var i = 0; i < arguments.length; i++) { |
10 switch (argtype) { | 11 switch (argtype) { |
11 case 'normal': | 12 case 'normal': |
12 switch (arguments[i]) { | 13 switch (arguments[i]) { |
13 case '-basedir': | 14 case '-basedir': |
14 case '-i': | 15 case '-i': |
16 case '-backend': | |
15 argtype = arguments[i]; | 17 argtype = arguments[i]; |
16 break; | 18 break; |
17 case '-compilerdebug': | 19 case '-compilerdebug': |
18 debugmode = true; | 20 debugmode = true; |
19 break; | 21 break; |
36 break; | 38 break; |
37 case '-i': | 39 case '-i': |
38 includes.push(arguments[i]); | 40 includes.push(arguments[i]); |
39 argtype = 'normal'; | 41 argtype = 'normal'; |
40 break; | 42 break; |
43 case '-backend': | |
44 backend = arguments[i]; | |
45 argtype = 'normal'; | |
46 break; | |
41 } | 47 } |
42 } | 48 } |
43 if (argtype != 'normal') { | 49 if (argtype != 'normal') { |
44 print("switch", argtype, "expects a parameter"); | 50 print("switch", argtype, "expects a parameter"); |
45 quit(1); | 51 quit(1); |
48 if (!file) { | 54 if (!file) { |
49 print('usage: d8 tpc.js -- filename'); | 55 print('usage: d8 tpc.js -- filename'); |
50 quit(1); | 56 quit(1); |
51 } | 57 } |
52 includes.push(basedir + 'modules'); | 58 includes.push(basedir + 'modules'); |
53 compileFile(file, basedir, includes, debugmode); | 59 compileFile(file, basedir, includes, debugmode, backend); |
54 | 60 |
55 | 61 |
56 function parseFile(filename) | 62 function parseFile(filename) |
57 { | 63 { |
58 debugprint('//parsing', filename); | 64 debugprint('//parsing', filename); |
76 } | 82 } |
77 return parsed; | 83 return parsed; |
78 } | 84 } |
79 | 85 |
80 | 86 |
81 function compileFile(filename, basedir, includes, debugmode) | 87 function compileFile(filename, basedir, includes, debugmode, backend) |
82 { | 88 { |
83 | 89 |
84 load(basedir + 'peg.js'); | 90 load(basedir + 'peg.js'); |
85 PEG = module.exports; | 91 PEG = module.exports; |
86 load(basedir + 'parser.js'); | 92 load(basedir + 'parser.js'); |
87 load(basedir + 'compiler.js'); | 93 load(basedir + 'compiler.js'); |
88 load(basedir + 'cbackend.js'); | 94 if (backend == 'C') { |
95 load(basedir + 'cbackend.js'); | |
96 } else { | |
97 load(basedir + 'jsbackend.js'); | |
98 } | |
99 | |
89 var parsed = parseFile(filename); | 100 var parsed = parseFile(filename); |
90 if (debugmode) { | 101 if (debugmode) { |
91 debugprint = print; | 102 debugprint = print; |
92 } | 103 } |
93 toplevel = new topsymbols(includes); | 104 toplevel = new topsymbols(includes); |
94 var c = parsed.toCModule(); | 105 switch(backend) |
106 { | |
107 case 'C': | |
108 var c = parsed.toCModule(); | |
109 break; | |
110 case 'JS': | |
111 var c = makeJSProg(parsed); | |
112 break; | |
113 default: | |
114 print('Backend', backend, ' not recognized'); | |
115 quit(1); | |
116 } | |
95 print(c); | 117 print(c); |
96 } | 118 } |