Created
August 7, 2020 06:21
-
-
Save splhack/918d633fc82a5b50f0de28f2f93ac29a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/magma/array.py b/magma/array.py | |
| index cc79b8a5..5c05a0a0 100644 | |
| --- a/magma/array.py | |
| +++ b/magma/array.py | |
| @@ -10,7 +10,7 @@ from .bit import Bit | |
| from .bitutils import int2seq, seq2int | |
| from .debug import debug_wire, get_callee_frame_info | |
| from .logging import root_logger | |
| -from .protocol_type import magma_type, magma_value | |
| +from .protocol_type import MagmaProtocol, magma_type, magma_value | |
| _logger = root_logger() | |
| @@ -254,7 +254,10 @@ class Array(Type, metaclass=ArrayMeta): | |
| else: | |
| for i in range(self.N): | |
| T = self.T | |
| - t = magma_type(T)(name=ArrayRef(self, i)) | |
| + if issubclass(T, MagmaProtocol): | |
| + t = T._from_magma_value_(T._to_magma_()(name=ArrayRef(self, i))) | |
| + else: | |
| + t = magma_type(T)(name=ArrayRef(self, i)) | |
| self.ts.append(t) | |
| @classmethod | |
| diff --git a/magma/tuple.py b/magma/tuple.py | |
| index abb09b91..8a64b149 100644 | |
| --- a/magma/tuple.py | |
| +++ b/magma/tuple.py | |
| @@ -16,7 +16,7 @@ from .t import Type, Kind, Direction | |
| from .compatibility import IntegerTypes | |
| from .debug import debug_wire, get_callee_frame_info | |
| from .logging import root_logger | |
| -from .protocol_type import magma_type, magma_value | |
| +from .protocol_type import MagmaProtocol, magma_type, magma_value | |
| _logger = root_logger() | |
| @@ -172,7 +172,10 @@ class Tuple(Type, Tuple_, metaclass=TupleKind): | |
| setattr(self, k, t) | |
| else: | |
| for k, T in zip(self.keys(), self.types()): | |
| - t = magma_type(T)(name=TupleRef(self, k)) | |
| + if issubclass(T, MagmaProtocol): | |
| + t = T._from_magma_value_(T._to_magma_()(name=TupleRef(self, k))) | |
| + else: | |
| + t = T(name=TupleRef(self, k)) | |
| self.ts.append(t) | |
| if not isinstance(self, AnonProduct): | |
| setattr(self, k, t) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment