add some comments
tweak SSASwitchInstruction.toString() git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1469 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
cb4012d939
commit
5c89985acf
|
@ -70,6 +70,10 @@ public class Util {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When the tested value of the switch statement in b has value c, which
|
||||||
|
* basic block does control transfer to.
|
||||||
|
*/
|
||||||
public static IBasicBlock resolveSwitch(ControlFlowGraph G, IBasicBlock b, int c) {
|
public static IBasicBlock resolveSwitch(ControlFlowGraph G, IBasicBlock b, int c) {
|
||||||
Assertions._assert(endsWithSwitch(G, b));
|
Assertions._assert(endsWithSwitch(G, b));
|
||||||
SSASwitchInstruction s = (SSASwitchInstruction) getLastInstruction(G, b);
|
SSASwitchInstruction s = (SSASwitchInstruction) getLastInstruction(G, b);
|
||||||
|
@ -90,6 +94,11 @@ public class Util {
|
||||||
return G.getBlockForInstruction(sw.getDefault()).equals(s);
|
return G.getBlockForInstruction(sw.getDefault()).equals(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When a switch statement at the end of block b transfers control to block s,
|
||||||
|
* which case was taken?
|
||||||
|
* TODO: Is this correct? Can't we have multiple cases that apply? Check on this.
|
||||||
|
*/
|
||||||
public static int getSwitchLabel(ControlFlowGraph G, IBasicBlock b, IBasicBlock s) {
|
public static int getSwitchLabel(ControlFlowGraph G, IBasicBlock b, IBasicBlock s) {
|
||||||
Assertions._assert(endsWithSwitch(G, b));
|
Assertions._assert(endsWithSwitch(G, b));
|
||||||
SSASwitchInstruction sw = (SSASwitchInstruction) getLastInstruction(G, b);
|
SSASwitchInstruction sw = (SSASwitchInstruction) getLastInstruction(G, b);
|
||||||
|
|
|
@ -18,6 +18,8 @@ import com.ibm.wala.util.debug.Assertions;
|
||||||
import com.ibm.wala.util.intset.IntIterator;
|
import com.ibm.wala.util.intset.IntIterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* SSA instruction representing a switch statement.
|
||||||
|
*
|
||||||
* @author sjfink
|
* @author sjfink
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -28,6 +30,10 @@ public class SSASwitchInstruction extends SSAInstruction {
|
||||||
|
|
||||||
private final int[] casesAndLabels;
|
private final int[] casesAndLabels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The labels in casesAndLabels represent <em>instruction indices</em> in the IR that each
|
||||||
|
* switch case branches to.
|
||||||
|
*/
|
||||||
SSASwitchInstruction(int val, int defaultLabel, int[] casesAndLabels) {
|
SSASwitchInstruction(int val, int defaultLabel, int[] casesAndLabels) {
|
||||||
super();
|
super();
|
||||||
this.val = val;
|
this.val = val;
|
||||||
|
@ -43,7 +49,7 @@ public class SSASwitchInstruction extends SSAInstruction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(SymbolTable symbolTable, ValueDecorator d) {
|
public String toString(SymbolTable symbolTable, ValueDecorator d) {
|
||||||
return "switch " + getValueString(symbolTable, d, val);
|
return "switch " + getValueString(symbolTable, d, val) + " " + casesAndLabels;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,7 +122,7 @@ public class SSASwitchInstruction extends SSAInstruction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return val * 1663 ^ 3499;
|
return val * 1663 + 3499;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue