Repository: thrift Updated Branches: refs/heads/master 80a44f84f -> 7ca13f550
THRIFT-2526 Assignment operators and copy constructors in c++ don't copy the __isset struct Client: cpp Patch: Doug Judd Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/7ca13f55 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/7ca13f55 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/7ca13f55 Branch: refs/heads/master Commit: 7ca13f5507af5c67e0e93a2774f2b122374e0276 Parents: 80a44f8 Author: Roger Meier <[email protected]> Authored: Thu May 29 22:40:32 2014 +0200 Committer: Roger Meier <[email protected]> Committed: Thu May 29 22:40:32 2014 +0200 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_cpp_generator.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/7ca13f55/compiler/cpp/src/generate/t_cpp_generator.cc ---------------------------------------------------------------------- diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index f985492..771af46 100755 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -831,11 +831,17 @@ void t_cpp_generator::generate_copy_constructor( const vector<t_field*>& members = tstruct->get_members(); vector<t_field*>::const_iterator f_iter; + bool has_nonrequired_fields = false; for (f_iter = members.begin(); f_iter != members.end(); ++f_iter) { + if ((*f_iter)->get_req() != t_field::T_REQUIRED) + has_nonrequired_fields = true; indent(out) << (*f_iter)->get_name() << " = " << tmp_name << "." << (*f_iter)->get_name() << ";" << endl; } + if (has_nonrequired_fields) + indent(out) << "__isset = " << tmp_name << ".__isset;" << endl; + indent_down(); indent(out) << "}" << endl; } @@ -852,10 +858,15 @@ void t_cpp_generator::generate_assignment_operator( const vector<t_field*>& members = tstruct->get_members(); vector<t_field*>::const_iterator f_iter; + bool has_nonrequired_fields = false; for (f_iter = members.begin(); f_iter != members.end(); ++f_iter) { + if ((*f_iter)->get_req() != t_field::T_REQUIRED) + has_nonrequired_fields = true; indent(out) << (*f_iter)->get_name() << " = " << tmp_name << "." << (*f_iter)->get_name() << ";" << endl; } + if (has_nonrequired_fields) + indent(out) << "__isset = " << tmp_name << ".__isset;" << endl; indent(out) << "return *this;" << endl; indent_down();
