Skip to content

Commit a93ad17

Browse files
authored
v0.10.3
2 parents 4816241 + c8df413 commit a93ad17

File tree

5 files changed

+123
-57
lines changed

5 files changed

+123
-57
lines changed

doc/LanguageModel/TypeDefinitions.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ Record
232232
233233
# from RecordType
234234
@property
235-
def Members(self) -> List[RecordTypeMember]:
235+
def Members(self) -> List[RecordTypeElement]:
236236
237237
238238
.. _vhdlmodel-protectedtypes:

doc/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def _LatestTagName():
3737

3838
# The full version, including alpha/beta/rc tags
3939
version = "0.9" # The short X.Y version.
40-
release = "0.10.2" # The full version, including alpha/beta/rc tags.
40+
release = "0.10.3" # The full version, including alpha/beta/rc tags.
4141
try:
4242
if _IsUnderGitControl:
4343
latestTagName = _LatestTagName()[1:] # remove prefix "v"

pyVHDLModel/VHDLModel.py

Lines changed: 117 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
# load dependencies
4444
from enum import Enum
4545
from pathlib import Path
46-
from typing import List, Tuple, Union
46+
from typing import List, Tuple, Union, Dict
47+
4748
try:
4849
from typing import Protocol
4950
except 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
467506
class 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
686741
class 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
766825
class 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
14321496
class Signal(Object, WithDefaultExpression):
14331497
pass
@@ -1769,19 +1833,19 @@ def PackageReferences(self) -> List[UseStatement]:
17691833

17701834
@export
17711835
class 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
18041868
class 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:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
# Assemble all package information
5454
setuptools_setup(
5555
name=projectName,
56-
version="0.10.2",
56+
version="0.10.3",
5757

5858
author="Patrick Lehmann",
5959
author_email="[email protected]",

tests/unit/Instantiate.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ def test_Entity(self):
9090
self.assertTrue(len(entity.BodyItems) == 0)
9191

9292
def test_Architecture(self):
93-
architecture = Architecture("arch_1")
93+
entity = Entity("entity_1")
94+
architecture = Architecture("arch_1", entity)
9495

9596
self.assertIsNotNone(architecture)
9697
self.assertTrue(architecture.Name == "arch_1")
@@ -142,7 +143,7 @@ def test_Real(self):
142143
self.assertTrue(real.Name == "real")
143144

144145
def test_Array(self):
145-
array = ArrayType("bit_vector")
146+
array = ArrayType("bit_vector", [], None)
146147

147148
self.assertIsNotNone(array)
148149
self.assertTrue(array.Name == "bit_vector")

0 commit comments

Comments
 (0)