KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > soot > javaToJimple > toolkits > GotoEliminator


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 2005 Jennifer Lhotak
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */

19
20 package soot.javaToJimple.toolkits;
21
22 import soot.*;
23 import soot.jimple.*;
24 import java.util.*;
25
26 public class GotoEliminator extends BodyTransformer {
27     public GotoEliminator (Singletons.Global g) {}
28     public static GotoEliminator v() {
29         return G.v().soot_javaToJimple_toolkits_GotoEliminator();
30     }
31
32
33     protected void internalTransform(Body b, String JavaDoc phaseName, Map options){
34
35         G.v().out.println("running goto eliminator");
36         /*
37          * the idea is to look for groups of statements of the form
38          * goto L0
39          * L0: goto L1
40          *
41          * and transform to
42          * goto L1
43          */

44         
45         Iterator it = b.getUnits().iterator();
46         while (it.hasNext()){
47             Stmt s = (Stmt)it.next();
48             Unit target = null;
49             if (s instanceof IfStmt){
50                 target = ((IfStmt)s).getTarget();
51             }
52             else if (s instanceof GotoStmt){
53                 target = ((GotoStmt)s).getTarget();
54             }
55             else continue;
56             
57         }
58     }
59
60 }
61
Popular Tags