[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