From ad34fac3f4e30f0ff13e1630b42373f31b2918a4 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Mon, 21 Jun 2021 21:44:31 +0200 Subject: Fixed function call parameters. Fixed physical literal units. Added basic Procedure detection. --- pyGHDL/dom/Literal.py | 6 +++--- pyGHDL/dom/Subprogram.py | 7 +++++++ pyGHDL/dom/Symbol.py | 3 ++- pyGHDL/dom/_Translate.py | 13 ++++++++++++- pyGHDL/dom/formatting/prettyprint.py | 14 +++++++++++++- 5 files changed, 37 insertions(+), 6 deletions(-) (limited to 'pyGHDL/dom') 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 -- cgit v1.2.3