aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/Common.py
blob: 0cd41c99e187437e5ef26b0a7ec42be959609dd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from pydecor import export

from pyVHDLModel.VHDLModel import Modes

from pyGHDL.libghdl        import name_table
from pyGHDL.libghdl.vhdl   import nodes

__all__ = []
__api__ = __all__


@export
class GHDLBaseException(Exception):
	pass


@export
class LibGHDLException(GHDLBaseException):
	pass


@export
class GHDLException(GHDLBaseException):
	pass


@export
class GHDLMixin:
	_MODE_TRANSLATION = {
		nodes.Iir_Mode.In_Mode:      Modes.In,
		nodes.Iir_Mode.Out_Mode:     Modes.Out,
		nodes.Iir_Mode.Inout_Mode:   Modes.InOut,
		nodes.Iir_Mode.Buffer_Mode:  Modes.Buffer,
		nodes.Iir_Mode.Linkage_Mode: Modes.Linkage
	}

	@classmethod
	def _ghdlNodeToName(cls, node):
		"""Return the python string from node :param:`node` identifier"""
		return name_table.Get_Name_Ptr(nodes.Get_Identifier(node)).decode("utf-8")

	@classmethod
	def _ghdlPortToMode(cls, port):
		"""Return the mode of a port."""
		try:
			return cls._MODE_TRANSLATION[nodes.Get_Mode(port)]
		except KeyError:
			raise LibGHDLException("Unknown mode.")