Mercurial > projects > qtd
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();