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/_Translate.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/_Translate.py')
-rw-r--r-- | pyGHDL/dom/_Translate.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py index 84d3448d7..4e5baa9cf 100644 --- a/pyGHDL/dom/_Translate.py +++ b/pyGHDL/dom/_Translate.py @@ -324,6 +324,38 @@ def GetPortsFromChainedNodes(nodeChain: Iir): return result +# FIXME: rewrite to generator +@export +def GetParameterFromChainedNodes(nodeChain: Iir): + result = [] + for parameter in utils.chain_iter(nodeChain): + kind = GetIirKindOfNode(parameter) + if kind == nodes.Iir_Kind.Interface_Constant_Declaration: + pass + elif kind == nodes.Iir_Kind.Interface_Variable_Declaration: + pass + elif kind == nodes.Iir_Kind.Interface_Signal_Declaration: + from pyGHDL.dom.InterfaceItem import PortSignalInterfaceItem + + portSignal = ParameterSignalInterfaceItem.parse(parameter) + + result.append(portSignal) + else: + position = GetPositionOfNode(parameter) + raise DOMException( + "Unknown parameter kind '{kindName}'({kind}) in parameter '{param}' at {file}:{line}:{column}.".format( + kind=kind, + kindName=kind.name, + param=parameter, + file=position.Filename, + line=position.Line, + column=position.Column, + ) + ) + + return result + + def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str): result = [] for item in utils.chain_iter(nodeChain): |