summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2swift/Gen.cpp16
-rw-r--r--cpp/src/slice2swift/SwiftUtil.cpp12
-rw-r--r--cpp/src/slice2swift/SwiftUtil.h5
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&,