about summary refs log tree commit diff stats
path: root/miasm2/expression/expression.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2016-11-20 23:02:11 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2016-11-20 23:02:11 +0100
commita7106c044b7c2caf71baf10360b439a1423d9b6a (patch)
treee31214b77123f83e949d5d114034782db5040822 /miasm2/expression/expression.py
parent1210ca382591d3c099d7554a031dbf90965decef (diff)
downloadmiasm-a7106c044b7c2caf71baf10360b439a1423d9b6a.tar.gz
miasm-a7106c044b7c2caf71baf10360b439a1423d9b6a.zip
Expr: Fix expr pickling
Diffstat (limited to 'miasm2/expression/expression.py')
-rw-r--r--miasm2/expression/expression.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py
index cedb3e5c..581dc8dc 100644
--- a/miasm2/expression/expression.py
+++ b/miasm2/expression/expression.py
@@ -1068,7 +1068,7 @@ class ExprCompose(Expr):
         return self.__args
 
     def __setstate__(self, state):
-        self.__init__(state)
+        self.__init__(*state)
 
     def __new__(cls, *args):
         is_new_style = args and isinstance(args[0], Expr)
@@ -1078,7 +1078,7 @@ class ExprCompose(Expr):
         return Expr.get_object(cls, tuple(args))
 
     def __str__(self):
-        return '{' + ', '.join([str(arg) for arg in self.__args]) + '}'
+        return '{' + ', '.join(["%s %s %s" % (arg, idx, idx + arg.size) for idx, arg in self.iter_args()]) + '}'
 
     def get_r(self, mem_read=False, cst_read=False):
         return reduce(lambda elements, arg:
@@ -1093,7 +1093,7 @@ class ExprCompose(Expr):
         return hash(tuple(h_args))
 
     def _exprrepr(self):
-        return "%s([%r])" % (self.__class__.__name__, self.__args)
+        return "%s%r" % (self.__class__.__name__, self.__args)
 
     def __contains__(self, e):
         if self == e:
@@ -1189,6 +1189,9 @@ def compare_exprs(e1, e2):
     if e1 == e2:
         return 0
     if c1 == ExprInt:
+        ret = cmp(e1.size, e2.size)
+        if ret != 0:
+            return ret
         return cmp(e1.arg, e2.arg)
     elif c1 == ExprId:
         x = cmp(e1.name, e2.name)