summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/Parser.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2005-05-19 04:44:55 +0000
committerMichi Henning <michi@zeroc.com>2005-05-19 04:44:55 +0000
commit671ab6be8ac91b7e312588e321c8ffb325b3b8b0 (patch)
tree6c59933868cba548afcdcca7472875fcb4997199 /cpp/src/Slice/Parser.cpp
parent*** empty log message *** (diff)
downloadice-671ab6be8ac91b7e312588e321c8ffb325b3b8b0.tar.bz2
ice-671ab6be8ac91b7e312588e321c8ffb325b3b8b0.tar.xz
ice-671ab6be8ac91b7e312588e321c8ffb325b3b8b0.zip
Fixed http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=262
Diffstat (limited to 'cpp/src/Slice/Parser.cpp')
-rw-r--r--cpp/src/Slice/Parser.cpp74
1 files changed, 54 insertions, 20 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp
index 6460efcaad4..3434d8bbf1a 100644
--- a/cpp/src/Slice/Parser.cpp
+++ b/cpp/src/Slice/Parser.cpp
@@ -2752,18 +2752,29 @@ Slice::ClassDef::dataMembers() const
return result;
}
+//
+// Return the data members of this class and its parent classes, in base-to-derived order.
+//
DataMemberList
Slice::ClassDef::allDataMembers() const
{
- DataMemberList result = dataMembers();
- result.sort();
- result.unique();
- for(ClassList::const_iterator p = _bases.begin(); p != _bases.end(); ++p)
+ DataMemberList result;
+
+ //
+ // Check if we have a base class. If so, recursively
+ // get the data members of the base(s).
+ //
+ if(!_bases.empty() && !_bases.front()->isInterface())
{
- DataMemberList li = (*p)->allDataMembers();
- result.merge(li);
- result.unique();
+ result = _bases.front()->allDataMembers();
}
+
+ //
+ // Append this class's data members.
+ //
+ DataMemberList myMembers = dataMembers();
+ result.splice(result.end(), myMembers);
+
return result;
}
@@ -2786,6 +2797,9 @@ Slice::ClassDef::classDataMembers() const
return result;
}
+//
+// Return the class data members of this class and its parent classes, in base-to-derived order.
+//
DataMemberList
Slice::ClassDef::allClassDataMembers() const
{
@@ -3149,6 +3163,32 @@ Slice::Exception::dataMembers() const
return result;
}
+//
+// Return the data members of this exception and its parent exceptions, in base-to-derived order.
+//
+DataMemberList
+Slice::Exception::allDataMembers() const
+{
+ DataMemberList result;
+
+ //
+ // Check if we have a base exception. If so, recursively
+ // get the data members of the base exception(s).
+ //
+ if(base())
+ {
+ result = base()->allDataMembers();
+ }
+
+ //
+ // Append this exceptions's data members.
+ //
+ DataMemberList myMembers = dataMembers();
+ result.splice(result.end(), myMembers);
+
+ return result;
+}
+
DataMemberList
Slice::Exception::classDataMembers() const
{
@@ -3168,6 +3208,9 @@ Slice::Exception::classDataMembers() const
return result;
}
+//
+// Return the class data members of this exception and its parent exceptions, in base-to-derived order.
+//
DataMemberList
Slice::Exception::allClassDataMembers() const
{
@@ -3183,20 +3226,11 @@ Slice::Exception::allClassDataMembers() const
}
//
- // Append this exception's class members.
+ // Append this exceptions's class data members.
//
- for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
- {
- DataMemberPtr q = DataMemberPtr::dynamicCast(*p);
- if(q)
- {
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->type());
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(q->type()))
- {
- result.push_back(q);
- }
- }
- }
+ DataMemberList myMembers = classDataMembers();
+ result.splice(result.end(), myMembers);
+
return result;
}