aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-22 23:30:06 +0200
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-22 23:30:06 +0200
commit6b5e08c5373607115cb0fec38b67a76e2f7f8927 (patch)
tree753ee3e4dc0c82b4da339ade374488b51afd4d8c /pyGHDL
parentf8e700709132f7a65b0962c38379bf4c39033f12 (diff)
downloadghdl-6b5e08c5373607115cb0fec38b67a76e2f7f8927.tar.gz
ghdl-6b5e08c5373607115cb0fec38b67a76e2f7f8927.tar.bz2
ghdl-6b5e08c5373607115cb0fec38b67a76e2f7f8927.zip
Handle shared variables.
Diffstat (limited to 'pyGHDL')
-rw-r--r--pyGHDL/dom/Object.py17
-rw-r--r--pyGHDL/dom/_Translate.py8
-rw-r--r--pyGHDL/dom/formatting/prettyprint.py12
3 files changed, 36 insertions, 1 deletions
diff --git a/pyGHDL/dom/Object.py b/pyGHDL/dom/Object.py
index 953fddc41..c8777f722 100644
--- a/pyGHDL/dom/Object.py
+++ b/pyGHDL/dom/Object.py
@@ -39,6 +39,7 @@ from pyVHDLModel.VHDLModel import (
Constant as VHDLModel_Constant,
DeferredConstant as VHDLModel_DeferredConstant,
Variable as VHDLModel_Variable,
+ SharedVariable as VHDLModel_SharedVariable,
Signal as VHDLModel_Signal,
Expression,
SubTypeOrSymbol,
@@ -106,6 +107,22 @@ class Variable(VHDLModel_Variable):
@export
+class SharedVariable(VHDLModel_SharedVariable):
+ def __init__(self, name: str, subType: SubTypeOrSymbol):
+ super().__init__(name)
+
+ self._name = name
+ self._subType = subType
+
+ @classmethod
+ def parse(cls, node):
+ name = GetNameOfNode(node)
+ subTypeIndication = GetSubtypeIndicationFromNode(node, "variable", name)
+
+ return cls(name, subTypeIndication)
+
+
+@export
class Signal(VHDLModel_Signal):
def __init__(
self, name: str, subType: SubTypeOrSymbol, defaultExpression: Expression
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py
index 2b2a44e60..18b4160b8 100644
--- a/pyGHDL/dom/_Translate.py
+++ b/pyGHDL/dom/_Translate.py
@@ -366,6 +366,14 @@ def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str):
from pyGHDL.dom.Object import Constant
result.append(Constant.parse(item))
+
+ elif kind == nodes.Iir_Kind.Variable_Declaration:
+ from pyGHDL.dom.Object import SharedVariable
+
+ if nodes.Get_Shared_Flag(item):
+ result.append(SharedVariable.parse(item))
+ else:
+ raise DOMException("Found non-shared variable.")
elif kind == nodes.Iir_Kind.Signal_Declaration:
from pyGHDL.dom.Object import Signal
diff --git a/pyGHDL/dom/formatting/prettyprint.py b/pyGHDL/dom/formatting/prettyprint.py
index 0509b826d..c4f76acaa 100644
--- a/pyGHDL/dom/formatting/prettyprint.py
+++ b/pyGHDL/dom/formatting/prettyprint.py
@@ -24,7 +24,7 @@ from pyGHDL.dom.DesignUnit import (
Context,
Component,
)
-from pyGHDL.dom.Object import Constant, Signal
+from pyGHDL.dom.Object import Constant, Signal, SharedVariable
from pyGHDL.dom.InterfaceItem import (
GenericConstantInterfaceItem,
PortSignalInterfaceItem,
@@ -302,6 +302,16 @@ class PrettyPrint:
expr=str(item.DefaultExpression),
)
)
+ elif isinstance(item, SharedVariable):
+ buffer.append(
+ "{prefix}- shared variable {name} : {subtype}".format(
+ prefix=prefix,
+ name=item.Name,
+ subtype=self.formatSubtypeIndication(
+ item.SubType, "shared variable", item.Name
+ ),
+ )
+ )
elif isinstance(item, Signal):
buffer.append(
"{prefix}- signal {name} : {subtype}{initValue}".format(