summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2swift/Gen.cpp4
-rw-r--r--cpp/src/slice2swift/SwiftUtil.cpp9
-rw-r--r--cpp/src/slice2swift/SwiftUtil.h2
3 files changed, 11 insertions, 4 deletions
diff --git a/cpp/src/slice2swift/Gen.cpp b/cpp/src/slice2swift/Gen.cpp
index 51febc811c6..03b8b97bb0b 100644
--- a/cpp/src/slice2swift/Gen.cpp
+++ b/cpp/src/slice2swift/Gen.cpp
@@ -549,12 +549,14 @@ Gen::TypesVisitor::visitStructStart(const StructPtr& p)
if(p->isVariableLength())
{
out << nl << "let pos = startSize()";
+ out << nl << "write(v)";
+ out << nl << "endSize(position: pos)";
}
else
{
out << nl << "write(size: " << p->minWireSize() << ")";
+ out << nl << "write(v)";
}
- out << nl << "write(v)";
out << eb;
out << eb;
out << eb;
diff --git a/cpp/src/slice2swift/SwiftUtil.cpp b/cpp/src/slice2swift/SwiftUtil.cpp
index 404f76489f9..aa95817d4bc 100644
--- a/cpp/src/slice2swift/SwiftUtil.cpp
+++ b/cpp/src/slice2swift/SwiftUtil.cpp
@@ -320,7 +320,7 @@ SwiftGenerator::getValue(const string& swiftModule, const TypePtr& type)
void
SwiftGenerator::writeConstantValue(IceUtilInternal::Output& out, const TypePtr& type,
const SyntaxTreeBasePtr& valueType, const string& value,
- const StringList&, const string& swiftModule)
+ const StringList&, const string& swiftModule, bool optional)
{
ConstPtr constant = ConstPtr::dynamicCast(valueType);
if(constant)
@@ -351,6 +351,10 @@ SwiftGenerator::writeConstantValue(IceUtilInternal::Output& out, const TypePtr&
out << value;
}
}
+ else if(optional)
+ {
+ out << "nil";
+ }
else
{
out << getValue(swiftModule, type);
@@ -886,7 +890,8 @@ SwiftGenerator::writeMembers(IceUtilInternal::Output& out,
else
{
out << " = ";
- writeConstantValue(out, type, member->defaultValueType(), defaultValue, p->getMetaData(), swiftModule);
+ writeConstantValue(out, type, member->defaultValueType(), defaultValue, p->getMetaData(), swiftModule,
+ member->optional());
}
}
}
diff --git a/cpp/src/slice2swift/SwiftUtil.h b/cpp/src/slice2swift/SwiftUtil.h
index 29d669d7fe1..039bc75b215 100644
--- a/cpp/src/slice2swift/SwiftUtil.h
+++ b/cpp/src/slice2swift/SwiftUtil.h
@@ -95,7 +95,7 @@ protected:
std::string getValue(const std::string&, const TypePtr&);
void writeConstantValue(IceUtilInternal::Output& out, const TypePtr&, const SyntaxTreeBasePtr&,
- const std::string&, const StringList&, const std::string&);
+ const std::string&, const StringList&, const std::string&, bool optional = false);
void writeDefaultInitializer(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&, bool = true,
bool = false);
void writeMemberwiseInitializer(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&);