hdl.rec: preserve shapes when constructing a layout.
Preserve the original user-provided shape, while still checking its validity. This allows Enum decoders to work when specifying record fields with Enums. Fixes #393.
This commit is contained in:
parent
9c80c32c30
commit
2f7c3bf443
3 changed files with 59 additions and 40 deletions
|
|
@ -47,7 +47,8 @@ class Layout:
|
|||
.format(field))
|
||||
if not isinstance(shape, Layout):
|
||||
try:
|
||||
shape = Shape.cast(shape, src_loc_at=1 + src_loc_at)
|
||||
# Check provided shape by calling Shape.cast and checking for exception
|
||||
Shape.cast(shape, src_loc_at=1 + src_loc_at)
|
||||
except Exception as error:
|
||||
raise TypeError("Field {!r} has invalid shape: should be castable to Shape "
|
||||
"or a list of fields of a nested record"
|
||||
|
|
@ -134,7 +135,7 @@ class Record(UserValue):
|
|||
if isinstance(field_shape, Layout):
|
||||
assert isinstance(field, Record) and field_shape == field.layout
|
||||
else:
|
||||
assert isinstance(field, Signal) and field_shape == field.shape()
|
||||
assert isinstance(field, Signal) and Shape.cast(field_shape) == field.shape()
|
||||
self.fields[field_name] = field
|
||||
else:
|
||||
if isinstance(field_shape, Layout):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue