Skip to content

Commit bb33234

Browse files
committed
indent_multiline_assign() is added.
1 parent cc92ff7 commit bb33234

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

pyverilog/ast_code_generator/codegen.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,21 @@ def indent(text, prefix, predicate=None):
3535
ret.append(line)
3636
ret.append('\n')
3737
return ''.join(ret[:-1])
38-
38+
39+
def indent_multiline_assign(text):
40+
ret = []
41+
texts = text.split('\n')
42+
if len(texts) <= 1:
43+
return text
44+
try:
45+
p = texts[0].index('=')
46+
except:
47+
return text
48+
ret.append(texts[0])
49+
ret.append('\n')
50+
ret.append(indent('\n'.join(texts[1:]), ' ' * (p + 2)))
51+
return ''.join(ret)
52+
3953
#-------------------------------------------------------------------------------
4054
class ConvertVisitor(object):
4155
def visit(self, node):
@@ -593,10 +607,14 @@ def visit_Lor(self, node):
593607
def visit_Cond(self, node):
594608
filename = getfilename(node)
595609
template = self.env.get_template(filename)
610+
true_value = del_paren(self.visit(node.true_value))
611+
false_value = del_paren(self.visit(node.false_value))
612+
if isinstance(node.false_value, Cond):
613+
false_value = ''.join( ['\n', false_value] )
596614
template_dict = {
597615
'cond' : del_paren(self.visit(node.cond)),
598-
'true_value' : del_paren(self.visit(node.true_value)),
599-
'false_value' : del_paren(self.visit(node.false_value)),
616+
'true_value' : true_value,
617+
'false_value' : false_value,
600618
}
601619
rslt = template.render(template_dict)
602620
return rslt
@@ -609,6 +627,7 @@ def visit_Assign(self, node):
609627
'right' : self.visit(node.right),
610628
}
611629
rslt = template.render(template_dict)
630+
rslt = indent_multiline_assign(rslt)
612631
return rslt
613632

614633
def visit_Always(self, node):
@@ -652,6 +671,7 @@ def visit_Substitution(self, node):
652671
'rdelay' : '' if node.rdelay is None else self.visit(node.rdelay),
653672
}
654673
rslt = template.render(template_dict)
674+
rslt = indent_multiline_assign(rslt)
655675
return rslt
656676

657677
def visit_BlockingSubstitution(self, node):
@@ -664,6 +684,7 @@ def visit_BlockingSubstitution(self, node):
664684
'rdelay' : '' if node.rdelay is None else self.visit(node.rdelay),
665685
}
666686
rslt = template.render(template_dict)
687+
rslt = indent_multiline_assign(rslt)
667688
return rslt
668689

669690
def visit_NonblockingSubstitution(self, node):
@@ -676,6 +697,7 @@ def visit_NonblockingSubstitution(self, node):
676697
'rdelay' : '' if node.rdelay is None else self.visit(node.rdelay),
677698
}
678699
rslt = template.render(template_dict)
700+
rslt = indent_multiline_assign(rslt)
679701
return rslt
680702

681703
def visit_IfStatement(self, node):

0 commit comments

Comments
 (0)