[aspectc-user] matching string argument type
Olaf Spinczyk
Olaf.Spinczyk at informatik.uni-erlangen.de
Fri Apr 1 12:52:59 CEST 2005
Hi Pablo,
Pablo Casado wrote:
> Hi,
>
> I'm trying to match a string argument as follows
>
> aspect TestTrace3 : public Trace {
> public:
> pointcut methods() = call ("% Base::%(std::string)");
> };
>
> but ac does not match with the following
>
> class Derived : public Test
> {
> void abar(std::string) {
> printf("Derived::abar()\n");
> }
> };
>
> I also tried the the following patterns
> "% Base::%(string)"
> "% Base::%(...)"
>
> regards
> Pablo.
first of all, you probably did not use AspectC++ in the "real-instances"
mode. The problem is that string is a typedef for some
std::basic_string<...>, i.e. a template class instance. In the default
mode AspectC++ is currently not able to resolve any function calls that
depend on template instantiation. However, the "real-instances" mode,
which solves this problem already works quite well. It will become the
default mode in the near future, but today you have to use an additional
AspectC++ option. If you use ac++ you can either add --real-instances to
the command line options or add --real-instances in the parser
configuration file. Due to a bug in the latest ag++, the
"real-instances" mode can only be used with ag++ if you use a parser
configuration file with the --real-instances option. The ag++ command
line does not support this option in this release.
The second problem is that currently match expressions match only
classes and *not* typedefs for class. Therefore, you can't match
"string". You would have to use "std::basic_string<...>".
The third problem is that even if you used the "real-instances" mode and
the right match expression, it won't work, because the match expression
parser crashes when it analyzes "std::..". I didn't have time to find
this bug, yet :-(, but it can't be very complicated. Remember that
template support is still experimental!
If you use the "real-instances" mode and match e.g. call("% ...::%(%)")
(any function call with one argument) your call will be detected and
advice will be woven.
-Olaf
More information about the aspectc-user
mailing list