1 package gov.nasa.jpf.jvm.bytecode; 20 21 import gov.nasa.jpf.jvm.ElementInfo; 22 import gov.nasa.jpf.jvm.KernelState; 23 import gov.nasa.jpf.jvm.SystemState; 24 import gov.nasa.jpf.jvm.ThreadInfo; 25 26 import org.apache.bcel.classfile.ConstantPool; 27 28 29 33 public class CHECKCAST extends Instruction { 34 String type; 35 36 public void setPeer (org.apache.bcel.generic.Instruction i, ConstantPool cp) { 37 type = cp.constantToString(cp.getConstant( 38 ((org.apache.bcel.generic.CHECKCAST) i).getIndex())); 39 40 if (!type.startsWith("[")) { 41 type = "L" + type + ";"; 42 } 43 } 44 45 public Instruction execute (SystemState ss, KernelState ks, ThreadInfo th) { 46 int objref = th.pop(); 47 48 if (objref == -1) { 49 th.push(objref, true); 50 } else { 51 ElementInfo e = ks.da.get(objref); 52 53 if (e.instanceOf(type)) { 54 th.push(objref, true); 55 } else { 56 return th.createAndThrowException("java.lang.ClassCastException"); 57 } 58 } 59 60 return getNext(th); 61 } 62 63 public int getByteCode () { 64 return 0xC0; 65 } 66 } 67 | Popular Tags |