diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier2/Blobject.cpp | 14 | ||||
-rw-r--r-- | cpp/src/Glacier2/Blobject.h | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/ClientBlobject.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/ClientBlobject.h | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/RequestQueue.cpp | 51 | ||||
-rw-r--r-- | cpp/src/Glacier2/RequestQueue.h | 10 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServerBlobject.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServerBlobject.h | 2 | ||||
-rw-r--r-- | cpp/src/Ice/IncomingAsync.cpp | 41 | ||||
-rw-r--r-- | cpp/src/Ice/Object.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Ice/OutgoingAsync.cpp | 43 | ||||
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 16 | ||||
-rw-r--r-- | cpp/src/Slice/CPlusPlusUtil.cpp | 41 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 27 |
14 files changed, 192 insertions, 63 deletions
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp index 044ab52f9d5..3e7fa8ba5f1 100644 --- a/cpp/src/Glacier2/Blobject.cpp +++ b/cpp/src/Glacier2/Blobject.cpp @@ -101,7 +101,7 @@ Glacier2::Blobject::destroy() } void -Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amdCB, +Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePtr& amdCB, const std::pair<const Ice::Byte*, const Ice::Byte*>& inParams, const Current& current) { // @@ -300,7 +300,17 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amd ok = proxy->ice_invoke(current.operation, current.mode, inParams, outParams); } - amdCB->ice_response(ok, outParams); + pair<const Byte*, const Byte*> outPair; + if(outParams.size() == 0) + { + outPair.first = outPair.second = 0; + } + else + { + outPair.first = &outParams[0]; + outPair.second = outPair.first + outParams.size(); + } + amdCB->ice_response(ok, outPair); } catch(const LocalException& ex) { diff --git a/cpp/src/Glacier2/Blobject.h b/cpp/src/Glacier2/Blobject.h index adf9cd086da..6031fc940f1 100644 --- a/cpp/src/Glacier2/Blobject.h +++ b/cpp/src/Glacier2/Blobject.h @@ -27,7 +27,7 @@ public: protected: - void invoke(Ice::ObjectPrx&, const Ice::AMD_Object_ice_invokePtr&, + void invoke(Ice::ObjectPrx&, const Ice::AMD_Array_Object_ice_invokePtr&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); const Ice::CommunicatorPtr _communicator; diff --git a/cpp/src/Glacier2/ClientBlobject.cpp b/cpp/src/Glacier2/ClientBlobject.cpp index d02864882ac..62d0ad63b26 100644 --- a/cpp/src/Glacier2/ClientBlobject.cpp +++ b/cpp/src/Glacier2/ClientBlobject.cpp @@ -38,7 +38,7 @@ Glacier2::ClientBlobject::destroy() } void -Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB, +Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr& amdCB, const std::pair<const Byte*, const Byte*>& inParams, const Current& current) { diff --git a/cpp/src/Glacier2/ClientBlobject.h b/cpp/src/Glacier2/ClientBlobject.h index d4afcdc5f71..4d5ca99b69e 100644 --- a/cpp/src/Glacier2/ClientBlobject.h +++ b/cpp/src/Glacier2/ClientBlobject.h @@ -28,7 +28,7 @@ public: virtual void destroy(); - virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, + virtual void ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); private: diff --git a/cpp/src/Glacier2/RequestQueue.cpp b/cpp/src/Glacier2/RequestQueue.cpp index 96ee3c3ac32..1b2cc9c005b 100644 --- a/cpp/src/Glacier2/RequestQueue.cpp +++ b/cpp/src/Glacier2/RequestQueue.cpp @@ -25,11 +25,11 @@ namespace Glacier2 // responsible for sending back the response. It's necessary because // sending back the response might block. // -class AMI_Object_ice_invokeI : public AMI_Object_ice_invoke +class AMI_Array_Object_ice_invokeI : public AMI_Array_Object_ice_invoke { public: - AMI_Object_ice_invokeI(const RequestQueuePtr& requestQueue, const AMD_Object_ice_invokePtr& amdCB) : + AMI_Array_Object_ice_invokeI(const RequestQueuePtr& requestQueue, const AMD_Array_Object_ice_invokePtr& amdCB) : _requestQueue(requestQueue), _amdCB(amdCB) { @@ -37,7 +37,7 @@ public: } virtual void - ice_response(bool ok, const std::vector<Byte>& outParams) + ice_response(bool ok, const pair<const Byte*, const Byte*>& outParams) { _requestQueue->addResponse(new Response(_amdCB, ok, outParams)); } @@ -51,13 +51,13 @@ public: private: const RequestQueuePtr _requestQueue; - const AMD_Object_ice_invokePtr _amdCB; + const AMD_Array_Object_ice_invokePtr _amdCB; }; } Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, const Byte*>& inParams, - const Current& current, bool forwardContext, const AMD_Object_ice_invokePtr& amdCB) : + const Current& current, bool forwardContext, const AMD_Array_Object_ice_invokePtr& amdCB) : _proxy(proxy), _inParams(inParams.first, inParams.second), _current(current), @@ -71,7 +71,7 @@ Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, if(!_proxy->ice_isTwoway()) { bool ok = true; - ByteSeq outParams; + pair<const Byte*, const Byte*> outParams(0, 0); _amdCB->ice_response(ok, outParams); } @@ -86,16 +86,26 @@ Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, bool Glacier2::Request::invoke(const RequestQueuePtr& requestQueue) { + pair<const Byte*, const Byte*> inPair; + if(_inParams.size() == 0) + { + inPair.first = inPair.second = 0; + } + else + { + inPair.first = &_inParams[0]; + inPair.second = inPair.first + _inParams.size(); + } if(_proxy->ice_isTwoway()) { - AMI_Object_ice_invokePtr cb = new AMI_Object_ice_invokeI(requestQueue, _amdCB); + AMI_Array_Object_ice_invokePtr cb = new AMI_Array_Object_ice_invokeI(requestQueue, _amdCB); if(_forwardContext) { - _proxy->ice_invoke_async(cb, _current.operation, _current.mode, _inParams, _current.ctx); + _proxy->ice_invoke_async(cb, _current.operation, _current.mode, inPair, _current.ctx); } else { - _proxy->ice_invoke_async(cb, _current.operation, _current.mode, _inParams); + _proxy->ice_invoke_async(cb, _current.operation, _current.mode, inPair); } return true; // A twoway method is being dispatched. } @@ -106,11 +116,11 @@ Glacier2::Request::invoke(const RequestQueuePtr& requestQueue) ByteSeq outParams; if(_forwardContext) { - _proxy->ice_invoke(_current.operation, _current.mode, _inParams, outParams, _current.ctx); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _current.ctx); } else { - _proxy->ice_invoke(_current.operation, _current.mode, _inParams, outParams); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams); } } catch(const LocalException&) @@ -163,14 +173,15 @@ Glacier2::Request::getConnection() const return _proxy->ice_connection(); } -Glacier2::Response::Response(const AMD_Object_ice_invokePtr& amdCB, bool ok, const ByteSeq& outParams) : +Glacier2::Response::Response(const AMD_Array_Object_ice_invokePtr& amdCB, bool ok, + const pair<const Byte*, const Byte*>& outParams) : _amdCB(amdCB), _ok(ok), - _outParams(outParams) + _outParams(outParams.first, outParams.second) { } -Glacier2::Response::Response(const AMD_Object_ice_invokePtr& amdCB, const Exception& ex) : +Glacier2::Response::Response(const AMD_Array_Object_ice_invokePtr& amdCB, const Exception& ex) : _amdCB(amdCB), _ok(false), _exception(ex.ice_clone()) @@ -186,7 +197,17 @@ Glacier2::Response::invoke() } else { - _amdCB->ice_response(_ok, _outParams); + pair<const Byte*, const Byte*> outPair; + if(_outParams.size() == 0) + { + outPair.first = outPair.second = 0; + } + else + { + outPair.first = &_outParams[0]; + outPair.second = outPair.first + _outParams.size(); + } + _amdCB->ice_response(_ok, outPair); } } diff --git a/cpp/src/Glacier2/RequestQueue.h b/cpp/src/Glacier2/RequestQueue.h index 68e32ae95ec..2404ef61689 100644 --- a/cpp/src/Glacier2/RequestQueue.h +++ b/cpp/src/Glacier2/RequestQueue.h @@ -28,7 +28,7 @@ class Request : public IceUtil::Shared public: Request(const Ice::ObjectPrx&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&, bool, - const Ice::AMD_Object_ice_invokePtr&); + const Ice::AMD_Array_Object_ice_invokePtr&); bool invoke(const RequestQueuePtr&); bool override(const RequestPtr&) const; @@ -42,21 +42,21 @@ private: const Ice::Current _current; const bool _forwardContext; const std::string _override; - const Ice::AMD_Object_ice_invokePtr _amdCB; + const Ice::AMD_Array_Object_ice_invokePtr _amdCB; }; class Response : public IceUtil::Shared { public: - Response(const Ice::AMD_Object_ice_invokePtr&, bool, const Ice::ByteSeq&); - Response(const Ice::AMD_Object_ice_invokePtr&, const Ice::Exception&); + Response(const Ice::AMD_Array_Object_ice_invokePtr&, bool, const std::pair<const Ice::Byte*, const Ice::Byte*>&); + Response(const Ice::AMD_Array_Object_ice_invokePtr&, const Ice::Exception&); void invoke(); private: - const Ice::AMD_Object_ice_invokePtr _amdCB; + const Ice::AMD_Array_Object_ice_invokePtr _amdCB; const bool _ok; const Ice::ByteSeq _outParams; const std::auto_ptr<Ice::Exception> _exception; diff --git a/cpp/src/Glacier2/ServerBlobject.cpp b/cpp/src/Glacier2/ServerBlobject.cpp index 9a90f6822f5..9ab9dd0e61a 100644 --- a/cpp/src/Glacier2/ServerBlobject.cpp +++ b/cpp/src/Glacier2/ServerBlobject.cpp @@ -33,7 +33,7 @@ Glacier2::ServerBlobject::destroy() } void -Glacier2::ServerBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB, +Glacier2::ServerBlobject::ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr& amdCB, const std::pair<const Byte*, const Byte*>& inParams, const Current& current) { diff --git a/cpp/src/Glacier2/ServerBlobject.h b/cpp/src/Glacier2/ServerBlobject.h index 3f8e175a4af..9f6fe6b656a 100644 --- a/cpp/src/Glacier2/ServerBlobject.h +++ b/cpp/src/Glacier2/ServerBlobject.h @@ -27,7 +27,7 @@ public: virtual void destroy(); - virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, + virtual void ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); private: diff --git a/cpp/src/Ice/IncomingAsync.cpp b/cpp/src/Ice/IncomingAsync.cpp index 42d8cb9cf54..1874e71bd57 100644 --- a/cpp/src/Ice/IncomingAsync.cpp +++ b/cpp/src/Ice/IncomingAsync.cpp @@ -26,6 +26,9 @@ void IceInternal::decRef(IncomingAsync* p) { p->__decRef(); } void IceInternal::incRef(AMD_Object_ice_invoke* p) { p->__incRef(); } void IceInternal::decRef(AMD_Object_ice_invoke* p) { p->__decRef(); } +void IceInternal::incRef(AMD_Array_Object_ice_invoke* p) { p->__incRef(); } +void IceInternal::decRef(AMD_Array_Object_ice_invoke* p) { p->__decRef(); } + IceInternal::IncomingAsync::IncomingAsync(Incoming& in) : IncomingBase(in), _instanceCopy(_os.instance()), @@ -428,3 +431,41 @@ IceAsync::Ice::AMD_Object_ice_invoke::ice_exception() { __exception(); } + +IceAsync::Ice::AMD_Array_Object_ice_invoke::AMD_Array_Object_ice_invoke(Incoming& in) : + IncomingAsync(in) +{ +} + +void +IceAsync::Ice::AMD_Array_Object_ice_invoke::ice_response(bool ok, const pair<const Byte*, const Byte*>& outParams) +{ + try + { + __os()->writeBlob(outParams.first, static_cast<Int>(outParams.second - outParams.first)); + } + catch(const LocalException& ex) + { + __exception(ex); + return; + } + __response(ok); +} + +void +IceAsync::Ice::AMD_Array_Object_ice_invoke::ice_exception(const Exception& ex) +{ + __exception(ex); +} + +void +IceAsync::Ice::AMD_Array_Object_ice_invoke::ice_exception(const std::exception& ex) +{ + __exception(ex); +} + +void +IceAsync::Ice::AMD_Array_Object_ice_invoke::ice_exception() +{ + __exception(); +} diff --git a/cpp/src/Ice/Object.cpp b/cpp/src/Ice/Object.cpp index 0b5ce8a9ff2..29b178d352d 100644 --- a/cpp/src/Ice/Object.cpp +++ b/cpp/src/Ice/Object.cpp @@ -351,7 +351,7 @@ Ice::BlobjectArrayAsync::__dispatch(Incoming& in, const Current& current) Int sz = in.is()->getReadEncapsSize(); in.is()->readBlob(inParams.first, sz); inParams.second = inParams.first + sz; - AMD_Object_ice_invokePtr cb = new ::IceAsync::Ice::AMD_Object_ice_invoke(in); + AMD_Array_Object_ice_invokePtr cb = new ::IceAsync::Ice::AMD_Array_Object_ice_invoke(in); try { ice_invoke_async(cb, inParams, current); diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp index 784cc6ca356..024c1f13764 100644 --- a/cpp/src/Ice/OutgoingAsync.cpp +++ b/cpp/src/Ice/OutgoingAsync.cpp @@ -31,6 +31,9 @@ void IceInternal::decRef(OutgoingAsync* p) { p->__decRef(); } void IceInternal::incRef(AMI_Object_ice_invoke* p) { p->__incRef(); } void IceInternal::decRef(AMI_Object_ice_invoke* p) { p->__decRef(); } +void IceInternal::incRef(AMI_Array_Object_ice_invoke* p) { p->__incRef(); } +void IceInternal::decRef(AMI_Array_Object_ice_invoke* p) { p->__decRef(); } + IceInternal::OutgoingAsync::OutgoingAsync() : __is(0), __os(0) @@ -417,12 +420,12 @@ IceInternal::OutgoingAsync::cleanup() void Ice::AMI_Object_ice_invoke::__invoke(const ObjectPrx& prx, const string& operation, OperationMode mode, - const pair<const Byte*, const Byte*>& inParams, const Context& context) + const vector<Byte>& inParams, const Context& context) { try { __prepare(prx, operation, mode, context); - __os->writeBlob(inParams.first, static_cast<Int>(inParams.second - inParams.first)); + __os->writeBlob(inParams); __os->endWriteEncaps(); } catch(const LocalException& ex) @@ -449,3 +452,39 @@ Ice::AMI_Object_ice_invoke::__response(bool ok) // ok == true means no user exce } ice_response(ok, outParams); } + +void +Ice::AMI_Array_Object_ice_invoke::__invoke(const ObjectPrx& prx, const string& operation, OperationMode mode, + const pair<const Byte*, const Byte*>& inParams, const Context& context) +{ + try + { + __prepare(prx, operation, mode, context); + __os->writeBlob(inParams.first, static_cast<Int>(inParams.second - inParams.first)); + __os->endWriteEncaps(); + } + catch(const LocalException& ex) + { + __finished(ex); + return; + } + __send(); +} + +void +Ice::AMI_Array_Object_ice_invoke::__response(bool ok) // ok == true means no user exception. +{ + pair<const Byte*, const Byte*> outParams; + try + { + Int sz = __is->getReadEncapsSize(); + __is->readBlob(outParams.first, sz); + outParams.second = outParams.first + sz; + } + catch(const LocalException& ex) + { + __finished(ex); + return; + } + ice_response(ok, outParams); +} diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index 37951c6a898..571058bc2dc 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -349,21 +349,11 @@ IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, const vector<Byte>& inParams, const Context& context) { - pair<const Byte*, const Byte*> inPair; - if(inParams.size() == 0) - { - inPair.first = inPair.second = 0; - } - else - { - inPair.first = &inParams[0]; - inPair.second = inPair.first + inParams.size(); - } - ice_invoke_async(cb, operation, mode, inPair, context); + cb->__invoke(this, operation, mode, inParams, context); } void -IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, +IceProxy::Ice::Object::ice_invoke_async(const AMI_Array_Object_ice_invokePtr& cb, const string& operation, OperationMode mode, const pair<const Byte*, const Byte*>& inParams) @@ -372,7 +362,7 @@ IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, } void -IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, +IceProxy::Ice::Object::ice_invoke_async(const AMI_Array_Object_ice_invokePtr& cb, const string& operation, OperationMode mode, const pair<const Byte*, const Byte*>& inParams, diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp index 66cead140c3..d3f368c6817 100644 --- a/cpp/src/Slice/CPlusPlusUtil.cpp +++ b/cpp/src/Slice/CPlusPlusUtil.cpp @@ -236,7 +236,7 @@ Slice::returnTypeToString(const TypePtr& type, const StringList& metaData) } string -Slice::inputTypeToString(const TypePtr& type, const StringList& metaData) +Slice::inputTypeToString(const TypePtr& type, const StringList& metaData, bool allowArray) { static const char* inputBuiltinTable[] = { @@ -283,28 +283,43 @@ Slice::inputTypeToString(const TypePtr& type, const StringList& metaData) string seqType = findMetaData(metaData, true); if(!seqType.empty()) { + if(seqType == "array" || seqType == "range:array") { - TypePtr elemType = seq->type(); - string s = typeToString(elemType); - return "const ::std::pair<const " + s + "*, const " + s + "*>&"; + if(allowArray) + { + TypePtr elemType = seq->type(); + string s = typeToString(elemType); + return "const ::std::pair<const " + s + "*, const " + s + "*>&"; + } + else + { + return "const " + fixKwd(seq->scoped()) + "&"; + } } else if(seqType.find("range") == 0) { - string s; - if(seqType.find("range:") == 0) + if(allowArray) { - s = seqType.substr(strlen("range:")); + string s; + if(seqType.find("range:") == 0) + { + s = seqType.substr(strlen("range:")); + } + else + { + s = fixKwd(seq->scoped()); + } + if(s[0] == ':') + { + s = " " + s; + } + return "const ::std::pair<" + s + "::const_iterator, " + s + "::const_iterator>&"; } else { - s = fixKwd(seq->scoped()); - } - if(s[0] == ':') - { - s = " " + s; + return "const " + fixKwd(seq->scoped()) + "&"; } - return "const ::std::pair<" + s + "::const_iterator, " + s + "::const_iterator>&"; } else { diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index d4a7f5394e7..2b7ea158304 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -4327,6 +4327,7 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) string proxyName = classScope + className + "Prx"; vector<string> params; + vector<string> paramsAMD; vector<string> paramsDecl; vector<string> args; @@ -4342,6 +4343,7 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) if(ret) { params.push_back(retS); + paramsAMD.push_back(inputTypeToString(ret, p->getMetaData(), false)); paramsDecl.push_back(retS + " __ret"); args.push_back("__ret"); } @@ -4358,6 +4360,7 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) if((*q)->isOutParam()) { params.push_back(typeString); + paramsAMD.push_back(inputTypeToString(type, (*q)->getMetaData(), false)); paramsDecl.push_back(typeString + ' ' + paramName); args.push_back(paramName); @@ -4425,7 +4428,7 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) C << sp << nl << "void" << nl << classScopedAMI.substr(2) << '_' << name << "::__response(bool __ok)"; C << sb; - writeAllocateCode(C, outParams, ret, p->getMetaData()); + writeAllocateCode(C, outParams, ret, p->getMetaData(), true); C << nl << "try"; C << sb; C << nl << "if(!__ok)"; @@ -4461,7 +4464,11 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) C << eb; C << eb; - writeUnmarshalCode(C, outParams, ret, p->getMetaData()); + writeUnmarshalCode(C, outParams, 0, StringList(), true); + if(ret) + { + writeMarshalUnmarshalCode(C, ret, "__ret", false, "", true, p->getMetaData(), true); + } if(p->returnsClasses()) { C << nl << "__is->readPendingObjects();"; @@ -4485,7 +4492,7 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) H << nl << "public:"; H.inc(); H << sp; - H << nl << "virtual void ice_response" << spar << params << epar << " = 0;"; + H << nl << "virtual void ice_response" << spar << paramsAMD << epar << " = 0;"; H << nl << "virtual void ice_exception(const ::Ice::Exception&) = 0;"; H << nl << "virtual void ice_exception(const ::std::exception&) = 0;"; H << nl << "virtual void ice_exception() = 0;"; @@ -4578,7 +4585,7 @@ Slice::Gen::AsyncImplVisitor::visitOperation(const OperationPtr& p) #endif TypePtr ret = p->returnType(); - string retS = inputTypeToString(ret, p->getMetaData()); + string retS = inputTypeToString(ret, p->getMetaData(), false); if(ret) { @@ -4597,7 +4604,7 @@ Slice::Gen::AsyncImplVisitor::visitOperation(const OperationPtr& p) { string paramName = fixKwd((*q)->name()); TypePtr type = (*q)->type(); - string typeString = inputTypeToString(type, (*q)->getMetaData()); + string typeString = inputTypeToString(type, (*q)->getMetaData(), false); if(ret || !outParams.empty()) { @@ -4800,6 +4807,12 @@ Slice::Gen::MetaDataVisitor::visitStructEnd(const StructPtr&) void Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p) { + bool ami = false; + ClassDefPtr cl = ClassDefPtr::dynamicCast(p->container()); + if(cl->hasMetaData("ami") || p->hasMetaData("ami")) + { + ami = true; + } StringList metaData = p->getMetaData(); TypePtr returnType = p->returnType(); if(!metaData.empty()) @@ -4818,7 +4831,7 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p) } else { - validate(returnType, metaData, p->definitionContext()->filename(), p->line(), false); + validate(returnType, metaData, p->definitionContext()->filename(), p->line(), ami); } } @@ -4826,7 +4839,7 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p) for(ParamDeclList::iterator q = params.begin(); q != params.end(); ++q) { validate((*q)->type(), (*q)->getMetaData(), p->definitionContext()->filename(), (*q)->line(), - !(*q)->isOutParam()); + ami || !(*q)->isOutParam()); } } |