about summary refs log tree commit diff stats
path: root/miasm/analysis/data_flow.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm/analysis/data_flow.py')
-rw-r--r--miasm/analysis/data_flow.py20
1 files changed, 7 insertions, 13 deletions
diff --git a/miasm/analysis/data_flow.py b/miasm/analysis/data_flow.py
index 7bd6d72f..6395fa8c 100644
--- a/miasm/analysis/data_flow.py
+++ b/miasm/analysis/data_flow.py
@@ -6,8 +6,8 @@ from future.utils import viewitems, viewvalues
 from miasm.core.utils import encode_hex
 from miasm.core.graph import DiGraph
 from miasm.ir.ir import AssignBlock, IRBlock
-from miasm.expression.expression import ExprLoc, ExprMem, ExprId, ExprInt,\
-    ExprAssign, ExprOp
+from miasm.expression.expression import ExprLoc, ExprMem, ExprSlice, ExprId, \
+    ExprInt, ExprAssign, ExprOp, ExprCompose, ExprCond, ExprWalk
 from miasm.expression.simplifications import expr_simp
 from miasm.core.interval import interval
 from miasm.expression.expression_helper import possible_values
@@ -736,22 +736,16 @@ def expr_test_visit(expr, test):
         return False
 
 
-def expr_has_mem_test(expr, result):
-    if result:
-        # Don't analyse if we already found a candidate
-        return False
-    if expr.is_mem():
-        result.add(expr)
-        return False
-    return True
-
-
 def expr_has_mem(expr):
     """
     Return True if expr contains at least one memory access
     @expr: Expr instance
     """
-    return expr_test_visit(expr, expr_has_mem_test)
+
+    def has_mem(self):
+        return self.is_mem()
+    visitor = ExprWalk(has_mem)
+    return visitor.visit(expr)
 
 
 class PropagateThroughExprId(object):