30
30
bool ExtACBuilder::is_advice_decl () const {
31
31
return (nodes () == 1 &&
32
get_node ()->NodeName () == CT_AdviceDecl::NodeId ());
32
get_node ()->NodeName () == Puma::CT_AdviceDecl::NodeId ());
36
CTree *ExtACBuilder::advice_decl () {
36
Puma::CTree *ExtACBuilder::advice_decl () {
37
37
// 3: ADVICE decl_list pointcut
38
38
// 4: ADVICE : decl pointcut
39
39
return nodes () == 3 ?
40
new CT_AdviceDecl (get_node (0), get_node (2), 0, get_node (1)) :
41
new CT_AdviceDecl (get_node (0), get_node (3), get_node (1), get_node (2));
40
new Puma::CT_AdviceDecl (get_node (0), get_node (2), 0, get_node (1)) :
41
new Puma::CT_AdviceDecl (get_node (0), get_node (3), get_node (1), get_node (2));
45
CTree *ExtACBuilder::order_list () {
45
Puma::CTree *ExtACBuilder::order_list () {
46
46
// 2 + N: ( pointcut-expr-seq )
47
return list (new CT_OrderList);
47
return list (new Puma::CT_OrderList);
51
CTree *ExtACBuilder::order_decl () {
51
Puma::CTree *ExtACBuilder::order_decl () {
52
52
// 3: ORDER order_list ;
53
return new CT_OrderDecl (get_node (0), get_node (1), get_node (2));
53
return new Puma::CT_OrderDecl (get_node (0), get_node (1), get_node (2));
57
CTree *ExtACBuilder::pointcut_decl () {
57
Puma::CTree *ExtACBuilder::pointcut_decl () {
58
58
// 1: POINTCUT decl
59
return new CT_PointcutDecl (get_node (0), get_node (1));
59
return new Puma::CT_PointcutDecl (get_node (0), get_node (1));
63
CTree *ExtACBuilder::slice_ref () {
63
Puma::CTree *ExtACBuilder::slice_ref () {
64
64
// 3: SLICE unqual_id ;
65
65
// 4: SLICE :: unqual_id ;
66
66
// 4: SLICE nested_name_spec unqual_id ;
67
67
// 5: SLICE :: nested_name_spec unqual_id ;
68
Puma::CT_QualName *qn = 0;
69
69
int num = nodes ();
71
71
// 3: SLICE unqual_id ;
73
73
else if (num == 4) {
74
if (get_node (1)->NodeName () == Container::NodeId ()) {
74
if (get_node (1)->NodeName () == Builder::Container::NodeId ()) {
75
75
// 4: SLICE nested_name_spec unqual_id ;
76
Container *nns = (Container*)get_node (1);
77
qn = new CT_QualName (nns->Sons ()+1);
76
Builder::Container *nns = (Builder::Container*)get_node (1);
77
qn = new Puma::CT_QualName (nns->Sons ()+1);
78
78
copy_list (qn, nns);
79
79
qn->AddSon (get_node (2));
83
83
// 4: SLICE :: unqual_id ;
84
qn = new CT_RootQualName (2);
84
qn = new Puma::CT_RootQualName (2);
85
85
qn->AddSon (get_node (1));
86
86
qn->AddSon (get_node (2));
89
89
else if (num == 5) {
90
90
// 5: SLICE :: nested_name_spec unqual_id ;
91
Container *nns = (Container*)get_node (2);
92
qn = new CT_RootQualName (nns->Sons ()+2);
91
Builder::Container *nns = (Builder::Container*)get_node (2);
92
qn = new Puma::CT_RootQualName (nns->Sons ()+2);
93
93
qn->AddSon (get_node (1));
94
94
copy_list (qn, nns);
95
95
qn->AddSon (get_node (3));
98
return new CT_SliceRef (get_node (0), qn ? (CTree*)qn : get_node (1),
98
return new Puma::CT_SliceRef (get_node (0), qn ? (Puma::CTree*)qn : get_node (1),
103
CTree *ExtACBuilder::class_slice_decl () {
103
Puma::CTree *ExtACBuilder::class_slice_decl () {
104
104
// 1: SLICE class_key class_slice_name base_clause? memb_list? ;
105
105
int n = nodes ();
106
bool has_base = (get_node (3)->NodeName () == CT_Intro::NodeId ());
107
bool has_members = (get_node (n - 2)->NodeName () == CT_MembList::NodeId ());
108
return new CT_ClassSliceDecl (get_node (0), get_node (1), get_node (2),
109
has_base ? get_node (3) : (CTree*)0,
110
has_members ? get_node (nodes () - 2) : (CTree*)0,
106
bool has_base = (get_node (3)->NodeName () == Puma::CT_Intro::NodeId ());
107
bool has_members = (get_node (n - 2)->NodeName () == Puma::CT_MembList::NodeId ());
108
return new Puma::CT_ClassSliceDecl (get_node (0), get_node (1), get_node (2),
109
has_base ? get_node (3) : (Puma::CTree*)0,
110
has_members ? get_node (nodes () - 2) : (Puma::CTree*)0,
111
111
get_node (n - 1));
115
CTree *ExtACBuilder::class_slice_name () {
115
Puma::CTree *ExtACBuilder::class_slice_name () {
117
117
// 1: private_name
118
118
// 2: :: identifier
154
CTree *ExtACBuilder::class_slice_member_list () {
155
CT_MembList *ml = new CT_MembList;
154
Puma::CTree *ExtACBuilder::class_slice_member_list () {
155
Puma::CT_MembList *ml = new Puma::CT_MembList;
156
156
ml->AddSon (get_node (0));
157
157
for (int i = 1; i < nodes () - 1; i++)
158
158
ml->AddSon (get_node (i));
159
159
ml->AddSon (get_node (nodes () - 1));
160
ml->AddProperties (CT_List::OPEN_CLOSE);
160
ml->AddProperties (Puma::CT_List::OPEN_CLOSE);
165
CTree *ExtACBuilder::class_slice_member_decl () {
165
Puma::CTree *ExtACBuilder::class_slice_member_decl () {
166
166
// 2: SLICE intro
167
CT_Intro *i = (CT_Intro*)get_node (1);
167
Puma::CT_Intro *i = (Puma::CT_Intro*)get_node (1);
168
168
i->PrefixSon (get_node (0));
169
i->AddProperties (CT_List::OPEN);
169
i->AddProperties (Puma::CT_List::OPEN);
174
CTree *ExtACBuilder::pointcut_expr () {
174
Puma::CTree *ExtACBuilder::pointcut_expr () {
176
176
return get_node (0);
180
CTree *ExtACBuilder::intro () {
180
Puma::CTree *ExtACBuilder::intro () {
182
return list (new CT_Intro);
182
return list (new Puma::CT_Intro);
185
185
#endif /* __ext_ac_builder_cc_ah__ */