KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > soot > jimple > internal > JIdentityStmt


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 1999 Patrick Lam
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 /*
21  * Modified by the Sable Research Group and others 1997-1999.
22  * See the 'credits' file distributed with Soot for the complete list of
23  * contributors. (Soot is distributed at http://www.sable.mcgill.ca/soot)
24  */

25
26
27
28
29
30
31 package soot.jimple.internal;
32
33 import soot.tagkit.*;
34 import soot.*;
35 import soot.jimple.*;
36 import soot.baf.*;
37 import soot.jimple.*;
38 import soot.util.*;
39 import java.util.*;
40
41 public class JIdentityStmt extends AbstractDefinitionStmt
42     implements IdentityStmt
43 {
44     public JIdentityStmt(Value local, Value identityValue)
45     {
46         this(Jimple.v().newLocalBox(local),
47              Jimple.v().newIdentityRefBox(identityValue));
48     }
49
50     protected JIdentityStmt(ValueBox localBox, ValueBox identityValueBox)
51     {
52         this.leftBox = localBox; this.rightBox = identityValueBox;
53
54         defBoxes = new ArrayList();
55         defBoxes.add(leftBox);
56         defBoxes = Collections.unmodifiableList(defBoxes);
57     }
58
59     public Object JavaDoc clone()
60     {
61         return new JIdentityStmt(Jimple.cloneIfNecessary(getLeftOp()), Jimple.cloneIfNecessary(getRightOp()));
62     }
63
64     public String JavaDoc toString()
65     {
66         return leftBox.getValue().toString() + " := " + rightBox.getValue().toString();
67     }
68     
69     public void toString( UnitPrinter up ) {
70         leftBox.toString(up);
71         up.literal(" := ");
72         rightBox.toString(up);
73     }
74
75     public void setLeftOp(Value local)
76     {
77         leftBox.setValue(local);
78     }
79
80     public void setRightOp(Value identityRef)
81     {
82         rightBox.setValue(identityRef);
83     }
84
85     public void apply(Switch sw)
86     {
87         ((StmtSwitch) sw).caseIdentityStmt(this);
88     }
89     
90     public void convertToBaf(JimpleToBafContext context, List out)
91     {
92         Value currentRhs = getRightOp();
93         Value newRhs;
94         
95         if(currentRhs instanceof ThisRef)
96             newRhs = Baf.v().newThisRef((RefType)((ThisRef) currentRhs).getType());
97         else if(currentRhs instanceof ParameterRef)
98             newRhs = Baf.v().newParameterRef(((ParameterRef)currentRhs).getType(), ((ParameterRef) currentRhs).getIndex());
99         else if(currentRhs instanceof CaughtExceptionRef)
100             {
101         Unit u = Baf.v().newStoreInst(RefType.v(),
102                        context.getBafLocalOfJimpleLocal((Local) getLeftOp()));
103                 out.add(u);
104
105         Iterator it = getTags().iterator();
106         while(it.hasNext()) {
107             u.addTag((Tag) it.next());
108         }
109         return;
110         }
111         else
112             throw new RuntimeException JavaDoc("Don't know how to convert unknown rhs");
113     Unit u = Baf.v().newIdentityInst(context.getBafLocalOfJimpleLocal
114                                          ((Local) getLeftOp()), newRhs);
115         out.add(u);
116     Iterator it = getTags().iterator();
117     while(it.hasNext()) {
118         u.addTag((Tag) it.next());
119     }
120     }
121
122
123 }
124
125
126
127
128
129
Popular Tags