summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2003-05-22 02:19:38 +0000
committerMichi Henning <michi@zeroc.com>2003-05-22 02:19:38 +0000
commit8eb8c7cd269856866fd93de019cb03eaf91797b5 (patch)
tree165fd1acfe6c5a2d651ae7ac763e1601980b0f54 /cpp/src/slice2java/Gen.cpp
parentUpdated ThirdParty installers (diff)
downloadice-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.cpp50
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())
{