Skip to content

Commit

Permalink
Factor visitor traversal out to top class
Browse files Browse the repository at this point in the history
  • Loading branch information
jandecaluwe committed Jan 31, 2016
1 parent f5de3b3 commit a48eb2e
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 27 deletions.
15 changes: 2 additions & 13 deletions myhdl/_always_comb.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
from myhdl._Waiter import _Waiter, _SignalWaiter, _SignalTupleWaiter
from myhdl._instance import _Instantiator
from myhdl._always import _Always
from myhdl._resolverefs import _AttrRefTransformer
from myhdl._visitors import _SigNameVisitor

class _error:
pass
Expand Down Expand Up @@ -91,20 +89,11 @@ def __init__(self, func):
senslist = []
super(_AlwaysComb, self).__init__(func, senslist)

tree = self.ast
# print ast.dump(tree)
v = _AttrRefTransformer(self)
v.visit(tree)
v = _SigNameVisitor(self.symdict)
v.visit(tree)
self.inputs = v.inputs
self.outputs = v.outputs

inouts = v.inouts | self.inputs.intersection(self.outputs)
inouts = self.inouts | self.inputs.intersection(self.outputs)
if inouts:
raise AlwaysCombError(_error.SignalAsInout % inouts)

if v.embedded_func:
if self.embedded_func:
raise AlwaysCombError(_error.EmbeddedFunction)

for n in self.inputs:
Expand Down
16 changes: 3 additions & 13 deletions myhdl/_always_seq.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
from myhdl._Signal import _Signal, _WaiterList,_isListOfSigs
from myhdl._Waiter import _Waiter, _EdgeWaiter, _EdgeTupleWaiter
from myhdl._always import _Always
from myhdl._resolverefs import _AttrRefTransformer
from myhdl._visitors import _SigNameVisitor

# evacuate this later
AlwaysSeqError = AlwaysError
Expand Down Expand Up @@ -101,23 +99,15 @@ def __init__(self, func, edge, reset):

super(_AlwaysSeq, self).__init__(func, senslist)

# now infer outputs to be reset
tree = self.ast
# print ast.dump(tree)
v = _AttrRefTransformer(self)
v.visit(tree)
v = _SigNameVisitor(self.symdict)
v.visit(tree)

if v.inouts:
if self.inouts:
raise AlwaysSeqError(_error.SigAugAssign, v.inouts)

if v.embedded_func:
if self.embedded_func:
raise AlwaysSeqError(_error.EmbeddedFunction)

sigregs = self.sigregs = []
varregs = self.varregs = []
for n in v.outputs:
for n in self.outputs:
reg = self.symdict[n]
if isinstance(reg, _Signal):
sigregs.append(reg)
Expand Down
13 changes: 13 additions & 0 deletions myhdl/_instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
from myhdl import InstanceError
from myhdl._util import _isGenFunc, _makeAST
from myhdl._Waiter import _inferWaiter
from myhdl._resolverefs import _AttrRefTransformer
from myhdl._visitors import _SigNameVisitor

class _error:
pass
Expand Down Expand Up @@ -61,6 +63,17 @@ def __init__(self, genfunc):
symdict.update(zip(freevars, closure))
self.symdict = symdict

tree = self.ast
# print ast.dump(tree)
v = _AttrRefTransformer(self)
v.visit(tree)
v = _SigNameVisitor(self.symdict)
v.visit(tree)
self.inputs = v.inputs
self.outputs = v.outputs
self.inouts = v.inouts
self.embedded_func = v.embedded_func

@property
def funcobj(self):
return self.genfunc
Expand Down
2 changes: 1 addition & 1 deletion myhdl/_visitors.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import ast

from myhdl import intbv
from myhdl._intbv import intbv
from myhdl._Signal import _Signal, _isListOfSigs


Expand Down

0 comments on commit a48eb2e

Please sign in to comment.