diff options
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/Slice/CsUtil.cpp | 4 | ||||
-rwxr-xr-x | cpp/src/Slice/VbUtil.cpp | 6 | ||||
-rwxr-xr-x | cpp/src/slice2cs/Gen.cpp | 12 |
3 files changed, 19 insertions, 3 deletions
diff --git a/cpp/src/Slice/CsUtil.cpp b/cpp/src/Slice/CsUtil.cpp index 7e7c8962731..b956e983d24 100755 --- a/cpp/src/Slice/CsUtil.cpp +++ b/cpp/src/Slice/CsUtil.cpp @@ -777,6 +777,10 @@ Slice::CsGenerator::writeSequenceMarshalUnmarshalCode(Output& out, out << sb; if(isArray) { + if(st->hasMetaData("cs:class")) + { + out << nl << param << "[__ix] = new " << typeS << "();"; + } out << nl << param << "[__ix].__read(" << stream << ");"; } else diff --git a/cpp/src/Slice/VbUtil.cpp b/cpp/src/Slice/VbUtil.cpp index 0ee820a4ca4..40e973fba18 100755 --- a/cpp/src/Slice/VbUtil.cpp +++ b/cpp/src/Slice/VbUtil.cpp @@ -815,7 +815,11 @@ Slice::VbGenerator::writeSequenceMarshalUnmarshalCode(Output& out, out.inc(); if(isArray) { - out << nl << param << "(__ix).__read(" << stream << ")"; + if(st->hasMetaData("vb:class")) + { + out << nl << param << "(__ix) = New " << typeS; + } + out << nl << param << "(__ix).__read(" << stream << ")"; } else { diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index a43a89b1286..85b9091c726 100755 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -2174,7 +2174,16 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) _out << sp << nl << "#endregion"; // Slice data members + bool isClass = p->hasMetaData("cs:class"); + _out << sp << nl << "#region Constructor"; + if(isClass) + { + _out << "s"; + _out << sp << nl << "public " << name << "()"; + _out << sb; + _out << eb; + } _out << sp << nl << "public " << name << spar; vector<string> paramDecl; @@ -2192,7 +2201,6 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) { _out << nl << "this." << *i << " = " << *i << ';'; } - bool isClass = p->hasMetaData("cs:class"); bool patchStruct = !isClass && classMembers.size() != 0; if(!p->isLocal() && patchStruct) { @@ -2200,7 +2208,7 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) } _out << eb; - _out << sp << nl << "#endregion"; // Constructor + _out << sp << nl << "#endregion"; // Constructor(s) if(isClass) { |