aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/_Utils.py
diff options
context:
space:
mode:
authorPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-22 21:40:20 +0200
committerPatrick Lehmann <Patrick.Lehmann@plc2.de>2021-06-22 21:40:20 +0200
commitc5a4e881debcc75bdb96cdddd4abda10fd778b68 (patch)
tree9cb1bbb2510f0fce70d7ae36436bc22631698d84 /pyGHDL/dom/_Utils.py
parentea328fa671fc42569a688c8dfb308d87f42771c3 (diff)
downloadghdl-c5a4e881debcc75bdb96cdddd4abda10fd778b68.tar.gz
ghdl-c5a4e881debcc75bdb96cdddd4abda10fd778b68.tar.bz2
ghdl-c5a4e881debcc75bdb96cdddd4abda10fd778b68.zip
Improved error handling.
Diffstat (limited to 'pyGHDL/dom/_Utils.py')
-rw-r--r--pyGHDL/dom/_Utils.py40
1 files changed, 35 insertions, 5 deletions
diff --git a/pyGHDL/dom/_Utils.py b/pyGHDL/dom/_Utils.py
index e75c5f36a..f413351b4 100644
--- a/pyGHDL/dom/_Utils.py
+++ b/pyGHDL/dom/_Utils.py
@@ -30,13 +30,15 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
# ============================================================================
-from pyGHDL.libghdl._types import Iir
from pydecor import export
+from pyGHDL.dom.Common import DOMException
from pyVHDLModel.VHDLModel import Mode
-from pyGHDL.libghdl import LibGHDLException, name_table, files_map
+from pyGHDL.libghdl import LibGHDLException, name_table, files_map, errorout_memory
from pyGHDL.libghdl.vhdl import nodes
+from pyGHDL.libghdl.vhdl.nodes import Null_Iir
+from pyGHDL.libghdl._types import Iir
from pyGHDL.dom.Misc import Position
@@ -52,9 +54,24 @@ __MODE_TRANSLATION = {
@export
+def CheckForErrors() -> None:
+ errorCount = errorout_memory.Get_Nbr_Messages()
+ errors = []
+ if errorCount != 0:
+ for i in range(errorCount):
+ errors.append(errorout_memory.Get_Error_Message(i + 1))
+
+ raise DOMException("Error raised in libghdl.") \
+ from LibGHDLException("libghdl: Internal error.", errors)
+
+
+@export
def GetIirKindOfNode(node: Iir) -> nodes.Iir_Kind:
- # This function is the most likely to be called on a Null_Iir node
- assert node != 0
+ """Return the kind of a node in the IIR tree."""
+
+ if node == Null_Iir:
+ raise ValueError("Parameter 'node' must not be 'Null_iir'.")
+
kind: int = nodes.Get_Kind(node)
return nodes.Iir_Kind(kind)
@@ -62,13 +79,21 @@ def GetIirKindOfNode(node: Iir) -> nodes.Iir_Kind:
@export
def GetNameOfNode(node: Iir) -> str:
"""Return the python string from node :obj:`node` identifier."""
+
+ if node == Null_Iir:
+ raise ValueError("Parameter 'node' must not be 'Null_iir'.")
+
identifier = nodes.Get_Identifier(node)
return name_table.Get_Name_Ptr(identifier)
@export
def GetModeOfNode(node: Iir) -> Mode:
- """Return the mode of a :obj:`port`."""
+ """Return the mode of a :obj:`node`."""
+
+ if node == Null_Iir:
+ raise ValueError("Parameter 'node' must not be 'Null_iir'.")
+
try:
return __MODE_TRANSLATION[nodes.Get_Mode(node)]
except KeyError:
@@ -77,6 +102,11 @@ def GetModeOfNode(node: Iir) -> Mode:
@export
def GetPositionOfNode(node: Iir) -> Position:
+ """Return the source code position of a IIR node."""
+
+ if node == Null_Iir:
+ raise ValueError("Parameter 'node' must not be 'Null_iir'.")
+
location = nodes.Get_Location(node)
file = files_map.Location_To_File(location)
fileName = name_table.Get_Name_Ptr(files_map.Get_File_Name(file))