diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2swift/Gen.cpp | 17 | ||||
-rw-r--r-- | cpp/src/slice2swift/SwiftUtil.cpp | 24 | ||||
-rw-r--r-- | cpp/src/slice2swift/SwiftUtil.h | 4 |
3 files changed, 34 insertions, 11 deletions
diff --git a/cpp/src/slice2swift/Gen.cpp b/cpp/src/slice2swift/Gen.cpp index 4a66cd48c9f..fd856e8af8f 100644 --- a/cpp/src/slice2swift/Gen.cpp +++ b/cpp/src/slice2swift/Gen.cpp @@ -404,7 +404,7 @@ Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p) { writeDefaultInitializer(out, true, rootClass); } - writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, rootClass, extraParams); + writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, p->isLocal(), rootClass, extraParams); out << sp; out << nl << "open override class func ice_staticId() -> Swift.String"; @@ -1178,7 +1178,7 @@ Gen::ValueVisitor::visitClassDefStart(const ClassDefPtr& p) { writeDefaultInitializer(out, true, !base); } - writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, !base); + writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, p->isLocal(), !base); out << sp; out << nl << "open override func ice_id() -> Swift.String" << sb; @@ -1566,7 +1566,7 @@ Gen::LocalObjectVisitor::visitClassDefStart(const ClassDefPtr& p) { TypePtr type = param->type(); ostringstream s; - s << typeToString(type, p, param->getMetaData(), param->optional()); + s << typeToString(type, p, param->getMetaData(), param->optional(), TypeContextLocal); out << s.str(); } } @@ -1584,12 +1584,12 @@ Gen::LocalObjectVisitor::visitClassDefStart(const ClassDefPtr& p) { if(outParams.empty()) { - out << typeToString(ret, op, op->getMetaData(), op->returnIsOptional()); + out << typeToString(ret, op, op->getMetaData(), op->returnIsOptional(), TypeContextLocal); } else if(!ret && outParams.size() == 1) { ParamDeclPtr param = outParams.front(); - out << typeToString(param->type(), op, param->getMetaData(), param->optional()); + out << typeToString(param->type(), op, param->getMetaData(), param->optional(), TypeContextLocal); } else { @@ -1605,12 +1605,13 @@ Gen::LocalObjectVisitor::visitClassDefStart(const ClassDefPtr& p) } out << spar; - out << (returnValueS + ": " + typeToString(ret, op, op->getMetaData(), op->returnIsOptional())); + out << (returnValueS + ": " + typeToString(ret, op, op->getMetaData(), op->returnIsOptional(), + TypeContextLocal)); for(ParamDeclList::const_iterator i = outParams.begin(); i != outParams.end(); ++i) { ParamDeclPtr param = *i; out << (fixIdent(param->name()) + ": " + - typeToString(param->type(), op, op->getMetaData(), param->optional())); + typeToString(param->type(), op, op->getMetaData(), param->optional(), TypeContextLocal)); } out << epar; } @@ -1645,7 +1646,7 @@ Gen::LocalObjectVisitor::visitClassDefStart(const ClassDefPtr& p) } } out << sb; - writeMembers(out, p->dataMembers(), p, TypeContextProtocol); + writeMembers(out, p->dataMembers(), p, TypeContextProtocol | TypeContextLocal); return true; } diff --git a/cpp/src/slice2swift/SwiftUtil.cpp b/cpp/src/slice2swift/SwiftUtil.cpp index b607750b81d..1f8db1ddfa5 100644 --- a/cpp/src/slice2swift/SwiftUtil.cpp +++ b/cpp/src/slice2swift/SwiftUtil.cpp @@ -385,6 +385,20 @@ SwiftGenerator::typeToString(const TypePtr& type, return ""; } + bool local = (typeCtx & TypeContextLocal) != 0; + if(local) + { + for(StringList::const_iterator i = metadata.begin(); i != metadata.end(); ++i) + { + const string swiftType = "swift:type:"; + const string meta = *i; + if(meta.find(swiftType) == 0) + { + return meta.substr(swiftType.size()); + } + } + } + string t = ""; // // The current module were the type is being used @@ -781,7 +795,7 @@ SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, const DataMemberList& members, const ContainedPtr& p) { - writeMemberwiseInitializer(out, members, DataMemberList(), members, p, true); + writeMemberwiseInitializer(out, members, DataMemberList(), members, p, false, true); } void @@ -790,6 +804,7 @@ SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, const DataMemberList& baseMembers, const DataMemberList& allMembers, const ContainedPtr& p, + bool local, bool rootClass, const StringPairList& extraParams) { @@ -797,6 +812,11 @@ SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, { out << sp; out << nl; + int typeCtx = TypeContextInParam; + if(local) + { + typeCtx |= TypeContextLocal; + } out << "public init" << spar; for(DataMemberList::const_iterator i = allMembers.begin(); i != allMembers.end(); ++i) { @@ -850,7 +870,7 @@ SwiftGenerator::writeMembers(IceUtilInternal::Output& out, TypePtr type = member->type(); string defaultValue = member->defaultValue(); out << nl << access << "var " << fixIdent(member->name()) << ": " - << typeToString(type, p, member->getMetaData(), member->optional()); + << typeToString(type, p, member->getMetaData(), member->optional(), typeCtx); if(protocol) { out << " { get set }"; diff --git a/cpp/src/slice2swift/SwiftUtil.h b/cpp/src/slice2swift/SwiftUtil.h index e9fe8eca1a6..0c26526ba19 100644 --- a/cpp/src/slice2swift/SwiftUtil.h +++ b/cpp/src/slice2swift/SwiftUtil.h @@ -92,7 +92,9 @@ protected: void writeDefaultInitializer(IceUtilInternal::Output&, bool, bool); 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 local = false, + bool rootClass = false, const StringPairList& = StringPairList()); void writeMembers(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&, int = 0); |