private string Mutates(MethodDefinition method, Instruction end) { string name = null; Instruction ins = AvoidMethodsWithSideEffectsInConditionalCodeRule.FullTraceBack(method, end); if (ins != null) { Log.WriteLine(this, "checking args for call at {0:X4} starting at {1:X4}", end.Offset, ins.Offset); while (ins.Offset < end.Offset && name == null) { if (ins.IsStoreArgument()) { ParameterDefinition pd = ins.Operand as ParameterDefinition; name = "argument " + pd.Name; } else if (ins.IsStoreLocal()) { VariableDefinition vd = ins.GetVariable(method); if (!vd.IsGeneratedName()) { name = "local " + vd.Name; } } else if (ins.OpCode.Code == Code.Stfld || ins.OpCode.Code == Code.Stsfld) { FieldReference fr = ins.Operand as FieldReference; if (!fr.IsGeneratedCode()) { name = "field " + fr.Name; } } ins = ins.Next; } } return(name); }