yield from self.__mapping.items()
-class Operands(Dict, datatype=object):
+class Operands:
__GPR_PAIRS = (
_Reg.RTp,
_Reg.RSp,
if "=" in operand:
(name, value) = operand.split("=")
- mapping[name] = (StaticOperand, (
- ("name", name),
- ("value", int(value)),
- ))
+ mapping[name] = (StaticOperand, {
+ "name": name,
+ "value": int(value),
+ })
else:
name = operand
if name.endswith(")"):
cls = CR5Operand
if imm_name is not None:
- mapping[imm_name] = (imm_cls, (("name", imm_name),))
- mapping[name] = (cls, (("name", name),))
+ mapping[imm_name] = (imm_cls, {"name": imm_name})
+ mapping[name] = (cls, {"name": name})
+
+ static = []
+ dynamic = []
+ for (name, (cls, kwargs)) in mapping.items():
+ kwargs = dict(kwargs)
+ kwargs["name"] = name
+ if issubclass(cls, StaticOperand):
+ static.append((cls, kwargs))
+ elif issubclass(cls, DynamicOperand):
+ dynamic.append((cls, kwargs))
+ else:
+ raise ValueError(name)
- return super().__init__(mapping)
+ self.__mapping = mapping
+ self.__static = tuple(static)
+ self.__dynamic = tuple(dynamic)
- @walkmethod
- def walk(clsself, match=None):
- for (key, (cls, pairs)) in clsself.items():
- yield ("/".join((key, "class")), cls.__name__)
- for (subkey, value) in pairs:
- if subkey == "name":
- continue
- path = "/".join((key, subkey))
- yield (path, value)
+ return super().__init__()
def __iter__(self):
- for (key, items) in self.items():
+ for (_, items) in self.__mapping.items():
(cls, kwargs) = items
- yield (cls, dict(kwargs))
+ yield (cls, kwargs)
- @staticmethod
- def filter(cls):
- return lambda pair: isinstance(pair[0], cls)
+ def __repr__(self):
+ return self.__mapping.__repr__()
- @cached_property
+ def __contains__(self, key):
+ return self.__mapping.__contains__(key)
+
+ def __getitem__(self, key):
+ return self.__mapping.__getitem__(key)
+
+ @property
def static(self):
- return filter(self.__class__.filter(StaticOperand), self)
+ return self.__static
@property
def dynamic(self):
- return filter(self.__class__.filter(DynamicOperand), self)
+ return self.__dynamic
class Arguments(tuple):