aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/_Utils.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2022-12-26 09:14:46 +0100
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2022-12-26 09:14:46 +0100
commit283418269b3f5e351415dc6e8946437a1781941c (patch)
tree89b1ecc594327051efb064d4672dbf4b37382137 /pyGHDL/dom/_Utils.py
parent4be45cbc3b4fc20eae8f817fce7bd508d6964691 (diff)
downloadghdl-283418269b3f5e351415dc6e8946437a1781941c.tar.gz
ghdl-283418269b3f5e351415dc6e8946437a1781941c.tar.bz2
ghdl-283418269b3f5e351415dc6e8946437a1781941c.zip
New handling of symbols.
Diffstat (limited to 'pyGHDL/dom/_Utils.py')
-rw-r--r--pyGHDL/dom/_Utils.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/pyGHDL/dom/_Utils.py b/pyGHDL/dom/_Utils.py
index 8bc1f34a0..87dd227a8 100644
--- a/pyGHDL/dom/_Utils.py
+++ b/pyGHDL/dom/_Utils.py
@@ -30,8 +30,11 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
# ============================================================================
+from typing import Union
+
from pyTooling.Decorators import export
+from pyGHDL.dom.Symbol import LibraryReferenceSymbol, PackageReferenceSymbol, PackageMembersReferenceSymbol, AllPackageMembersReferenceSymbol
from pyVHDLModel.SyntaxModel import Mode
from pyGHDL.libghdl import LibGHDLException, name_table, errorout_memory, files_map, file_comments
@@ -134,3 +137,31 @@ def GetModeOfNode(node: Iir) -> Mode:
return __MODE_TRANSLATION[nodes.Get_Mode(node)]
except KeyError as ex:
raise DOMException(f"Unknown mode '{ex.args[0]}'.") from ex
+
+def GetPackageMemberSymbol(node: Iir) -> Union[PackageMembersReferenceSymbol, AllPackageMembersReferenceSymbol]:
+ kind = GetIirKindOfNode(node)
+ prefixName = GetPackageSymbol(nodes.Get_Prefix(node))
+ if kind == nodes.Iir_Kind.Selected_Name:
+ name = GetNameOfNode(node)
+ return PackageMembersReferenceSymbol(node, name, prefixName)
+ elif kind == nodes.Iir_Kind.Selected_By_All_Name:
+ return AllPackageMembersReferenceSymbol(node, prefixName)
+ else:
+ raise DOMException()
+
+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()
+
+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()