@@ -138,6 +138,7 @@ class t_erl_generator : public t_generator {
138
138
std::string render_type (t_type* type);
139
139
std::string render_base_type (t_type* type);
140
140
std::string render_string_type ();
141
+ std::string render_const_name (std::string sname, std::string name);
141
142
142
143
// std::string render_default_value(t_type* type);
143
144
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
488
489
* @param ttypedef The type definition
489
490
*/
490
491
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
+ // }
491
498
f_types_hrl_file_ << " -type " << type_name (ttypedef) << " () :: " << render_typedef_type (ttypedef) << " .\n " << " \n " ;
492
499
}
493
500
@@ -562,7 +569,7 @@ void t_erl_generator::generate_const_functions() {
562
569
void t_erl_generator::generate_enum (t_enum* tenum) {
563
570
vector<t_enum_value*> constants = tenum->get_constants ();
564
571
vector<t_enum_value*>::iterator c_iter;
565
- vector<string> value_names ;
572
+ vector<string> const_names ;
566
573
vector<string>::iterator names_iter;
567
574
568
575
v_enums_.push_back (tenum);
@@ -573,18 +580,17 @@ void t_erl_generator::generate_enum(t_enum* tenum) {
573
580
for (c_iter = constants.begin (); c_iter != constants.end (); ++c_iter) {
574
581
int value = (*c_iter)->get_value ();
575
582
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);
580
586
}
581
587
f_types_hrl_file_ << ' \n ' ;
582
588
583
589
string enum_definition = " -type " + type_name (tenum) + " () :: " ;
584
590
string value_indent (enum_definition.size (), ' ' );
585
591
f_types_hrl_file_ << enum_definition;
586
592
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) {
588
594
if (names_iter_first) {
589
595
f_types_hrl_file_ << " |" << " \n " << value_indent;
590
596
} else {
@@ -595,6 +601,10 @@ void t_erl_generator::generate_enum(t_enum* tenum) {
595
601
f_types_hrl_file_ << " .\n " << " \n " ;
596
602
}
597
603
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
+
598
608
void t_erl_generator::generate_enum_info (t_enum* tenum){
599
609
vector<t_enum_value*> constants = tenum->get_constants ();
600
610
size_t num_constants = constants.size ();
@@ -679,7 +689,8 @@ string t_erl_generator::render_const_value(t_type* type, t_const_value* value) {
679
689
throw " compiler error: no const of base type " + t_base_type::t_base_name (tbase);
680
690
}
681
691
} 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);
683
694
684
695
} else if (type->is_struct () || type->is_xception ()) {
685
696
out << " #" << type_name (type) << " {" ;
0 commit comments