hdl.ir: raise a more descriptive error on non-elaboratable object.

This commit is contained in:
whitequark 2019-02-14 20:52:42 +00:00
parent 43e4833ddb
commit 8ee6bd80ff
2 changed files with 14 additions and 3 deletions

View file

@ -18,9 +18,13 @@ class Fragment:
def get(obj, platform):
if isinstance(obj, Fragment):
return obj
if not hasattr(obj, "elaborate"): # :deprecated:
return Fragment.get(obj.get_fragment(platform), platform)
return Fragment.get(obj.elaborate(platform), platform)
if hasattr(obj, "elaborate"):
frag = obj.elaborate(platform)
elif hasattr(obj, "get_fragment"): # :deprecated:
frag = obj.get_fragment(platform)
else:
raise AttributeError("Object '{!r}' cannot be elaborated".format(obj))
return Fragment.get(frag, platform)
def __init__(self):
self.ports = SignalDict()

View file

@ -7,6 +7,13 @@ from ..hdl.mem import *
from .tools import *
class FragmentGetTestCase(FHDLTestCase):
def test_get_wrong(self):
with self.assertRaises(AttributeError,
msg="Object 'None' cannot be elaborated"):
Fragment.get(None, platform=None)
class FragmentGeneratedTestCase(FHDLTestCase):
def test_find_subfragment(self):
f1 = Fragment()