00001 package gov.nasa.arc.ase.jpf.jvm.bytecode;
00002
00003 import de.fub.bytecode.classfile.ConstantPool;
00004 import gov.nasa.arc.ase.jpf.jvm.SystemState;
00005 import gov.nasa.arc.ase.jpf.jvm.KernelState;
00006 import gov.nasa.arc.ase.jpf.jvm.ThreadInfo;
00007 import gov.nasa.arc.ase.jpf.jvm.ClassInfo;
00008 import gov.nasa.arc.ase.util.Debug;
00009
00010 public class NEW extends Instruction {
00011 private String cname;
00012
00013 public Instruction execute(SystemState ss, KernelState ks, ThreadInfo th) {
00014 ClassInfo ci = ClassInfo.getClassInfo(cname);
00015 int objref = ks.da.newObject(ci, th);
00016
00017 if(ci.instanceOf("java.lang.Thread"))
00018 ks.newThread(objref);
00019
00020
00021 th.push(objref, true);
00022
00023 return th.getPC().getNext();
00024 }
00025 public void setPeer(de.fub.bytecode.generic.Instruction i, ConstantPool cp) {
00026 cname = cp.constantToString(cp.getConstant(((de.fub.bytecode.generic.NEW)i).getIndex()));
00027 }
00028 }