4343# load dependencies
4444from enum import Enum
4545from pathlib import Path
46- from typing import List , Tuple , Union
46+ from typing import List , Tuple , Union , Dict
47+
4748try :
4849 from typing import Protocol
4950except ImportError :
@@ -325,7 +326,21 @@ def __init__(self, subTypeName: str):
325326
326327
327328@export
328- class ConstrainedSubTypeSymbol (SubTypeSymbol ):
329+ class ConstrainedScalarSubTypeSymbol (SubTypeSymbol ):
330+ _range : 'Range'
331+
332+ def __init__ (self , subTypeName : str , range : 'Range' = None ):
333+ super ().__init__ (symbolName = subTypeName )
334+ self ._subType = None
335+ self ._range = range
336+
337+ @property
338+ def Range (self ) -> 'Range' :
339+ return self ._range
340+
341+
342+ @export
343+ class ConstrainedCompositeSubTypeSymbol (SubTypeSymbol ):
329344 _constraints : List [Constraint ]
330345
331346 def __init__ (self , subTypeName : str , constraints : List [Constraint ] = None ):
@@ -443,17 +458,17 @@ class Design(ModelEntity):
443458 and analysed. It's the root of this document-object-model (DOM). It contains
444459 at least on VHDL library (see :class:`~pyVHDLModel.VHDLModel.Library`).
445460 """
446- _libraries : List [ 'Library' ] #: List of all libraries defined for a design.
461+ _libraries : Dict [ str , 'Library' ] #: List of all libraries defined for a design.
447462 _documents : List ['Document' ] #: List of all documents loaded for a design.
448463
449464 def __init__ (self ):
450465 super ().__init__ ()
451466
452- self ._libraries = []
467+ self ._libraries = {}
453468 self ._documents = []
454469
455470 @property
456- def Libraries (self ) -> List [ 'Library' ]:
471+ def Libraries (self ) -> Dict [ str , 'Library' ]:
457472 """Returns a list of all libraries specified for this design."""
458473 return self ._libraries
459474
@@ -462,6 +477,30 @@ def Documents(self) -> List['Document']:
462477 """Returns a list of all documents (files) loaded for this design."""
463478 return self ._documents
464479
480+ def GetLibrary (self , libraryName : str ) -> 'Library' :
481+ if libraryName not in self ._libraries :
482+ lib = Library (libraryName )
483+ self ._libraries [libraryName ] = lib
484+ else :
485+ lib = self ._libraries [libraryName ]
486+
487+ return lib
488+
489+ def AddDocument (self , document : 'Document' , library : 'Library' ) -> None :
490+ self ._documents .append (document )
491+
492+ for entity in document .Entities :
493+ library .Entities .append (entity )
494+
495+ for package in document .Packages :
496+ library .Packages .append (package )
497+
498+ for configuration in document .Configurations :
499+ library .Configurations .append (configuration )
500+
501+ for context in document .Contexts :
502+ library .Contexts .append (context )
503+
465504
466505@export
467506class Library (ModelEntity , NamedEntity ):
@@ -622,7 +661,7 @@ def ResolutionFunction(self) -> 'Function':
622661
623662
624663@export
625- class ScalarType (BaseType ):
664+ class ScalarType (Type ):
626665 """
627666 A ``ScalarType`` is a base-class for all scalar types.
628667 """
@@ -661,39 +700,55 @@ class DiscreteType:
661700
662701
663702@export
664- class CompositeType (BaseType ):
703+ class CompositeType (Type ):
665704 """
666705 A ``CompositeType`` is a base-class for all composite types.
667706 """
668707
669708
670709@export
671- class ProtectedType (BaseType ):
710+ class ProtectedType (Type ):
672711 pass
673712
674713
675714@export
676- class AccessType (BaseType ):
677- pass
715+ class AccessType (Type ):
716+ _designatedSubType : SubTypeOrSymbol
717+
718+ def __init__ (self , name : str , designatedSubType : SubTypeOrSymbol ):
719+ super ().__init__ (name )
720+ self ._designatedSubType = designatedSubType
721+
722+ @property
723+ def DesignatedSubtype (self ):
724+ return self ._designatedSubType
678725
679726
680727@export
681- class FileType (BaseType ):
682- pass
728+ class FileType (Type ):
729+ _designatedSubType : SubTypeOrSymbol
730+
731+ def __init__ (self , name : str , designatedSubType : SubTypeOrSymbol ):
732+ super ().__init__ (name )
733+ self ._designatedSubType = designatedSubType
734+
735+ @property
736+ def DesignatedSubtype (self ):
737+ return self ._designatedSubType
683738
684739
685740@export
686741class EnumeratedType (ScalarType , DiscreteType ):
687- _elements : List ['EnumerationLiteral' ]
742+ _literals : List ['EnumerationLiteral' ]
688743
689- def __init__ (self , name : str ):
744+ def __init__ (self , name : str , literals : List [ 'EnumerationLiteral' ] ):
690745 super ().__init__ (name )
691746
692- self ._elements = []
747+ self ._literals = [] if literals is None else [ l for l in literals ]
693748
694749 @property
695- def Elements (self ) -> List ['EnumerationLiteral' ]:
696- return self ._elements
750+ def Literals (self ) -> List ['EnumerationLiteral' ]:
751+ return self ._literals
697752
698753
699754@export
@@ -732,7 +787,7 @@ class ArrayType(CompositeType):
732787 _dimensions : List ['Range' ]
733788 _elementType : SubType
734789
735- def __init__ (self , name : str ):
790+ def __init__ (self , name : str , indices : List , elementSubType : SubTypeOrSymbol ):
736791 super ().__init__ (name )
737792
738793 self ._dimensions = []
@@ -747,33 +802,37 @@ def ElementType(self) -> SubType:
747802
748803
749804@export
750- class RecordTypeMember (ModelEntity ):
805+ class RecordTypeElement (ModelEntity ):
751806 _name : str
752- _subType : SubType
807+ _subType : SubTypeOrSymbol
753808
754- def __init__ (self , name : str ):
809+ def __init__ (self , name : str , subType : SubTypeOrSymbol ):
755810 super ().__init__ ()
756811
757- self ._name = name
758- self ._subType = None
812+ self ._name = name
813+ self ._subType = subType
759814
760815 @property
761816 def Name (self ) -> str :
762817 return self ._name
763818
819+ @property
820+ def SubType (self ) -> SubTypeOrSymbol :
821+ return self ._subType
822+
764823
765824@export
766825class RecordType (CompositeType ):
767- _members : List [RecordTypeMember ]
826+ _elements : List [RecordTypeElement ]
768827
769- def __init__ (self , name : str ):
828+ def __init__ (self , name : str , elements : List [ RecordTypeElement ] = None ):
770829 super ().__init__ (name )
771830
772- self ._members = [ ]
831+ self ._elements = [] if elements is None else [ i for i in elements ]
773832
774833 @property
775- def Members (self ) -> List [RecordTypeMember ]:
776- return self ._members
834+ def Elements (self ) -> List [RecordTypeElement ]:
835+ return self ._elements
777836
778837
779838@export
@@ -1428,6 +1487,11 @@ class Variable(Object, WithDefaultExpression):
14281487 pass
14291488
14301489
1490+ @export
1491+ class SharedVariable (Object ):
1492+ pass
1493+
1494+
14311495@export
14321496class Signal (Object , WithDefaultExpression ):
14331497 pass
@@ -1769,19 +1833,19 @@ def PackageReferences(self) -> List[UseStatement]:
17691833
17701834@export
17711835class Entity (PrimaryUnit , MixinDesignUnitWithContext ):
1772- _genericItems : List [GenericInterfaceItem ]
1773- _portItems : List [PortInterfaceItem ]
1774- _declaredItems : List # FIXME: define list element type e.g. via Union
1775- _bodyItems : List ['ConcurrentStatement' ]
1836+ _genericItems : List [GenericInterfaceItem ]
1837+ _portItems : List [PortInterfaceItem ]
1838+ _declaredItems : List # FIXME: define list element type e.g. via Union
1839+ _bodyItems : List ['ConcurrentStatement' ]
17761840
1777- def __init__ (self , name : str ):
1841+ def __init__ (self , name : str , genericItems : List [ GenericInterfaceItem ] = None , portItems : List [ PortInterfaceItem ] = None , declaredItems : List = None , bodyItems : List [ 'ConcurrentStatement' ] = None ):
17781842 super ().__init__ (name )
17791843 MixinDesignUnitWithContext .__init__ (self )
17801844
1781- self ._genericItems = [ ]
1782- self ._portItems = [ ]
1783- self ._declaredItems = [ ]
1784- self ._bodyItems = [ ]
1845+ self ._genericItems = [] if genericItems is None else [ g for g in genericItems ]
1846+ self ._portItems = [] if portItems is None else [ p for p in portItems ]
1847+ self ._declaredItems = [] if declaredItems is None else [ i for i in declaredItems ]
1848+ self ._bodyItems = [] if bodyItems is None else [ i for i in bodyItems ]
17851849
17861850 @property
17871851 def GenericItems (self ) -> List [GenericInterfaceItem ]:
@@ -1802,19 +1866,20 @@ def BodyItems(self) -> List['ConcurrentStatement']:
18021866
18031867@export
18041868class Architecture (SecondaryUnit , MixinDesignUnitWithContext ):
1805- _entity : Entity
1806- _declaredItems : List # FIXME: define list element type e.g. via Union
1807- _bodyItems : List ['ConcurrentStatement' ]
1869+ _entity : EntityOrSymbol
1870+ _declaredItems : List # FIXME: define list element type e.g. via Union
1871+ _bodyItems : List ['ConcurrentStatement' ]
18081872
1809- def __init__ (self , name : str ):
1873+ def __init__ (self , name : str , entity : EntityOrSymbol , declaredItems : List = None , bodyItems : List [ 'ConcurrentStatement' ] = None ):
18101874 super ().__init__ (name )
18111875 MixinDesignUnitWithContext .__init__ (self )
18121876
1813- self ._declaredItems = []
1814- self ._bodyItems = []
1877+ self ._entity = entity
1878+ self ._declaredItems = [] if declaredItems is None else [i for i in declaredItems ]
1879+ self ._bodyItems = [] if bodyItems is None else [i for i in bodyItems ]
18151880
18161881 @property
1817- def Entity (self ) -> Entity :
1882+ def Entity (self ) -> EntityOrSymbol :
18181883 return self ._entity
18191884
18201885 @property
@@ -1831,12 +1896,12 @@ class Component(ModelEntity, NamedEntity):
18311896 _genericItems : List [GenericInterfaceItem ]
18321897 _portItems : List [PortInterfaceItem ]
18331898
1834- def __init__ (self , name : str ):
1899+ def __init__ (self , name : str , genericItems : List [ GenericInterfaceItem ] = None , portItems : List [ PortInterfaceItem ] = None ):
18351900 super ().__init__ ()
18361901 NamedEntity .__init__ (self , name )
18371902
1838- self ._genericItems = []
1839- self ._portItems = []
1903+ self ._genericItems = [] if genericItems is None else [ g for g in genericItems ]
1904+ self ._portItems = [] if portItems is None else [ p for p in portItems ]
18401905
18411906 @property
18421907 def GenericItems (self ) -> List [GenericInterfaceItem ]:
@@ -1914,12 +1979,12 @@ class Package(PrimaryUnit, MixinDesignUnitWithContext):
19141979 _genericItems : List [GenericInterfaceItem ]
19151980 _declaredItems : List
19161981
1917- def __init__ (self , name : str ):
1982+ def __init__ (self , name : str , genericItems : List [ GenericInterfaceItem ] = None , declaredItems : List = None ):
19181983 super ().__init__ (name )
19191984 MixinDesignUnitWithContext .__init__ (self )
19201985
1921- self ._genericItems = [ ]
1922- self ._declaredItems = [ ]
1986+ self ._genericItems = [] if genericItems is None else [ g for g in genericItems ]
1987+ self ._declaredItems = [] if declaredItems is None else [ i for i in declaredItems ]
19231988
19241989 @property
19251990 def GenericItems (self ) -> List [GenericInterfaceItem ]:
@@ -1935,11 +2000,11 @@ class PackageBody(SecondaryUnit, MixinDesignUnitWithContext):
19352000 _package : Package
19362001 _declaredItems : List
19372002
1938- def __init__ (self , name : str ):
2003+ def __init__ (self , name : str , declaredItems : List = None ):
19392004 super ().__init__ (name )
19402005 MixinDesignUnitWithContext .__init__ (self )
19412006
1942- self ._declaredItems = [ ]
2007+ self ._declaredItems = [] if declaredItems is None else [ i for i in declaredItems ]
19432008
19442009 @property
19452010 def Package (self ) -> Package :
0 commit comments