diff options
Diffstat (limited to 'pyGHDL/dom')
-rw-r--r-- | pyGHDL/dom/Type.py | 17 | ||||
-rw-r--r-- | pyGHDL/dom/_Translate.py | 1 | ||||
-rw-r--r-- | pyGHDL/dom/formatting/prettyprint.py | 6 | ||||
-rw-r--r-- | pyGHDL/dom/requirements.txt | 2 |
4 files changed, 15 insertions, 11 deletions
diff --git a/pyGHDL/dom/Type.py b/pyGHDL/dom/Type.py index 555a4b1ae..13362fdd6 100644 --- a/pyGHDL/dom/Type.py +++ b/pyGHDL/dom/Type.py @@ -30,7 +30,7 @@ # # SPDX-License-Identifier: GPL-2.0-or-later # ============================================================================ -from typing import List, Union, Iterator, Tuple +from typing import List, Union, Iterator, Tuple, Iterable from pyTooling.Decorators import export @@ -185,14 +185,18 @@ class RecordTypeElement(VHDLModel_RecordTypeElement, DOMMixin): DOMMixin.__init__(self, node) @classmethod - def parse(cls, elementDeclarationNode: Iir) -> "RecordTypeElement": + def parse(cls, elementDeclarationNode: Iir, furtherIdentifiers: Iterable[str] = None) -> "RecordTypeElement": from pyGHDL.dom._Utils import GetNameOfNode from pyGHDL.dom._Translate import GetSubtypeIndicationFromNode elementName = GetNameOfNode(elementDeclarationNode) elementType = GetSubtypeIndicationFromNode(elementDeclarationNode, "record element", elementName) - return cls(elementDeclarationNode, [elementName], elementType,) + identifiers = [elementName] + if furtherIdentifiers is not None: + identifiers.extend(furtherIdentifiers) + + return cls(elementDeclarationNode, identifiers, elementType,) @export @@ -208,13 +212,12 @@ class RecordType(VHDLModel_RecordType, DOMMixin): elements = [] elementDeclarations = nodes.Get_Elements_Declaration_List(typeDefinitionNode) + furtherIdentifiers = [] elementCount = flists.Flast(elementDeclarations) + 1 index = 0 while index < elementCount: elementDeclaration = flists.Get_Nth_Element(elementDeclarations, index) - element = RecordTypeElement.parse(elementDeclaration) - # Lookahead for elements with multiple identifiers at once if nodes.Get_Has_Identifier_List(elementDeclaration): index += 1 @@ -222,7 +225,7 @@ class RecordType(VHDLModel_RecordType, DOMMixin): nextNode: Iir = flists.Get_Nth_Element(elementDeclarations, index) # Consecutive identifiers are found, if the subtype indication is Null if nodes.Get_Subtype_Indication(nextNode) == nodes.Null_Iir: - element.Identifiers.append(GetNameOfNode(nextNode)) + furtherIdentifiers.append(GetNameOfNode(nextNode)) else: break index += 1 @@ -233,7 +236,9 @@ class RecordType(VHDLModel_RecordType, DOMMixin): else: index += 1 + element = RecordTypeElement.parse(elementDeclaration, furtherIdentifiers) elements.append(element) + furtherIdentifiers.clear() return cls(typeDefinitionNode, typeName, elements) diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py index a125abfe5..788f0abbd 100644 --- a/pyGHDL/dom/_Translate.py +++ b/pyGHDL/dom/_Translate.py @@ -658,7 +658,6 @@ def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str) -> from pyGHDL.dom.Object import Constant obj = Constant.parse(item) - elif kind == nodes.Iir_Kind.Variable_Declaration: from pyGHDL.dom.Object import SharedVariable diff --git a/pyGHDL/dom/formatting/prettyprint.py b/pyGHDL/dom/formatting/prettyprint.py index aa9c90c34..b5397610a 100644 --- a/pyGHDL/dom/formatting/prettyprint.py +++ b/pyGHDL/dom/formatting/prettyprint.py @@ -47,7 +47,7 @@ from pyGHDL.dom.Concurrent import ( ) from pyVHDLModel.SyntaxModel import ( GenericInterfaceItem, - NamedEntity, + NamedEntityMixin, PortInterfaceItem, WithDefaultExpressionMixin, Function, @@ -301,7 +301,7 @@ class PrettyPrint: return buffer - def formatGeneric(self, generic: Union[NamedEntity, GenericInterfaceItem], level: int = 0) -> StringBuffer: + def formatGeneric(self, generic: Union[NamedEntityMixin, GenericInterfaceItem], level: int = 0) -> StringBuffer: if isinstance(generic, GenericConstantInterfaceItem): return self.formatGenericConstant(generic, level) elif isinstance(generic, GenericTypeInterfaceItem): @@ -311,7 +311,7 @@ class PrettyPrint: f"Unhandled generic kind '{generic.__class__.__name__}' for generic '{generic.Identifiers[0]}'." ) - def formatPort(self, port: Union[NamedEntity, PortInterfaceItem], level: int = 0) -> StringBuffer: + def formatPort(self, port: Union[NamedEntityMixin, PortInterfaceItem], level: int = 0) -> StringBuffer: if isinstance(port, PortSignalInterfaceItem): return self.formatPortSignal(port, level) else: diff --git a/pyGHDL/dom/requirements.txt b/pyGHDL/dom/requirements.txt index 943757e92..09969e402 100644 --- a/pyGHDL/dom/requirements.txt +++ b/pyGHDL/dom/requirements.txt @@ -1,4 +1,4 @@ -r ../libghdl/requirements.txt -pyVHDLModel==0.14.4 +pyVHDLModel==0.16.0 #https://github.com/VHDL/pyVHDLModel/archive/dev.zip#pyVHDLModel |