@@ -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#-------------------------------------------------------------------------------
4054class 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