diff options
author | Michi Henning <michi@zeroc.com> | 2006-02-14 06:21:00 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2006-02-14 06:21:00 +0000 |
commit | dec7e97ce880f745874ce4dba4269084b029876e (patch) | |
tree | 16804551146b3b2d3756f3456f70caf7969e1160 /cpp/src/slice2cppe/Gen.cpp | |
parent | Bug 724. (diff) | |
download | ice-dec7e97ce880f745874ce4dba4269084b029876e.tar.bz2 ice-dec7e97ce880f745874ce4dba4269084b029876e.tar.xz ice-dec7e97ce880f745874ce4dba4269084b029876e.zip |
Changed order of base-class constructor calls for one-shot constructor.
(Bug 853.)
Diffstat (limited to 'cpp/src/slice2cppe/Gen.cpp')
-rw-r--r-- | cpp/src/slice2cppe/Gen.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/cpp/src/slice2cppe/Gen.cpp b/cpp/src/slice2cppe/Gen.cpp index c471741344f..8201a7de632 100644 --- a/cpp/src/slice2cppe/Gen.cpp +++ b/cpp/src/slice2cppe/Gen.cpp @@ -2375,7 +2375,7 @@ Slice::Gen::ObjectVisitor::visitDataMember(const DataMemberPtr& p) } bool -Slice::Gen::ObjectVisitor::emitVirtualBaseInitializers(const ClassDefPtr& p, bool first) +Slice::Gen::ObjectVisitor::emitVirtualBaseInitializers(const ClassDefPtr& p) { DataMemberList allDataMembers = p->allDataMembers(); if(allDataMembers.empty()) @@ -2383,9 +2383,13 @@ Slice::Gen::ObjectVisitor::emitVirtualBaseInitializers(const ClassDefPtr& p, boo return false; } - if(!first) + ClassList bases = p->bases(); + if(!bases.empty() && !bases.front()->isInterface()) { - C << ","; + if(emitVirtualBaseInitializers(bases.front())) + { + C << ','; + } } string upcall = "("; @@ -2402,13 +2406,6 @@ Slice::Gen::ObjectVisitor::emitVirtualBaseInitializers(const ClassDefPtr& p, boo C << nl << fixKwd(p->name()) << upcall; - ClassList bases = p->bases(); - ClassDefPtr base; - if(!bases.empty() && !bases.front()->isInterface()) - { - emitVirtualBaseInitializers(bases.front(), false); - } - return true; } @@ -2437,14 +2434,19 @@ Slice::Gen::ObjectVisitor::emitOneShotConstructor(const ClassDefPtr& p) ClassDefPtr base; if(!bases.empty() && !bases.front()->isInterface()) { - if(emitVirtualBaseInitializers(bases.front(), true) && !dataMembers.empty()) + if(emitVirtualBaseInitializers(bases.front())) { - C << ','; + if(!dataMembers.empty()) + { + C << ','; + } } } - C << nl; - + if(!dataMembers.empty()) + { + C << nl; + } for(q = dataMembers.begin(); q != dataMembers.end(); ++q) { if(q != dataMembers.begin()) |