about summary refs log tree commit diff stats
path: root/miasm/expression/expression_helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm/expression/expression_helper.py')
-rw-r--r--miasm/expression/expression_helper.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/miasm/expression/expression_helper.py b/miasm/expression/expression_helper.py
index 17472e7f..6d82d52d 100644
--- a/miasm/expression/expression_helper.py
+++ b/miasm/expression/expression_helper.py
@@ -130,9 +130,25 @@ op_assoc = ['+', '*', '^', '&', '|']
 
 
 def expr_simp(e):
-    return e.visit(_expr_simp)
+    return  e.visit(_expr_simp_w)
+
+def _expr_simp_w(e):
+    if not hasattr(e, 'simp'):
+        e.simp = False
+    if e.simp:
+        #print 'done'
+        return e
+    while True:
+        e_new = _expr_simp(e)
+        if e_new == e:
+            break
+        e = expr_simp(e_new)
+    e.simp = True
+    #print 'return', e
+    return e
 
 def _expr_simp(e):
+    #print 'simp', e
     if isinstance(e, ExprOp):
         # merge associatif op
         # ((a+b) + c) => (a + b + c)