aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/Subprogram.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-21 23:18:29 +0200
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-22 12:28:25 +0200
commitf956044c3045992f37f23d88d9e51a1de8593948 (patch)
tree439f7b1b958ccba41a7f35cc711415f5345be514 /pyGHDL/dom/Subprogram.py
parent11bd75f611a892af0e20e913a9580d43c23e610b (diff)
downloadghdl-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.py42
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