From 111fe055b2f0f3a0225d2553cf739572d691a14d Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sat, 26 Jun 2021 13:48:09 +0200 Subject: More DOM improvements (#1806) * First try to handle names. * Reworked names. * Reworked range expressions. * Handle AttributeNames. * Added handling of file declaration and attribute declarations. * Improved error outputs. * Handle protected types. * Make black happy with ugly code. * Handle Null literal and File parameters. * File type and physical type. * Don't fail on reported syntax errors. Catch call errors into libghdl. * Improved Sanity checks for pyGHDL.dom. * Load sourcecode via Python and process in-memory. Fixed testcases. * Added package instantiations and packages with generics. * Added UseClause, AttributeSpecification and PhysicalTypes. * Improved pretty-printing. * Fixed AttributeName in subtype indication. * Get code position of IIR nodes. * Added DOMMixin into all derived classes. * Mark as not yet implemented. * Pinned pyVHDLModel version to v0.10.4. * Removed xfail in LSP test. Bumped requirement of pyVHDLModel to v0.10.4. Fixed some Codacy issues. (cherry picked from commit f64e7ed7c3d69cbf84cd60db8e9b085e90b846cb) --- pyGHDL/libghdl/__init__.py | 10 +++++----- pyGHDL/libghdl/_decorator.py | 26 +++++++++++++++++++++++--- pyGHDL/libghdl/files_map_editor.py | 4 ++-- 3 files changed, 30 insertions(+), 10 deletions(-) (limited to 'pyGHDL/libghdl') diff --git a/pyGHDL/libghdl/__init__.py b/pyGHDL/libghdl/__init__.py index 525710590..d23ffc0e7 100644 --- a/pyGHDL/libghdl/__init__.py +++ b/pyGHDL/libghdl/__init__.py @@ -87,7 +87,7 @@ def _check_libghdl_bindir(bindir: Path, basename: Path) -> Path: def _get_libghdl_path(): - """ + """\ Locate the directory where the shared library is installed. Search order: @@ -182,7 +182,7 @@ def initialize() -> None: @export # @BindToLibGHDL("libghdl__set_option") def set_option(Opt: str) -> bool: - """ + """\ Set option :obj:`opt`. :param Opt: Option to set. @@ -195,7 +195,7 @@ def set_option(Opt: str) -> bool: @export # @BindToLibGHDL("libghdl__analyze_init") def analyze_init() -> None: - """ + """\ Initialize the analyzer. .. deprecated:: 1.0.0 @@ -207,7 +207,7 @@ def analyze_init() -> None: @export # @BindToLibGHDL("libghdl__analyze_init_status") def analyze_init_status() -> int: - """ + """\ Initialize the analyzer. :return: Returns 0 in case of success. @@ -218,7 +218,7 @@ def analyze_init_status() -> int: @export # @BindToLibGHDL("libghdl__analyze_file") def analyze_file(fname: str) -> Iir: - """ + """\ Analyze a given filename :obj:`fname`. :param fname: File name diff --git a/pyGHDL/libghdl/_decorator.py b/pyGHDL/libghdl/_decorator.py index a680cc9d1..9c5aefa19 100644 --- a/pyGHDL/libghdl/_decorator.py +++ b/pyGHDL/libghdl/_decorator.py @@ -48,7 +48,7 @@ from typing import Callable, List, Dict, Any, TypeVar from pydecor import export -from pyGHDL.libghdl import libghdl +from pyGHDL.libghdl import libghdl, LibGHDLException @export @@ -181,14 +181,34 @@ def BindToLibGHDL(subprogramName): @wraps(func) def inner(*args): - return returnType(functionPointer(*args)) + try: + returnValue = functionPointer(*args) + except OSError as ex: + errors = [str(ex)] + raise LibGHDLException( + "Caught exception when calling '{func}' in libghdl.".format( + func=subprogramName + ), + errors, + ) from ex + + return returnType(returnValue) return inner else: @wraps(func) def inner(*args): - return functionPointer(*args) + try: + return functionPointer(*args) + except OSError as ex: + errors = [str(ex)] + raise LibGHDLException( + "Caught exception when calling '{func}' in libghdl.".format( + func=subprogramName + ), + errors, + ) from ex return inner diff --git a/pyGHDL/libghdl/files_map_editor.py b/pyGHDL/libghdl/files_map_editor.py index eceb3efe2..2009af882 100644 --- a/pyGHDL/libghdl/files_map_editor.py +++ b/pyGHDL/libghdl/files_map_editor.py @@ -32,7 +32,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # ============================================================================ -from ctypes import c_int32, c_char_p, c_bool +from ctypes import c_int32, c_char_p, c_bool, c_uint32 from pydecor import export @@ -113,7 +113,7 @@ def Fill_Text(File: SourceFileEntry, Text_Pointer, Text_Length: int) -> None: @export # @BindToLibGHDL("files_map__editor__check_buffer_content") def Check_Buffer_Content( - File: SourceFileEntry, String_Pointer, String_Length: int + File: SourceFileEntry, String_Pointer: c_char_p, String_Length: c_uint32 ) -> None: """ Check that content of :obj:`File` is STR[1 .. STR_LEN]. -- cgit v1.2.3