1 package gov.nasa.jpf.jvm.bytecode; 20 21 import gov.nasa.jpf.jvm.ArrayIndexOutOfBoundsExecutiveException; 22 import gov.nasa.jpf.jvm.ElementInfo; 23 import gov.nasa.jpf.jvm.KernelState; 24 import gov.nasa.jpf.jvm.SystemState; 25 import gov.nasa.jpf.jvm.ThreadInfo; 26 27 28 31 public abstract class ArrayLoadInstruction extends ArrayInstruction { 32 public Instruction execute (SystemState ss, KernelState ks, ThreadInfo th) { 33 int index; 34 int arrayRef; 35 ElementInfo e; 36 37 index = th.pop(); 38 arrayRef = th.pop(); 39 40 if (arrayRef == -1) { 41 return th.createAndThrowException("java.lang.NullPointerException"); 42 } 43 44 e = ks.da.get(arrayRef); 45 46 try { 47 push(th, e, index); 48 49 return getNext(th); 50 } catch (ArrayIndexOutOfBoundsExecutiveException ex) { 51 return ex.getInstruction(); 52 } 53 } 54 55 protected boolean isReference () { 56 return false; 57 } 58 59 protected void push (ThreadInfo th, ElementInfo e, int index) 60 throws ArrayIndexOutOfBoundsExecutiveException { 61 e.checkArrayBounds(index); 62 th.push(e.getElement(index), isReference()); 63 } 64 65 public boolean isSchedulingRelevant (SystemState ss, KernelState ks, ThreadInfo ti) { 66 if (ti.usePorFieldBoundaries()) { 69 if (ks.da.isSchedulingRelevantObject(ti.peek(1)) && ti.hasOtherRunnables()) { 70 return true; 71 } 72 } 73 74 return false; 75 } 76 } 77 | Popular Tags |