diff options
author | Patrick Lehmann <Patrick.Lehmann@plc2.de> | 2022-12-29 23:16:27 +0100 |
---|---|---|
committer | Patrick Lehmann <Patrick.Lehmann@plc2.de> | 2022-12-29 23:16:27 +0100 |
commit | 9cf69f324186932e4308e1ca0b19f563dab90e5e (patch) | |
tree | a5e4c126feee8b28af9aa74fd54c67f939fe9632 /pyGHDL/dom/_Utils.py | |
parent | 3b019ea6a8eac23ed3270a7112bd092526402211 (diff) | |
download | ghdl-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.py | 44 |
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)}") |