THRIFT-1904 Incorrect code is generated for typedefs which use included types
Patch: Jens Geyer
diff --git a/compiler/cpp/src/generate/t_delphi_generator.cc b/compiler/cpp/src/generate/t_delphi_generator.cc
index d27676c..0ab8d4d 100644
--- a/compiler/cpp/src/generate/t_delphi_generator.cc
+++ b/compiler/cpp/src/generate/t_delphi_generator.cc
@@ -526,8 +526,15 @@
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<t_typedef*>::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 @@
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)]);
}