Skip to content

Commit 23b8f93

Browse files
committed
push_module(None) is replaced with push_read_only_module()
1 parent a2db2e8 commit 23b8f93

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

veriloggen/verilog/from_verilog.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
#-------------------------------------------------------------------------------
8997
class 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

Comments
 (0)