diff options
Diffstat (limited to 'miasm/expression/expression_helper.py')
| -rw-r--r-- | miasm/expression/expression_helper.py | 18 |
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) |