about summary refs log tree commit diff stats
path: root/miasm2/analysis
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2017-04-14 13:32:59 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2017-04-20 12:31:33 +0200
commit16fc339e53bfc908dbcd73fc912d7d75aed7218c (patch)
treef13faa66157ddd4c12dff191d314d81e5f2bf33f /miasm2/analysis
parentff981a11ef71960a239ec44295f06bb384124521 (diff)
downloadmiasm-16fc339e53bfc908dbcd73fc912d7d75aed7218c.tar.gz
miasm-16fc339e53bfc908dbcd73fc912d7d75aed7218c.zip
Ir: make AssignBlock immutable
Diffstat (limited to 'miasm2/analysis')
-rw-r--r--miasm2/analysis/data_flow.py7
-rw-r--r--miasm2/analysis/depgraph.py6
2 files changed, 8 insertions, 5 deletions
diff --git a/miasm2/analysis/data_flow.py b/miasm2/analysis/data_flow.py
index b9764daa..3c77fc40 100644
--- a/miasm2/analysis/data_flow.py
+++ b/miasm2/analysis/data_flow.py
@@ -2,6 +2,7 @@
 
 from collections import namedtuple
 from miasm2.core.graph import DiGraph
+from miasm2.ir.ir import AssignBlock
 
 class ReachingDefinitions(dict):
     """
@@ -247,6 +248,8 @@ def dead_simp(ir_a):
     useful = set(dead_simp_useful_instrs(defuse, reaching_defs))
     for block in ir_a.blocks.itervalues():
         for idx, assignblk in enumerate(block.irs):
-            for lval in assignblk.keys():
+            new_assignblk = dict(assignblk)
+            for lval in assignblk:
                 if InstrNode(block.label, idx, lval) not in useful:
-                    del assignblk[lval]
+                    del new_assignblk[lval]
+            block.irs[idx] = AssignBlock(new_assignblk)
diff --git a/miasm2/analysis/depgraph.py b/miasm2/analysis/depgraph.py
index bab4d2bc..d1ac13c8 100644
--- a/miasm2/analysis/depgraph.py
+++ b/miasm2/analysis/depgraph.py
@@ -263,12 +263,12 @@ class DependencyResult(DependencyState):
         for line_nb, elements in sorted(line2elements.iteritems()):
             if max_line is not None and line_nb >= max_line:
                 break
-            assignblk = AssignBlock()
+            assignmnts = {}
             for element in elements:
                 if element in irb.irs[line_nb]:
                     # constants, label, ... are not in destination
-                    assignblk[element] = irb.irs[line_nb][element]
-            assignblks.append(assignblk)
+                    assignmnts[element] = irb.irs[line_nb][element]
+            assignblks.append(AssignBlock(assignmnts))
 
         return IRBlock(irb.label, assignblks)