public override void Weave(ILGenerator ilGenerator) { var argsLocalBuilder = LocalBuilderRepository.Get(previousAspectArgType); var contractFieldBuilder = WeavingSettings.TypeDefinition.GetFieldBuilder(WeavingSettings.ContractType); var methodImplParameters = WeavingSettings.MethodInfoImpl.GetParameters(); ilGenerator.EmitLoadArg(0); ilGenerator.Emit(OpCodes.Ldfld, contractFieldBuilder); methodImplParameters.ForEach(param => { int argPosition = param.Position + 1; if (byRefArgumentStoreWeaver.Contains(argPosition)) { ilGenerator.EmitLoadArg(argPosition); } else { var property = previousAspectArgType.GetProperty("Arg{0}".Fmt(argPosition)); ilGenerator.EmitLoadLocal(argsLocalBuilder); ilGenerator.Emit(OpCodes.Callvirt, property.GetGetMethod()); } }); }
public void Weave(ILGenerator ilGenerator) { var methodImplParameters = method.GetParameters(); var aspectArgsType = method.ToAspectArgumentContract(); ilGenerator.EmitLoadArg(1); ilGenerator.Emit(OpCodes.Ldind_Ref); methodImplParameters.ForEach(param => { var argPosition = param.Position + 1; if (byRefArgumentsStoreWeaver.Contains(argPosition)) { byRefArgumentsStoreWeaver.EmitLoadLocalAddress(ilGenerator, argPosition); } else { var property = aspectArgsType.GetProperty("Arg{0}".Fmt(argPosition)); ilGenerator.EmitLoadArg(2); ilGenerator.Emit(OpCodes.Callvirt, property.GetGetMethod()); } }); }
public override void Weave(ILGenerator ilGenerator) { var argsLocalBuilder = LocalBuilderRepository.Get(previousAspectArgType); var methodImplParameters = Member.GetParameters(); ilGenerator.EmitLoadArg(1); ilGenerator.Emit(OpCodes.Ldind_Ref); methodImplParameters.ForEach(param => { int argPosition = param.Position + 1; if (byRefArgumentStoreWeaver.Contains(argPosition)) { byRefArgumentStoreWeaver.EmitLoadLocalAddress(ilGenerator, argPosition); } else { var property = previousAspectArgType.GetProperty("Arg{0}".Fmt(argPosition)); ilGenerator.EmitLoadLocal(argsLocalBuilder); ilGenerator.Emit(OpCodes.Callvirt, property.GetGetMethod()); } }); }