From 45766049e0ed4e7fbef11e79ef417a6f970ba696 Mon Sep 17 00:00:00 2001 From: Jens Geyer Date: Wed, 27 Mar 2013 20:32:41 +0200 Subject: [PATCH] THRIFT-1904 Incorrect code is generated for typedefs which use included types Patch: Jens Geyer --- .../cpp/src/generate/t_delphi_generator.cc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/compiler/cpp/src/generate/t_delphi_generator.cc b/compiler/cpp/src/generate/t_delphi_generator.cc index d27676c2..0ab8d4d5 100644 --- a/compiler/cpp/src/generate/t_delphi_generator.cc +++ b/compiler/cpp/src/generate/t_delphi_generator.cc @@ -526,8 +526,15 @@ void t_delphi_generator::close_generator() { f_all << "end." << endl; f_all.close(); - if( ! typedefs_pending.empty()) - printf("pending typedefs with unresolved references are left\n"); + if( ! typedefs_pending.empty()) { + printf("Typedefs with unresolved type references left:\n"); + for( std::list::iterator iter = typedefs_pending.begin(); typedefs_pending.end() != iter; ++iter) { + printf( "typedef %s.%s = %s\n", + (*iter)->get_type()->get_program()->get_name().c_str(), + (*iter)->get_type()->get_name().c_str(), + (*iter)->get_symbolic().c_str()); + } + } } void t_delphi_generator::delphi_type_usings( ostream& out) { @@ -584,6 +591,14 @@ bool t_delphi_generator::is_fully_defined_type( t_type* ttype) { return is_fully_defined_type( tlist->get_elem_type()); } + if( (NULL != ttype->get_program()) && (ttype->get_program() != program_)) { + t_scope* scope = ttype->get_program()->scope(); + if( NULL != scope->get_type( ttype->get_name())) { + printf("type %s found in included scope %s\n", ttype->get_name().c_str(), ttype->get_program()->get_name().c_str()); + return true; + } + } + return (1 == types_known[ type_name(ttype)]); } -- 2.17.1