aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/_Utils.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2022-12-29 23:16:27 +0100
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2022-12-29 23:16:27 +0100
commit9cf69f324186932e4308e1ca0b19f563dab90e5e (patch)
treea5e4c126feee8b28af9aa74fd54c67f939fe9632 /pyGHDL/dom/_Utils.py
parent3b019ea6a8eac23ed3270a7112bd092526402211 (diff)
downloadghdl-9cf69f324186932e4308e1ca0b19f563dab90e5e.tar.gz
ghdl-9cf69f324186932e4308e1ca0b19f563dab90e5e.tar.bz2
ghdl-9cf69f324186932e4308e1ca0b19f563dab90e5e.zip
Added Get***Symbol functions. Improved Symbol handling.
Diffstat (limited to 'pyGHDL/dom/_Utils.py')
-rw-r--r--pyGHDL/dom/_Utils.py44
1 files changed, 36 insertions, 8 deletions
diff --git a/pyGHDL/dom/_Utils.py b/pyGHDL/dom/_Utils.py
index 3803374f3..20171b45c 100644
--- a/pyGHDL/dom/_Utils.py
+++ b/pyGHDL/dom/_Utils.py
@@ -39,7 +39,7 @@ from pyGHDL.dom.Symbol import (
PackageReferenceSymbol,
PackageMembersReferenceSymbol,
AllPackageMembersReferenceSymbol,
- ContextReferenceSymbol,
+ ContextReferenceSymbol, EntityInstantiationSymbol, ComponentInstantiationSymbol, ConfigurationInstantiationSymbol,
)
from pyVHDLModel.SyntaxModel import Mode
@@ -145,6 +145,25 @@ def GetModeOfNode(node: Iir) -> Mode:
raise DOMException(f"Unknown mode '{ex.args[0]}'.") from ex
+def GetLibrarySymbol(node: Iir) -> LibraryReferenceSymbol:
+ kind = GetIirKindOfNode(node)
+ if kind == nodes.Iir_Kind.Simple_Name:
+ name = GetNameOfNode(node)
+ return LibraryReferenceSymbol(node, name)
+ else:
+ raise DOMException(f"{kind} at {Position.parse(node)}")
+
+
+def GetPackageSymbol(node: Iir) -> PackageReferenceSymbol:
+ kind = GetIirKindOfNode(node)
+ if kind == nodes.Iir_Kind.Selected_Name:
+ name = GetNameOfNode(node)
+ prefixName = GetLibrarySymbol(nodes.Get_Prefix(node))
+ return PackageReferenceSymbol(node, name, prefixName)
+ else:
+ raise DOMException(f"{kind.name} at {Position.parse(node)}")
+
+
def GetPackageMemberSymbol(node: Iir) -> Union[PackageMembersReferenceSymbol, AllPackageMembersReferenceSymbol]:
kind = GetIirKindOfNode(node)
prefixName = GetPackageSymbol(nodes.Get_Prefix(node))
@@ -157,30 +176,39 @@ def GetPackageMemberSymbol(node: Iir) -> Union[PackageMembersReferenceSymbol, Al
raise DOMException(f"{kind.name} at {Position.parse(node)}")
-def GetPackageSymbol(node: Iir) -> PackageReferenceSymbol:
+def GetContextSymbol(node: Iir) -> ContextReferenceSymbol:
kind = GetIirKindOfNode(node)
if kind == nodes.Iir_Kind.Selected_Name:
name = GetNameOfNode(node)
prefixName = GetLibrarySymbol(nodes.Get_Prefix(node))
- return PackageReferenceSymbol(node, name, prefixName)
+ return ContextReferenceSymbol(node, name, prefixName)
else:
raise DOMException(f"{kind.name} at {Position.parse(node)}")
-def GetContextSymbol(node: Iir) -> ContextReferenceSymbol:
+def GetEntityInstantiationSymbol(node: Iir) -> EntityInstantiationSymbol:
kind = GetIirKindOfNode(node)
if kind == nodes.Iir_Kind.Selected_Name:
name = GetNameOfNode(node)
prefixName = GetLibrarySymbol(nodes.Get_Prefix(node))
- return ContextReferenceSymbol(node, name, prefixName)
+ return EntityInstantiationSymbol(node, name, prefixName)
else:
raise DOMException(f"{kind.name} at {Position.parse(node)}")
-def GetLibrarySymbol(node: Iir) -> LibraryReferenceSymbol:
+def GetComponentInstantiationSymbol(node: Iir) -> ComponentInstantiationSymbol:
kind = GetIirKindOfNode(node)
if kind == nodes.Iir_Kind.Simple_Name:
name = GetNameOfNode(node)
- return LibraryReferenceSymbol(node, name)
+ return ComponentInstantiationSymbol(node, name)
else:
- raise DOMException(f"{kind} at {Position.parse(node)}")
+ raise DOMException(f"{kind.name} at {Position.parse(node)}")
+
+
+def GetConfigurationInstantiationSymbol(node: Iir) -> ConfigurationInstantiationSymbol:
+ kind = GetIirKindOfNode(node)
+ if kind == nodes.Iir_Kind.Simple_Name:
+ name = GetNameOfNode(node)
+ return ConfigurationInstantiationSymbol(node, name)
+ else:
+ raise DOMException(f"{kind.name} at {Position.parse(node)}")