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.
48 lines
1.7 KiB
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;
|
|
}
|
|
}
|
|
|