aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortgingold <tgingold@users.noreply.github.com>2022-12-24 11:06:07 +0100
committerGitHub <noreply@github.com>2022-12-24 11:06:07 +0100
commit5bca94f83b0d44297f943ff0d0237ec216fc29e9 (patch)
tree1b045b05c55baeb2676cdbb0dcb00393c24557db
parent26bb3c572eaffafafd8de8ef09b8acc34f91656f (diff)
parent08a338e9568c333929c6863be60580619e3e77ff (diff)
downloadghdl-5bca94f83b0d44297f943ff0d0237ec216fc29e9.tar.gz
ghdl-5bca94f83b0d44297f943ff0d0237ec216fc29e9.tar.bz2
ghdl-5bca94f83b0d44297f943ff0d0237ec216fc29e9.zip
Merge pull request #2281 from Paebbels/paebbels/encoding
Configurable encoding for pyGHDL
-rw-r--r--pyGHDL/dom/Attribute.py4
-rw-r--r--pyGHDL/dom/Concurrent.py6
-rw-r--r--pyGHDL/dom/Expression.py2
-rw-r--r--pyGHDL/dom/NonStandard.py9
-rw-r--r--pyGHDL/dom/Sequential.py2
-rw-r--r--pyGHDL/dom/_Translate.py40
-rw-r--r--pyGHDL/dom/_Utils.py2
-rw-r--r--pyGHDL/dom/formatting/prettyprint.py98
-rw-r--r--pyGHDL/libghdl/__init__.py8
-rw-r--r--pyGHDL/libghdl/errorout_memory.py3
-rw-r--r--pyGHDL/libghdl/files_map_editor.py4
-rw-r--r--pyGHDL/libghdl/name_table.py7
-rw-r--r--pyGHDL/libghdl/str_table.py3
13 files changed, 73 insertions, 115 deletions
diff --git a/pyGHDL/dom/Attribute.py b/pyGHDL/dom/Attribute.py
index ccd3ecf47..e43ea173e 100644
--- a/pyGHDL/dom/Attribute.py
+++ b/pyGHDL/dom/Attribute.py
@@ -125,7 +125,7 @@ class AttributeSpecification(VHDLModel_AttributeSpecification, DOMMixin):
else:
position = Position.parse(name)
raise DOMException(
- f"Unknown name kind '{nameKind.name}' in attribute specification '{attributeNode}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"Unknown name kind '{nameKind.name}' in attribute specification '{attributeNode}' at {position}."
)
entityClassToken = nodes.Get_Entity_Class(attributeNode)
@@ -134,7 +134,7 @@ class AttributeSpecification(VHDLModel_AttributeSpecification, DOMMixin):
except KeyError:
position = Position.parse(attributeNode)
raise DOMException(
- f"Unknown token '{entityClassToken.name}' in attribute specification for entity class '{attributeNode}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"Unknown token '{entityClassToken.name}' in attribute specification for entity class '{attributeNode}' at {position}."
)
expression = GetExpressionFromNode(nodes.Get_Expression(attributeNode))
diff --git a/pyGHDL/dom/Concurrent.py b/pyGHDL/dom/Concurrent.py
index 693feba27..df3e97a2a 100644
--- a/pyGHDL/dom/Concurrent.py
+++ b/pyGHDL/dom/Concurrent.py
@@ -579,9 +579,7 @@ class CaseGenerateStatement(VHDLModel_CaseGenerateStatement, DOMMixin):
cases.append(GenerateCase.parse(caseNode, choices))
caseNode = alternative
- choices = [
- choice,
- ]
+ choices = [choice]
alternative = nodes.Get_Chain(alternative)
@@ -630,7 +628,7 @@ class ForGenerateStatement(VHDLModel_ForGenerateStatement, DOMMixin):
else:
pos = Position.parse(generateNode)
raise DOMException(
- f"Unknown discete range kind '{rangeKind.name}' in for...generate statement at line {pos.Line}."
+ f"Unknown discrete range kind '{rangeKind.name}' in for...generate statement at line {pos.Line}."
)
body = nodes.Get_Generate_Statement_Body(generateNode)
diff --git a/pyGHDL/dom/Expression.py b/pyGHDL/dom/Expression.py
index 51b73c57e..4a61597e2 100644
--- a/pyGHDL/dom/Expression.py
+++ b/pyGHDL/dom/Expression.py
@@ -520,7 +520,7 @@ class Aggregate(VHDLModel_Aggregate, DOMMixin):
else:
pos = Position.parse(item)
raise DOMException(
- f"Unknown discete range kind '{rangeKind.name}' in for...generate statement at line {pos.Line}."
+ f"Unknown discrete range kind '{rangeKind.name}' in for...generate statement at line {pos.Line}."
)
choices.append(RangedAggregateElement(item, rng, value))
diff --git a/pyGHDL/dom/NonStandard.py b/pyGHDL/dom/NonStandard.py
index 14f5e1eac..db160faaf 100644
--- a/pyGHDL/dom/NonStandard.py
+++ b/pyGHDL/dom/NonStandard.py
@@ -60,6 +60,7 @@ from pyGHDL.libghdl import (
LibGHDLException,
utils,
files_map_editor,
+ ENCODING,
)
from pyGHDL.libghdl.flags import Flag_Gather_Comments
from pyGHDL.libghdl.vhdl import nodes, sem_lib
@@ -142,24 +143,24 @@ class Document(VHDLModel_Document):
else:
self.__loadFromString(sourceCode)
- if dontParse == False:
+ if not dontParse:
# Parse input file
t1 = time.perf_counter()
self.__ghdlFile = sem_lib.Load_File(self.__ghdlSourceFileEntry)
CheckForErrors()
self.__ghdlProcessingTime = time.perf_counter() - t1
- if dontTranslate == False:
+ if not dontTranslate:
t1 = time.perf_counter()
self.translate()
self.__domTranslateTime = time.perf_counter() - t1
def __loadFromPath(self):
- with self._filename.open("r", encoding="utf-8") as file:
+ with self._filename.open("r", encoding=ENCODING) as file:
self.__loadFromString(file.read())
def __loadFromString(self, sourceCode: str):
- sourcesBytes = sourceCode.encode("utf-8")
+ sourcesBytes = sourceCode.encode(ENCODING)
sourceLength = len(sourcesBytes)
bufferLength = sourceLength + 128
self.__ghdlFileID = name_table.Get_Identifier(str(self._filename))
diff --git a/pyGHDL/dom/Sequential.py b/pyGHDL/dom/Sequential.py
index 0258d3a14..296f57f52 100644
--- a/pyGHDL/dom/Sequential.py
+++ b/pyGHDL/dom/Sequential.py
@@ -365,7 +365,7 @@ class ForLoopStatement(VHDLModel_ForLoopStatement, DOMMixin):
else:
pos = Position.parse(loopNode)
raise DOMException(
- f"Unknown discete range kind '{rangeKind.name}' in for...loop statement at line {pos.Line}."
+ f"Unknown discrete range kind '{rangeKind.name}' in for...loop statement at line {pos.Line}."
)
statementChain = nodes.Get_Sequential_Statement_Chain(loopNode)
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py
index b3a48769b..20d173710 100644
--- a/pyGHDL/dom/_Translate.py
+++ b/pyGHDL/dom/_Translate.py
@@ -242,7 +242,7 @@ def GetArrayConstraintsFromSubtypeIndication(
else:
position = Position.parse(constraint)
raise DOMException(
- f"Unknown constraint kind '{constraintKind.name}' for constraint '{constraint}' in subtype indication '{subtypeIndication}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"Unknown constraint kind '{constraintKind.name}' for constraint '{constraint}' in subtype indication '{subtypeIndication}' at {position}."
)
return constraints
@@ -271,7 +271,7 @@ def GetTypeFromNode(node: Iir) -> BaseType:
else:
position = Position.parse(typeDefinition)
raise DOMException(
- f"GetTypeFromNode: Unknown type definition kind '{kind.name}' for type '{typeName}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"GetTypeFromNode: Unknown type definition kind '{kind.name}' for type '{typeName}' at {position}."
)
@@ -301,7 +301,7 @@ def GetAnonymousTypeFromNode(node: Iir) -> BaseType:
else:
position = Position.parse(typeDefinition)
raise DOMException(
- f"GetAnonymousTypeFromNode: Unknown type definition kind '{kind.name}' for type '{typeName}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"GetAnonymousTypeFromNode: Unknown type definition kind '{kind.name}' for type '{typeName}' at {position}."
)
@@ -446,9 +446,7 @@ def GetExpressionFromNode(node: Iir) -> ExpressionUnion:
cls = __EXPRESSION_TRANSLATION[kind]
except KeyError:
position = Position.parse(node)
- raise DOMException(
- f"Unknown expression kind '{kind.name}' in expression '{node}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown expression kind '{kind.name}' in expression '{node}' at {position}.")
return cls.parse(node)
@@ -507,9 +505,7 @@ def GetGenericsFromChainedNodes(
yield GenericFunctionInterfaceItem.parse(generic)
else:
position = Position.parse(generic)
- raise DOMException(
- f"Unknown generic kind '{kind.name}' in generic '{generic}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown generic kind '{kind.name}' in generic '{generic}' at {position}.")
generic = nodes.Get_Chain(generic)
@@ -553,9 +549,7 @@ def GetPortsFromChainedNodes(
continue
else:
position = Position.parse(port)
- raise DOMException(
- f"Unknown port kind '{kind.name}' in port '{port}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown port kind '{kind.name}' in port '{port}' at {position}.")
@export
@@ -589,9 +583,7 @@ def GetParameterFromChainedNodes(
parseNode = parameter
else:
position = Position.parse(parameter)
- raise DOMException(
- f"Unknown parameter kind '{kind.name}' in parameter '{parameter}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown parameter kind '{kind.name}' in parameter '{parameter}' at {position}.")
# Lookahead for parameters with multiple identifiers at once
if nodes.Get_Has_Identifier_List(parameter):
@@ -713,7 +705,7 @@ def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str) ->
else:
position = Position.parse(item)
raise DOMException(
- f"Found unexpected function body '{GetNameOfNode(item)}' in {entity} '{name}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"Found unexpected function body '{GetNameOfNode(item)}' in {entity} '{name}' at {position}."
)
elif kind == nodes.Iir_Kind.Procedure_Declaration:
if nodes.Get_Has_Body(item):
@@ -730,7 +722,7 @@ def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str) ->
else:
position = Position.parse(item)
raise DOMException(
- f"Found unexpected procedure body '{GetNameOfNode(item)}' in {entity} '{name}' at {position.Filename}:{position.Line}:{position.Column}."
+ f"Found unexpected procedure body '{GetNameOfNode(item)}' in {entity} '{name}' at {position}."
)
elif kind == nodes.Iir_Kind.Protected_Type_Body:
yield ProtectedTypeBody.parse(item)
@@ -782,9 +774,7 @@ def GetDeclaredItemsFromChainedNodes(nodeChain: Iir, entity: str, name: str) ->
print(f"[NOT IMPLEMENTED] Terminal declaration in {name}")
else:
position = Position.parse(item)
- raise DOMException(
- f"Unknown declared item kind '{kind.name}' in {entity} '{name}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown declared item kind '{kind.name}' in {entity} '{name}' at {position}.")
lastKind = None
item = nodes.Get_Chain(item)
@@ -853,7 +843,7 @@ def GetConcurrentStatementsFromChainedNodes(
yield ComponentInstantiation.parse(statement, instantiatedUnit, label)
else:
raise DOMException(
- f"Unknown instantiation kind '{instantiatedUnitKind.name}' in instantiation of label {label} at {position.Filename}:{position.Line}:{position.Column}."
+ f"Unknown instantiation kind '{instantiatedUnitKind.name}' in instantiation of label {label} at {position}."
)
elif kind == nodes.Iir_Kind.Block_Statement:
yield ConcurrentBlockStatement.parse(statement, label)
@@ -868,9 +858,7 @@ def GetConcurrentStatementsFromChainedNodes(
elif kind == nodes.Iir_Kind.Simple_Simultaneous_Statement:
print(f"[NOT IMPLEMENTED] Simple simultaneous statement (label: '{label}') at line {position.Line}")
else:
- raise DOMException(
- f"Unknown statement of kind '{kind.name}' in {entity} '{name}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown statement of kind '{kind.name}' in {entity} '{name}' at {position}.")
def GetSequentialStatementsFromChainedNodes(
@@ -906,9 +894,7 @@ def GetSequentialStatementsFromChainedNodes(
elif kind == nodes.Iir_Kind.Null_Statement:
yield NullStatement(statement, label)
else:
- raise DOMException(
- f"Unknown statement of kind '{kind.name}' in {entity} '{name}' at {position.Filename}:{position.Line}:{position.Column}."
- )
+ raise DOMException(f"Unknown statement of kind '{kind.name}' in {entity} '{name}' at {position}.")
def GetAliasFromNode(aliasNode: Iir):
diff --git a/pyGHDL/dom/_Utils.py b/pyGHDL/dom/_Utils.py
index 10053db6e..3b647013b 100644
--- a/pyGHDL/dom/_Utils.py
+++ b/pyGHDL/dom/_Utils.py
@@ -64,6 +64,8 @@ def CheckForErrors() -> None:
errors.append(f"{fileName}:{rec.line}:{rec.offset}: {message}")
+ errorout_memory.Clear_Errors()
+
raise DOMException("Error raised in libghdl.") from LibGHDLException("libghdl: Internal error.", errors)
diff --git a/pyGHDL/dom/formatting/prettyprint.py b/pyGHDL/dom/formatting/prettyprint.py
index b5397610a..0f548210b 100644
--- a/pyGHDL/dom/formatting/prettyprint.py
+++ b/pyGHDL/dom/formatting/prettyprint.py
@@ -124,7 +124,7 @@ class PrettyPrint:
buffer.append(line)
buffer.append(f"{prefix}Documents:")
for document in design.Documents:
- buffer.append(f"{prefix} - Path: '{document.Path!s}':")
+ buffer.append(f"{prefix} - Path: '{document.Path}':")
for line in self.formatDocument(document, level + 2):
buffer.append(line)
@@ -190,7 +190,9 @@ class PrettyPrint:
buffer = []
prefix = " " * level
buffer.append(
- f"{prefix}- Name: {entity.Identifier}\n{prefix} File: {entity.Position.Filename.name}\n{prefix} Position: {entity.Position.Line}:{entity.Position.Column}"
+ f"{prefix}- Name: {entity.Identifier}\n"
+ f"{prefix} File: {entity.Position.Filename.name}\n"
+ f"{prefix} Position: {entity.Position.Line}:{entity.Position.Column}"
)
buffer.append(f"{prefix} Generics:")
for generic in entity.GenericItems:
@@ -217,7 +219,9 @@ class PrettyPrint:
buffer = []
prefix = " " * level
buffer.append(
- f"{prefix}- Name: {architecture.Identifier}\n{prefix} File: {architecture.Position.Filename.name}\n{prefix} Position: {architecture.Position.Line}:{architecture.Position.Column}"
+ f"{prefix}- Name: {architecture.Identifier}\n"
+ f"{prefix} File: {architecture.Position.Filename.name}\n"
+ f"{prefix} Position: {architecture.Position.Line}:{architecture.Position.Column}"
)
buffer.append(f"{prefix} Entity: {architecture.Entity.SymbolName}")
buffer.append(f"{prefix} Declared:")
@@ -255,7 +259,9 @@ class PrettyPrint:
buffer = []
prefix = " " * level
buffer.append(
- f"{prefix}- Name: {package.Identifier}\n{prefix} File: {package.Position.Filename.name}\n{prefix} Position: {package.Position.Line}:{package.Position.Column}"
+ f"{prefix}- Name: {package.Identifier}\n"
+ f"{prefix} File: {package.Position.Filename.name}\n"
+ f"{prefix} Position: {package.Position.Line}:{package.Position.Column}"
)
buffer.append(f"{prefix} Declared:")
for item in package.DeclaredItems:
@@ -323,14 +329,9 @@ class PrettyPrint:
buffer = []
prefix = " " * level
+ subTypeIndication = self.formatSubtypeIndication(generic.Subtype, "generic", generic.Identifiers[0])
buffer.append(
- "{prefix} - {name} : {mode!s} {subtypeindication}{initialValue}".format(
- prefix=prefix,
- name=", ".join(generic.Identifiers),
- mode=generic.Mode,
- subtypeindication=self.formatSubtypeIndication(generic.Subtype, "generic", generic.Identifiers[0]),
- initialValue=self.formatInitialValue(generic),
- )
+ f"{prefix} - {', '.join(generic.Identifiers)} : {generic.Mode!s} {subTypeIndication}{self.formatInitialValue(generic)}"
)
return buffer
@@ -347,14 +348,9 @@ class PrettyPrint:
buffer = []
prefix = " " * level
+ subTypeIndication = self.formatSubtypeIndication(port.Subtype, "port", port.Identifiers[0])
buffer.append(
- "{prefix} - {name} : {mode!s} {subtypeindication}{initialValue}".format(
- prefix=prefix,
- name=", ".join(port.Identifiers),
- mode=port.Mode,
- subtypeindication=self.formatSubtypeIndication(port.Subtype, "port", port.Identifiers[0]),
- initialValue=self.formatInitialValue(port),
- )
+ f"{prefix} - {', '.join(port.Identifiers)} : {port.Mode} {subTypeIndication}{self.formatInitialValue(port)}"
)
return buffer
@@ -364,44 +360,19 @@ class PrettyPrint:
prefix = " " * level
if isinstance(item, BaseConstant):
- if isinstance(item, Constant):
- default = f" := {item.DefaultExpression!s}"
- else:
- default = ""
-
- buffer.append(
- "{prefix}- constant {name} : {subtype}{default}".format(
- prefix=prefix,
- name=", ".join(item.Identifiers),
- subtype=self.formatSubtypeIndication(item.Subtype, "constant", item.Identifiers[0]),
- default=default,
- )
- )
+ subTypeIndication = self.formatSubtypeIndication(item.Subtype, "constant", item.Identifiers[0])
+ initValue = f" := {item.DefaultExpression}" if isinstance(item, Constant) else ""
+ buffer.append(f"{prefix}- constant {', '.join(item.Identifiers)} : {subTypeIndication}{initValue}")
elif isinstance(item, SharedVariable):
- buffer.append(
- "{prefix}- shared variable {name} : {subtype}".format(
- prefix=prefix,
- name=", ".join(item.Identifiers),
- subtype=self.formatSubtypeIndication(item.Subtype, "shared variable", item.Identifiers[0]),
- )
- )
+ subTypeIndication = self.formatSubtypeIndication(item.Subtype, "shared variable", item.Identifiers[0])
+ buffer.append(f"{prefix}- shared variable {', '.join(item.Identifiers)} : {subTypeIndication}")
elif isinstance(item, Signal):
- buffer.append(
- "{prefix}- signal {name} : {subtype}{initValue}".format(
- prefix=prefix,
- name=", ".join(item.Identifiers),
- subtype=self.formatSubtypeIndication(item.Subtype, "signal", item.Identifiers[0]),
- initValue=f" := {item.DefaultExpression!s}" if item.DefaultExpression is not None else "",
- )
- )
+ subTypeIndication = self.formatSubtypeIndication(item.Subtype, "signal", item.Identifiers[0])
+ initValue = f" := {item.DefaultExpression}" if item.DefaultExpression is not None else ""
+ buffer.append(f"{prefix}- signal {', '.join(item.Identifiers)} : {subTypeIndication}{initValue}")
elif isinstance(item, File):
- buffer.append(
- "{prefix}- File {name} : {subtype}".format(
- prefix=prefix,
- name=", ".join(item.Identifiers),
- subtype=self.formatSubtypeIndication(item.Subtype, "file", item.Identifiers[0]),
- )
- )
+ subTypeIndication = self.formatSubtypeIndication(item.Subtype, "file", item.Identifiers[0])
+ buffer.append(f"{prefix}- File {', '.join(item.Identifiers)} : {subTypeIndication}")
elif isinstance(item, (FullType, IncompleteType)):
buffer.append(f"{prefix}- {self.formatType(item)}")
elif isinstance(item, Subtype):
@@ -409,26 +380,24 @@ class PrettyPrint:
elif isinstance(item, Alias):
buffer.append(f"{prefix}- alias {item.Identifier} is ?????")
elif isinstance(item, Function):
- buffer.append(f"{prefix}- function {item.Identifier} return {item.ReturnType!s}")
+ buffer.append(f"{prefix}- function {item.Identifier} return {item.ReturnType}")
elif isinstance(item, Procedure):
buffer.append(f"{prefix}- procedure {item.Identifier}")
elif isinstance(item, Component):
for line in self.formatComponent(item, level):
buffer.append(line)
elif isinstance(item, Attribute):
- buffer.append(f"{prefix}- attribute {item.Identifier} : {item.Subtype!s}")
+ buffer.append(f"{prefix}- attribute {item.Identifier} : {item.Subtype}")
elif isinstance(item, AttributeSpecification):
- buffer.append(f"{prefix}- attribute {item.Attribute!s} of {'????'} : {'????'} is {'????'}")
+ buffer.append(f"{prefix}- attribute {item.Attribute} of {'????'} : {'????'} is {'????'}")
elif isinstance(item, UseClause):
- buffer.append("{prefix}- use {names}".format(prefix=prefix, names=", ".join([str(n) for n in item.Names])))
+ buffer.append(f"{prefix}- use {', '.join([str(n) for n in item.Names])}")
elif isinstance(item, Package):
buffer.append(f"{prefix}- package {item.Identifier} is ..... end package")
elif isinstance(item, PackageInstantiation):
- buffer.append(f"{prefix}- package {item.Identifier} is new {item.PackageReference!s} generic map (.....)")
+ buffer.append(f"{prefix}- package {item.Identifier} is new {item.PackageReference} generic map (.....)")
elif isinstance(item, DefaultClock):
- buffer.append(
- f"{prefix}- default {item.Identifier} is {'...'}",
- )
+ buffer.append(f"{prefix}- default {item.Identifier} is {'...'}")
else:
raise PrettyPrintException(f"Unhandled declared item kind '{item.__class__.__name__}'.")
@@ -469,17 +438,14 @@ class PrettyPrint:
for constraint in subtypeIndication.Constraints:
constraints.append(str(constraint))
- return "{type}({constraints})".format(type=subtypeIndication.SymbolName, constraints=", ".join(constraints))
+ return f"{subtypeIndication.SymbolName}({', '.join(constraints)})"
else:
raise PrettyPrintException(
f"Unhandled subtype kind '{subtypeIndication.__class__.__name__}' for {entity} '{name}'."
)
def formatInitialValue(self, item: WithDefaultExpressionMixin) -> str:
- if item.DefaultExpression is None:
- return ""
-
- return f" := {item.DefaultExpression!s}"
+ return f" := {item.DefaultExpression}" if item.DefaultExpression is not None else ""
def formatHierarchy(self, statement: ConcurrentStatement, level: int = 0) -> StringBuffer:
buffer = []
diff --git a/pyGHDL/libghdl/__init__.py b/pyGHDL/libghdl/__init__.py
index 372f5968b..2cf9cff70 100644
--- a/pyGHDL/libghdl/__init__.py
+++ b/pyGHDL/libghdl/__init__.py
@@ -48,6 +48,8 @@ from pyGHDL import __version__ as ghdlVersion
Nullable = Optional
+ENCODING = "latin-1"
+
class LibGHDLException(GHDLBaseException):
_internalErrors: Nullable[List[str]]
@@ -164,7 +166,7 @@ def _initialize():
libghdl.libghdl__set_hooks_for_analysis()
# Set the prefix in order to locate the VHDL libraries.
- prefix = str(_libghdl_path.parent.parent).encode("utf-8")
+ prefix = str(_libghdl_path.parent.parent).encode(ENCODING)
libghdl.libghdl__set_exec_prefix(c_char_p(prefix), len(prefix))
return libghdl
@@ -197,7 +199,7 @@ def set_option(Opt: str) -> bool:
:param Opt: Option to set.
:return: Return ``True``, if the option is known and handled.
"""
- Opt = Opt.encode("utf-8")
+ Opt = Opt.encode(ENCODING)
return libghdl.libghdl__set_option(c_char_p(Opt), len(Opt)) == 0
@@ -233,7 +235,7 @@ def analyze_file(fname: str) -> Iir:
:param fname: File name
:return: Internal Intermediate Representation (IIR)
"""
- fname = fname.encode("utf-8")
+ fname = fname.encode(ENCODING)
return libghdl.libghdl__analyze_file(c_char_p(fname), len(fname))
diff --git a/pyGHDL/libghdl/errorout_memory.py b/pyGHDL/libghdl/errorout_memory.py
index 9f75d0331..d0847417e 100644
--- a/pyGHDL/libghdl/errorout_memory.py
+++ b/pyGHDL/libghdl/errorout_memory.py
@@ -36,6 +36,7 @@ from ctypes import c_int8, c_int32, c_char_p, Structure
from pyTooling.Decorators import export
+from pyGHDL.libghdl import ENCODING
from pyGHDL.libghdl._types import ErrorIndex
from pyGHDL.libghdl._decorator import BindToLibGHDL
@@ -122,7 +123,7 @@ def Get_Error_Message(Idx: ErrorIndex) -> str:
:param Idx: Index from 1 to ``Nbr_Messages`` See :func:`Get_Nbr_Messages`.
:return: Error message.
"""
- return _Get_Error_Message(Idx).decode("iso-8859-1")
+ return _Get_Error_Message(Idx).decode(ENCODING)
@export
diff --git a/pyGHDL/libghdl/files_map_editor.py b/pyGHDL/libghdl/files_map_editor.py
index a67766c44..c7cfad4c2 100644
--- a/pyGHDL/libghdl/files_map_editor.py
+++ b/pyGHDL/libghdl/files_map_editor.py
@@ -36,7 +36,7 @@ from ctypes import c_int32, c_char_p, c_bool, c_uint32
from pyTooling.Decorators import export
-from pyGHDL.libghdl import libghdl
+from pyGHDL.libghdl import libghdl, ENCODING
from pyGHDL.libghdl._decorator import BindToLibGHDL
from pyGHDL.libghdl._types import SourceFileEntry
@@ -85,7 +85,7 @@ def Replace_Text(
:param Text: undocumented
:return: Return True in case of success, False in case of failure (the gap is too small).
"""
- buffer = Text.encode("utf-8")
+ buffer = Text.encode(ENCODING)
return _Replace_Text(
File,
Start_Line,
diff --git a/pyGHDL/libghdl/name_table.py b/pyGHDL/libghdl/name_table.py
index b29775213..e40bd635b 100644
--- a/pyGHDL/libghdl/name_table.py
+++ b/pyGHDL/libghdl/name_table.py
@@ -36,6 +36,7 @@ from ctypes import c_char, c_char_p
from pyTooling.Decorators import export
+from pyGHDL.libghdl import ENCODING
from pyGHDL.libghdl._types import NameId
from pyGHDL.libghdl._decorator import BindToLibGHDL
@@ -73,7 +74,7 @@ def Get_Name_Ptr(Id: NameId) -> str:
:param Id: NameId for the identifier to query.
:return: Identifier as string.
"""
- return _Get_Name_Ptr(Id).decode("utf-8")
+ return _Get_Name_Ptr(Id).decode(ENCODING)
# @export
@@ -95,7 +96,7 @@ def Get_Character(Id: NameId) -> str:
:param Id: NameId for the identifier to query.
:return: Get the character of the identifier.
"""
- return _Get_Character(Id).decode("utf-8")
+ return _Get_Character(Id).decode(ENCODING)
# @export
@@ -119,5 +120,5 @@ def Get_Identifier(string: str) -> NameId:
:param string: String to create or lookup.
:return: Id in name table.
"""
- string = string.encode("utf-8")
+ string = string.encode(ENCODING)
return _Get_Identifier(c_char_p(string), len(string))
diff --git a/pyGHDL/libghdl/str_table.py b/pyGHDL/libghdl/str_table.py
index a91268bb4..3f55d1eb3 100644
--- a/pyGHDL/libghdl/str_table.py
+++ b/pyGHDL/libghdl/str_table.py
@@ -36,6 +36,7 @@ from ctypes import c_char_p
from pyTooling.Decorators import export
+from pyGHDL.libghdl import ENCODING
from pyGHDL.libghdl._types import String8Id
from pyGHDL.libghdl._decorator import BindToLibGHDL
@@ -57,4 +58,4 @@ def Get_String8_Ptr(Id: String8Id, Length: int) -> str:
:param Id: String8Id for the string to query.
:return: String8 as string.
"""
- return _String8_Address(Id)[:Length].decode("utf-8")
+ return _String8_Address(Id)[:Length].decode(ENCODING)