def zig_enum(name): items = gdb.types.make_enum_dict(gdb.lookup_type(name)) res = Enum(name, items) # Cast constructor argument to int. # Note that, confusingly, Enum requires you to override __new__ # rather than __init__. res.__new__ = lambda cls, val: Enum.__new__(cls, int(val)) return res
def __new__(cls, value, slots=None, types=None): if slots == None and types == None: # value lookup instead of creation return Enum.__new__(cls, value) latent = object.__new__(cls) latent._value_ = value latent._slots = slots latent._types = types return latent
def _PoCEntityTypes_parser(cls, value): if not isinstance(value, str): return Enum.__new__(cls, value) else: # map strings to enum values, default to Unknown return { 'src': EntityTypes.Source, 'tb': EntityTypes.Testbench, 'nl': EntityTypes.NetList }.get(value, EntityTypes.Unknown)