1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
#ifndef __CFlow_ah__
#define __CFlow_ah__
#include <stdio.h>
aspect CFlow {
pointcut methods(int i) = args(i) && execution ("void Base::b1(...)") &&
(cflow(execution("void %::b2()"))||cflow(execution("void %::b3()")));
public:
advice methods (i) : before (int i) {
printf ("before \"%s\": %d\n", tjp->signature (), i);
}
advice execution("% %::b%(...)") && (cflow(execution("void %::b2()"))||
cflow(call("void f()"))) :
around () {
printf ("before %s under b2\n", tjp->signature ());
tjp->proceed ();
printf ("after %s under b2\n", tjp->signature ());
}
};
#endif // __CFlow_ah__
|