Thrift: Local Reflection for C++.
Summary:
The compiler now takes a "-dense" flag that will cause it to
generate some extra metadata for C++. This metadata will be used by
TDenseProtocol. This should be the last compiler change necessary
to enable that feature.
Reviewed By: mcslee
Test Plan: test/DenseLinkingTest.thrift
Revert Plan: ok
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665240 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index e46fcea..e0ff21f 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -142,6 +142,7 @@
bool gen_ocaml = false;
bool gen_erl = false;
bool gen_hs = false;
+bool gen_dense = false;
bool gen_recurse = false;
/**
@@ -525,6 +526,13 @@
st->generate_fingerprint();
}
+ const vector<t_struct*>& xceptions = program->get_xceptions();
+ vector<t_struct*>::const_iterator x_iter;
+ for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
+ t_struct* st = *x_iter;
+ st->generate_fingerprint();
+ }
+
// If you want to generate fingerprints for implicit structures, start here.
/*
const vector<t_service*>& services = program->get_services();
@@ -553,8 +561,10 @@
fprintf(stderr, " -ocaml Generate OCaml output files\n");
fprintf(stderr, " -erl Generate Erlang output files\n");
fprintf(stderr, " -hs Generate Haskell output files\n");
- fprintf(stderr, " -I dir Add a directory to the list of directories \n");
+ fprintf(stderr, " -I dir Add a directory to the list of directories\n");
fprintf(stderr, " searched for include directives\n");
+ fprintf(stderr, " -dense Generate metadata for TDenseProtocol (C++)\n");
+ fprintf(stderr, " -rest Generate PHP REST processors (with -php)\n");
fprintf(stderr, " -nowarn Suppress all compiler warnings (BAD!)\n");
fprintf(stderr, " -strict Strict compiler warnings on\n");
fprintf(stderr, " -v[erbose] Verbose mode\n");
@@ -768,7 +778,7 @@
if (gen_cpp) {
pverbose("Generating C++\n");
- t_cpp_generator* cpp = new t_cpp_generator(program);
+ t_cpp_generator* cpp = new t_cpp_generator(program, gen_dense);
cpp->generate_program();
delete cpp;
}
@@ -898,6 +908,8 @@
g_verbose = 1;
} else if (strcmp(arg, "-r") == 0 || strcmp(arg, "-recurse") == 0 ) {
gen_recurse = true;
+ } else if (strcmp(arg, "-dense") == 0) {
+ gen_dense = true;
} else if (strcmp(arg, "-cpp") == 0) {
gen_cpp = true;
} else if (strcmp(arg, "-javabean") == 0) {