1 package gov.nasa.jpf.jvm.bytecode; 20 21 import gov.nasa.jpf.jvm.KernelState; 22 import gov.nasa.jpf.jvm.SystemState; 23 import gov.nasa.jpf.jvm.ThreadInfo; 24 25 import org.apache.bcel.classfile.ConstantPool; 26 import org.apache.bcel.generic.InstructionHandle; 27 28 29 33 public class TABLESWITCH extends Instruction { 34 private int target; 35 private int[] matches; 36 private int[] targets; 37 38 public void setPeer (org.apache.bcel.generic.Instruction i, ConstantPool cp) { 39 target = ((org.apache.bcel.generic.TABLESWITCH) i).getTarget() 40 .getPosition(); 41 matches = ((org.apache.bcel.generic.TABLESWITCH) i).getMatchs(); 42 43 int length = matches.length; 44 targets = new int[length]; 45 46 InstructionHandle[] ih = ((org.apache.bcel.generic.TABLESWITCH) i).getTargets(); 47 48 for (int j = 0; j < length; j++) { 49 targets[j] = ih[j].getPosition(); 50 } 51 } 52 53 public Instruction execute (SystemState ss, KernelState ks, ThreadInfo th) { 54 int value = th.pop(); 55 56 for (int i = 0, l = matches.length; i < l; i++) { 57 if (value == matches[i]) { 58 return th.getMethod().getInstructionAt(targets[i]); 59 } 60 } 61 62 return th.getMethod().getInstructionAt(target); 63 } 64 65 public int getByteCode () { 66 return 0xAA; 67 } 68 } 69 | Popular Tags |