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.Constants; 26 import org.apache.bcel.classfile.ConstantPool; 27 import gov.nasa.jpf.jvm.DynamicArea; 28 import gov.nasa.jpf.jvm.Types; 29 30 31 35 public class NEWARRAY extends Instruction { 36 protected String type; 37 38 public void setPeer (org.apache.bcel.generic.Instruction i, ConstantPool cp) { 39 type = Constants.SHORT_TYPE_NAMES[((org.apache.bcel.generic.NEWARRAY) i).getTypecode()]; 40 } 41 42 public Instruction execute (SystemState ss, KernelState ks, ThreadInfo ti) { 43 int size = ti.pop(); 44 DynamicArea heap = DynamicArea.getHeap(); 45 46 if (heap.getOutOfMemory()) { return ti.createAndThrowException("java.lang.OutOfMemoryError", 48 "trying to allocate new " + 49 Types.getTypeName(type) + 50 "[" + size + "]"); 51 } 52 53 int arrayRef = heap.newArray(type, size, ti); 54 ti.push(arrayRef, true); 55 56 return getNext(ti); 58 } 59 60 public int getByteCode () { 61 return 0xBC; 62 } 63 } 64 | Popular Tags |