Skip to content

Commit

Permalink
AILBlockWalker: Handle Reinterpret.
Browse files Browse the repository at this point in the history
  • Loading branch information
ltfish committed Jan 23, 2025
1 parent 3ac1158 commit 3d91bb4
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions ailment/block_walker.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
Tmp,
Register,
Const,
Reinterpret,
MultiStatementExpression,
VirtualVariable,
Phi,
Expand Down Expand Up @@ -49,6 +50,7 @@ def __init__(self, stmt_handlers=None, expr_handlers=None):
VEXCCallExpression: self._handle_VEXCCallExpression,
Tmp: self._handle_Tmp,
Register: self._handle_Register,
Reinterpret: self._handle_Reinterpret,
Const: self._handle_Const,
MultiStatementExpression: self._handle_MultiStatementExpression,
VirtualVariable: self._handle_VirtualVariable,
Expand Down Expand Up @@ -154,6 +156,11 @@ def _handle_UnaryOp(self, expr_idx: int, expr: UnaryOp, stmt_idx: int, stmt: Sta
def _handle_Convert(self, expr_idx: int, expr: Convert, stmt_idx: int, stmt: Statement, block: Block | None):
self._handle_expr(expr_idx, expr.operand, stmt_idx, stmt, block)

def _handle_Reinterpret(
self, expr_idx: int, expr: Reinterpret, stmt_idx: int, stmt: Statement, block: Block | None
):
self._handle_expr(expr_idx, expr.operand, stmt_idx, stmt, block)

def _handle_ITE(self, expr_idx: int, expr: ITE, stmt_idx: int, stmt: Statement, block: Block | None):
self._handle_expr(0, expr.cond, stmt_idx, stmt, block)
self._handle_expr(1, expr.iftrue, stmt_idx, stmt, block)
Expand Down Expand Up @@ -557,6 +564,16 @@ def _handle_Convert(self, expr_idx: int, expr: Convert, stmt_idx: int, stmt: Sta
return Convert(expr.idx, expr.from_bits, expr.to_bits, expr.is_signed, new_operand, **expr.tags)
return None

def _handle_Reinterpret(
self, expr_idx: int, expr: Reinterpret, stmt_idx: int, stmt: Statement, block: Block | None
):
new_operand = self._handle_expr(expr_idx, expr.operand, stmt_idx, stmt, block)
if new_operand is not None and new_operand is not expr.operand:
return Reinterpret(
expr.idx, expr.from_bits, expr.from_type, expr.to_bits, expr.to_type, new_operand, **expr.tags
)
return None

def _handle_ITE(self, expr_idx: int, expr: ITE, stmt_idx: int, stmt: Statement, block: Block | None):
changed = False

Expand Down

0 comments on commit 3d91bb4

Please sign in to comment.