diff options
author | Jose <jose@zeroc.com> | 2018-09-20 14:14:45 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2018-09-20 14:14:45 +0200 |
commit | 260b8bf8523164f68bdf97d469616cbf01c71cc0 (patch) | |
tree | 102ff9d0f45ae66a0c38dc02aa03cbf054c65358 /cpp/src/slice2java | |
parent | Merge branch '3.7.1-xcode10' into 3.7 (diff) | |
download | ice-260b8bf8523164f68bdf97d469616cbf01c71cc0.tar.bz2 ice-260b8bf8523164f68bdf97d469616cbf01c71cc0.tar.xz ice-260b8bf8523164f68bdf97d469616cbf01c71cc0.zip |
Test using Value as operation parameter
Fix a bug in slice2java that generate bogus code or using
Value as an Slice operation parameter
Fix a bug in JavaScript mapping that cause a run-time error
when invoking an operation that defines Value as an input
parameter
Diffstat (limited to 'cpp/src/slice2java')
-rw-r--r-- | cpp/src/slice2java/GenCompat.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/cpp/src/slice2java/GenCompat.cpp b/cpp/src/slice2java/GenCompat.cpp index c4e8c15ee1c..2e50562471f 100644 --- a/cpp/src/slice2java/GenCompat.cpp +++ b/cpp/src/slice2java/GenCompat.cpp @@ -669,7 +669,8 @@ Slice::JavaCompatVisitor::getArgsAsyncCB(const OperationPtr& op) if(ret) { BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret)) + if((builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) || + ClassDeclPtr::dynamicCast(ret)) { args.push_back("ret.value"); } @@ -685,7 +686,8 @@ Slice::JavaCompatVisitor::getArgsAsyncCB(const OperationPtr& op) if((*q)->isOutParam()) { BuiltinPtr builtin = BuiltinPtr::dynamicCast((*q)->type()); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast((*q)->type())) + if((builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) || + ClassDeclPtr::dynamicCast((*q)->type())) { args.push_back(fixKwd((*q)->name()) + ".value"); } @@ -745,7 +747,8 @@ Slice::JavaCompatVisitor::writeMarshalUnmarshalParams(Output& out, const string& ret = op->returnType(); BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret); ClassDeclPtr cl = ClassDeclPtr::dynamicCast(ret); - returnsObject = (builtin && builtin->kind() == Builtin::KindObject) || cl; + returnsObject = (builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || cl; const bool optional = optionalMapping && op->returnIsOptional(); string retS = typeToString(ret, TypeModeReturn, package, op->getMetaData(), true, optional); @@ -889,7 +892,8 @@ Slice::JavaCompatVisitor::writeUnmarshalDataMember(Output& out, const string& pa if(needPatcher) { BuiltinPtr builtin = BuiltinPtr::dynamicCast(member->type()); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(member->type())) + if((builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) || + ClassDeclPtr::dynamicCast(member->type())) { ostringstream ostr; ostr << "new Patcher(" << patchIter++ << ')'; @@ -1000,14 +1004,15 @@ Slice::JavaCompatVisitor::writePatcher(Output& out, const string& package, const for(DataMemberList::const_iterator d = optionalMembers.begin(); d != optionalMembers.end(); ++d) { BuiltinPtr b = BuiltinPtr::dynamicCast((*d)->type()); - if(b && b->kind() != Builtin::KindObject) + if(b && b->kind() != Builtin::KindObject && b->kind() != Builtin::KindValue) { continue; } TypePtr paramType = (*d)->type(); BuiltinPtr builtin = BuiltinPtr::dynamicCast(paramType); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(paramType)) + if((builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) || + ClassDeclPtr::dynamicCast(paramType)) { if(classMembers.size() > 1) @@ -1333,7 +1338,8 @@ Slice::JavaCompatVisitor::writeDispatchAndMarshalling(Output& out, const ClassDe else { BuiltinPtr builtin = BuiltinPtr::dynamicCast(paramType); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(paramType)) + if((builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || ClassDeclPtr::dynamicCast(paramType)) { out << nl << typeS << "Holder " << paramName << " = new " << typeS << "Holder();"; } @@ -1392,7 +1398,8 @@ Slice::JavaCompatVisitor::writeDispatchAndMarshalling(Output& out, const ClassDe if(!(*pli)->optional()) { BuiltinPtr builtin = BuiltinPtr::dynamicCast(paramType); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(paramType)) + if((builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || ClassDeclPtr::dynamicCast(paramType)) { out << ".value"; } @@ -1462,7 +1469,8 @@ Slice::JavaCompatVisitor::writeDispatchAndMarshalling(Output& out, const ClassDe else { BuiltinPtr builtin = BuiltinPtr::dynamicCast(paramType); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(paramType)) + if((builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || ClassDeclPtr::dynamicCast(paramType)) { out << nl << typeS << "Holder " << paramName << " = new " << typeS << "Holder();"; } @@ -1506,7 +1514,8 @@ Slice::JavaCompatVisitor::writeDispatchAndMarshalling(Output& out, const ClassDe if(!(*pli)->optional()) { BuiltinPtr builtin = BuiltinPtr::dynamicCast(paramType); - if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(paramType)) + if((builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) || + ClassDeclPtr::dynamicCast(paramType)) { out << ".value"; } @@ -4447,7 +4456,8 @@ Slice::GenCompat::HolderVisitor::writeHolder(const TypePtr& p) string typeS = typeToString(p, TypeModeIn, getPackage(contained)); out << nl << "public final class " << name << "Holder"; - if(!p->isLocal() && ((builtin && builtin->kind() == Builtin::KindObject) || cl)) + if(!p->isLocal() && ((builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || cl)) { out << " extends " << getUnqualified("Ice.ObjectHolderBase", package) << "<" << typeS << ">"; } @@ -4455,7 +4465,8 @@ Slice::GenCompat::HolderVisitor::writeHolder(const TypePtr& p) out << " extends " << getUnqualified("Ice.Holder", package) << "<" << typeS << ">"; } out << sb; - if(!p->isLocal() && ((builtin && builtin->kind() == Builtin::KindObject) || cl)) + if(!p->isLocal() && ((builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || cl)) { out << sp << nl << "public" << nl << name << "Holder()"; out << sb; @@ -4668,7 +4679,8 @@ Slice::GenCompat::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) { BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret); if(!op->returnIsOptional() && - ((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret))) + ((builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || ClassDeclPtr::dynamicCast(ret))) { out << nl << "return ret_.value;"; } |