summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2swift/Gen.cpp17
-rw-r--r--cpp/src/slice2swift/SwiftUtil.cpp24
-rw-r--r--cpp/src/slice2swift/SwiftUtil.h4
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);