diff options
Diffstat (limited to 'pyGHDL/libghdl/name_table.py')
-rw-r--r-- | pyGHDL/libghdl/name_table.py | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/pyGHDL/libghdl/name_table.py b/pyGHDL/libghdl/name_table.py index e2190f3dd..b82207fb3 100644 --- a/pyGHDL/libghdl/name_table.py +++ b/pyGHDL/libghdl/name_table.py @@ -7,12 +7,13 @@ # |_| |___/ |___/ # ============================================================================= # Authors: Tristan Gingold +# Patrick Lehmann # # Package package: Python binding and low-level API for shared library 'libghdl'. # # License: # ============================================================================ -# Copyright (C) 2019-2020 Tristan Gingold +# Copyright (C) 2019-2021 Tristan Gingold # # GHDL is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free @@ -37,19 +38,50 @@ from ctypes import c_char_p from pydecor import export from pyGHDL.libghdl import libghdl +from pyGHDL.libghdl._types import NameId -Get_Name_Length = libghdl.name_table__get_name_length +Null_Identifier = 0 + -Get_Name_Ptr = libghdl.name_table__get_name_ptr -Get_Name_Ptr.restype = c_char_p +@export +def Get_Name_Length(Id: NameId) -> int: + """ + Get the length of an identifier denoted by a ``NameId``. -_Get_Identifier_With_Len = libghdl.name_table__get_identifier_with_len + :param Id: NameId for the identifier to query. + :return: Length of the identifier. + """ + return libghdl.name_table__get_name_length(Id) @export -def Get_Identifier(s): - return _Get_Identifier_With_Len(c_char_p(s), len(s)) +def Get_Name_Ptr(Id: NameId) -> bytes: + """ + Get the address of the first character of ID. The address is valid until + the next call to Get_Identifier (which may reallocate the string table). + The string is NUL-terminated (this is done by get_identifier). + :param Id: NameId for the identifier to query. + :return: + """ + func = libghdl.name_table__get_name_ptr + func.restype = c_char_p + # FIXME: don't we need to encode to utf-8? + return func(Id) -Null_Identifier = 0 + +@export +def Get_Identifier(string: str) -> NameId: + """ + Get or create an entry in the name table. + + Note: + * an identifier is represented in all lower case letter, + * an extended identifier is represented in backslashes, double internal backslashes are simplified. + + :param string: String to create or lookup. + :return: Id in name table. + """ + string = string.encode("utf-8") + return libghdl.name_table__get_identifier_with_len(c_char_p(string), len(string)) |