[aspectc-user] Re-2: Kleines Problem beim erzeugten Code

F.Zetting at zetting.de F.Zetting at zetting.de
Tue Nov 18 00:02:51 CET 2003


Hallo Herr Beuche,
tut leider auch nicht. :-(

Ich habe den TestTrace ausprobiert, so wie Sie ihn unten beschrieben haben und auch folgenden

aspect TestTrace : public Trace {
public:
  pointcut methods() = call ("% %::%(...)");
};

und es passiert leider immer noch nichts. Die Leerzeichen zwischen Funktionsnamen und der Parameterliste waren vorhanden und wurden von mir entfernt. Leider auch kein Erfolg.
Ich sende Ihnen die Ausgabedatei App1.cpp, ich habe den 1 angehängt :-), und die Originaldatei App.cpp als Archiv zu, vieleicht haben Sie noch eine Idee.


Mit freundlichen Grüßen
Franz Zetting
PSH Zetting

**************************************************************************
Phone:     +49 (0)7131 580 530
mobil:    +49 (0) 172 209 209 5                     
Fax:       +49 (0)7131 580 531                          
eMail:     F.Zetting at zetting.de                 
 

-------- Original Message --------
Subject: Re: Kleines Problem beim erzeugten Code (17-Nov-2003 17:59)
From:    danilo.beuche at pure-systems.com
To:      F.Zetting at zetting.de

> Sehr geehrter Herr Zetting,
> 
> das Problem ist in der doppelten Definition von methods() in TestTrace 
> begründet. Da ein Pointcut nur eine einzige Definition in einem Aspect 
> besitzen darf, sollte dies eigentlich zu einer Fehlermeldung führen (und 
> wird es auch ab der nächsten Version von ac++).
> Im Falle des TestTrace Aspektes werden alle Definitionen von methods() 
> ignoriert, mit Ausnahme der Ersten. Dies führt dazu, dass der execution 
> Pointcut nicht beachtet wird und somit auch kein Advice in App.cpp zu 
> finden ist.
> 
> Es bieten sich die folgenden Loesungen an:
> 
> 
> aspect TestTrace : public Trace {
> public:
>    pointcut methods() = call ("% %::%(...)") || execution ("void 
> AppFrame::OnTest1(wxCommandEvent & event)");
> };
> 
> 
> bzw.
> 
> 
> aspect TestTrace : public Trace {
> public:
>    pointcut methods1() = call ("% %::%(...)");
>    pointcut methods2() = execution ("void 
> AppFrame::OnTest1(wxCommandEvent & event)");
>    pointcut methods() = methods1() || methods2();
> };
> 
> 
> Zu beachten ist auch, dass in der jetzigen Implementierung der Pointcut 
> Ausdruecke kein Leerzeichen zwischen dem Funktionsnamen und der 
> Parameterliste stehen darf. Beispiele:
> 
> 
> falsch:
> "void AppFrame::OnTest1 (wxCommandEvent & event)"
> 
> richtig:
> "void AppFrame::OnTest1(wxCommandEvent & event)"
> 
> 
> falsch:
> "void* malloc(...)"
> 
> richtig:
> "void * malloc(...)"
> 
> 
> Eine tolerantere Implementierung ist aber schon in Arbeit.
> 
> Das Problem mit der geänderten Projektkonfiguration ist nicht so einfach 
> lösbar. Nur bei manchen Projekten tritt dieses Verhalten auf, und leider 
> ist uns die Ursache noch nicht klar.  Sobald wir ein Lösung haben, 
> werden wir ein entsprechendes Update zur Verfügung stellen.
> 
> Mit freundlichen Grüssen,
> 	Danilo Beuche
> 
> -- 
> Danilo Beuche                           Phone: +49-391-5445690
> pure-systems GmbH                       Fax:   +49-391-54456990
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: App.zip
Type: application/octet-stream
Size: 3532 bytes
Desc: not available
URL: <http://www.aspectc.org/pipermail/aspectc-user/attachments/20031117/c759b00e/attachment.obj>


More information about the aspectc-user mailing list