about summary refs log tree commit diff stats
path: root/miasm2/core/sembuilder.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/core/sembuilder.py')
-rw-r--r--miasm2/core/sembuilder.py28
1 files changed, 19 insertions, 9 deletions
diff --git a/miasm2/core/sembuilder.py b/miasm2/core/sembuilder.py
index 8d6d3e07..68b4439f 100644
--- a/miasm2/core/sembuilder.py
+++ b/miasm2/core/sembuilder.py
@@ -142,11 +142,19 @@ class SemBuilder(object):
     def _create_labels(lbl_else=False):
         """Return the AST standing for label creations
         @lbl_else (optional): if set, create a label 'lbl_else'"""
-        lbl_end = "lbl_end = ExprId(ir.get_next_label(instr), ir.IRDst.size)"
+        lbl_end = "lbl_end = ir.get_next_label(instr)"
+        lbl_end_expr = "lbl_end_expr = ExprLoc(lbl_end.loc_key, ir.IRDst.size)"
         out = ast.parse(lbl_end).body
-        out += ast.parse("lbl_if = ExprId(ir.gen_label(), ir.IRDst.size)").body
+        out += ast.parse(lbl_end_expr).body
+        lbl_if = "lbl_if = ir.gen_label()"
+        lbl_if_expr = "lbl_if_expr = ExprLoc(lbl_if.loc_key, ir.IRDst.size)"
+        out += ast.parse(lbl_if).body
+        out += ast.parse(lbl_if_expr).body
         if lbl_else:
-            out += ast.parse("lbl_else = ExprId(ir.gen_label(), ir.IRDst.size)").body
+            lbl_else = "lbl_else = ir.gen_label()"
+            lbl_else_expr = "lbl_else_expr = ExprLoc(lbl_else.loc_key, ir.IRDst.size)"
+            out += ast.parse(lbl_else).body
+            out += ast.parse(lbl_else_expr).body
         return out
 
     def _parse_body(self, body, argument_names):
@@ -200,9 +208,9 @@ class SemBuilder(object):
                 cond = statement.test
                 real_body += self._create_labels(lbl_else=True)
 
-                lbl_end = ast.Name(id='lbl_end', ctx=ast.Load())
-                lbl_if = ast.Name(id='lbl_if', ctx=ast.Load())
-                lbl_else = ast.Name(id='lbl_else', ctx=ast.Load()) \
+                lbl_end = ast.Name(id='lbl_end_expr', ctx=ast.Load())
+                lbl_if = ast.Name(id='lbl_if_expr', ctx=ast.Load())
+                lbl_else = ast.Name(id='lbl_else_expr', ctx=ast.Load()) \
                            if statement.orelse else lbl_end
                 dst = ast.Call(func=ast.Name(id='ExprCond',
                                              ctx=ast.Load()),
@@ -261,9 +269,11 @@ class SemBuilder(object):
 
 
                     ## Replace the block with a call to 'IRBlock'
-                    lbl_if_name = ast.Attribute(value=ast.Name(id=lbl_name,
-                                                               ctx=ast.Load()),
-                                                attr='name', ctx=ast.Load())
+                    lbl_if_name = value= ast.Attribute(
+                        value=ast.Name(id=lbl_name, ctx=ast.Load()),
+                        attr="loc_key",
+                        ctx=ast.Load()
+                    )
 
                     assignblks = ast.List(elts=[assignblk],
                                           ctx=ast.Load())