|
|
|
@@ -36,8 +36,11 @@ class Generator(RDLListener):
|
|
|
|
self.indent_level+=1
|
|
|
|
self.indent_level+=1
|
|
|
|
|
|
|
|
|
|
|
|
def exit_AddressableComponent(self, node: AddressableNode) -> None:
|
|
|
|
def exit_AddressableComponent(self, node: AddressableNode) -> None:
|
|
|
|
|
|
|
|
if len(node.children()) == 0:
|
|
|
|
|
|
|
|
self.f.write(f"{' '*self.indent_level*4}pass\n")
|
|
|
|
|
|
|
|
else:
|
|
|
|
self.f.write(f"{' '*self.indent_level*4}def __init__(self, addr: int = 0):\n")
|
|
|
|
self.f.write(f"{' '*self.indent_level*4}def __init__(self, addr: int = 0):\n")
|
|
|
|
self.f.write(f"{' '*self.indent_level*4} self.addr = addr\n")
|
|
|
|
self.f.write(f"{' '*self.indent_level*4} self.addr = addr:\n")
|
|
|
|
|
|
|
|
|
|
|
|
for child in node.children():
|
|
|
|
for child in node.children():
|
|
|
|
if isinstance(child, AddressableNode):
|
|
|
|
if isinstance(child, AddressableNode):
|
|
|
|
@@ -45,7 +48,7 @@ class Generator(RDLListener):
|
|
|
|
assert child.array_dimensions is not None
|
|
|
|
assert child.array_dimensions is not None
|
|
|
|
if len(child.array_dimensions) > 1:
|
|
|
|
if len(child.array_dimensions) > 1:
|
|
|
|
raise NotImplementedError("Multidimensional arrays not supported")
|
|
|
|
raise NotImplementedError("Multidimensional arrays not supported")
|
|
|
|
self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = [self.{child.inst_name}Class(self.addr + {child.raw_address_offset} + {child.size}*i for i in range({child.n_elements}))]\n")
|
|
|
|
self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = [self.{child.inst_name}Class(self.addr + {child.raw_address_offset} + {child.size}*i) for i in range({child.n_elements})]\n")
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = self.{child.inst_name}Class(self.addr + {child.address_offset})\n")
|
|
|
|
self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = self.{child.inst_name}Class(self.addr + {child.address_offset})\n")
|
|
|
|
|
|
|
|
|
|
|
|
|