aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/libghdl/name_table.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyGHDL/libghdl/name_table.py')
-rw-r--r--pyGHDL/libghdl/name_table.py48
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))