Thrift: More constant enums.
Summary:
Make enum constants as structure defaults work.
Make enum constants as constant map keys work.
Un-break the generated skeleton servers.
Reviewed By: mcslee
Test Plan:
cd test
../compiler/cpp/thrift -cpp ConstantsDemo.thrift
g++ -I../lib/cpp/src -c gen-cpp/*.cpp
Also compared the generated output to the old generated output.
Revert Plan: ok
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665193 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc
index 354926d..fc20594 100644
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/generate/t_cpp_generator.cc
@@ -327,7 +327,7 @@
throw "compiler error: no const of base type " + tbase;
}
} else if (type->is_enum()) {
- render << value->get_integer();
+ render << "(" << type->get_name() << ")" << value->get_integer();
} else {
string t = tmp("tmp");
indent(out) << type_name(type) << " " << t << ";" << endl;
@@ -391,7 +391,7 @@
while (t->is_typedef()) {
t = ((t_typedef*)t)->get_type();
}
- if (t->is_base_type() || t->is_enum()) {
+ if (t->is_base_type()) {
string dval;
if (t->is_enum()) {
dval += "(" + t->get_name() + ")";
@@ -412,6 +412,8 @@
}
out << " {" << endl;
indent_up();
+ // TODO(dreiss): When everything else in Thrift is perfect,
+ // do more of these in the initializer list.
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
t_type* t = (*m_iter)->get_type();
while (t->is_typedef()) {
@@ -1613,6 +1615,8 @@
"using namespace facebook::thrift::protocol;" << endl <<
"using namespace facebook::thrift::transport;" << endl <<
"using namespace facebook::thrift::server;" << endl <<
+ endl <<
+ "using boost::shared_ptr;" << endl <<
endl;
if (!ns.empty()) {
diff --git a/test/ConstantsDemo.thrift b/test/ConstantsDemo.thrift
index 3af9f93..8cc6a1f 100644
--- a/test/ConstantsDemo.thrift
+++ b/test/ConstantsDemo.thrift
@@ -10,7 +10,11 @@
TWO = 2
}
-const map<i32,string> GEN_ENUM_NAMES = {ONE : "HOWDY", TWO: PARTNER}
+struct thing2 {
+ 1: constants val = TWO
+}
+
+const map<constants,string> GEN_ENUM_NAMES = {ONE : "HOWDY", TWO: PARTNER}
const i32 hex_const = 0x0001F