diff generator/cppimplgenerator.cpp @ 354:18bd68f586c6

removed superfluous destructors
author Max Samukha <maxter@spambox.com>
date Mon, 24 May 2010 23:43:30 +0300
parents 9fc85d7280ba
children 08c1ca7975ab
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp	Fri May 21 14:16:02 2010 +0300
+++ b/generator/cppimplgenerator.cpp	Mon May 24 23:43:30 2010 +0300
@@ -587,8 +587,8 @@
     writeDefaultConstructedValues(s, java_class);
 
     if (hasCustomDestructor(java_class)) */
-    if (!java_class->isQObject())
-        writeFinalDestructor(s, java_class);
+
+    writeFinalDestructor(s, java_class);
 
     if (java_class->isQObject()) {
         writeQObjectEntity(s, java_class);
@@ -1500,14 +1500,14 @@
 
 void CppImplGenerator::writeShellDestructor(QTextStream &s, const AbstractMetaClass *java_class)
 {
-    s << shellClassName(java_class) << "::~"
-      << shellClassName(java_class) << "()" << endl
-      << "{" << endl;
-    {
-        //s << "    std::cout << \"In shell destructor of " << java_class->name() << ", nativeId: \" << this << std::endl;";  
-        if (java_class->isQObject())
-            s << "    destroyEntity(this);";
-    }
+    QString className = shellClassName(java_class);
+    s << className << "::~" << className << "() {" << endl;
+
+    if (java_class->isQObject())
+        s << "    destroyEntity(this);";
+    //else if (java_class->isPolymorphic())
+    //    s << "    qtd_QtdObject_delete(dId);" << endl;
+
     s << "}" << endl << endl;
 }
 
@@ -2385,15 +2385,15 @@
 
 void CppImplGenerator::writeFinalDestructor(QTextStream &s, const AbstractMetaClass *cls)
 {
-    if (cls->hasConstructors()) {
-        s << INDENT << "extern \"C\" DLL_PUBLIC void qtd_" << cls->name() << "_destructor(void *ptr)" << endl
+    if (cls->hasConstructors() && cls->isDestructorBase()) {
+        s << INDENT << "extern \"C\" DLL_PUBLIC void qtd_" << cls->name() << "_delete(void* nativeId)" << endl
           << INDENT << "{" << endl
-          << INDENT << "    delete (" << shellClassName(cls) << " *)ptr;" << endl
+          << INDENT << "    delete (" << shellClassName(cls) << "*)nativeId;" << endl
           << INDENT << "}" << endl << endl;
 
-        s << INDENT << "extern \"C\" DLL_PUBLIC void qtd_" << cls->name() << "_call_destructor(" << shellClassName(cls) << " *ptr)" << endl
+        s << INDENT << "extern \"C\" DLL_PUBLIC void qtd_" << cls->name() << "_destroy(void* nativeId)" << endl
           << INDENT << "{" << endl
-          << INDENT << "    call_destructor(ptr);" << endl
+          << INDENT << "    call_destructor((" << shellClassName(cls) << "*)nativeId);" << endl
           << INDENT << "}" << endl << endl;
     }
 }