aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-21 21:44:31 +0200
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-22 12:28:25 +0200
commitad34fac3f4e30f0ff13e1630b42373f31b2918a4 (patch)
tree965e614ea5755baad99a0ad0024433b0f16b90ab /pyGHDL/dom
parent7e44124316ee6b3b7f8d3ee040ef63f0d2f2e65d (diff)
downloadghdl-ad34fac3f4e30f0ff13e1630b42373f31b2918a4.tar.gz
ghdl-ad34fac3f4e30f0ff13e1630b42373f31b2918a4.tar.bz2
ghdl-ad34fac3f4e30f0ff13e1630b42373f31b2918a4.zip
Fixed function call parameters.
Fixed physical literal units. Added basic Procedure detection.
Diffstat (limited to 'pyGHDL/dom')
-rw-r--r--pyGHDL/dom/Literal.py6
-rw-r--r--pyGHDL/dom/Subprogram.py7
-rw-r--r--pyGHDL/dom/Symbol.py3
-rw-r--r--pyGHDL/dom/_Translate.py13
-rw-r--r--pyGHDL/dom/formatting/prettyprint.py14
5 files changed, 37 insertions, 6 deletions
diff --git a/pyGHDL/dom/Literal.py b/pyGHDL/dom/Literal.py
index 4fe3a843c..44c002955 100644
--- a/pyGHDL/dom/Literal.py
+++ b/pyGHDL/dom/Literal.py
@@ -30,7 +30,7 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
# ============================================================================
-from pyGHDL.dom._Utils import GetIirKindOfNode
+from pyGHDL.dom._Utils import GetIirKindOfNode, GetNameOfNode
from pyGHDL.libghdl import name_table
from pyGHDL.libghdl.vhdl import nodes
@@ -70,7 +70,7 @@ class PhysicalIntegerLiteral(VHDLModel_PhysicalIntegerLiteral):
def parse(cls, node):
value = nodes.Get_Value(node)
unit = nodes.Get_Unit_Name(node)
- unitName = name_table.Get_Name_Ptr(unit)
+ unitName = GetNameOfNode(unit)
return cls(value, unitName)
@@ -81,7 +81,7 @@ class PhysicalFloatingLiteral(VHDLModel_PhysicalFloatingLiteral):
def parse(cls, node):
value = nodes.Get_Fp_Value(node)
unit = nodes.Get_Unit_Name(node)
- unitName = name_table.Get_Name_Ptr(unit)
+ unitName = GetNameOfNode(unit)
return cls(value, unitName)
diff --git a/pyGHDL/dom/Subprogram.py b/pyGHDL/dom/Subprogram.py
index 70645df6f..4fa6b3e6a 100644
--- a/pyGHDL/dom/Subprogram.py
+++ b/pyGHDL/dom/Subprogram.py
@@ -34,6 +34,7 @@ from pydecor import export
from pyVHDLModel.VHDLModel import (
Function as VHDLModel_Function,
+ Procedure as VHDLModel_Procedure,
Expression,
)
@@ -42,3 +43,9 @@ from pyVHDLModel.VHDLModel import (
class Function(VHDLModel_Function):
def __init__(self, functionName: str):
super().__init__(functionName)
+
+
+@export
+class Procedure(VHDLModel_Procedure):
+ def __init__(self, procedureName: str):
+ super().__init__(procedureName)
diff --git a/pyGHDL/dom/Symbol.py b/pyGHDL/dom/Symbol.py
index 047fd624f..1865e4481 100644
--- a/pyGHDL/dom/Symbol.py
+++ b/pyGHDL/dom/Symbol.py
@@ -108,7 +108,8 @@ class IndexedObjectOrFunctionCallSymbol(VHDLModel_IndexedObjectOrFunctionCallSym
kind = GetIirKindOfNode(item)
if kind == nodes.Iir_Kind.Association_Element_By_Expression:
- expr = None # GetExpressionFromNode(nodes.Get_Associated_Expr(item))
+ actual = nodes.Get_Actual(item)
+ expr = GetExpressionFromNode(actual)
associations.append(expr)
else:
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py
index 7d736f335..ebd650698 100644
--- a/pyGHDL/dom/_Translate.py
+++ b/pyGHDL/dom/_Translate.py
@@ -97,7 +97,7 @@ from pyGHDL.dom.Expression import (
RotateLeftExpression,
RotateRightExpression,
)
-from pyGHDL.dom.Subprogram import Function
+from pyGHDL.dom.Subprogram import Function, Procedure
from pyGHDL.dom.Misc import Alias
@@ -317,6 +317,11 @@ def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str):
elif kind == nodes.Iir_Kind.Function_Body:
# functionName = NodeToName(item)
print("found function body '{name}'".format(name="????"))
+ elif kind == nodes.Iir_Kind.Procedure_Declaration:
+ result.append(GetProcedureFromNode(item))
+ elif kind == nodes.Iir_Kind.Procedure_Body:
+ # procedureName = NodeToName(item)
+ print("found procedure body '{name}'".format(name="????"))
elif kind == nodes.Iir_Kind.Object_Alias_Declaration:
result.append(GetAliasFromNode(item))
elif kind == nodes.Iir_Kind.Component_Declaration:
@@ -339,6 +344,12 @@ def GetFunctionFromNode(node: Iir):
return Function(functionName)
+def GetProcedureFromNode(node: Iir):
+ procedureName = GetNameOfNode(node)
+
+ return Procedure(procedureName)
+
+
def GetAliasFromNode(node: Iir):
aliasName = GetNameOfNode(node)
diff --git a/pyGHDL/dom/formatting/prettyprint.py b/pyGHDL/dom/formatting/prettyprint.py
index cdb1964c0..13f18f729 100644
--- a/pyGHDL/dom/formatting/prettyprint.py
+++ b/pyGHDL/dom/formatting/prettyprint.py
@@ -3,6 +3,7 @@ from typing import List, Union
from pydecor import export
from pyGHDL.dom.Misc import Alias
+from pyGHDL.dom.Subprogram import Procedure
from pyGHDL.dom.Type import IntegerType, SubType
from pyVHDLModel.VHDLModel import (
GenericInterfaceItem,
@@ -345,11 +346,22 @@ class PrettyPrint:
name=item.Name,
)
)
+ elif isinstance(item, Procedure):
+ buffer.append(
+ "{prefix}- procedure {name}".format(
+ prefix=prefix,
+ name=item.Name,
+ )
+ )
elif isinstance(item, Component):
for line in self.formatComponent(item, level):
buffer.append(line)
else:
- raise PrettyPrintException("Unhandled declared item kind.")
+ raise PrettyPrintException(
+ "Unhandled declared item kind '{name}'.".format(
+ name=item.__class__.__name__
+ )
+ )
return buffer