[Scummvm-cvs-logs] SF.net SVN: scummvm:[51630] tools/branches/gsoc2010-decompiler/decompiler/ codegen.cpp
pidgeot at users.sourceforge.net
pidgeot at users.sourceforge.net
Mon Aug 2 19:04:46 CEST 2010
Revision: 51630
http://scummvm.svn.sourceforge.net/scummvm/?rev=51630&view=rev
Author: pidgeot
Date: 2010-08-02 17:04:46 +0000 (Mon, 02 Aug 2010)
Log Message:
-----------
Tighten up else coalescing criteria
Modified Paths:
--------------
tools/branches/gsoc2010-decompiler/decompiler/codegen.cpp
Modified: tools/branches/gsoc2010-decompiler/decompiler/codegen.cpp
===================================================================
--- tools/branches/gsoc2010-decompiler/decompiler/codegen.cpp 2010-08-02 17:04:14 UTC (rev 51629)
+++ tools/branches/gsoc2010-decompiler/decompiler/codegen.cpp 2010-08-02 17:04:46 UTC (rev 51630)
@@ -23,6 +23,7 @@
#include "codegen.h"
#include "engine.h"
+#include <algorithm>
#include <iostream>
#include <set>
@@ -248,9 +249,18 @@
switch (_curGroup->_type) {
case kIfCond:
if (_curGroup->_startElse && _curGroup->_code.size() == 1) {
- _curGroup->_code.clear();
- _curGroup->_coalescedElse = true;
- s << "} else ";
+ OutEdgeRange oer = boost::out_edges(v, _g);
+ bool coalesceElse = false;
+ for (OutEdgeIterator oe = oer.first; oe != oer.second; ++oe) {
+ GroupPtr oGr = GET(boost::target(*oe, _g))->_prev;
+ if (std::find(oGr->_endElse.begin(), oGr->_endElse.end(), _curGroup.get()) != oGr->_endElse.end())
+ coalesceElse = true;
+ }
+ if (coalesceElse) {
+ _curGroup->_code.clear();
+ _curGroup->_coalescedElse = true;
+ s << "} else ";
+ }
}
s << "if (" << _stack.pop() << ") {";
addOutputLine(s.str(), _curGroup->_coalescedElse, true);
@@ -333,7 +343,7 @@
} while (it++ != _curGroup->_end);
// Add else end if necessary
- for(ElseEndIterator elseIt = _curGroup->_endElse.begin(); elseIt != _curGroup->_endElse.end(); ++elseIt)
+ for (ElseEndIterator elseIt = _curGroup->_endElse.begin(); elseIt != _curGroup->_endElse.end(); ++elseIt)
{
if (!(*elseIt)->_coalescedElse)
addOutputLine("}", true, false);
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