From: Kevin Clark Date: Tue, 24 Mar 2009 14:51:51 +0000 (+0000) Subject: THRIFT-398. hs: Remove unnecessary parens from generated type annotations X-Git-Tag: 0.2.0~232 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=38c8b5b92a45d050e235b2231a25ce7c13cd4361;p=common%2Fthrift.git THRIFT-398. hs: Remove unnecessary parens from generated type annotations Author: Spiridon Eliopoulos git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@757825 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_hs_generator.cc b/compiler/cpp/src/generate/t_hs_generator.cc index 2dca6823..91a72044 100644 --- a/compiler/cpp/src/generate/t_hs_generator.cc +++ b/compiler/cpp/src/generate/t_hs_generator.cc @@ -130,7 +130,7 @@ class t_hs_generator : public t_oop_generator { std::string type_name(t_type* ttype); std::string function_type(t_function* tfunc, bool options = false, bool io = false, bool method = false); std::string type_to_enum(t_type* ttype); - std::string render_hs_type(t_type* type); + std::string render_hs_type(t_type* type, bool needs_parens = true); private: @@ -217,7 +217,7 @@ void t_hs_generator::close_generator() { */ void t_hs_generator::generate_typedef(t_typedef* ttypedef) { f_types_ << - indent() << "type "<< capitalize(ttypedef->get_symbolic()) << " = " << render_hs_type(ttypedef->get_type()) << endl << endl; + indent() << "type "<< capitalize(ttypedef->get_symbolic()) << " = " << render_hs_type(ttypedef->get_type(), false) << endl << endl; } /** @@ -463,7 +463,7 @@ void t_hs_generator::generate_hs_struct_definition(ofstream& out, else out << ","; string mname = (*m_iter)->get_name(); - out << "f_" << tname << "_" << mname << " :: Maybe (" << render_hs_type((*m_iter)->get_type()) << ")"; + out << "f_" << tname << "_" << mname << " :: Maybe " << render_hs_type((*m_iter)->get_type()); } out << "}"; } @@ -1301,19 +1301,15 @@ string t_hs_generator::function_type(t_function* tfunc, bool options, bool io, b const vector& fields = tfunc->get_arglist()->get_members(); vector::const_iterator f_iter; for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) { - if(options) - result += "Maybe ("; - result += render_hs_type((*f_iter)->get_type()); - if(options) - result+=")"; + if(options) result += "Maybe "; + result += render_hs_type((*f_iter)->get_type(), options); result += " -> "; } if(fields.empty() && !method){ result += "() -> "; } - if(io) result += "IO ("; - result += render_hs_type(tfunc->get_returntype()); - if(io) result += ")"; + if(io) result += "IO "; + result += render_hs_type(tfunc->get_returntype(), io); return result; } @@ -1380,8 +1376,9 @@ string t_hs_generator::type_to_enum(t_type* type) { /** * Converts the parse type to an haskell type */ -string t_hs_generator::render_hs_type(t_type* type) { +string t_hs_generator::render_hs_type(t_type* type, bool needs_parens) { type = get_true_type(type); + string type_repr; if (type->is_base_type()) { t_base_type::t_base tbase = ((t_base_type*)type)->get_base(); @@ -1389,7 +1386,7 @@ string t_hs_generator::render_hs_type(t_type* type) { case t_base_type::TYPE_VOID: return "()"; case t_base_type::TYPE_STRING: - return "[Char]"; + return "String"; case t_base_type::TYPE_BOOL: return "Bool"; case t_base_type::TYPE_BYTE: @@ -1410,16 +1407,20 @@ string t_hs_generator::render_hs_type(t_type* type) { } else if (type->is_map()) { t_type* ktype = ((t_map*)type)->get_key_type(); t_type* vtype = ((t_map*)type)->get_val_type(); - return "Map.Map ("+ render_hs_type(ktype)+") ("+render_hs_type(vtype)+")"; + + type_repr = "Map.Map " + render_hs_type(ktype, true) + " " + render_hs_type(vtype, true); } else if (type->is_set()) { t_type* etype = ((t_set*)type)->get_elem_type(); - return "Set.Set ("+render_hs_type(etype)+")"; + + type_repr = "Set.Set " + render_hs_type(etype, true) ; } else if (type->is_list()) { t_type* etype = ((t_list*)type)->get_elem_type(); - return "["+render_hs_type(etype)+"]"; + return "[" + render_hs_type(etype, false) + "]"; + } else { + throw "INVALID TYPE IN type_to_enum: " + type->get_name(); } - throw "INVALID TYPE IN type_to_enum: " + type->get_name(); + return needs_parens ? "(" + type_repr + ")" : type_repr; }