Fix incorrect traversal into externals for read/write buffered regs. #167

This commit is contained in:
Alex Mykyta
2025-11-16 20:27:57 -08:00
parent efbddccc54
commit 61bffb7b91
3 changed files with 13 additions and 6 deletions

View File

@@ -1,8 +1,13 @@
from systemrdl.node import FieldNode, RegNode from systemrdl.node import FieldNode, RegNode, AddressableNode
from systemrdl.walker import WalkerAction
from ..struct_generator import RDLStructGenerator from ..struct_generator import RDLStructGenerator
class RBufStorageStructGenerator(RDLStructGenerator): class RBufStorageStructGenerator(RDLStructGenerator):
def enter_AddressableComponent(self, node: AddressableNode) -> WalkerAction:
if node.external :
return WalkerAction.SkipDescendants
return WalkerAction.Continue
def enter_Field(self, node: FieldNode) -> None: def enter_Field(self, node: FieldNode) -> None:
# suppress parent class's field behavior # suppress parent class's field behavior

View File

@@ -1,6 +1,7 @@
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from systemrdl.node import FieldNode, RegNode from systemrdl.node import FieldNode, RegNode, AddressableNode
from systemrdl.walker import WalkerAction
from ..struct_generator import RDLStructGenerator from ..struct_generator import RDLStructGenerator
@@ -12,6 +13,11 @@ class WBufStorageStructGenerator(RDLStructGenerator):
super().__init__() super().__init__()
self.wbuf = wbuf self.wbuf = wbuf
def enter_AddressableComponent(self, node: AddressableNode) -> WalkerAction:
if node.external :
return WalkerAction.SkipDescendants
return WalkerAction.Continue
def enter_Field(self, node: FieldNode) -> None: def enter_Field(self, node: FieldNode) -> None:
# suppress parent class's field behavior # suppress parent class's field behavior
pass pass

View File

@@ -10,10 +10,6 @@ class TestValidationErrors(BaseTestCase):
# Stub usual pre-test setup # Stub usual pre-test setup
pass pass
def tearDown(self):
# Delete any cruft that may get generated
self.delete_run_dir()
def assert_validate_error(self, rdl_file: str, err_regex: str) -> None: def assert_validate_error(self, rdl_file: str, err_regex: str) -> None:
self.rdl_file = rdl_file self.rdl_file = rdl_file
f = io.StringIO() f = io.StringIO()