aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom
diff options
context:
space:
mode:
Diffstat (limited to 'pyGHDL/dom')
-rw-r--r--pyGHDL/dom/Type.py17
-rw-r--r--pyGHDL/dom/_Translate.py1
-rw-r--r--pyGHDL/dom/formatting/prettyprint.py6
-rw-r--r--pyGHDL/dom/requirements.txt2
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