THRIFT-3654 incorrect serialization of optionals

Client: Haxe
Patch: Jens Geyer
This commit is contained in:
Jens Geyer 2016-02-21 15:14:41 +01:00
parent b72bb94a82
commit a2e74465d4

View File

@ -978,6 +978,11 @@ void t_haxe_generator::generate_haxe_struct_writer(ofstream& out, t_struct* tstr
indent(out) << "oprot.writeStructBegin(STRUCT_DESC);" << endl;
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
bool could_be_unset = (*f_iter)->get_req() == t_field::T_OPTIONAL;
if (could_be_unset) {
indent(out) << "if (" << generate_isset_check(*f_iter) << ") {" << endl;
indent_up();
}
bool null_allowed = type_can_be_null((*f_iter)->get_type());
if (null_allowed) {
out << indent() << "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
@ -997,6 +1002,10 @@ void t_haxe_generator::generate_haxe_struct_writer(ofstream& out, t_struct* tstr
indent_down();
indent(out) << "}" << endl;
}
if (could_be_unset) {
indent_down();
indent(out) << "}" << endl;
}
}
indent(out) << "oprot.writeFieldStop();" << endl;