@@ -36,6 +36,11 @@ def generic_visit(self, node):
3636def getfilename (node ):
3737 return node .__class__ .__name__ .lower () + '.txt'
3838
39+ def escape (s ):
40+ if s .startswith ('\\ ' ):
41+ return s + ' '
42+ return s
43+
3944class ASTCodeGenerator (ConvertVisitor ):
4045 def __init__ (self ):
4146 self .env = Environment (loader = FileSystemLoader (DEFAULT_TEMPLATE_DIR ))
@@ -63,7 +68,7 @@ def visit_ModuleDef(self, node):
6368 template = self .env .get_template (filename )
6469 paramlist = self .visit (node .paramlist )
6570 template_dict = {
66- 'modulename' : node .name ,
71+ 'modulename' : escape ( node .name ) ,
6772 'paramlist' : '' if len (node .paramlist .params ) == 0 else paramlist ,
6873 'portlist' : self .visit (node .portlist ),
6974 'items' : [ self .visit (item ) for item in node .items ],
@@ -97,7 +102,7 @@ def visit_Port(self, node):
97102 filename = getfilename (node )
98103 template = self .env .get_template (filename )
99104 template_dict = {
100- 'name' : node .name ,
105+ 'name' : escape ( node .name ) ,
101106 }
102107 rslt = template .render (template_dict )
103108 return rslt
@@ -126,7 +131,7 @@ def visit_Identifier(self, node):
126131 filename = getfilename (node )
127132 template = self .env .get_template (filename )
128133 template_dict = {
129- 'name' : node .name ,
134+ 'name' : escape ( node .name ) ,
130135 'scope' : '' if node .scope is None else self .visit (node .scope ),
131136 }
132137 rslt = template .render (template_dict )
@@ -181,7 +186,7 @@ def visit_Variable(self, node):
181186 filename = getfilename (node )
182187 template = self .env .get_template (filename )
183188 template_dict = {
184- 'name' : node .name ,
189+ 'name' : escape ( node .name ) ,
185190 'width' : '' if node .width is None else self .visit (node .width ),
186191 'signed' : node .signed ,
187192 }
@@ -192,7 +197,7 @@ def visit_Input(self, node):
192197 filename = getfilename (node )
193198 template = self .env .get_template (filename )
194199 template_dict = {
195- 'name' : node .name ,
200+ 'name' : escape ( node .name ) ,
196201 'width' : '' if node .width is None else self .visit (node .width ),
197202 'signed' : node .signed ,
198203 }
@@ -203,7 +208,7 @@ def visit_Output(self, node):
203208 filename = getfilename (node )
204209 template = self .env .get_template (filename )
205210 template_dict = {
206- 'name' : node .name ,
211+ 'name' : escape ( node .name ) ,
207212 'width' : '' if node .width is None else self .visit (node .width ),
208213 'signed' : node .signed ,
209214 }
@@ -214,7 +219,7 @@ def visit_Inout(self, node):
214219 filename = getfilename (node )
215220 template = self .env .get_template (filename )
216221 template_dict = {
217- 'name' : node .name ,
222+ 'name' : escape ( node .name ) ,
218223 'width' : '' if node .width is None else self .visit (node .width ),
219224 'signed' : node .signed ,
220225 }
@@ -225,7 +230,7 @@ def visit_Tri(self, node):
225230 filename = getfilename (node )
226231 template = self .env .get_template (filename )
227232 template_dict = {
228- 'name' : node .name ,
233+ 'name' : escape ( node .name ) ,
229234 'width' : '' if node .width is None else self .visit (node .width ),
230235 'signed' : node .signed ,
231236 }
@@ -236,7 +241,7 @@ def visit_Wire(self, node):
236241 filename = getfilename (node )
237242 template = self .env .get_template (filename )
238243 template_dict = {
239- 'name' : node .name ,
244+ 'name' : escape ( node .name ) ,
240245 'width' : '' if node .width is None else self .visit (node .width ),
241246 'signed' : node .signed ,
242247 }
@@ -247,7 +252,7 @@ def visit_Reg(self, node):
247252 filename = getfilename (node )
248253 template = self .env .get_template (filename )
249254 template_dict = {
250- 'name' : node .name ,
255+ 'name' : escape ( node .name ) ,
251256 'width' : '' if node .width is None else self .visit (node .width ),
252257 'signed' : node .signed ,
253258 }
@@ -258,7 +263,7 @@ def visit_WireArray(self, node):
258263 filename = getfilename (node )
259264 template = self .env .get_template (filename )
260265 template_dict = {
261- 'name' : node .name ,
266+ 'name' : escape ( node .name ) ,
262267 'width' : '' if node .width is None else self .visit (node .width ),
263268 'length' : self .visit (node .length ),
264269 'signed' : node .signed ,
@@ -270,7 +275,7 @@ def visit_RegArray(self, node):
270275 filename = getfilename (node )
271276 template = self .env .get_template (filename )
272277 template_dict = {
273- 'name' : node .name ,
278+ 'name' : escape ( node .name ) ,
274279 'width' : '' if node .width is None else self .visit (node .width ),
275280 'length' : self .visit (node .length ),
276281 'signed' : node .signed ,
@@ -282,7 +287,7 @@ def visit_Integer(self, node):
282287 filename = getfilename (node )
283288 template = self .env .get_template (filename )
284289 template_dict = {
285- 'name' : node .name ,
290+ 'name' : escape ( node .name ) ,
286291 'signed' : node .signed ,
287292 }
288293 rslt = template .render (template_dict )
@@ -292,7 +297,7 @@ def visit_Real(self, node):
292297 filename = getfilename (node )
293298 template = self .env .get_template (filename )
294299 template_dict = {
295- 'name' : node .name ,
300+ 'name' : escape ( node .name ) ,
296301 }
297302 rslt = template .render (template_dict )
298303 return rslt
@@ -301,7 +306,7 @@ def visit_Genvar(self, node):
301306 filename = getfilename (node )
302307 template = self .env .get_template (filename )
303308 template_dict = {
304- 'name' : node .name ,
309+ 'name' : escape ( node .name ) ,
305310 }
306311 rslt = template .render (template_dict )
307312 return rslt
@@ -312,7 +317,7 @@ def visit_Ioport(self, node):
312317 template_dict = {
313318 'first' : node .first .__class__ .__name__ .lower (),
314319 'second' : '' if node .second is None else node .second .__class__ .__name__ .lower (),
315- 'name' : node .first .name ,
320+ 'name' : escape ( node .first .name ) ,
316321 'width' : '' if node .first .width is None else self .visit (node .first .width ),
317322 }
318323 rslt = template .render (template_dict )
@@ -323,7 +328,7 @@ def visit_Parameter(self, node):
323328 template = self .env .get_template (filename )
324329 value = self .visit (node .value )
325330 template_dict = {
326- 'name' : node .name ,
331+ 'name' : escape ( node .name ) ,
327332 'width' : '' if node .width is None or (value .startswith ('"' ) and value .endswith ('"' )) else self .visit (node .width ),
328333 'value' : value ,
329334 'signed' : node .signed ,
@@ -336,7 +341,7 @@ def visit_Localparam(self, node):
336341 template = self .env .get_template (filename )
337342 value = self .visit (node .value )
338343 template_dict = {
339- 'name' : node .name ,
344+ 'name' : escape ( node .name ) ,
340345 'width' : '' if node .width is None or (value .startswith ('"' ) and value .endswith ('"' )) else self .visit (node .width ),
341346 'value' : value ,
342347 'signed' : node .signed ,
@@ -694,7 +699,7 @@ def visit_Block(self, node):
694699 filename = getfilename (node )
695700 template = self .env .get_template (filename )
696701 template_dict = {
697- 'scope' : '' if node .scope is None else node .scope ,
702+ 'scope' : '' if node .scope is None else escape ( node .scope ) ,
698703 'statements' : [ self .visit (statement ) for statement in node .statements ],
699704 }
700705 rslt = template .render (template_dict )
@@ -752,7 +757,7 @@ def visit_InstanceList(self, node):
752757 parameterlist = [ self .visit (param ) for param in node .parameterlist ]
753758 instances = [ self .visit (instance ) for instance in node .instances ]
754759 template_dict = {
755- 'module' : node .module ,
760+ 'module' : escape ( node .module ) ,
756761 'parameterlist' : parameterlist ,
757762 'len_parameterlist' : len (parameterlist ),
758763 'instances' : instances ,
@@ -767,7 +772,7 @@ def visit_Instance(self, node):
767772 array = '' if node .array is None else self .visit (node .array )
768773 portlist = [ self .visit (port ) for port in node .portlist ]
769774 template_dict = {
770- 'name' : node .name ,
775+ 'name' : escape ( node .name ) ,
771776 'array' : array ,
772777 'portlist' : portlist ,
773778 'len_portlist' : len (portlist ),
@@ -779,7 +784,7 @@ def visit_ParamArg(self, node):
779784 filename = getfilename (node )
780785 template = self .env .get_template (filename )
781786 template_dict = {
782- 'paramname' : '' if node .paramname is None else node .paramname ,
787+ 'paramname' : '' if node .paramname is None else escape ( node .paramname ) ,
783788 'argname' : '' if node .argname is None else self .visit (node .argname ),
784789 }
785790 rslt = template .render (template_dict )
@@ -789,7 +794,7 @@ def visit_PortArg(self, node):
789794 filename = getfilename (node )
790795 template = self .env .get_template (filename )
791796 template_dict = {
792- 'portname' : '' if node .portname is None else node .portname ,
797+ 'portname' : '' if node .portname is None else escape ( node .portname ) ,
793798 'argname' : '' if node .argname is None else self .visit (node .argname ),
794799 }
795800 rslt = template .render (template_dict )
@@ -800,7 +805,7 @@ def visit_Function(self, node):
800805 template = self .env .get_template (filename )
801806 statement = [ self .visit (s ) for s in node .statement ]
802807 template_dict = {
803- 'name' : node .name ,
808+ 'name' : escape ( node .name ) ,
804809 'retwidth' : self .visit (node .retwidth ),
805810 'statement' : statement ,
806811 }
@@ -823,7 +828,7 @@ def visit_Task(self, node):
823828 filename = getfilename (node )
824829 template = self .env .get_template (filename )
825830 template_dict = {
826- 'name' : node .name ,
831+ 'name' : escape ( node .name ) ,
827832 'statement' : self .visit (node .statement ),
828833 }
829834 rslt = template .render (template_dict )
@@ -855,7 +860,7 @@ def visit_SystemCall(self, node):
855860 template = self .env .get_template (filename )
856861 args = [ self .visit (arg ) for arg in node .args ]
857862 template_dict = {
858- 'syscall' : node .syscall ,
863+ 'syscall' : escape ( node .syscall ) ,
859864 'args' : args ,
860865 'len_args' : len (args ),
861866 }
@@ -866,7 +871,7 @@ def visit_IdentifierScopeLabel(self, node):
866871 filename = getfilename (node )
867872 template = self .env .get_template (filename )
868873 template_dict = {
869- 'name' : node .name ,
874+ 'name' : escape ( node .name ) ,
870875 'loop' : '' if node .loop is None else self .visit (node .loop ),
871876 }
872877 rslt = template .render (template_dict )
@@ -895,7 +900,7 @@ def visit_PragmaEntry(self, node):
895900 filename = getfilename (node )
896901 template = self .env .get_template (filename )
897902 template_dict = {
898- 'name' : node .name ,
903+ 'name' : escape ( node .name ) ,
899904 'value' : '' if node .value is None else self .visit (node .value ),
900905 }
901906 rslt = template .render (template_dict )
@@ -905,7 +910,7 @@ def visit_Disable(self, node):
905910 filename = getfilename (node )
906911 template = self .env .get_template (filename )
907912 template_dict = {
908- 'name' : node .dest ,
913+ 'name' : escape ( node .dest ) ,
909914 }
910915 rslt = template .render (template_dict )
911916 return rslt
@@ -914,7 +919,7 @@ def visit_ParallelBlock(self, node):
914919 filename = getfilename (node )
915920 template = self .env .get_template (filename )
916921 template_dict = {
917- 'scope' : '' if node .scope is None else node .scope ,
922+ 'scope' : '' if node .scope is None else escape ( node .scope ) ,
918923 'statements' : [ self .visit (statement ) for statement in node .statements ],
919924 }
920925 rslt = template .render (template_dict )
0 commit comments