from enum import Enum, IntEnum, auto, IntFlag
from dataclasses import dataclass
[docs]
class MemoryAttribute(Enum):
[docs]
IS_MAIN_MEM = auto()
[docs]
ETISS_CAN_FAIL = auto()
[docs]
ETISS_IS_GLOBAL_IRQ_EN = auto()
[docs]
ETISS_IS_IRQ_EN = auto()
[docs]
ETISS_IS_IRQ_PENDING = auto()
[docs]
ETISS_IS_PROCNO = auto()
[docs]
class RegisterAttribute(Enum):
[docs]
IS_MAIN_REG = auto()
[docs]
class FunctionAttribute(Enum):
[docs]
ETISS_STATICFN = auto()
[docs]
ETISS_NEEDS_ARCH = auto()
[docs]
ETISS_TRAP_ENTRY_FN = auto()
[docs]
ETISS_TRAP_TRANSLATE_FN = auto()
[docs]
class FunctionThrows(IntEnum):
[docs]
class ConstAttribute(Enum):
[docs]
class InstrAttribute(Enum):
[docs]
ETISS_ERROR_INSTRUCTION = auto()
[docs]
class AccessAttribute(IntFlag):
"""Describes the staticness of a Scalar or Function"""
[docs]
NONE = 0 #no access at all
[docs]
READ = auto() # read access only
[docs]
WRITE = auto() # write access only
@dataclass
[docs]
class AccessContext:
"""A datakeeping class to track access of Varibles.
Important in JIT compilation to know if depictable as
a static element
"""
[docs]
access_is_static: AccessAttribute = AccessAttribute.RW
[docs]
class Qualifier(IntFlag):