From: Bryan Duxbury Date: Mon, 27 Sep 2010 23:37:44 +0000 (+0000) Subject: THRIFT-787. compiler: Enums are not read correctly X-Git-Tag: 0.5.0~13 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=a406b90fa27221119baf09625345487de26db0a7;p=common%2Fthrift.git THRIFT-787. compiler: Enums are not read correctly This patch removes unnecessary enum value resolution code from all the individual generators. It's been unnecessary since forever ago when we made the compiler force the global resolution of values. Patch: Christian Lavoie git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1001966 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_as3_generator.cc b/compiler/cpp/src/generate/t_as3_generator.cc index d7fbb510..fa0a1feb 100644 --- a/compiler/cpp/src/generate/t_as3_generator.cc +++ b/compiler/cpp/src/generate/t_as3_generator.cc @@ -315,14 +315,8 @@ void t_as3_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); indent(f_enum) << "public static const " << (*c_iter)->get_name() << ":int = " << value << ";" << endl; @@ -336,10 +330,8 @@ void t_as3_generator::generate_enum(t_enum* tenum) { bool firstValue = true; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { // populate set - if ((*c_iter)->has_value()) { - f_enum << (firstValue ? "" : ", ") << (*c_iter)->get_name(); - firstValue = false; - } + f_enum << (firstValue ? "" : ", ") << (*c_iter)->get_name(); + firstValue = false; } indent_down(); f_enum << ");" << endl; diff --git a/compiler/cpp/src/generate/t_cocoa_generator.cc b/compiler/cpp/src/generate/t_cocoa_generator.cc index 57a753be..d9b53f60 100644 --- a/compiler/cpp/src/generate/t_cocoa_generator.cc +++ b/compiler/cpp/src/generate/t_cocoa_generator.cc @@ -333,10 +333,8 @@ void t_cocoa_generator::generate_enum(t_enum* tenum) { } f_header_ << indent() << tenum->get_name() << "_" << (*c_iter)->get_name(); - if ((*c_iter)->has_value()) { - f_header_ << - " = " << (*c_iter)->get_value(); - } + f_header_ << + " = " << (*c_iter)->get_value(); } indent_down(); diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index 8d35b6d1..59749b7a 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -394,10 +394,8 @@ void t_cpp_generator::generate_enum(t_enum* tenum) { } f_types_ << indent() << (*c_iter)->get_name(); - if ((*c_iter)->has_value()) { - f_types_ << - " = " << (*c_iter)->get_value(); - } + f_types_ << + " = " << (*c_iter)->get_value(); } indent_down(); diff --git a/compiler/cpp/src/generate/t_csharp_generator.cc b/compiler/cpp/src/generate/t_csharp_generator.cc index 2d8545b5..4b26c98e 100644 --- a/compiler/cpp/src/generate/t_csharp_generator.cc +++ b/compiler/cpp/src/generate/t_csharp_generator.cc @@ -193,18 +193,9 @@ void t_csharp_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; - for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) - { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - - indent(f_enum) << - (*c_iter)->get_name() << - " = " << value << "," << endl; + for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { + int value = (*c_iter)->get_value(); + indent(f_enum) << (*c_iter)->get_name() << " = " << value << "," << endl; } scope_down(f_enum); diff --git a/compiler/cpp/src/generate/t_erl_generator.cc b/compiler/cpp/src/generate/t_erl_generator.cc index 2ed03159..f8bfde3d 100644 --- a/compiler/cpp/src/generate/t_erl_generator.cc +++ b/compiler/cpp/src/generate/t_erl_generator.cc @@ -286,19 +286,11 @@ void t_erl_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; - for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); string name = capitalize((*c_iter)->get_name()); - - f_types_hrl_file_ << - indent() << "-define(" << program_name_ << "_" << tenum->get_name() << "_" << name << ", " << value << ")."<< endl; + indent(f_types_hrl_file_) << + "-define(" << program_name_ << "_" << tenum->get_name() << "_" << name << ", " << value << ")."<< endl; } f_types_hrl_file_ << endl; diff --git a/compiler/cpp/src/generate/t_hs_generator.cc b/compiler/cpp/src/generate/t_hs_generator.cc index 6117f08d..43bc3971 100644 --- a/compiler/cpp/src/generate/t_hs_generator.cc +++ b/compiler/cpp/src/generate/t_hs_generator.cc @@ -279,36 +279,23 @@ void t_hs_generator::generate_enum(t_enum* tenum) { indent(f_types_) << "deriving (Show,Eq, Typeable, Ord)" << endl; indent_down(); - int value = -1; indent(f_types_) << "instance Enum " << capitalize(tenum->get_name()) << " where" << endl; indent_up(); indent(f_types_) << "fromEnum t = case t of" << endl; indent_up(); for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } + int value = (*c_iter)->get_value(); string name = capitalize((*c_iter)->get_name()); - - f_types_ << - indent() << name << " -> " << value << endl; + indent(f_types_) << name << " -> " << value << endl; } indent_down(); indent(f_types_) << "toEnum t = case t of" << endl; indent_up(); for(c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } + int value = (*c_iter)->get_value(); string name = capitalize((*c_iter)->get_name()); - - f_types_ << - indent() << value << " -> " << name << endl; + indent(f_types_) << value << " -> " << name << endl; } indent(f_types_) << "_ -> throw ThriftException" << endl; indent_down(); @@ -377,14 +364,9 @@ string t_hs_generator::render_const_value(t_type* type, t_const_value* value) { t_enum* tenum = (t_enum*)type; vector constants = tenum->get_constants(); vector::iterator c_iter; - int val = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - val = (*c_iter)->get_value(); - } else { - ++val; - } - if(val == value->get_integer()){ + int val = (*c_iter)->get_value(); + if (val == value->get_integer()) { indent(out) << capitalize((*c_iter)->get_name()); break; } diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index d93eb676..073828b1 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -388,13 +388,8 @@ void t_java_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; bool first = true; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } + int value = (*c_iter)->get_value(); if (first) { first = false; @@ -432,15 +427,8 @@ void t_java_generator::generate_enum(t_enum* tenum) { indent(f_enum) << "switch (value) {" << endl; indent_up(); - value = -1; - for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); indent(f_enum) << "case " << value << ":" << endl; indent(f_enum) << " return " << (*c_iter)->get_name() << ";" << endl; } diff --git a/compiler/cpp/src/generate/t_javame_generator.cc b/compiler/cpp/src/generate/t_javame_generator.cc index 1bd720a0..696db695 100644 --- a/compiler/cpp/src/generate/t_javame_generator.cc +++ b/compiler/cpp/src/generate/t_javame_generator.cc @@ -339,14 +339,8 @@ void t_javame_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); generate_java_doc(f_enum, *c_iter); indent(f_enum) << "public static final " << tenum->get_name() << " " << (*c_iter)->get_name() << " = new " << tenum->get_name() << @@ -379,15 +373,8 @@ void t_javame_generator::generate_enum(t_enum* tenum) { indent(f_enum) << "switch (value) {" << endl; indent_up(); - value = -1; - for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); indent(f_enum) << "case " << value << ":" << endl; indent(f_enum) << " return " << (*c_iter)->get_name() << ";" << endl; } diff --git a/compiler/cpp/src/generate/t_js_generator.cc b/compiler/cpp/src/generate/t_js_generator.cc index bc4242ce..c3306579 100644 --- a/compiler/cpp/src/generate/t_js_generator.cc +++ b/compiler/cpp/src/generate/t_js_generator.cc @@ -276,22 +276,15 @@ void t_js_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - - if(c_iter != constants.begin()) + int value = (*c_iter)->get_value(); + if (c_iter != constants.begin()) f_types_ << ","; f_types_ << "'" << (*c_iter)->get_name() << "' : " << value << endl; } f_types_ << "}"< constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { string name = capitalize((*c_iter)->get_name()); indent(f_types_) << "| " << name << endl; @@ -325,15 +324,9 @@ void t_ocaml_generator::generate_enum(t_enum* tenum) { indent(f_types_i_) << "val to_i : t -> int" << endl; indent_up(); for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } + int value = (*c_iter)->get_value(); string name = capitalize((*c_iter)->get_name()); - - f_types_ << - indent() << "| " << name << " -> " << value << endl; + indent(f_types_) << "| " << name << " -> " << value << endl; } indent_down(); @@ -341,15 +334,9 @@ void t_ocaml_generator::generate_enum(t_enum* tenum) { indent(f_types_i_) << "val of_i : int -> t" << endl; indent_up(); for(c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } + int value = (*c_iter)->get_value(); string name = capitalize((*c_iter)->get_name()); - - f_types_ << - indent() << "| " << value << " -> " << name << endl; + indent(f_types_) << "| " << value << " -> " << name << endl; } indent(f_types_) << "| _ -> raise Thrift_error" << endl; indent_down(); @@ -410,14 +397,9 @@ string t_ocaml_generator::render_const_value(t_type* type, t_const_value* value) t_enum* tenum = (t_enum*)type; vector constants = tenum->get_constants(); vector::iterator c_iter; - int val = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - val = (*c_iter)->get_value(); - } else { - ++val; - } - if(val == value->get_integer()){ + int val = (*c_iter)->get_value(); + if (val == value->get_integer()) { indent(out) << capitalize(tenum->get_name()) << "." << capitalize((*c_iter)->get_name()); break; } diff --git a/compiler/cpp/src/generate/t_perl_generator.cc b/compiler/cpp/src/generate/t_perl_generator.cc index cbfc786d..d3d82362 100644 --- a/compiler/cpp/src/generate/t_perl_generator.cc +++ b/compiler/cpp/src/generate/t_perl_generator.cc @@ -304,15 +304,9 @@ void t_perl_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - - f_types_ << "use constant "<<(*c_iter)->get_name() << " => " << value << ";" << endl; + int value = (*c_iter)->get_value(); + f_types_ << "use constant "<< (*c_iter)->get_name() << " => " << value << ";" << endl; } } diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc index 3532eb09..f95c0469 100644 --- a/compiler/cpp/src/generate/t_php_generator.cc +++ b/compiler/cpp/src/generate/t_php_generator.cc @@ -307,14 +307,8 @@ void t_php_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); f_types_ << " '" << (*c_iter)->get_name() << "' => " << value << "," << endl; } @@ -330,28 +324,16 @@ void t_php_generator::generate_enum(t_enum* tenum) { "final class " << php_namespace(tenum->get_program()) << tenum->get_name() << " {" << endl; indent_up(); - value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); indent(f_types_) << "const " << (*c_iter)->get_name() << " = " << value << ";" << endl; } indent(f_types_) << "static public $__names = array(" << endl; - value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); indent(f_types_) << " " << value << " => '" << (*c_iter)->get_name() << "'," << endl; } diff --git a/compiler/cpp/src/generate/t_py_generator.cc b/compiler/cpp/src/generate/t_py_generator.cc index 38eb20ef..315cde24 100644 --- a/compiler/cpp/src/generate/t_py_generator.cc +++ b/compiler/cpp/src/generate/t_py_generator.cc @@ -388,16 +388,9 @@ void t_py_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - - f_types_ << - indent() << (*c_iter)->get_name() << " = " << value << endl; + int value = (*c_iter)->get_value(); + indent(f_types_) << (*c_iter)->get_name() << " = " << value << endl; // Dictionaries to/from string names of enums to_string_mapping << diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/generate/t_rb_generator.cc index 70c9c7a4..a7836c78 100644 --- a/compiler/cpp/src/generate/t_rb_generator.cc +++ b/compiler/cpp/src/generate/t_rb_generator.cc @@ -297,13 +297,8 @@ void t_rb_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } + int value = (*c_iter)->get_value(); // Ruby class constants have to be capitalized... omg i am so on the fence // about languages strictly enforcing capitalization why can't we just all @@ -311,24 +306,17 @@ void t_rb_generator::generate_enum(t_enum* tenum) { string name = capitalize((*c_iter)->get_name()); generate_rdoc(f_types_, *c_iter); - f_types_ << - indent() << name << " = " << value << endl; + indent(f_types_) << name << " = " << value << endl; } - //Create a hash mapping values back to their names (as strings) since ruby has no native enum type + // Create a hash mapping values back to their names (as strings) since ruby has no native enum type indent(f_types_) << "VALUE_MAP = {"; bool first = true; - value = -1; for(c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - //Populate the hash - //If no value is given, use the next available one - if ((*c_iter)->has_value()) - value = (*c_iter)->get_value(); - else ++value; - + // Populate the hash + int value = (*c_iter)->get_value(); first ? first = false : f_types_ << ", "; f_types_ << value << " => \"" << capitalize((*c_iter)->get_name()) << "\""; - } f_types_ << "}" << endl; @@ -337,7 +325,7 @@ void t_rb_generator::generate_enum(t_enum* tenum) { first = true; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { // Populate the set - first ? first = false: f_types_ << ", "; + first ? first = false : f_types_ << ", "; f_types_ << capitalize((*c_iter)->get_name()); } f_types_ << "]).freeze" << endl; diff --git a/compiler/cpp/src/generate/t_st_generator.cc b/compiler/cpp/src/generate/t_st_generator.cc index d94a563c..27b54490 100644 --- a/compiler/cpp/src/generate/t_st_generator.cc +++ b/compiler/cpp/src/generate/t_st_generator.cc @@ -329,14 +329,8 @@ void t_st_generator::generate_enum(t_enum* tenum) { vector constants = tenum->get_constants(); vector::iterator c_iter; - int value = -1; for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) { - if ((*c_iter)->has_value()) { - value = (*c_iter)->get_value(); - } else { - ++value; - } - + int value = (*c_iter)->get_value(); f_ << "\tat: '" << (*c_iter)->get_name() << "' put: " << value << ";" << endl; }