00001 package gov.nasa.arc.ase.jpf.jvm.bytecode; 00002 00003 import gov.nasa.arc.ase.jpf.*; 00004 import gov.nasa.arc.ase.jpf.jvm.*; 00005 import de.fub.bytecode.generic.InstructionHandle; 00006 import gov.nasa.arc.ase.util.Debug; 00007 00008 public class LRETURN extends AbstractInstruction { 00009 private de.fub.bytecode.generic.LRETURN peer; 00010 00011 public InstructionHandle execute(SystemState ss, KernelState ks, ThreadInfo th) { 00012 MethodInfo mi = th.getCurrentMethod(); 00013 if (mi.getMethodGen().isSynchronized()) { 00014 if (mi.getMethodGen().isStatic()) { 00015 ks.static_area.monitorUnlock(mi.getClassInfo().getClassName(), th); 00016 } else { 00017 ks.dynamic_area.monitorUnlock(th.getThis(), th); 00018 } 00019 } 00020 00021 long value = th.pop2(); 00022 00023 th.popFrame(); 00024 th.removeArguments(mi); 00025 00026 th.push2(value); 00027 00028 return th.getPC().getNext(); 00029 } 00030 public void setPeer(de.fub.bytecode.generic.Instruction i) { 00031 peer = (de.fub.bytecode.generic.LRETURN)i; 00032 } 00033 }