diff options
author | Jose <pepone@users.noreply.github.com> | 2021-01-08 23:44:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-08 23:44:50 +0100 |
commit | 4419db6dc600b41141c23ede1c6895cbc898e819 (patch) | |
tree | fbb5b3769febe09a7caeb9e709480401515ba684 /cpp/src | |
parent | Fix Bogus name for metrics Request Id field - Close #906 (diff) | |
download | ice-4419db6dc600b41141c23ede1c6895cbc898e819.tar.bz2 ice-4419db6dc600b41141c23ede1c6895cbc898e819.tar.xz ice-4419db6dc600b41141c23ede1c6895cbc898e819.zip |
Fix C# marshal/unmarshal of optional data members (#1232)
See #889
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2cs/Gen.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index 8f0d9d888d6..cbe3518cb94 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -3004,8 +3004,17 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) _out << nl << "ostr_.startSlice(\"" << scoped << "\", -1, " << (!base ? "true" : "false") << ");"; for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q) { + if(!(*q)->optional()) + { + writeMarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns); + } + } + + for(DataMemberList::const_iterator q = optionalMembers.begin(); q != optionalMembers.end(); ++q) + { writeMarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns); } + _out << nl << "ostr_.endSlice();"; if(base) { @@ -3021,6 +3030,14 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q) { + if(!(*q)->optional()) + { + writeUnmarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns); + } + } + + for(DataMemberList::const_iterator q = optionalMembers.begin(); q != optionalMembers.end(); ++q) + { writeUnmarshalDataMember(*q, fixId((*q)->name(), DotNet::Exception), ns); } _out << nl << "istr_.endSlice();"; |