diff options
author | Unai Martinez-Corral <38422348+umarcor@users.noreply.github.com> | 2023-04-19 20:27:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-19 20:27:33 +0200 |
commit | cc5cf36c2d2e87eaf01b608c7391abdba8f9fff7 (patch) | |
tree | 49769a8bc72fd1d950074a74f38475016df2b11b /pyGHDL/dom/DesignUnit.py | |
parent | 6544b839fe6dceb56cb544bc4f69f0ab28100172 (diff) | |
parent | 989ec4ce0d43b90a5ada0a582c5b1ec6e610cb06 (diff) | |
download | ghdl-cc5cf36c2d2e87eaf01b608c7391abdba8f9fff7.tar.gz ghdl-cc5cf36c2d2e87eaf01b608c7391abdba8f9fff7.tar.bz2 ghdl-cc5cf36c2d2e87eaf01b608c7391abdba8f9fff7.zip |
pyGHDL: Reworked Symbols and Names (#2412)
Diffstat (limited to 'pyGHDL/dom/DesignUnit.py')
-rw-r--r-- | pyGHDL/dom/DesignUnit.py | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/pyGHDL/dom/DesignUnit.py b/pyGHDL/dom/DesignUnit.py index 079364742..9e9df15d0 100644 --- a/pyGHDL/dom/DesignUnit.py +++ b/pyGHDL/dom/DesignUnit.py @@ -63,10 +63,18 @@ from pyGHDL.libghdl import utils from pyGHDL.libghdl._types import Iir from pyGHDL.libghdl.vhdl import nodes from pyGHDL.dom import DOMMixin, Position, DOMException -from pyGHDL.dom._Utils import GetNameOfNode, GetDocumentationOfNode, GetPackageMemberSymbol, GetContextSymbol -from pyGHDL.dom._Translate import GetGenericsFromChainedNodes, GetPortsFromChainedNodes +from pyGHDL.dom._Utils import GetNameOfNode, GetDocumentationOfNode +from pyGHDL.dom._Translate import GetGenericsFromChainedNodes, GetPortsFromChainedNodes, GetName from pyGHDL.dom._Translate import GetDeclaredItemsFromChainedNodes, GetConcurrentStatementsFromChainedNodes -from pyGHDL.dom.Symbol import EntitySymbol, ContextReferenceSymbol, LibraryReferenceSymbol, PackageSymbol +from pyGHDL.dom.Names import SimpleName, AllName +from pyGHDL.dom.Symbol import ( + EntitySymbol, + ContextReferenceSymbol, + LibraryReferenceSymbol, + PackageSymbol, + PackageMemberReferenceSymbol, + AllPackageMembersReferenceSymbol, +) @export @@ -84,9 +92,15 @@ class UseClause(VHDLModel_UseClause, DOMMixin): @classmethod def parse(cls, useNode: Iir): - uses = [GetPackageMemberSymbol(nodes.Get_Selected_Name(useNode))] + nameNode = nodes.Get_Selected_Name(useNode) + name = GetName(nameNode) + symbolType = AllPackageMembersReferenceSymbol if isinstance(name, AllName) else PackageMemberReferenceSymbol + uses = [symbolType(nameNode, name)] for use in utils.chain_iter(nodes.Get_Use_Clause_Chain(useNode)): - uses.append(GetPackageMemberSymbol(nodes.Get_Selected_Name(use))) + nameNode = nodes.Get_Selected_Name(use) + name = GetName(nameNode) + symbolType = AllPackageMembersReferenceSymbol if isinstance(name, AllName) else PackageMemberReferenceSymbol + uses.append(symbolType(nameNode, name)) return cls(useNode, uses) @@ -99,9 +113,11 @@ class ContextReference(VHDLModel_ContextReference, DOMMixin): @classmethod def parse(cls, contextNode: Iir): - contexts = [GetContextSymbol(nodes.Get_Selected_Name(contextNode))] + nameNode = nodes.Get_Selected_Name(contextNode) + contexts = [ContextReferenceSymbol(nameNode, GetName(nameNode))] for context in utils.chain_iter(nodes.Get_Context_Reference_Chain(contextNode)): - contexts.append(GetContextSymbol(nodes.Get_Selected_Name(context))) + nameNode = nodes.Get_Selected_Name(context) + contexts.append(ContextReferenceSymbol(nameNode, GetName(nameNode))) return cls(contextNode, contexts) @@ -158,7 +174,7 @@ class Architecture(VHDLModel_Architecture, DOMMixin): name = GetNameOfNode(architectureNode) documentation = GetDocumentationOfNode(architectureNode) entityNameNode = nodes.Get_Entity_Name(architectureNode) - entitySymbol = EntitySymbol(entityNameNode, GetNameOfNode(entityNameNode)) + entitySymbol = EntitySymbol(entityNameNode, GetName(entityNameNode)) declaredItems = GetDeclaredItemsFromChainedNodes( nodes.Get_Declaration_Chain(architectureNode), "architecture", name ) @@ -241,11 +257,11 @@ class PackageBody(VHDLModel_PackageBody, DOMMixin): @classmethod def parse(cls, packageBodyNode: Iir, contextItems: Iterable[VHDLModel_ContextUnion]): - packageName = GetNameOfNode(packageBodyNode) - packageSymbol = PackageSymbol(packageBodyNode, packageName) + packageIdentifier = GetNameOfNode(packageBodyNode) + packageSymbol = PackageSymbol(packageBodyNode, SimpleName(packageBodyNode, packageIdentifier)) documentation = GetDocumentationOfNode(packageBodyNode) declaredItems = GetDeclaredItemsFromChainedNodes( - nodes.Get_Declaration_Chain(packageBodyNode), "package", packageName + nodes.Get_Declaration_Chain(packageBodyNode), "package", packageIdentifier ) # FIXME: read use clauses @@ -305,7 +321,7 @@ class Context(VHDLModel_Context, DOMMixin): kind = GetIirKindOfNode(item) if kind is nodes.Iir_Kind.Library_Clause: libraryIdentifier = GetNameOfNode(item) - names.append(LibraryReferenceSymbol(item, libraryIdentifier)) + names.append(LibraryReferenceSymbol(item, SimpleName(item, libraryIdentifier))) if nodes.Get_Has_Identifier_List(item): continue |