25
/** Desctructor: delete all pattern units */
26
ACSliceInfo::~ACSliceInfo () {
27
if (_base_pattern) delete _base_pattern;
28
if (_pattern) delete _pattern;
29
for (int m = 0; m < members (); m++)
30
delete _member_patterns[m];
25
33
ACSliceInfo::Type ACSliceInfo::type () const {
46
/** Set the slice definition syntax tree node.
47
* \param node The slice syntax tree node. */
48
void ACSliceInfo::def_node (CT_ClassSliceDecl *csd) {
51
// create base clause pattern
52
CT_Intro *intro = (CT_Intro*)csd->base_clause ();
54
// create a unit for the baseclass pattern
55
_base_pattern = new Unit;
56
// set the name for #line directives
57
_base_pattern->name (((Unit*)csd->token ()->belonging_to ())->name ());
59
for (int e = 1; e < intro->Entries (); e++) { // skip ":"
60
Token *tok = intro->Entry (e)->token ();
61
_base_pattern->append (*tok->duplicate ());
65
// create pattern for inline members
66
if (csd->members ()) {
69
// set the name for #line directives
70
_pattern->name (((Unit*)csd->token ()->belonging_to ())->name ());
71
for (int m = 0; m < csd->members ()->Entries (); m++) {
72
CT_Intro *intro = (CT_Intro*)csd->members ()->Entry (m);
73
for (int e = 0; e < intro->Entries (); e++) {
74
Token *tok = intro->Entry (e)->token ();
75
_pattern->append (*tok->duplicate ());
82
/** Add a non-inline slice member.
83
* \param node The new member. */
84
void ACSliceInfo::add_member (CT_Intro *i) {
86
// create a unit for the baseclass pattern
87
Unit *pattern = new Unit;
88
// set the name for #line directives
89
// TODO: think about slices generated by macros here
90
Unit *ah_unit = (Unit*)i->token ()->belonging_to ();
91
pattern->name (ah_unit->name ());
93
for (int e = 0; e < i->Entries (); e++) {
94
Token *tok = i->Entry (e)->token ();
95
pattern->append (*tok->duplicate ());
97
_member_patterns.append (pattern);
98
_member_units.append (ah_unit);
38
101
ACSliceInfo *ACSliceInfo::definition () const {
39
102
CObjectInfo *curr = _object;