about summary refs log tree commit diff stats
path: root/miasm2/expression
diff options
context:
space:
mode:
authorCamille Mougey <commial@gmail.com>2018-10-06 16:43:55 +0200
committerGitHub <noreply@github.com>2018-10-06 16:43:55 +0200
commit369371ca24c5f4fd6670cb36b80fbd29650de7d0 (patch)
tree7b9b319f3f365cb8b71b5dcf1f07f13559798513 /miasm2/expression
parent75b389f70e7cc6640cbfb62268ba89f8985be1ed (diff)
parent9c4c548e372311f6d685647b3cfed35e1579ad54 (diff)
downloadmiasm-369371ca24c5f4fd6670cb36b80fbd29650de7d0.tar.gz
miasm-369371ca24c5f4fd6670cb36b80fbd29650de7d0.zip
Merge pull request #855 from serpilliere/exprassign
Exprassign
Diffstat (limited to 'miasm2/expression')
-rw-r--r--miasm2/expression/expression.py35
-rw-r--r--miasm2/expression/expression_helper.py6
-rw-r--r--miasm2/expression/parser.py8
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):