@@ -85,6 +85,14 @@ def to_tuple(s):
8585 return tuple ([s ])
8686 return s
8787
88+ #-------------------------------------------------------------------------------
89+ class ReadOnlyModule (object ):
90+ def __init__ (self , m ):
91+ self .m = m
92+
93+ def __getattr__ (self , attr ):
94+ return getattr (self .m , attr )
95+
8896#-------------------------------------------------------------------------------
8997class VerilogReadVisitor (object ):
9098 def __init__ (self ):
@@ -95,6 +103,9 @@ def push_module(self, m):
95103 self .module_stack .append (self .m )
96104 self .m = m
97105
106+ def push_read_only_module (self ):
107+ self .push_module (ReadOnlyModule (self .m ))
108+
98109 def pop_module (self ):
99110 self .m = self .module_stack .pop ()
100111
@@ -165,7 +176,7 @@ def visit_Identifier(self, node):
165176 labels = self .visit (node .scope )
166177 labels .append (node .name )
167178 return vtypes .Scope (* labels )
168- if not isinstance (self .m , module .Module ):
179+ if not isinstance (self .m , ( module .Module , ReadOnlyModule ) ):
169180 return vtypes .AnyType (name = node .name )
170181 ret = self .m .find_identifier (node .name )
171182 if ret is None :
@@ -528,7 +539,7 @@ def visit_Assign(self, node):
528539
529540 def visit_Always (self , node ):
530541 # to avoid to call self.add_object() for the current Module
531- self .push_module ( None )
542+ self .push_read_only_module ( )
532543
533544 sensitivity = self .visit (node .sens_list )
534545 statement = to_tuple (self .visit (node .statement ))
@@ -685,7 +696,7 @@ def visit_PortArg(self, node):
685696
686697 def visit_Function (self , node ):
687698 # to avoid to call self.add_object() for the current Module
688- self .push_module ( None )
699+ self .push_read_only_module ( )
689700
690701 name = node .name
691702 width = self .visit (node .retwidth ) if node .retwidth is not None else None
@@ -731,7 +742,7 @@ def visit_FunctionCall(self, node):
731742
732743 def visit_Task (self , node ):
733744 # to avoid to call self.add_object() for the current Module
734- self .push_module ( None )
745+ self .push_read_only_module ( )
735746
736747 name = node .name
737748 _task = task .Task (name )
@@ -762,7 +773,7 @@ def visit_Task(self, node):
762773
763774 # to restore the current Module
764775 self .pop_module ()
765-
776+
766777 self .add_object (_task )
767778 return _task
768779
0 commit comments