From 3f55b1c64c52a5f55871f62b3d7625f9e869b707 Mon Sep 17 00:00:00 2001 From: Michi Henning Date: Thu, 20 Mar 2003 06:00:00 +0000 Subject: Fixed unmarshaling side for classes that have a member that is only forward declared, but not defined. --- cpp/src/slice2cpp/Gen.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'cpp/src/slice2cpp/Gen.cpp') diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index e478ca79e59..ef0ae358582 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -2251,6 +2251,15 @@ Slice::Gen::ObjectVisitor::visitClassDefEnd(const ClassDefPtr& p) emitClassBase(base, "__read(__is)"); C << eb; + C << sp; + C << nl << "void" << nl << scope.substr(2) << "__read(::IceInternal::BasicStream* __is, " + << "const ::std::string& __st, const ::Ice::ObjectFactoryPtr& __f, " << scoped << "Ptr& v)"; + C << sb; + C << nl << "::Ice::ObjectPtr __obj;"; + C << nl << "__is->read(__st, __f, __obj);"; + C << nl << "v = " << scoped << "Ptr::dynamicCast(__obj);"; + C << eb; + C << sp; C << nl << "void" << nl << scoped.substr(2) << "::__marshal(const ::Ice::StreamPtr& __os) const"; @@ -2266,6 +2275,16 @@ Slice::Gen::ObjectVisitor::visitClassDefEnd(const ClassDefPtr& p) writeGenericUnmarshalCode(C, memberList, 0); C << eb; + C << sp; + C << nl << "void" << nl << scope.substr(2) << "__readObject(const ::Ice::StreamPtr& __is, " + << "const ::std::string& __n, const ::std::string& __st, const ::Ice::ObjectFactoryPtr& __f, " + << scoped << "Ptr& v)"; + C << sb; + C << nl << "::Ice::ObjectPtr __obj;"; + C << nl << "__obj = __is->readObject(__n, __st, __f);"; + C << nl << "v = " << scoped << "Ptr::dynamicCast(__obj);"; + C << eb; + C << sp; C << nl << "void" << nl << scoped.substr(2) << "::ice_unmarshal(const ::std::string& __name, " << "const ::Ice::StreamPtr& __is, " << scoped << "Ptr& value)"; @@ -2804,8 +2823,12 @@ Slice::Gen::HandleVisitor::visitClassDecl(const ClassDeclPtr& p) H << nl << _dllExport << "void __write(::IceInternal::BasicStream*, const " << name << "Prx&);"; H << nl << _dllExport << "void __read(::IceInternal::BasicStream*, " << name << "Prx&);"; H << nl << _dllExport << "void __write(::IceInternal::BasicStream*, const " << name << "Ptr&);"; + H << nl << _dllExport << "void __read(::IceInternal::BasicStream*, const ::std::string&, " + << "const ::Ice::ObjectFactoryPtr&, " << name << "Ptr&);"; H << nl << _dllExport << "void __writeObject(const ::Ice::StreamPtr&, const ::std::string&, const " << name << "Ptr&);"; + H << nl << _dllExport << "void __readObject(const ::Ice::StreamPtr&, const ::std::string&, " + << "const ::std::string&, const ::Ice::ObjectFactoryPtr&, " << name << "Ptr&);"; H << sp; H << nl << _dllExport << "void ice_marshal(const ::std::string&, const ::Ice::StreamPtr&, const " -- cgit v1.2.3