public override CILInstruction Execute(mmchecker.vm.ThreadState threadState) { // TODONOW: Fix this when semantic for ldarg and starg is clear if(CanExecute(threadState) == false) throw new Exception("This instruction is not ready to execute"); VMValue source = threadState.GetValue(threadState.ThreadStack.Pop()); VMValue target = threadState.GetLocalArgument(argIndex); target.IsThreadLocal = true; DelayedWrite dw = new DelayedWrite(target.GUID, source.GUID, this); threadState.AddPendingAction(dw); return threadState.CurrentMethod.GetNextInstruction(this); }
public override bool CanExecute(mmchecker.vm.ThreadState threadState) { return threadState.GetLocalArgument(argIndex).IsConcrete; }