1 package gov.nasa.jpf.jvm.bytecode; 20 21 import gov.nasa.jpf.JPFException; 22 import gov.nasa.jpf.jvm.ClassInfo; 23 import gov.nasa.jpf.jvm.ElementInfo; 24 import gov.nasa.jpf.jvm.KernelState; 25 import gov.nasa.jpf.jvm.SystemState; 26 import gov.nasa.jpf.jvm.ThreadInfo; 27 28 import gov.nasa.jpf.jvm.FieldInfo; 29 30 31 35 public class PUTSTATIC extends StaticFieldInstruction implements StoreInstruction 36 { 37 public Instruction execute (SystemState ss, KernelState ks, ThreadInfo ti) { 38 ClassInfo ci = ClassInfo.getClassInfo(className); 39 ElementInfo ei = ks.sa.get(className); 40 FieldInfo fi = getFieldInfo(); 41 42 switch (fi.getStorageSize()) { 43 case 1: 44 int ival = ti.pop(); 45 46 if (fi.isReference()) { 47 ei.setReferenceField(fi, ival); 48 } else { 49 ei.setIntField(fi, ival); 50 } 51 break; 52 case 2: 53 long lval = ti.longPop(); 54 ei.setLongField(fi, lval); 55 break; 56 default: 57 throw new JPFException("invalid field type"); 58 } 59 60 return getNext(ti); 61 } 62 63 public int getByteCode () { 64 return 0xB3; 65 } 66 67 public boolean isSchedulingRelevant (SystemState ss, KernelState ks, ThreadInfo ti) { 68 if (ti.usePorFieldBoundaries()) { 72 return isSchedulingRelevant(ks, ti); 73 } 74 return false; 75 } 76 } 77 | Popular Tags |