@@ -596,6 +596,9 @@ def AnalyzeDependencies(self):
596596 self .LinkPackageReferences ()
597597 self .LinkContextReferences ()
598598
599+ self .IndexPackages ()
600+ self .IndexArchitectures ()
601+
599602 def CreateDependencyGraph (self ):
600603 for libraryIdentifier , library in self ._libraries .items ():
601604 dependencyVertex = Vertex (vertexID = f"{ libraryIdentifier } " , value = library , graph = self ._dependencyGraph )
@@ -880,6 +883,14 @@ def LinkContextReferences(self):
880883 # for vertex in self._dependencyGraph.IterateTopologically():
881884 # print(vertex.Value.Identifier)
882885
886+ def IndexPackages (self ):
887+ for library in self ._libraries .values ():
888+ library .IndexPackages ()
889+
890+ def IndexArchitectures (self ):
891+ for library in self ._libraries .values ():
892+ library .IndexArchitectures ()
893+
883894
884895@export
885896class Library (ModelEntity , NamedEntityMixin ):
@@ -995,6 +1006,15 @@ def LinkPackageBodies(self):
9951006 # add "package body -> package" relation in dependency graph
9961007 packageBody ._dependencyVertex .LinkToVertex (package ._dependencyVertex )
9971008
1009+ def IndexPackages (self ):
1010+ for package in self ._packages .values ():
1011+ package .IndexPackage ()
1012+
1013+ def IndexArchitectures (self ):
1014+ for architectures in self ._architectures .values ():
1015+ for architecture in architectures .values ():
1016+ architecture .IndexArchitecture ()
1017+
9981018 def __str__ (self ):
9991019 return f"VHDL Library: '{ self .Identifier } '"
10001020
@@ -2667,6 +2687,10 @@ class Architecture(SecondaryUnit, DesignUnitWithContextMixin):
26672687 _declaredItems : List # FIXME: define list prefix type e.g. via Union
26682688 _statements : List ['ConcurrentStatement' ]
26692689
2690+ _instantiations : Dict [str , 'Instantiation' ] # TODO: add another instantiation class level for entity/configuration/component inst.
2691+ _generates : Dict [str , 'GenerateStatement' ]
2692+ _hierarchy : Dict [str , Union ['ConcurrentBlockStatement' , 'GenerateStatement' ]]
2693+
26702694 def __init__ (self , identifier : str , entity : EntitySymbol , contextItems : Iterable [Context ] = None , declaredItems : Iterable = None , statements : Iterable ['ConcurrentStatement' ] = None , documentation : str = None ):
26712695 super ().__init__ (identifier , documentation )
26722696 DesignUnitWithContextMixin .__init__ (self , contextItems )
@@ -2675,13 +2699,18 @@ def __init__(self, identifier: str, entity: EntitySymbol, contextItems: Iterable
26752699 self ._declaredItems = [] if declaredItems is None else [i for i in declaredItems ]
26762700 self ._statements = [] if statements is None else [s for s in statements ]
26772701
2702+ self ._instantiations = {}
2703+ self ._generates = {}
2704+ self ._hierarchy = {}
2705+
26782706 @property
26792707 def Entity (self ) -> EntitySymbol :
26802708 return self ._entity
26812709
26822710 @property
26832711 def Library (self ) -> 'Library' :
26842712 return self ._library
2713+
26852714 @Library .setter
26862715 def Library (self , library : 'Library' ) -> None :
26872716 self ._library = library
@@ -2694,6 +2723,21 @@ def DeclaredItems(self) -> List: # FIXME: define list prefix type e.g. via Uni
26942723 def Statements (self ) -> List ['ConcurrentStatement' ]:
26952724 return self ._statements
26962725
2726+ def IndexArchitecture (self ):
2727+ for statement in self ._statements :
2728+ if isinstance (statement , EntityInstantiation ):
2729+ self ._instantiations [statement .Label ] = statement
2730+ elif isinstance (statement , ComponentInstantiation ):
2731+ self ._instantiations [statement .Label ] = statement
2732+ elif isinstance (statement , ConfigurationInstantiation ):
2733+ self ._instantiations [statement .Label ] = statement
2734+ elif isinstance (statement , ForGenerateStatement ):
2735+ self ._generates [statement .Label ] = statement
2736+ elif isinstance (statement , IfGenerateStatement ):
2737+ self ._generates [statement .Label ] = statement
2738+ elif isinstance (statement , CaseGenerateStatement ):
2739+ self ._generates [statement .Label ] = statement
2740+
26972741
26982742@export
26992743class Component (ModelEntity , NamedEntityMixin , DocumentedEntityMixin ):
@@ -2794,6 +2838,12 @@ class Package(PrimaryUnit, DesignUnitWithContextMixin):
27942838 _genericItems : List [GenericInterfaceItem ]
27952839 _declaredItems : List
27962840
2841+ _types : Dict [str , Union [Type , Subtype ]]
2842+ _objects : Dict [str , Union [Constant , Variable , Signal ]]
2843+ _constants : Dict [str , Constant ]
2844+ _functions : Dict [str , Dict [str , Function ]]
2845+ _procedures : Dict [str , Dict [str , Procedure ]]
2846+
27972847 def __init__ (self , identifier : str , contextItems : Iterable [Context ] = None , genericItems : Iterable [GenericInterfaceItem ] = None , declaredItems : Iterable = None , documentation : str = None ):
27982848 super ().__init__ (identifier , documentation )
27992849 DesignUnitWithContextMixin .__init__ (self , contextItems )
@@ -2809,6 +2859,31 @@ def GenericItems(self) -> List[GenericInterfaceItem]:
28092859 def DeclaredItems (self ) -> List :
28102860 return self ._declaredItems
28112861
2862+ # TODO: move into __init__ ?
2863+ # TODO: share with architecture and block statement?
2864+ def IndexPackage (self ):
2865+ for item in self ._declaredItems :
2866+ if isinstance (item , Type ):
2867+ print (item )
2868+ elif isinstance (item , Subtype ):
2869+ print (item )
2870+ elif isinstance (item , Function ):
2871+ print (item )
2872+ elif isinstance (item , Procedure ):
2873+ print (item )
2874+ elif isinstance (item , Constant ):
2875+ for identifier in item .Identifiers :
2876+ normalizedIdentifier = identifier .lower ()
2877+ self ._constants [normalizedIdentifier ] = item
2878+ self ._objects [normalizedIdentifier ] = item
2879+ elif isinstance (item , Variable ):
2880+ for identifier in item .Identifiers :
2881+ self ._objects [identifier .lower ()] = item
2882+ elif isinstance (item , Signal ):
2883+ for identifier in item .Identifiers :
2884+ self ._objects [identifier .lower ()] = item
2885+ else :
2886+ print (item )
28122887
28132888@export
28142889class PackageBody (SecondaryUnit , DesignUnitWithContextMixin ):
@@ -2830,6 +2905,12 @@ def Package(self) -> PackageSymbol:
28302905 def DeclaredItems (self ) -> List :
28312906 return self ._declaredItems
28322907
2908+ def IndexPackageBody (self ):
2909+ pass
2910+
2911+ def LinkDeclaredItemsToPackage (self ):
2912+ pass
2913+
28332914
28342915@export
28352916class PackageInstantiation (PrimaryUnit , GenericEntityInstantiation ):
0 commit comments