[aspectc-user] Intercepting execution of nested class

Olaf Spinczyk Olaf.Spinczyk at informatik.uni-erlangen.de
Tue Jun 8 11:30:10 CEST 2004


Hi again,

Olaf Spinczyk wrote:
> Hi Bartosz,
> 
> Bartosz Blimke wrote:
> 
>> Another problem :)
>>
>> During experiments on previosu problem I have found another one:
>>
>> lets take a code like this:
>>
>> //main.cpp
>> #include <stdio.h>
>>
>>
>> void func () {
>>
>>    printf ("func\n");
>> }
>>
>>
>> class Class1
>> {
>> public:
>>     class Class2
>>     {
>>     public:
>>       void func1()
>>       {
>>           printf("Class1::Class2::func1\n");
>>       }
>>     } class2Instance;
>> };
>>
>>
>> int main (int argc, char * argv[]) {
>>    func ();
>>    Class1 class1;
>>    class1.class2Instance.func1();
>>    return 0;
>> }
>> //end of main.cpp
>>
>>
>>
>> //Aspect.ah
>> #ifndef __Aspect_ah__
>> #define __Aspect_ah__
>>
>> #include <stdio.h>
>>
>> aspect Aspect {
>>
>>     pointcut methods() = execution("% ...::func1(...)");
>>
>>     advice methods() : before()
>>     {
>>             printf("before %s\n", thisJoinPoint->signature());
>>     }
> 
> 
>> };
>> #endif // __Aspect_ah__
>> //endo of Aspect.ah
>>
>>
>>
>> This code doesnt work becouse pointcut doesn't seem to
>> be correct.
>> How can I define pointcut to intercept method of nested class:
>>
>> "% Class1::Class2::func1(...)" doesnt work too.
>>
>>
>> Greets,
>>
>> Bartosz Blimke
>> masb at chorwacja.com
> 
> 
> The match expression "% ...::func1(...)" only works with the new (and 
> unpublished) version 0.9pre1. It does not work with 0.8.1. For 0.8.1 you 
> have to write "% Class1::Class2::func1(...)".
> 
> I tried to compile your code. The match expression matches, but the 
> generated code is wrong. Therefore, the C++ compiler is not able to 
> produce an executable program. Thank you for reporting this bug! I'll 
> look into the problem immediately.
> 
> Best regards,
> 
> Olaf

I found the reason and the problem will be fixed in the next release.

Olaf



More information about the aspectc-user mailing list