Skip to content

Commit 103d2b6

Browse files
committed
Added IndexPackages and IndexArchitectures.
1 parent 6578475 commit 103d2b6

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

pyVHDLModel/SyntaxModel.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
885896
class 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
26992743
class 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
28142889
class 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
28352916
class PackageInstantiation(PrimaryUnit, GenericEntityInstantiation):

0 commit comments

Comments
 (0)