THRIFT-1904 Incorrect code is generated for typedefs which use included types
authorJens Geyer <jensg@apache.org>
Wed, 27 Mar 2013 18:32:41 +0000 (20:32 +0200)
committerJens Geyer <jensg@apache.org>
Wed, 27 Mar 2013 18:32:41 +0000 (20:32 +0200)
Patch: Jens Geyer

compiler/cpp/src/generate/t_delphi_generator.cc

index d27676c..0ab8d4d 100644 (file)
@@ -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<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 @@ 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)]);
 }