public static void BeforeExit(this MethodBody body, PointCut action) { foreach (var ret in body.Instructions.Where(i => i.OpCode == OpCodes.Ret).ToList()) { var cut = new Cut(body, ret); cut.Here(action).Write(OpCodes.Ret); cut.Remove(); } }
public static Cut LoadAspect(this Cut cut, AspectDefinition aspect, MethodDefinition method, PointCut accessor) { FieldReference aspectField; if (method.IsStatic || aspect.Scope == Scope.Global) { aspectField = GetGlobalAspectField(aspect); } else { aspectField = GetInstanceAspectField(aspect, method.DeclaringType, cut); cut = cut.Here(accessor); } return(cut.Load(aspectField)); }
public static void Append(this MethodBody body, PointCut action) { var cut = new Cut(body, entry: false, exit: true); cut.Here(action); }