diff options
author | Patrick Lehmann <Patrick.Lehmann@plc2.de> | 2021-06-21 23:18:29 +0200 |
---|---|---|
committer | Patrick Lehmann <Patrick.Lehmann@plc2.de> | 2021-06-22 12:28:25 +0200 |
commit | f956044c3045992f37f23d88d9e51a1de8593948 (patch) | |
tree | 439f7b1b958ccba41a7f35cc711415f5345be514 /pyGHDL/dom/Subprogram.py | |
parent | 11bd75f611a892af0e20e913a9580d43c23e610b (diff) | |
download | ghdl-f956044c3045992f37f23d88d9e51a1de8593948.tar.gz ghdl-f956044c3045992f37f23d88d9e51a1de8593948.tar.bz2 ghdl-f956044c3045992f37f23d88d9e51a1de8593948.zip |
Implemented handling of generic parameters to subprograms.
Diffstat (limited to 'pyGHDL/dom/Subprogram.py')
-rw-r--r-- | pyGHDL/dom/Subprogram.py | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/pyGHDL/dom/Subprogram.py b/pyGHDL/dom/Subprogram.py index 420041a52..b3c47bfe5 100644 --- a/pyGHDL/dom/Subprogram.py +++ b/pyGHDL/dom/Subprogram.py @@ -30,27 +30,47 @@ # # SPDX-License-Identifier: GPL-2.0-or-later # ============================================================================ +from pyGHDL.dom.Symbol import SimpleSubTypeSymbol +from pyGHDL.libghdl.vhdl import nodes from pydecor import export from pyGHDL.dom._Utils import GetNameOfNode from pyVHDLModel.VHDLModel import ( Function as VHDLModel_Function, Procedure as VHDLModel_Procedure, - Expression, + SubTypeOrSymbol, ) from pyGHDL.libghdl._types import Iir @export class Function(VHDLModel_Function): - def __init__(self, functionName: str): + def __init__(self, functionName: str, returnType: SubTypeOrSymbol): super().__init__(functionName) + self._returnType = returnType @classmethod def parse(cls, node: Iir): + from pyGHDL.dom._Translate import ( + GetGenericsFromChainedNodes, + GetParameterFromChainedNodes, + ) + functionName = GetNameOfNode(node) + returnType = nodes.Get_Return_Type_Mark(node) + returnTypeName = GetNameOfNode(returnType) + + returnTypeSymbol = SimpleSubTypeSymbol(returnTypeName) + function = cls(functionName, returnTypeSymbol) + + for generic in GetGenericsFromChainedNodes(nodes.Get_Generic_Chain(node)): + function.GenericItems.append(generic) + for port in GetParameterFromChainedNodes( + nodes.Get_Interface_Declaration_Chain(node) + ): + function.ParameterItems.append(port) - return cls(functionName) + return function @export @@ -60,6 +80,20 @@ class Procedure(VHDLModel_Procedure): @classmethod def parse(cls, node: Iir): + from pyGHDL.dom._Translate import ( + GetGenericsFromChainedNodes, + GetParameterFromChainedNodes, + ) + procedureName = GetNameOfNode(node) - return cls(procedureName) + procedure = cls(procedureName) + + for generic in GetGenericsFromChainedNodes(nodes.Get_Generic_Chain(node)): + procedure.GenericItems.append(generic) + for port in GetParameterFromChainedNodes( + nodes.Get_Interface_Declaration_Chain(node) + ): + procedure.ParameterItems.append(port) + + return procedure |