THRIFT-2702 empty enums lead to invalid code
Client: Delphi
Patch: Jens Geyer
diff --git a/compiler/cpp/src/generate/t_delphi_generator.cc b/compiler/cpp/src/generate/t_delphi_generator.cc
index b494cd1..5f378f0 100644
--- a/compiler/cpp/src/generate/t_delphi_generator.cc
+++ b/compiler/cpp/src/generate/t_delphi_generator.cc
@@ -836,15 +836,19 @@
type_name(tenum,true,true) << " = " << "(" << endl;
indent_up();
vector<t_enum_value*> constants = tenum->get_constants();
- vector<t_enum_value*>::iterator c_iter;
- for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
- int value = (*c_iter)->get_value();
- if (c_iter != constants.begin()) {
- s_enum << ",";
- s_enum << endl;
+ if (constants.empty()) {
+ indent(s_enum) << "dummy = 0 // empty enums are not allowed";
+ } else {
+ vector<t_enum_value*>::iterator c_iter;
+ for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
+ int value = (*c_iter)->get_value();
+ if (c_iter != constants.begin()) {
+ s_enum << ",";
+ s_enum << endl;
+ }
+ generate_delphi_doc(s_enum, *c_iter);
+ indent(s_enum) << normalize_name((*c_iter)->get_name()) << " = " << value;
}
- generate_delphi_doc(s_enum, *c_iter);
- indent(s_enum) << normalize_name((*c_iter)->get_name()) << " = " << value;
}
s_enum << endl;
indent_down();