File: main.cc

package info (click to toggle)
aspectc%2B%2B 1%3A2.3%2Bgit20221129-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 17,988 kB
  • sloc: cpp: 109,125; ansic: 7,644; sh: 2,262; makefile: 1,312; pascal: 634; python: 402; xml: 349
file content (62 lines) | stat: -rw-r--r-- 1,413 bytes parent folder | download | duplicates (7)
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
59
60
61
62
#include <iostream>
using namespace std;

void foo() {}

namespace A {

namespace B {

namespace C {

class InC {
  public:
  void bar() { foo(); in.bar1(); }

  class Inner {
  public:
    void bar1() { foo(); } // within("A::B::C::InC") should not match
  } in;
};

} // C

} // B

} // A

static const int expected_matches = 6;
int matches = 0;

int main() {
  A::B::C::InC c;
  c.bar();

  if(matches != expected_matches){
    cout << "ERROR: there should have been " << expected_matches << " matches instead of " << matches << endl;
  }
};

aspect MatchScopeWithin {

  advice call("void foo()") && within("A") : before() { // 2 matches
    cout << "within(\"A\"): " << JoinPoint::signature() << " at line " << tjp->line() << endl;
    ++matches;
  }

  advice call("void foo()") && within("A::B") : before() { // 2 matches
    cout << "within(\"A::B\"): " << JoinPoint::signature() << " at line " << tjp->line() << endl;
    ++matches;
  }

  advice call("void foo()") && within("A::B::C::InC") : before() { // should only match at line 14 (not 18) -> 1 match
    cout << "within(\"A::B::C::InC\"): " << JoinPoint::signature() << " at line " << tjp->line() << endl;
    ++matches;
  }

  advice call("void foo()") && within("A::B::C::InC::Inner") : before() { // 1 match
    cout << "within(\"A::B::C::InC::Inner\"): " << JoinPoint::signature() << " at line " << tjp->line() << endl;
    ++matches;
  }

};