Skip to content

Commit 421e72d

Browse files
committed
Signal copy functionality of submodule is improved.
1 parent d159edf commit 421e72d

File tree

3 files changed

+294
-69
lines changed

3 files changed

+294
-69
lines changed

veriloggen/core/collect_visitor.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
from __future__ import absolute_import
2+
from __future__ import print_function
3+
4+
import os
5+
import sys
6+
import copy
7+
8+
import veriloggen.core.vtypes as vtypes
9+
10+
11+
class CollectVisitor(object):
12+
13+
def __init__(self):
14+
self.names = set()
15+
16+
def generic_visit(self, node):
17+
raise TypeError("Type %s is not supported." % str(type(node)))
18+
19+
def visit(self, node):
20+
if node is None:
21+
return None
22+
if isinstance(node, vtypes._Variable):
23+
return self.visit__Variable(node)
24+
if isinstance(node, vtypes._BinaryOperator):
25+
return self.visit__BinaryOperator(node)
26+
if isinstance(node, vtypes._UnaryOperator):
27+
return self.visit__UnaryOperator(node)
28+
29+
visitor = getattr(
30+
self, 'visit_' + node.__class__.__name__, self.generic_visit)
31+
return visitor(node)
32+
33+
def visit_Int(self, node):
34+
return
35+
36+
def visit_Float(self, node):
37+
return
38+
39+
def visit_Str(self, node):
40+
return
41+
42+
def visit_bool(self, node):
43+
return
44+
45+
def visit_int(self, node):
46+
return
47+
48+
def visit_str(self, node):
49+
return
50+
51+
def visit_float(self, node):
52+
return
53+
54+
def visit__Variable(self, node):
55+
self.names.add(node.name)
56+
57+
self.visit(node.width)
58+
if hasattr(node, 'initval'):
59+
self.visit(node.initval)
60+
61+
def visit_Pointer(self, node):
62+
self.visit(node.var)
63+
self.visit(node.pos)
64+
65+
def visit_Slice(self, node):
66+
self.visit(node.var)
67+
self.visit(node.msb)
68+
self.visit(node.lsb)
69+
70+
def visit_Cat(self, node):
71+
for var in node.vars:
72+
self.visit(var)
73+
74+
def visit_Repeat(self, node):
75+
self.visit(node.var)
76+
self.visit(node.times)
77+
78+
def visit_Cond(self, node):
79+
self.visit(node.condition)
80+
self.visit(node.true_value)
81+
self.visit(node.false_value)
82+
83+
def visit__BinaryOperator(self, node):
84+
self.visit(node.left)
85+
self.visit(node.right)
86+
87+
def visit__UnaryOperator(self, node):
88+
self.visit(node.right)

0 commit comments

Comments
 (0)