Source code for archinfo.types

import sys
from typing import NewType

if sys.version_info < (3, 11):
    from backports.strenum import StrEnum
else:
    from enum import StrEnum


[docs]class RegisterOffset(int): """A register offset is an integer that represents the offset of a register in VEX's register memory space. """ def __add__(self, other): if isinstance(other, int): return RegisterOffset(int(self) + other) return NotImplemented
TmpVar = NewType("TmpVar", int) # This causes too much issues as a NewType, sot is a simple alias instead # This means that is still legal to pass any str where a RegisterName is expected. # The downside is that PyCharm will show the type as `str` when displaying the signature RegisterName = str
[docs]class Endness(StrEnum): """Endness specifies the byte order for integer values :cvar LE: little endian, least significant byte is stored at lowest address :cvar BE: big endian, most significant byte is stored at lowest address :cvar ME: Middle-endian. Yep. """ LE = "Iend_LE" BE = "Iend_BE" ME = "Iend_ME" ANY = "any" UNSURE = "unsure"
[docs] @staticmethod def from_str(s: str) -> "Endness": for e in Endness: if e.value == s: return e raise ValueError("Unknown endness: %s" % s)