mirror of
https://github.com/myhdl/myhdl.git
synced 2025-01-24 21:52:56 +08:00
Support for top-level bound methods, starting from existing
code for the top-level visitor in _analyze.py --HG-- branch : 0.8-dev
This commit is contained in:
parent
59744e5901
commit
f29f8f1fe1
@ -1269,16 +1269,15 @@ def isboundmethod(m):
|
|||||||
return ismethod(m) and m.__self__ is not None
|
return ismethod(m) and m.__self__ is not None
|
||||||
|
|
||||||
def _analyzeTopFunc(func, *args, **kwargs):
|
def _analyzeTopFunc(func, *args, **kwargs):
|
||||||
if isboundmethod(func):
|
|
||||||
raise AssertionError("Bound methods not supported")
|
|
||||||
tree = _makeAST(func)
|
tree = _makeAST(func)
|
||||||
v = _AnalyzeTopFuncVisitor(tree, *args, **kwargs)
|
v = _AnalyzeTopFuncVisitor(func, tree, *args, **kwargs)
|
||||||
v.visit(tree)
|
v.visit(tree)
|
||||||
return v
|
return v
|
||||||
|
|
||||||
class _AnalyzeTopFuncVisitor(_AnalyzeVisitor):
|
class _AnalyzeTopFuncVisitor(_AnalyzeVisitor):
|
||||||
|
|
||||||
def __init__(self, tree, *args, **kwargs):
|
def __init__(self, func, tree, *args, **kwargs):
|
||||||
|
self.func = func
|
||||||
self.tree = tree
|
self.tree = tree
|
||||||
self.args = args
|
self.args = args
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
@ -1286,8 +1285,15 @@ class _AnalyzeTopFuncVisitor(_AnalyzeVisitor):
|
|||||||
self.argdict = {}
|
self.argdict = {}
|
||||||
|
|
||||||
def visit_FunctionDef(self, node):
|
def visit_FunctionDef(self, node):
|
||||||
|
|
||||||
self.name = node.name
|
self.name = node.name
|
||||||
argnames = [arg.id for arg in node.args.args]
|
argnames = [arg.id for arg in node.args.args]
|
||||||
|
if isboundmethod(self.func):
|
||||||
|
if not argnames[0] == 'self':
|
||||||
|
self.raiseError(node, _error.NotSupported,
|
||||||
|
"first method argument name other than 'self'")
|
||||||
|
# skip self
|
||||||
|
argnames = argnames[1:]
|
||||||
i=-1
|
i=-1
|
||||||
for i, arg in enumerate(self.args):
|
for i, arg in enumerate(self.args):
|
||||||
n = argnames[i]
|
n = argnames[i]
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import sys
|
import sys
|
||||||
from myhdl import *
|
from myhdl import *
|
||||||
|
from myhdl import ConversionError
|
||||||
|
from myhdl.conversion._misc import _error
|
||||||
from myhdl.conversion import analyze
|
from myhdl.conversion import analyze
|
||||||
|
|
||||||
class HdlObj(object):
|
class HdlObj(object):
|
||||||
@ -116,7 +118,12 @@ def test_hdlobjnotself():
|
|||||||
x = Signal(intbv(0, min=0, max=16))
|
x = Signal(intbv(0, min=0, max=16))
|
||||||
y = Signal(intbv(0, min=0, max=16))
|
y = Signal(intbv(0, min=0, max=16))
|
||||||
hdlobj_inst = HdlObjNotSelf()
|
hdlobj_inst = HdlObjNotSelf()
|
||||||
analyze(hdlobj_inst.method_func, clk, x, srst, y)
|
try:
|
||||||
|
analyze(hdlobj_inst.method_func, clk, x, srst, y)
|
||||||
|
except ConversionError, e:
|
||||||
|
assert e.kind == _error.NotSupported
|
||||||
|
else:
|
||||||
|
assert False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user