[Scummvm-cvs-logs] SF.net SVN: scummvm:[42391] tools/branches/gsoc2009-decompiler/decompiler

kjdf at users.sourceforge.net kjdf at users.sourceforge.net
Sat Jul 11 20:13:25 CEST 2009


Revision: 42391
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42391&view=rev
Author:   kjdf
Date:     2009-07-11 18:13:25 +0000 (Sat, 11 Jul 2009)

Log Message:
-----------
decompiler: removed unnecessary and confusing orderNodes

Modified Paths:
--------------
    tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp
    tools/branches/gsoc2009-decompiler/decompiler/graph.cpp
    tools/branches/gsoc2009-decompiler/decompiler/graph.h
    tools/branches/gsoc2009-decompiler/decompiler/test/test_graph_internal.h

Modified: tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp	2009-07-11 18:13:06 UTC (rev 42390)
+++ tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp	2009-07-11 18:13:25 UTC (rev 42391)
@@ -65,10 +65,9 @@
 	}
 	if (!vars.count("no-remove-jumps"))
 		cfg.removeJumpsToJumps();
-	cfg.orderNodes();
 	cfg.removeUnreachableNodes();
-	cfg.assignDominators();
 	if (vars.count("graph")) {
+		cfg.assignDominators();
 		cout << cfg.graphvizToString(vars["fontname"].as<string>());
 		exit(0);
 	}

Modified: tools/branches/gsoc2009-decompiler/decompiler/graph.cpp
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph.cpp	2009-07-11 18:13:06 UTC (rev 42390)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph.cpp	2009-07-11 18:13:25 UTC (rev 42391)
@@ -176,6 +176,11 @@
 
 
 void ControlFlowGraph::assignDominators() {
+	foreach (Node *u, _nodes) {
+		u->_dominator = 0;
+		u->_postOrder = 0;
+	}
+	orderVisit(_entry, 0);
 	list<Node*> nodes = inPostOrder(_nodes);
 	nodes.reverse();
 	nodes.remove(_entry);
@@ -295,12 +300,6 @@
 }
 
 
-void ControlFlowGraph::orderNodes() {
-	if (_entry && !_entry->_postOrder)
-		orderVisit(_entry, 0);
-}
-
-
 void ControlFlowGraph::removeJumpsToJumps() {
 	for (bool changed = true; changed; ) {
 		changed = false;
@@ -318,6 +317,7 @@
 
 
 void ControlFlowGraph::removeUnreachableNodes() {
+	orderVisit(_entry, 0);
 	foreach (Node *u, _nodes)
 		if (!u->_postOrder) {
 			foreach (Node *v, u->_out)
@@ -329,7 +329,7 @@
 		if ((*it)->_postOrder)
 			it++;
 		else {
-			// delete *it;
+			delete *it;
 			it = _nodes.erase(it);
 		}
 }
@@ -359,7 +359,7 @@
 		u->_postOrder = 0;
 	}
 	int n = 0;
-	if (_entry && !_entry->_postOrder)
+	if (_entry)
 		n = orderVisit(_entry, n);
 	foreach (Node *u, _nodes)
 		if (!u->_postOrder)
@@ -394,15 +394,8 @@
 
 
 void ControlFlowGraph::structureLoops(const list< list<Node*> > &components) {
-	if (!_entry)
-		return;
-	foreach (Node *u, _nodes) {
-		u->_dominator = 0;
-		u->_postOrder = 0;
-	}
-	orderNodes();
-	assignDominators();
 	foreach (list<Node*> component, components) {
+		assignDominators();
 		list<Node*> entries = componentEntryPoints(component);
 		if (entries.size() == 1) {
 			Node *entry = entries.front();

Modified: tools/branches/gsoc2009-decompiler/decompiler/graph.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph.h	2009-07-11 18:13:06 UTC (rev 42390)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph.h	2009-07-11 18:13:25 UTC (rev 42391)
@@ -25,13 +25,12 @@
 
 	void addBasicBlocksFromScript(std::list<Instruction*>::iterator scriptBegin, std::list<Instruction*>::iterator scriptEnd);
 	void addEdge(Node *from, Node *to);
-	void assignDominators(); // after order
+	void assignDominators();
 	void deleteNode(Node *node);
 	void forgetNode(Node *node);
 	std::string graphvizToString(const std::string &fontname="", int fontsize=0);
-	void orderNodes();
 	void removeJumpsToJumps();
-	void removeUnreachableNodes(); // after order
+	void removeUnreachableNodes();
 	void replaceEdges(Node *from, Node *oldTo, Node *newTo);
 	void setEntry(address_t entry);
 	std::list< std::list<Node*> > stronglyConnectedComponents();

Modified: tools/branches/gsoc2009-decompiler/decompiler/test/test_graph_internal.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/test/test_graph_internal.h	2009-07-11 18:13:06 UTC (rev 42390)
+++ tools/branches/gsoc2009-decompiler/decompiler/test/test_graph_internal.h	2009-07-11 18:13:25 UTC (rev 42391)
@@ -83,7 +83,6 @@
 
 
 	void test_assignDominators() {
-		ga->orderNodes();
 		ga->assignDominators();
 		TS_ASSERT(!node(ga,1)->_dominator);
 		TS_ASSERT_EQUALS(node(ga,2)->_dominator->address(), 1);
@@ -92,7 +91,6 @@
 		TS_ASSERT_EQUALS(node(ga,5)->_dominator->address(), 2);
 		TS_ASSERT_EQUALS(node(ga,6)->_dominator->address(), 5);
 
-		gb->orderNodes();
 		gb->assignDominators();
 		TS_ASSERT(!node(gb,1)->_dominator);
 		TS_ASSERT_EQUALS(node(gb,2)->_dominator->address(), 1);
@@ -110,13 +108,11 @@
 		TS_ASSERT_EQUALS(node(gb,14)->_dominator->address(), 11);
 		TS_ASSERT_EQUALS(node(gb,15)->_dominator->address(), 14);
 
-		gc->orderNodes();
 		gc->assignDominators();
 		TS_ASSERT(!node(gc,1)->_dominator);
 		TS_ASSERT_EQUALS(node(gc,2)->_dominator->address(), 1);
 		TS_ASSERT_EQUALS(node(gc,3)->_dominator->address(), 1);
 
-		gd->orderNodes();
 		gd->assignDominators();
 		TS_ASSERT(!node(gd,1)->_dominator);
 		TS_ASSERT_EQUALS(node(gd,2)->_dominator->address(), 1);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list