diff options
Diffstat (limited to 'miasm2/expression')
| -rw-r--r-- | miasm2/expression/expression.py | 35 | ||||
| -rw-r--r-- | miasm2/expression/expression_helper.py | 6 | ||||
| -rw-r--r-- | miasm2/expression/parser.py | 8 |
3 files changed, 30 insertions, 19 deletions
diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py index d617a8fa..58ebda60 100644 --- a/miasm2/expression/expression.py +++ b/miasm2/expression/expression.py @@ -20,7 +20,7 @@ # - ExprInt # - ExprId # - ExprLoc -# - ExprAff +# - ExprAssign # - ExprCond # - ExprMem # - ExprOp @@ -50,7 +50,7 @@ TOK_POS_STRICT = "Spos" EXPRINT = 1 EXPRID = 2 EXPRLOC = 3 -EXPRAFF = 4 +EXPRASSIGN = 4 EXPRCOND = 5 EXPRMEM = 6 EXPROP = 7 @@ -675,9 +675,9 @@ class ExprLoc(Expr): return True -class ExprAff(Expr): +class ExprAssign(Expr): - """An ExprAff represent an affection from an Expression to another one. + """An ExprAssign represent an affection from an Expression to another one. Some use cases: - var1 <- 2 @@ -686,7 +686,7 @@ class ExprAff(Expr): __slots__ = Expr.__slots__ + ["_dst", "_src"] def __init__(self, dst, src): - """Create an ExprAff for dst <- src + """Create an ExprAssign for dst <- src @dst: Expr, affectation destination @src: Expr, affectation source """ @@ -696,10 +696,10 @@ class ExprAff(Expr): if dst.size != src.size: raise ValueError( - "sanitycheck: ExprAff args must have same size! %s" % + "sanitycheck: ExprAssign args must have same size! %s" % ([(str(arg), arg.size) for arg in [dst, src]])) - super(ExprAff, self).__init__(self.dst.size) + super(ExprAssign, self).__init__(self.dst.size) dst = property(lambda self: self._dst) src = property(lambda self: self._src) @@ -743,7 +743,7 @@ class ExprAff(Expr): return self._dst.get_w() def _exprhash(self): - return hash((EXPRAFF, hash(self._dst), hash(self._src))) + return hash((EXPRASSIGN, hash(self._dst), hash(self._src))) def _exprrepr(self): return "%s(%r, %r)" % (self.__class__.__name__, self._dst, self._src) @@ -759,10 +759,10 @@ class ExprAff(Expr): if dst == self._dst and src == self._src: return self else: - return ExprAff(dst, src) + return ExprAssign(dst, src) def copy(self): - return ExprAff(self._dst.copy(), self._src.copy()) + return ExprAssign(self._dst.copy(), self._src.copy()) def depth(self): return max(self._src.depth(), self._dst.depth()) + 1 @@ -777,6 +777,17 @@ class ExprAff(Expr): return True +class ExprAff(ExprAssign): + """ + DEPRECATED class. + Use ExprAssign instead of ExprAff + """ + + def __init__(self, dst, src): + warnings.warn('DEPRECATION WARNING: use ExprAssign instead of ExprAff') + super(ExprAff, self).__init__(dst, src) + + class ExprCond(Expr): """An ExprCond stand for a condition on an Expr @@ -1402,9 +1413,9 @@ def compare_exprs(expr1, expr2): if ret: return ret return cmp(expr1.size, expr2.size) - elif cls1 == ExprAff: + elif cls1 == ExprAssign: raise NotImplementedError( - "Comparaison from an ExprAff not yet implemented") + "Comparaison from an ExprAssign not yet implemented") elif cls2 == ExprCond: ret = compare_exprs(expr1.cond, expr2.cond) if ret: diff --git a/miasm2/expression/expression_helper.py b/miasm2/expression/expression_helper.py index 5de9e04f..7db41394 100644 --- a/miasm2/expression/expression_helper.py +++ b/miasm2/expression/expression_helper.py @@ -515,7 +515,7 @@ class CondConstraintZero(CondConstraint): operator = m2_expr.TOK_EQUAL def to_constraint(self): - return m2_expr.ExprAff(self.expr, m2_expr.ExprInt(0, self.expr.size)) + return m2_expr.ExprAssign(self.expr, m2_expr.ExprInt(0, self.expr.size)) class CondConstraintNotZero(CondConstraint): @@ -525,7 +525,7 @@ class CondConstraintNotZero(CondConstraint): def to_constraint(self): cst1, cst2 = m2_expr.ExprInt(0, 1), m2_expr.ExprInt(1, 1) - return m2_expr.ExprAff(cst1, m2_expr.ExprCond(self.expr, cst1, cst2)) + return m2_expr.ExprAssign(cst1, m2_expr.ExprCond(self.expr, cst1, cst2)) ConstrainedValue = collections.namedtuple("ConstrainedValue", @@ -568,7 +568,7 @@ def possible_values(expr): m2_expr.ExprMem(consval.value, expr.size)) for consval in possible_values(expr.arg)) - elif isinstance(expr, m2_expr.ExprAff): + elif isinstance(expr, m2_expr.ExprAssign): consvals.update(possible_values(expr.src)) # Special case: constraint insertion elif isinstance(expr, m2_expr.ExprCond): diff --git a/miasm2/expression/parser.py b/miasm2/expression/parser.py index cbfd58d0..71efc849 100644 --- a/miasm2/expression/parser.py +++ b/miasm2/expression/parser.py @@ -1,6 +1,6 @@ import pyparsing from miasm2.expression.expression import ExprInt, ExprId, ExprLoc, ExprSlice, \ - ExprMem, ExprCond, ExprCompose, ExprOp, ExprAff, LocKey + ExprMem, ExprCond, ExprCompose, ExprOp, ExprAssign, LocKey integer = pyparsing.Word(pyparsing.nums).setParseAction(lambda t: int(t[0])) @@ -22,7 +22,7 @@ STR_EXPRMEM = pyparsing.Suppress("ExprMem") STR_EXPRCOND = pyparsing.Suppress("ExprCond") STR_EXPRCOMPOSE = pyparsing.Suppress("ExprCompose") STR_EXPROP = pyparsing.Suppress("ExprOp") -STR_EXPRAFF = pyparsing.Suppress("ExprAff") +STR_EXPRASSIGN = pyparsing.Suppress("ExprAssign") LOCKEY = pyparsing.Suppress("LocKey") @@ -51,7 +51,7 @@ expr_mem = STR_EXPRMEM + LPARENTHESIS + expr + STR_COMMA + str_int + RPARENTHESI expr_cond = STR_EXPRCOND + LPARENTHESIS + expr + STR_COMMA + expr + STR_COMMA + expr + RPARENTHESIS expr_compose = STR_EXPRCOMPOSE + LPARENTHESIS + pyparsing.delimitedList(expr, delim=',') + RPARENTHESIS expr_op = STR_EXPROP + LPARENTHESIS + string + STR_COMMA + pyparsing.delimitedList(expr, delim=',') + RPARENTHESIS -expr_aff = STR_EXPRAFF + LPARENTHESIS + expr + STR_COMMA + expr + RPARENTHESIS +expr_aff = STR_EXPRASSIGN + LPARENTHESIS + expr + STR_COMMA + expr + RPARENTHESIS expr << (expr_int | expr_id | expr_loc | expr_slice | expr_mem | expr_cond | \ expr_compose | expr_op | expr_aff) @@ -69,7 +69,7 @@ expr_mem.setParseAction(lambda t: ExprMem(*t)) expr_cond.setParseAction(lambda t: ExprCond(*t)) expr_compose.setParseAction(lambda t: ExprCompose(*t)) expr_op.setParseAction(lambda t: ExprOp(*t)) -expr_aff.setParseAction(lambda t: ExprAff(*t)) +expr_aff.setParseAction(lambda t: ExprAssign(*t)) def str_to_expr(str_in): |