Skip to content

Instantly share code, notes, and snippets.

@splhack
Created August 7, 2020 06:21
Show Gist options
  • Select an option

  • Save splhack/918d633fc82a5b50f0de28f2f93ac29a to your computer and use it in GitHub Desktop.

Select an option

Save splhack/918d633fc82a5b50f0de28f2f93ac29a to your computer and use it in GitHub Desktop.
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