diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2swift/Gen.cpp | 16 | ||||
-rw-r--r-- | cpp/src/slice2swift/SwiftUtil.cpp | 12 | ||||
-rw-r--r-- | cpp/src/slice2swift/SwiftUtil.h | 5 |
3 files changed, 29 insertions, 4 deletions
diff --git a/cpp/src/slice2swift/Gen.cpp b/cpp/src/slice2swift/Gen.cpp index 23433c3dd20..63749017723 100644 --- a/cpp/src/slice2swift/Gen.cpp +++ b/cpp/src/slice2swift/Gen.cpp @@ -302,11 +302,23 @@ Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p) const DataMemberList allMembers = p->allDataMembers(); const DataMemberList baseMembers = base ? base->allDataMembers() : DataMemberList(); + StringPairList extraParams; + if(p->isLocal()) + { + extraParams.push_back(make_pair("file", "String = #file")); + extraParams.push_back(make_pair("line", "Int = #line")); + } + bool rootClass = !base && !p->isLocal(); // bool required = writeMembers(out, members, p); - writeDefaultInitializer(out, members, p, rootClass, true); - writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, rootClass); + + // Local exceptions do not need default initializers + if(!p->isLocal()) + { + writeDefaultInitializer(out, members, p, rootClass, true); + } + writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, rootClass, extraParams); if(!p->isLocal()) { diff --git a/cpp/src/slice2swift/SwiftUtil.cpp b/cpp/src/slice2swift/SwiftUtil.cpp index feb1450efda..0cb0c732da7 100644 --- a/cpp/src/slice2swift/SwiftUtil.cpp +++ b/cpp/src/slice2swift/SwiftUtil.cpp @@ -647,6 +647,7 @@ SwiftGenerator::writeDefaultInitializer(IceUtilInternal::Output& out, } } } + if(!rootClass) { out << nl << "super.init()"; @@ -668,7 +669,8 @@ SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, const DataMemberList& baseMembers, const DataMemberList& allMembers, const ContainedPtr& p, - bool rootClass) + bool rootClass, + const StringPairList& extraParams) { if(allMembers.size() > 0) { @@ -686,6 +688,10 @@ SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, out << (fixIdent(m->name()) + ": " + typeToString(m->type(), p, m->getMetaData(), m->optional(), TypeContextInParam)); } + for(StringPairList::const_iterator q = extraParams.begin(); q != extraParams.end(); ++q) + { + out << (q->first + ": " + q->second); + } out << epar; out << sb; for(DataMemberList::const_iterator i = members.begin(); i != members.end(); ++i) @@ -703,6 +709,10 @@ SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, const string name = fixIdent((*i)->name()); out << (name + ": " + name); } + for(StringPairList::const_iterator q = extraParams.begin(); q != extraParams.end(); ++q) + { + out << (q->first + ": " + q->first); + } out << epar; } out << eb; diff --git a/cpp/src/slice2swift/SwiftUtil.h b/cpp/src/slice2swift/SwiftUtil.h index 9adb06df0b2..4aead49f56d 100644 --- a/cpp/src/slice2swift/SwiftUtil.h +++ b/cpp/src/slice2swift/SwiftUtil.h @@ -13,6 +13,8 @@ #include <Slice/Parser.h> #include <IceUtil/OutputUtil.h> +typedef std::list<std::pair<std:: string, std::string> > StringPairList; + namespace Slice { @@ -67,7 +69,8 @@ protected: bool = false); void writeMemberwiseInitializer(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&); void writeMemberwiseInitializer(IceUtilInternal::Output&, const DataMemberList&, const DataMemberList&, - const DataMemberList&, const ContainedPtr&, bool rootClass = false); + const DataMemberList&, const ContainedPtr&, bool rootClass = false, + const StringPairList& = StringPairList()); void writeMembers(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&, int = 0); void writeMarshalUnmarshalCode(::IceUtilInternal::Output&, |