aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/_Translate.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-23 10:23:23 +0200
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-23 10:34:01 +0200
commitd4e3bf7941e6826c0175f4768c31155bd5d98b0e (patch)
tree3c56593e34f7f6ac8c8143f5d1786f9a855e6b43 /pyGHDL/dom/_Translate.py
parent9fca189af9677e435a42eaae1edd91e1098596ac (diff)
downloadghdl-d4e3bf7941e6826c0175f4768c31155bd5d98b0e.tar.gz
ghdl-d4e3bf7941e6826c0175f4768c31155bd5d98b0e.tar.bz2
ghdl-d4e3bf7941e6826c0175f4768c31155bd5d98b0e.zip
Handle access types.
Diffstat (limited to 'pyGHDL/dom/_Translate.py')
-rw-r--r--pyGHDL/dom/_Translate.py29
1 files changed, 21 insertions, 8 deletions
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py
index 8cb1639fd..8627fd5cb 100644
--- a/pyGHDL/dom/_Translate.py
+++ b/pyGHDL/dom/_Translate.py
@@ -73,7 +73,8 @@ from pyGHDL.dom.Literal import (
FloatingPointLiteral,
StringLiteral,
PhysicalIntegerLiteral,
- PhysicalFloatingLiteral, EnumerationLiteral,
+ PhysicalFloatingLiteral,
+ EnumerationLiteral,
)
from pyGHDL.dom.Expression import (
SubtractionExpression,
@@ -116,8 +117,13 @@ __all__ = []
@export
-def GetSubtypeIndicationFromNode(node: Iir, entity: str, name: str) -> SubTypeOrSymbol:
- subTypeIndication = nodes.Get_Subtype_Indication(node)
+def GetSubtypeIndicationFromNode(
+ node: Iir, entity: str, name: str, do=True
+) -> SubTypeOrSymbol:
+ if do:
+ subTypeIndication = nodes.Get_Subtype_Indication(node)
+ else:
+ subTypeIndication = node
if subTypeIndication is nodes.Null_Iir:
return None
subTypeKind = GetIirKindOfNode(subTypeIndication)
@@ -190,6 +196,7 @@ def GetArrayConstraintsFromSubtypeIndication(
def GetTypeFromNode(node: Iir) -> BaseType:
typeName = GetNameOfNode(node)
typeDefinition = nodes.Get_Type_Definition(node)
+
kind = GetIirKindOfNode(typeDefinition)
if kind == nodes.Iir_Kind.Range_Expression:
r = GetRangeFromNode(typeDefinition)
@@ -206,9 +213,7 @@ def GetTypeFromNode(node: Iir) -> BaseType:
elif kind == nodes.Iir_Kind.Record_Type_Definition:
return RecordType.parse(typeName, typeDefinition)
elif kind == nodes.Iir_Kind.Access_Type_Definition:
- designatedType = nodes.Get_Designated_Type(typeDefinition)
-
- return AccessType(typeName, designatedType)
+ return AccessType.parse(typeName, typeDefinition)
else:
position = GetPositionOfNode(typeDefinition)
raise DOMException(
@@ -224,7 +229,9 @@ def GetTypeFromNode(node: Iir) -> BaseType:
@export
-def GetSubTypeIndicationFromNode(subTypeIndicationNode: Iir, entity: str, name: str) -> SubTypeOrSymbol:
+def GetSubTypeIndicationFromNode(
+ subTypeIndicationNode: Iir, entity: str, name: str
+) -> SubTypeOrSymbol:
kind = GetIirKindOfNode(subTypeIndicationNode)
if kind == nodes.Iir_Kind.Simple_Name:
return GetSimpleTypeFromNode(subTypeIndicationNode)
@@ -237,25 +244,31 @@ def GetSubTypeIndicationFromNode(subTypeIndicationNode: Iir, entity: str, name:
)
)
+
@export
def GetSimpleTypeFromNode(subTypeIndicationNode: Iir) -> SimpleSubTypeSymbol:
subTypeName = GetNameOfNode(subTypeIndicationNode)
return SimpleSubTypeSymbol(subTypeName)
+
@export
-def GetConstrainedSubTypeFromNode(subTypeIndicationNode: Iir) -> ConstrainedSubTypeSymbol:
+def GetConstrainedSubTypeFromNode(
+ subTypeIndicationNode: Iir,
+) -> ConstrainedSubTypeSymbol:
typeMark = nodes.Get_Subtype_Type_Mark(subTypeIndicationNode)
typeMarkName = GetNameOfNode(typeMark)
constraints = GetArrayConstraintsFromSubtypeIndication(subTypeIndicationNode)
return ConstrainedSubTypeSymbol(typeMarkName, constraints)
+
@export
def GetSubTypeFromNode(node: Iir) -> SubTypeOrSymbol:
subTypeName = GetNameOfNode(node)
return SubType(subTypeName)
+
@export
def GetRangeFromNode(node: Iir) -> Range:
direction = nodes.Get_Direction(node)