Mercurial > repos > tabletprog
comparison tpc.js @ 251:2557ce4e671f
Fix a couple of compiler bugs. topenv was getting initialized in multiple places. This resulted in multiple copies of modules getting created which caused problems for macro expansion. Additionally, arguments were not being marked as declared during code generation so assigning to an argument that was not closed over generated invalid C code.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 11 Apr 2014 22:29:32 -0700 |
parents | 2dac67e9d18b |
children |
comparison
equal
deleted
inserted
replaced
250:c58e17f5c0f6 | 251:2557ce4e671f |
---|---|
107 | 107 |
108 var parsed = parseFile(filename); | 108 var parsed = parseFile(filename); |
109 if (debugmode) { | 109 if (debugmode) { |
110 debugprint = print; | 110 debugprint = print; |
111 } | 111 } |
112 parsed = parsed.macroexpand(new topenv(includes)); | 112 var top = new topenv(includes); |
113 parsed = parsed.macroexpand(top); | |
113 if (macroonly) { | 114 if (macroonly) { |
114 print(''+parsed); | 115 print(''+parsed); |
115 } else { | 116 } else { |
116 toplevel = new topsymbols(includes); | 117 toplevel = new topsymbols(includes, top); |
117 switch(backend) | 118 switch(backend) |
118 { | 119 { |
119 case 'C': | 120 case 'C': |
120 var c = parsed.toCModule(); | 121 var c = parsed.toCModule(); |
121 break; | 122 break; |