Add packed struct overlay for external register bitfields. #84

This commit is contained in:
Alex Mykyta
2024-03-29 22:16:05 -07:00
parent 840b54c6e1
commit f25ba60bfc
3 changed files with 100 additions and 22 deletions

View File

@@ -41,18 +41,26 @@ class _AnonymousStruct(_StructBase):
class _TypedefStruct(_StructBase):
def __init__(self, type_name: str, inst_name: Optional[str] = None, array_dimensions: Optional[List[int]] = None):
def __init__(self, type_name: str, inst_name: Optional[str] = None, array_dimensions: Optional[List[int]] = None, packed: bool = False):
super().__init__()
self.type_name = type_name
self.inst_name = inst_name
self.array_dimensions = array_dimensions
self.packed = packed
def __str__(self) -> str:
return (
"typedef struct {\n"
+ super().__str__()
+ f"\n}} {self.type_name};"
)
if self.packed:
return (
"typedef struct packed {\n"
+ super().__str__()
+ f"\n}} {self.type_name};"
)
else:
return (
"typedef struct {\n"
+ super().__str__()
+ f"\n}} {self.type_name};"
)
@property
def instantiation(self) -> str:
@@ -167,8 +175,8 @@ class FlatStructGenerator(StructGenerator):
super().__init__()
self.typedefs = OrderedDict() # type: OrderedDict[str, _TypedefStruct]
def push_struct(self, type_name: str, inst_name: str, array_dimensions: Optional[List[int]] = None) -> None: # type: ignore # pylint: disable=arguments-renamed
s = _TypedefStruct(type_name, inst_name, array_dimensions)
def push_struct(self, type_name: str, inst_name: str, array_dimensions: Optional[List[int]] = None, packed = False) -> None: # type: ignore # pylint: disable=arguments-renamed
s = _TypedefStruct(type_name, inst_name, array_dimensions, packed)
self._struct_stack.append(s)
def pop_struct(self) -> None: