~ubuntu-branches/ubuntu/quantal/aspectc++/quantal

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#ifndef __Intro_ah__
#define __Intro_ah__

#include <stdio.h>

class Foo;

aspect Intro {
  pointcut dest () = "C"||"D"||"E"||"F";
public:
  static const int val = 2;
  advice dest () : unsigned long int I1;
  advice dest () : signed short (I2);
  advice dest () : int Foo::*(*I3);
  advice dest () : double Foo::*(* const (*I4(int,long))[47 + 11]);
  advice dest () : void I5(Intro::Int*),(*I6);
  advice dest () : static float pi;
  advice dest () && !"E": struct S1 {
    S1 ();
    ~S1 ();
    void f ();
  } IS1;
  //  advice dest () : struct { struct Y {}; } IS2, *IS3; <== invalid C++ code!
  advice dest () : struct Z { struct Y {}; } IS2, *IS3;
  typedef int Int;
  advice dest () : Intro () {}
  advice dest () : Intro (Intro::Int);
  advice dest () && !"E" : ~Intro ();
  advice dest () : const Intro::Int square (Intro::Int);
  advice dest () : void *operator new (size_t), *pp;
  advice dest () : void g();
  advice dest () : static const int v = (8 + 15 ) * sizeof(int) / Intro::val;
};

advice Intro::dest () : void Intro::g() { printf ("introduced ...::g()\n"); }
advice Intro::dest () : float Intro::pi = 3.14f;
advice Intro::dest () : Intro::Intro (Intro::Int) : I3 (0) {
  printf ("introduced constructor\n");
}
advice Intro::dest () && !"E" : Intro::~Intro () {
  square (Intro::val);
  printf ("introduced destructor\n"); 
}
advice Intro::dest () : const Intro::Int Intro::square (Intro::Int arg) {
  printf ("introduced ...::square(Intro::Int)\n");
  return arg * arg;
}

advice Intro::dest () && !"E" : void Intro::S1::f () {
}

advice Intro::dest () && !"E" : Intro::S1::S1 () {
}

advice Intro::dest () && !"E" : Intro::S1::~S1 () {
}

#endif // __Intro_ah__