summaryrefslogtreecommitdiff
path: root/python/basicblock.py
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2021-06-23 11:03:34 -0400
committerPeter LaFosse <peter@vector35.com>2021-09-05 10:08:09 -0400
commit920da93a153ff0e6cff405c76f6d5175a9cbcfa4 (patch)
treeb505cc6be0bd61a9399135aa2d516e995e5f7467 /python/basicblock.py
parent3be2c0f9d4574f84869e5dcc61a91b4356391207 (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.py79
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}>"