Skip to content

Commit 714947a

Browse files
committed
Use enum's const name instead of value (avoid magic number)
1 parent ce0e7ae commit 714947a

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

compiler/cpp/src/thrift/generate/t_erl_generator.cc

+18-7
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ class t_erl_generator : public t_generator {
138138
std::string render_type(t_type* type);
139139
std::string render_base_type(t_type* type);
140140
std::string render_string_type();
141+
std::string render_const_name(std::string sname, std::string name);
141142

142143
// std::string render_default_value(t_type* type);
143144
std::string render_default_value(t_field* field);
@@ -488,6 +489,12 @@ void t_erl_generator::generate_type_metadata(std::string function_name, vector<s
488489
* @param ttypedef The type definition
489490
*/
490491
void t_erl_generator::generate_typedef(t_typedef* ttypedef) {
492+
// t_type* type = ttypedef->get_type();
493+
// if (type->is_base_type()) {
494+
// f_types_hrl_file_ << "-nominal ";
495+
// } else {
496+
// f_types_hrl_file_ << "-type ";
497+
// }
491498
f_types_hrl_file_ << "-type " << type_name(ttypedef) << "() :: " << render_typedef_type(ttypedef) << ".\n" << "\n";
492499
}
493500

@@ -562,7 +569,7 @@ void t_erl_generator::generate_const_functions() {
562569
void t_erl_generator::generate_enum(t_enum* tenum) {
563570
vector<t_enum_value*> constants = tenum->get_constants();
564571
vector<t_enum_value*>::iterator c_iter;
565-
vector<string> value_names;
572+
vector<string> const_names;
566573
vector<string>::iterator names_iter;
567574

568575
v_enums_.push_back(tenum);
@@ -573,18 +580,17 @@ void t_erl_generator::generate_enum(t_enum* tenum) {
573580
for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
574581
int value = (*c_iter)->get_value();
575582
string name = (*c_iter)->get_name();
576-
string define_name = constify(make_safe_for_module_name(program_name_)) + "_" +
577-
constify(tenum->get_name()) + "_" + constify(name);
578-
indent(f_types_hrl_file_) << "-define(" << define_name << ", " << value << ")." << '\n';
579-
value_names.push_back(define_name);
583+
string const_name = render_const_name(tenum->get_name(), name);
584+
indent(f_types_hrl_file_) << "-define(" << const_name << ", " << value << ")." << '\n';
585+
const_names.push_back(const_name);
580586
}
581587
f_types_hrl_file_ << '\n';
582588

583589
string enum_definition = "-type " + type_name(tenum) + "() :: ";
584590
string value_indent(enum_definition.size(), ' ');
585591
f_types_hrl_file_ << enum_definition;
586592
bool names_iter_first = false;
587-
for (names_iter = value_names.begin(); names_iter != value_names.end(); ++names_iter) {
593+
for (names_iter = const_names.begin(); names_iter != const_names.end(); ++names_iter) {
588594
if (names_iter_first) {
589595
f_types_hrl_file_ << " |" << "\n" << value_indent;
590596
} else {
@@ -595,6 +601,10 @@ void t_erl_generator::generate_enum(t_enum* tenum) {
595601
f_types_hrl_file_ << ".\n" << "\n";
596602
}
597603

604+
string t_erl_generator::render_const_name(std::string sname, std::string name) {
605+
return constify(make_safe_for_module_name(program_name_)) + "_" + constify(sname) + "_" + constify(name);
606+
}
607+
598608
void t_erl_generator::generate_enum_info(t_enum* tenum){
599609
vector<t_enum_value*> constants = tenum->get_constants();
600610
size_t num_constants = constants.size();
@@ -679,7 +689,8 @@ string t_erl_generator::render_const_value(t_type* type, t_const_value* value) {
679689
throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
680690
}
681691
} else if (type->is_enum()) {
682-
indent(out) << value->get_integer();
692+
string name = (((t_enum*)type)->get_constant_by_value(value->get_integer()))->get_name();
693+
indent(out) << "?" << render_const_name(type->get_name(), name);
683694

684695
} else if (type->is_struct() || type->is_xception()) {
685696
out << "#" << type_name(type) << "{";

0 commit comments

Comments
 (0)