diff options
author | Michi Henning <michi@zeroc.com> | 2003-05-22 02:19:38 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2003-05-22 02:19:38 +0000 |
commit | 8eb8c7cd269856866fd93de019cb03eaf91797b5 (patch) | |
tree | 165fd1acfe6c5a2d651ae7ac763e1601980b0f54 /cpp/src/slice2java/Gen.cpp | |
parent | Updated ThirdParty installers (diff) | |
download | ice-8eb8c7cd269856866fd93de019cb03eaf91797b5.tar.bz2 ice-8eb8c7cd269856866fd93de019cb03eaf91797b5.tar.xz ice-8eb8c7cd269856866fd93de019cb03eaf91797b5.zip |
Fixed code generation bug for ice_response with AMI class parameters.
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index a68905eb785..88295a2bd1e 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -184,6 +184,11 @@ Slice::JavaVisitor::getArgsAsyncCB(const OperationPtr& op) if(ret) { args += "__ret"; + BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret); + if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret)) + { + args += ".value"; + } } ParamDeclList paramList = op->parameters(); for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q) @@ -195,6 +200,11 @@ Slice::JavaVisitor::getArgsAsyncCB(const OperationPtr& op) args += ", "; } args += fixKwd((*q)->name()); + BuiltinPtr builtin = BuiltinPtr::dynamicCast((*q)->type()); + if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast((*q)->type())) + { + args += ".value"; + } } } return args; @@ -4187,12 +4197,28 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) for(q = outParams.begin(); q != outParams.end(); ++q) { string typeS = typeToString(q->first, TypeModeIn, classScope); - out << nl << typeS << ' ' << fixKwd(q->second) << ';'; + BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->first); + if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(q->first)) + { + out << nl << typeS << "Holder " << fixKwd(q->second) << " = new " << typeS << "Holder();"; + } + else + { + out << nl << typeS << ' ' << fixKwd(q->second) << ";"; + } } if(ret) { string retS = typeToString(ret, TypeModeIn, classScope); - out << nl << retS << " __ret;"; + BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret); + if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret)) + { + out << nl << retS << "Holder __ret = new " << retS << "Holder();"; + } + else + { + out << nl << retS << " __ret;"; + } } out << nl << "try"; out << sb; @@ -4227,11 +4253,27 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) out << eb; for(q = outParams.begin(); q != outParams.end(); ++q) { - writeMarshalUnmarshalCode(out, classScope, q->first, fixKwd(q->second), false, iter); + BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->first); + if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(q->first)) + { + out << nl << "__is.readObject(" << fixKwd(q->second) << ".getPatcher());"; + } + else + { + writeMarshalUnmarshalCode(out, classScope, q->first, fixKwd(q->second), false, iter); + } } if(ret) { - writeMarshalUnmarshalCode(out, classScope, ret, "__ret", false, iter); + BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret); + if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret)) + { + out << nl << "__is.readObject(__ret.getPatcher());"; + } + else + { + writeMarshalUnmarshalCode(out, classScope, ret, "__ret", false, iter); + } } if(p->returnsClasses()) { |