Mirror of the JODE repository
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
jode/jode/CreateDoWhileStatements.java

48 lines
1.7 KiB

/*
* CreateDoWhileStatements (c) 1998 Jochen Hoenicke
*
* You may distribute under the terms of the GNU General Public License.
*
* IN NO EVENT SHALL JOCHEN HOENICKE BE LIABLE TO ANY PARTY FOR DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
* THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF JOCHEN HOENICKE
* HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* JOCHEN HOENICKE SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
* BASIS, AND JOCHEN HOENICKE HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
* SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Id$
*/
package jode;
import java.util.Enumeration;
public class CreateDoWhileStatements extends FlowTransformation
implements Transformation {
public InstructionHeader transform(InstructionHeader head) {
if (head.predecessors.size() == 0 ||
head.flowType == head.DOWHILESTATEMENT)
return null;
InstructionHeader end = head;
Enumeration enum = head.predecessors.elements();
while (enum.hasMoreElements()) {
InstructionHeader pre = (InstructionHeader) enum.nextElement();
if (pre.outer == head.outer && pre.addr > end.addr)
end = pre;
}
if (end != head)
if (end.flowType == end.IFGOTO || end.flowType == end.GOTO) {
if(Decompiler.isVerbose)
System.err.print("d");
return new DoWhileInstructionHeader(head, end);
}
return null;
}
}