THRIFT-1318 Incorrect syntax for struct with enum property and default value when value is negative
Patch: Jens Geyer, Thunder Stumpges
diff --git a/compiler/cpp/src/generate/t_csharp_generator.cc b/compiler/cpp/src/generate/t_csharp_generator.cc
index 8d51408..2d72598 100644
--- a/compiler/cpp/src/generate/t_csharp_generator.cc
+++ b/compiler/cpp/src/generate/t_csharp_generator.cc
@@ -389,7 +389,7 @@
out << name << " = " << v2 << ";" << endl;
need_static_construction = false;
} else if (type->is_enum()) {
- out << name << " = (" << type_name(type, false, true) << ")" << value->get_integer() << ";" << endl;
+ out << name << " = " << type_name(type, false, true) << "." << value->get_identifier_name() << ";" << endl;
need_static_construction = false;
} else if (type->is_struct() || type->is_xception()) {
out << name << " = new " << type_name(type) << "();" << endl;
@@ -436,7 +436,7 @@
throw "compiler error: no const of base type " + tbase;
}
} else if (type->is_enum()) {
- render << "(" << type->get_name() << ")" << value->get_integer();
+ render << type->get_name() << "." << value->get_identifier_name();
} else {
string t = tmp("tmp");
print_const_value(out, t, type, value, true, true, true);
@@ -569,7 +569,11 @@
t = ((t_typedef*)t)->get_type();
}
if ((*m_iter)->get_value() != NULL) {
- print_const_value(out, "this._" + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true, true);
+ if (field_is_required((*m_iter))) {
+ print_const_value(out, "this." + prop_name(*m_iter), t, (*m_iter)->get_value(), true, true);
+ } else {
+ print_const_value(out, "this._" + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true, true);
+ }
}
}
indent_down();
@@ -580,12 +584,12 @@
bool first = true;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
if (field_is_required((*m_iter))) {
- if (first) {
- first = false;
- } else {
- out << ", ";
- }
- out << type_name((*m_iter)->get_type()) << " " << (*m_iter)->get_name();
+ if (first) {
+ first = false;
+ } else {
+ out << ", ";
+ }
+ out << type_name((*m_iter)->get_type()) << " " << (*m_iter)->get_name();
}
}
out << ") : this() {" << endl;
@@ -593,7 +597,7 @@
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
if (field_is_required((*m_iter))) {
- indent(out) << "this." << prop_name((*m_iter)) << " = " << (*m_iter)->get_name() << ";" << endl;
+ indent(out) << "this." << prop_name((*m_iter)) << " = " << (*m_iter)->get_name() << ";" << endl;
}
}