diff generator/abstractmetalang.cpp @ 335:1e9092e20a67

merge signals branch into default
author eldar1@eldar1-laptop
date Sun, 07 Feb 2010 16:04:36 +0000
parents c97e5d15bf95
children 18bd68f586c6
line wrap: on
line diff
--- a/generator/abstractmetalang.cpp	Sat Dec 19 18:43:32 2009 +0300
+++ b/generator/abstractmetalang.cpp	Sun Feb 07 16:04:36 2010 +0000
@@ -42,6 +42,7 @@
 #include "abstractmetalang.h"
 #include "reporthandler.h"
 #include "jumptable.h"
+#include <iostream>
 
 /*******************************************************************************
  * AbstractMetaType
@@ -225,6 +226,10 @@
             returned += arg->type()->name().replace("[]", "_3").replace(".", "_");
         }
     }
+
+    if(this->isConstant())
+        returned += "_const";
+
     return returned;
 }
 
@@ -253,6 +258,11 @@
         result |= EqualAttributes;
     }
 
+    // Constness
+    if (isConstant() == other->isConstant()) {
+        result |= EqualConstness;
+    }
+
     // Compare types
     AbstractMetaType *t = type();
     AbstractMetaType *ot = other->type();
@@ -668,15 +678,15 @@
     return QString();
 }
 
-QString AbstractMetaFunction::minimalSignature() const
+QString AbstractMetaFunction::minimalSignature(int reduce) const
 {
-    if (!m_cached_minimal_signature.isEmpty())
+    if (!m_cached_minimal_signature.isEmpty() && !reduce)
         return m_cached_minimal_signature;
 
     QString minimalSignature = originalName() + "(";
     AbstractMetaArgumentList arguments = this->arguments();
-
-    for (int i=0; i<arguments.count(); ++i) {
+    int argsCount = arguments.count() - reduce;
+    for (int i=0; i<argsCount; ++i) {
         AbstractMetaType *t = arguments.at(i)->type();
 
         if (i > 0)
@@ -689,7 +699,8 @@
         minimalSignature += "const";
 
     minimalSignature = QMetaObject::normalizedSignature(minimalSignature.toLocal8Bit().constData());
-    m_cached_minimal_signature = minimalSignature;
+    if(!reduce)
+        m_cached_minimal_signature = minimalSignature;
 
     return minimalSignature;
 }
@@ -1192,7 +1203,19 @@
     return 0;
 }
 
+AbstractMetaFunction* AbstractMetaClass::copyConstructor() const
+{
+    AbstractMetaFunctionList ctors = queryFunctions(Constructors);
+    for(int i = 0; i < ctors.size(); i++)
+    {
+        AbstractMetaFunction *ctor = ctors.at(i);
+        if (ctor->arguments().size() > 0)
+            if(ctor->arguments().at(0)->type()->typeEntry() == typeEntry())
+                return ctor;
+    }
 
+    return NULL;
+}
 
 static bool functions_contains(const AbstractMetaFunctionList &l, const AbstractMetaFunction *func)
 {
@@ -1891,10 +1914,13 @@
     if (isConstant())
         minimalSignature += "const ";
     minimalSignature += typeEntry()->qualifiedCppName();
-    if (hasInstantiations()) {
+    if (hasInstantiations() &&
+        (static_cast<const ContainerTypeEntry *>(typeEntry()))->type() != ContainerTypeEntry::StringListContainer)
+    {
         QList<AbstractMetaType *> instantiations = this->instantiations();
         minimalSignature += "<";
-        for (int i=0;i<instantiations.size();++i) {
+        for (int i=0;i<instantiations.size();++i)
+        {
             if (i > 0)
                 minimalSignature += ",";
             minimalSignature += instantiations.at(i)->minimalSignature();