diff options
| author | Peter LaFosse <peter@vector35.com> | 2021-06-23 11:03:34 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2021-09-05 10:08:09 -0400 |
| commit | 920da93a153ff0e6cff405c76f6d5175a9cbcfa4 (patch) | |
| tree | b505cc6be0bd61a9399135aa2d516e995e5f7467 /python/basicblock.py | |
| parent | 3be2c0f9d4574f84869e5dcc61a91b4356391207 (diff) | |
Convert the following to dataclasses:
AddressRange
BoolWithConfidence
ConstantReference
EnumerationMember
FunctionParameter
ILFlag
ILIntrinsic
ILRegister
ILRegisterStack
ILSemanticFlagClass
ILSemanticFlagGroup
IndirectBranchInfo
InstructionBranch
InstructionInfo
IntrinsicInfo
IntrinsicInput
LowLevelILExpr
LowLevelILOperationAndSize
PossibleValueSet
RegisterInfo
RegisterSet
RegisterStackAdjustmentWithConfidence
RegisterStackInfo
SSAFlag
SSARegister
SSARegisterOrFlag
SSARegisterStack
SizeWithConfidence
StackVariableReference
StructureMember
TypeFieldReference
TypeParserResult
ValueRange
BasicBlockEdge
Diffstat (limited to 'python/basicblock.py')
| -rw-r--r-- | python/basicblock.py | 79 |
1 files changed, 13 insertions, 66 deletions
diff --git a/python/basicblock.py b/python/basicblock.py index 1bc29167..fa360a53 100644 --- a/python/basicblock.py +++ b/python/basicblock.py @@ -19,6 +19,7 @@ # IN THE SOFTWARE. import ctypes +from dataclasses import dataclass from typing import Generator, Optional, List, Tuple # Binary Ninja components @@ -30,75 +31,21 @@ from .enums import BranchType, HighlightStandardColor # from . import binaryview # from . import architecture -class BasicBlockEdge(object): - def __init__(self, branch_type:BranchType, source:'BasicBlock', target:'BasicBlock', back_edge:bool, fall_through:bool): - self._type = branch_type - self._source = source - self._target = target - self._back_edge = back_edge - self._fall_through = fall_through +@dataclass +class BasicBlockEdge: + type:BranchType + source:'BasicBlock' + target:'BasicBlock' + back_edge:bool + fall_through:bool def __repr__(self): - if self._type == BranchType.UnresolvedBranch: - return "<%s>" % BranchType(self._type).name - elif self._target.arch: - return "<%s: %s@%#x>" % (BranchType(self._type).name, self._target.arch.name, self._target.start) + if self.type == BranchType.UnresolvedBranch: + return f"<{self.type.name}>" + elif self.target.arch: + return f"<{self.type.name}: {self.target.arch.name}@{self.target.start:#x}>" else: - return "<%s: %#x>" % (BranchType(self._type).name, self._target.start) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return (self._type, self._source, self._target, self._back_edge, self._fall_through) == \ - (other._type, other._source, other._target, other._back_edge, other._fall_through) - - def __ne__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return not (self == other) - - def __hash__(self): - return hash((self._type, self._source, self._target, self.back_edge, self.fall_through)) - - @property - def type(self) -> BranchType: - return self._type - - @type.setter - def type(self, value:BranchType) -> None: - self._type = value - - @property - def source(self) -> 'BasicBlock': - return self._source - - @source.setter - def source(self, value:'BasicBlock') -> None: - self._source = value - - @property - def target(self) -> 'BasicBlock': - return self._target - - @target.setter - def target(self, value:'BasicBlock') -> None: - self._target = value - - @property - def back_edge(self) -> bool: - return self._back_edge - - @back_edge.setter - def back_edge(self, value:bool) -> None: - self._back_edge = value - - @property - def fall_through(self) -> bool: - return self._fall_through - - @fall_through.setter - def fall_through(self, value:bool) -> None: - self._fall_through = value + return f"<{self.type.name}: {self.target.start:#x}>" |
