From 3429b6a9a046bbc4bd6e476467aca89ce7317cc2 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Wed, 15 Aug 2007 00:55:41 +0000 Subject: [PATCH] Thrift: Add a useful helper function (in compiler). Summary: Add a function to t_generator to traverse the typedef chain. Reviewed By: mcslee Test Plan: Rebuilt thrift. Re-thrifted ThriftTest.thrift. Saw that the output was unchanged. Revert Plan: ok Notes: Converting all of the generators to use this will happen later. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665203 13f79535-47bb-0310-9956-ffa450edef68 --- compiler/cpp/src/generate/t_cpp_generator.cc | 5 +---- compiler/cpp/src/generate/t_generator.h | 11 +++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index ec83c89b..8af32e2e 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -387,10 +387,7 @@ void t_cpp_generator::generate_struct_definition(ofstream& out, bool init_ctor = false; for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) { - t_type* t = (*m_iter)->get_type(); - while (t->is_typedef()) { - t = ((t_typedef*)t)->get_type(); - } + t_type* t = get_true_type((*m_iter)->get_type()); if (t->is_base_type()) { string dval; if (t->is_enum()) { diff --git a/compiler/cpp/src/generate/t_generator.h b/compiler/cpp/src/generate/t_generator.h index 52ffb70f..beea968d 100644 --- a/compiler/cpp/src/generate/t_generator.h +++ b/compiler/cpp/src/generate/t_generator.h @@ -118,6 +118,7 @@ class t_generator { std::ostream& indent(std::ostream &os) { return os << indent(); } + /** * Capitalization helpers */ @@ -130,6 +131,16 @@ class t_generator { return in; } + /** + * Get the true type behind a series of typedefs. + */ + static t_type* get_true_type(t_type* type) { + while (type->is_typedef()) { + type = ((t_typedef*)type)->get_type(); + } + return type; + } + protected: /** * The program being generated -- 2.17.1