diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2016-10-18 13:11:46 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2016-11-04 16:45:46 +0100 |
| commit | 589d4fd9ebd61216155bba9f1988bbd5c3094a2b (patch) | |
| tree | 285642b7f91bd5dee300b72fb7e781f495652ecc /miasm2/expression/expression.py | |
| parent | abbc51905c2c392b259f43c681ed9617168add5e (diff) | |
| download | miasm-589d4fd9ebd61216155bba9f1988bbd5c3094a2b.tar.gz miasm-589d4fd9ebd61216155bba9f1988bbd5c3094a2b.zip | |
Expression: add pickling
Diffstat (limited to '')
| -rw-r--r-- | miasm2/expression/expression.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py index 1473838b..d51f0bdb 100644 --- a/miasm2/expression/expression.py +++ b/miasm2/expression/expression.py @@ -389,6 +389,12 @@ class ExprInt(Expr): size = property(lambda self: self.__size) arg = property(lambda self: self.__arg) + def __getstate__(self): + return int(self.__arg), self.__size + + def __setstate__(self, state): + self.__init__(*state) + def __new__(cls, arg, size=None): if size is None: size = arg.size @@ -466,6 +472,12 @@ class ExprId(Expr): size = property(lambda self: self.__size) name = property(lambda self: self.__name) + def __getstate__(self): + return self.__name, self.__size + + def __setstate__(self, state): + self.__init__(*state) + def __new__(cls, name, size=32): return Expr.get_object(cls, (name, size)) @@ -543,6 +555,12 @@ class ExprAff(Expr): dst = property(lambda self: self.__dst) src = property(lambda self: self.__src) + def __getstate__(self): + return self.__dst, self.__src + + def __setstate__(self, state): + self.__init__(*state) + def __new__(cls, dst, src): return Expr.get_object(cls, (dst, src)) @@ -641,6 +659,12 @@ class ExprCond(Expr): src1 = property(lambda self: self.__src1) src2 = property(lambda self: self.__src2) + def __getstate__(self): + return self.__cond, self.__src1, self.__src2 + + def __setstate__(self, state): + self.__init__(*state) + def __new__(cls, cond, src1, src2): return Expr.get_object(cls, (cond, src1, src2)) @@ -726,6 +750,12 @@ class ExprMem(Expr): size = property(lambda self: self.__size) arg = property(lambda self: self.__arg) + def __getstate__(self): + return self.__arg, self.__size + + def __setstate__(self, state): + self.__init__(*state) + def __new__(cls, arg, size=32): return Expr.get_object(cls, (arg, size)) @@ -857,6 +887,13 @@ class ExprOp(Expr): op = property(lambda self: self.__op) args = property(lambda self: self.__args) + def __getstate__(self): + return self.__op, self.__args + + def __setstate__(self, state): + op, args = state + self.__init__(op, *args) + def __new__(cls, op, *args): return Expr.get_object(cls, (op, args)) @@ -949,6 +986,12 @@ class ExprSlice(Expr): start = property(lambda self: self.__start) stop = property(lambda self: self.__stop) + def __getstate__(self): + return self.__arg, self.__start, self.__stop + + def __setstate__(self, state): + self.__init__(*state) + def __new__(cls, arg, start, stop): return Expr.get_object(cls, (arg, start, stop)) @@ -1057,6 +1100,12 @@ class ExprCompose(Expr): size = property(lambda self: self.__size) args = property(lambda self: self.__args) + def __getstate__(self): + return self.__args + + def __setstate__(self, state): + self.__init__(state) + def __new__(cls, args): return Expr.get_object(cls, tuple(args)) |