aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/Subprogram.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-23 11:52:41 +0200
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-23 11:52:41 +0200
commit700a2e85da31c53067b4b4139b1a0c2f78818c68 (patch)
treefa1e1a11f33453464fe1fedc7d1aa734f4a96d01 /pyGHDL/dom/Subprogram.py
parent95d5cb9329ee335a64e444ed0fd93bb0950edc5a (diff)
downloadghdl-700a2e85da31c53067b4b4139b1a0c2f78818c68.tar.gz
ghdl-700a2e85da31c53067b4b4139b1a0c2f78818c68.tar.bz2
ghdl-700a2e85da31c53067b4b4139b1a0c2f78818c68.zip
First primitive handling of selected names.
Diffstat (limited to 'pyGHDL/dom/Subprogram.py')
-rw-r--r--pyGHDL/dom/Subprogram.py58
1 files changed, 38 insertions, 20 deletions
diff --git a/pyGHDL/dom/Subprogram.py b/pyGHDL/dom/Subprogram.py
index b3c47bfe5..0f10ebf62 100644
--- a/pyGHDL/dom/Subprogram.py
+++ b/pyGHDL/dom/Subprogram.py
@@ -30,6 +30,8 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
# ============================================================================
+from typing import List
+
from pyGHDL.dom.Symbol import SimpleSubTypeSymbol
from pyGHDL.libghdl.vhdl import nodes
from pydecor import export
@@ -39,14 +41,27 @@ from pyVHDLModel.VHDLModel import (
Function as VHDLModel_Function,
Procedure as VHDLModel_Procedure,
SubTypeOrSymbol,
+ GenericInterfaceItem,
+ ParameterInterfaceItem,
)
from pyGHDL.libghdl._types import Iir
@export
class Function(VHDLModel_Function):
- def __init__(self, functionName: str, returnType: SubTypeOrSymbol):
+ def __init__(
+ self,
+ functionName: str,
+ returnType: SubTypeOrSymbol,
+ genericItems: List[GenericInterfaceItem] = None,
+ parameterItems: List[ParameterInterfaceItem] = None,
+ ):
super().__init__(functionName)
+
+ self._genericItems = [] if genericItems is None else [g for g in genericItems]
+ self._parameterItems = (
+ [] if parameterItems is None else [p for p in parameterItems]
+ )
self._returnType = returnType
@classmethod
@@ -57,27 +72,34 @@ class Function(VHDLModel_Function):
)
functionName = GetNameOfNode(node)
+
+ generics = GetGenericsFromChainedNodes(nodes.Get_Generic_Chain(node))
+ parameters = GetParameterFromChainedNodes(
+ nodes.Get_Interface_Declaration_Chain(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 function
+ return cls(functionName, returnTypeSymbol, generics, parameters)
@export
class Procedure(VHDLModel_Procedure):
- def __init__(self, procedureName: str):
+ def __init__(
+ self,
+ procedureName: str,
+ genericItems: List[GenericInterfaceItem] = None,
+ parameterItems: List[ParameterInterfaceItem] = None,
+ ):
super().__init__(procedureName)
+ self._genericItems = [] if genericItems is None else [g for g in genericItems]
+ self._parameterItems = (
+ [] if parameterItems is None else [p for p in parameterItems]
+ )
+
@classmethod
def parse(cls, node: Iir):
from pyGHDL.dom._Translate import (
@@ -87,13 +109,9 @@ class Procedure(VHDLModel_Procedure):
procedureName = GetNameOfNode(node)
- procedure = cls(procedureName)
-
- for generic in GetGenericsFromChainedNodes(nodes.Get_Generic_Chain(node)):
- procedure.GenericItems.append(generic)
- for port in GetParameterFromChainedNodes(
+ generics = GetGenericsFromChainedNodes(nodes.Get_Generic_Chain(node))
+ parameters = GetParameterFromChainedNodes(
nodes.Get_Interface_Declaration_Chain(node)
- ):
- procedure.ParameterItems.append(port)
+ )
- return procedure
+ return cls(procedureName, generics, parameters)