diff options
Diffstat (limited to 'cpp/src/slice2swift')
-rw-r--r-- | cpp/src/slice2swift/Gen.cpp | 4 | ||||
-rw-r--r-- | cpp/src/slice2swift/SwiftUtil.cpp | 9 | ||||
-rw-r--r-- | cpp/src/slice2swift/SwiftUtil.h | 2 |
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&); |