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 }