public override void VisitInstruction(Instruction instruction) { var field = instruction.Operand as FieldReference; if (field != null && field.Resolve() == _sourceField) { if (!_sourceField.IsStatic) { Instruction instructionAfterGetter; if (instruction.IsFieldLoad()) { instructionAfterGetter = instruction; } else { instructionAfterGetter = ProcessFieldStore(instruction, field); } _il.InsertBefore(instructionAfterGetter, _il.Create(OpCodes.Callvirt, _stateGetter)); } instruction.Operand = new FieldReference( field.Name, field.FieldType) { DeclaringType = _target.ResolveGenericArguments() }; } }
public override void VisitInstruction(Instruction instruction) { var field = instruction.Operand as FieldReference; if (field != null && field.Resolve() == _field) { if (instruction.IsFieldLoad()) { instruction.Operand = ResolveGetter(field); } else { instruction.Operand = ResolveSetter(field); } instruction.OpCode = OpCodes.Callvirt; } }