Repository: thrift Updated Branches: refs/heads/master 8e73137c2 -> 12d430e72
THRIFT-2955 Using list of typedefs does not compile on Go Client: Go Patch: Johannes Martinsson <[email protected]> Be explicit about when to use true type. Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/12d430e7 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/12d430e7 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/12d430e7 Branch: refs/heads/master Commit: 12d430e723b020f7a8ce42a40c19edf88f948367 Parents: 8e73137 Author: Jens Geyer <[email protected]> Authored: Tue Feb 3 22:03:34 2015 +0100 Committer: Jens Geyer <[email protected]> Committed: Tue Feb 3 22:34:41 2015 +0100 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_go_generator.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/12d430e7/compiler/cpp/src/generate/t_go_generator.cc ---------------------------------------------------------------------- diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc index c3cca60..0ca4946 100644 --- a/compiler/cpp/src/generate/t_go_generator.cc +++ b/compiler/cpp/src/generate/t_go_generator.cc @@ -167,7 +167,8 @@ public: bool inclass = false, bool coerceData = false, bool inkey = false, - bool in_container = false); + bool in_container = false + bool use_true_type = false); void generate_deserialize_struct(std::ofstream& out, t_struct* tstruct, @@ -2580,7 +2581,8 @@ void t_go_generator::generate_deserialize_field(ofstream& out, bool inclass, bool coerceData, bool inkey, - bool in_container_value) { + bool in_container_value, + bool use_true_type) { (void)inclass; (void)coerceData; t_type* orig_type = tfield->get_type(); @@ -2602,8 +2604,12 @@ void t_go_generator::generate_deserialize_field(ofstream& out, } else if (type->is_base_type() || type->is_enum()) { if (declare) { - string type_name = inkey ? type_to_go_key_type(tfield->get_type()) - : type_to_go_type(tfield->get_type()); + t_type* actual_type = use_true_type ? tfield->get_type()->get_true_type() + : tfield->get_type(); + + string type_name = inkey ? type_to_go_key_type(actual_type) + : type_to_go_type(actual_type); + out << "var " << tfield->get_name() << " " << type_name << endl; } @@ -2664,7 +2670,7 @@ void t_go_generator::generate_deserialize_field(ofstream& out, out << "} else {" << endl; string wrap; - if (type->is_enum() || orig_type->is_typedef()) { + if (type->is_enum() || (orig_type->is_typedef() && !use_true_type)) { wrap = publicize(type_name(orig_type)); } else if (((t_base_type*)type)->get_base() == t_base_type::TYPE_BYTE) { wrap = "int8"; @@ -2812,7 +2818,7 @@ void t_go_generator::generate_deserialize_set_element(ofstream& out, string elem = tmp("_elem"); t_field felem(tset->get_elem_type(), elem); felem.set_req(t_field::T_OPT_IN_REQ_OUT); - generate_deserialize_field(out, &felem, true, ""); + generate_deserialize_field(out, &felem, true, "", false, false, false, true, true); indent(out) << prefix << "[" << elem << "] = true" << endl; } @@ -2827,7 +2833,7 @@ void t_go_generator::generate_deserialize_list_element(ofstream& out, string elem = tmp("_elem"); t_field felem(((t_list*)tlist)->get_elem_type(), elem); felem.set_req(t_field::T_OPT_IN_REQ_OUT); - generate_deserialize_field(out, &felem, true, "", false, false, false, true); + generate_deserialize_field(out, &felem, true, "", false, false, false, true, true); indent(out) << prefix << " = append(" << prefix << ", " << elem << ")" << endl; }
