| 93 | |
| 94 | @dataclass(frozen=True) |
| 95 | class ILRegister: |
| 96 | arch: 'architecture.Architecture' |
| 97 | index: 'architecture.RegisterIndex' |
| 98 | |
| 99 | def __repr__(self): |
| 100 | return f"<ILRegister: {self.name}>" |
| 101 | |
| 102 | def __str__(self): |
| 103 | return self.name |
| 104 | |
| 105 | def __int__(self): |
| 106 | return self.index |
| 107 | |
| 108 | def __eq__(self, other: Union[str, 'ILRegister']): |
| 109 | if isinstance(other, str) and other in self.arch.regs: |
| 110 | index = self.arch.regs[architecture.RegisterName(other)].index |
| 111 | assert index is not None |
| 112 | other = ILRegister(self.arch, index) |
| 113 | elif not isinstance(other, self.__class__): |
| 114 | return NotImplemented |
| 115 | return (self.arch, self.index) == (other.arch, other.index) |
| 116 | |
| 117 | @property |
| 118 | def info(self) -> 'architecture.RegisterInfo': |
| 119 | return self.arch.regs[self.name] |
| 120 | |
| 121 | @property |
| 122 | def temp(self) -> bool: |
| 123 | return (self.index & 0x80000000) != 0 |
| 124 | |
| 125 | @property |
| 126 | def name(self) -> 'architecture.RegisterName': |
| 127 | if self.temp: |
| 128 | return architecture.RegisterName(f"temp{self.index & 0x7fffffff}") |
| 129 | else: |
| 130 | return architecture.RegisterName(self.arch.get_reg_name(self.index)) |
| 131 | |
| 132 | |
| 133 | @dataclass(frozen=True) |
no outgoing calls
no test coverage detected