about summary refs log tree commit diff stats
path: root/miasm2/core/graph.py
diff options
context:
space:
mode:
authorCamille Mougey <commial@gmail.com>2015-01-09 15:40:28 +0100
committerCamille Mougey <commial@gmail.com>2015-01-09 15:40:28 +0100
commitae9004eec4ef264013208e1ce50f6e884a4da23f (patch)
treee09503cc60f0ce9576a830a2bdc78b7f303961f2 /miasm2/core/graph.py
parent0d6454f6b507c3c05c45507ffb56ac9f12eca536 (diff)
parent48581006f578d7de1a5944c31952faa5a4e947b4 (diff)
downloadmiasm-ae9004eec4ef264013208e1ce50f6e884a4da23f.tar.gz
miasm-ae9004eec4ef264013208e1ce50f6e884a4da23f.zip
Merge pull request #32 from serpilliere/improve_liveness_analysis
Improve liveness analysis
Diffstat (limited to 'miasm2/core/graph.py')
-rw-r--r--miasm2/core/graph.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/miasm2/core/graph.py b/miasm2/core/graph.py
index 47047269..d29517cc 100644
--- a/miasm2/core/graph.py
+++ b/miasm2/core/graph.py
@@ -27,6 +27,17 @@ class DiGraph:
         self._nodes_to[n] = []
         self._nodes_from[n] = []
 
+    def del_node(self, node):
+        """Delete the @node of the graph; Also delete every edge to/from this
+        @node"""
+
+        if node in self._nodes:
+            self._nodes.remove(node)
+        for pred in self.predecessors(node):
+            self.del_edge(pred, node)
+        for succ in self.successors(node):
+            self.del_edge(node, succ)
+
     def add_edge(self, a, b):
         if not a in self._nodes:
             self.add_node(a)
@@ -97,6 +108,20 @@ class DiGraph:
                     out.append(path + [b])
         return out
 
+    def get_all_parents(self, node):
+        """Return every parents nodes for a given @node"""
+
+        todo = set([node])
+        done = set()
+        while todo:
+            node = todo.pop()
+            if node in done:
+                continue
+            done.add(node)
+            for parent in self.predecessors(node):
+                todo.add(parent)
+        return done
+
     def node2str(self, n):
         return str(n)