aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/ApiExtractor/abstractmetalang.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetalang.cpp455
1 files changed, 241 insertions, 214 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
index b861f1b2f..d38eb8587 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
@@ -26,8 +26,6 @@
**
****************************************************************************/
-#include <QStack>
-
#include "abstractmetalang.h"
#include "reporthandler.h"
#include "typedatabase.h"
@@ -38,6 +36,9 @@
# include <QtCore/QMetaObject>
#endif
+#include <QtCore/QRegularExpression>
+#include <QtCore/QStack>
+
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug d, const AbstractMetaAttributes *aa)
{
@@ -90,7 +91,7 @@ QDebug operator<<(QDebug d, const AbstractMetaVariable *av)
AbstractMetaType::AbstractMetaType()
:m_typeEntry(0),
- m_arrayElementCount(0),
+ m_arrayElementCount(-1),
m_arrayElementType(0),
m_originalTemplateType(0),
m_pattern(InvalidPattern),
@@ -146,41 +147,30 @@ AbstractMetaType *AbstractMetaType::copy() const
return cpy;
}
-QString AbstractMetaType::cppSignature() const
+AbstractMetaTypeCList AbstractMetaType::nestedArrayTypes() const
{
- if (m_cachedCppSignature.isEmpty()) {
- if (isConstant())
- m_cachedCppSignature += QLatin1String("const ");
-
- m_cachedCppSignature += typeEntry()->qualifiedCppName();
-
- if (hasInstantiationInCpp()) {
- AbstractMetaTypeList types = instantiations();
- m_cachedCppSignature += QLatin1Char('<');
- for (int i = 0; i < types.count(); ++i) {
- if (i > 0)
- m_cachedCppSignature += QLatin1String(", ");
- m_cachedCppSignature += types[i]->cppSignature();
- }
- m_cachedCppSignature += QLatin1String(" >");
- }
-
- if (indirections() || m_referenceType != NoReference) {
- m_cachedCppSignature += QLatin1Char(' ');
- if (indirections())
- m_cachedCppSignature += QString(indirections(), QLatin1Char('*'));
- switch (referenceType()) {
- case NoReference:
- break;
- case LValueReference:
- m_cachedCppSignature += QLatin1Char('&');
- break;
- case RValueReference:
- m_cachedCppSignature += QLatin1String("&&");
- break;
- }
+ AbstractMetaTypeCList result;
+ switch (m_pattern) {
+ case ArrayPattern:
+ for (const AbstractMetaType *t = this; t->typeUsagePattern() == ArrayPattern; ) {
+ const AbstractMetaType *elt = t->arrayElementType();
+ result.append(elt);
+ t = elt;
}
+ break;
+ case NativePointerAsArrayPattern:
+ result.append(m_arrayElementType);
+ break;
+ default:
+ break;
}
+ return result;
+}
+
+QString AbstractMetaType::cppSignature() const
+{
+ if (m_cachedCppSignature.isEmpty())
+ m_cachedCppSignature = formatSignature(false);
return m_cachedCppSignature;
}
@@ -279,7 +269,7 @@ void AbstractMetaType::decideUsagePattern()
bool AbstractMetaType::hasTemplateChildren() const
{
QStack<AbstractMetaType *> children;
- children << m_children.toVector();
+ children << m_children;
// Recursively iterate over the children / descendants of the type, to check if any of them
// corresponds to a template argument type.
@@ -287,7 +277,7 @@ bool AbstractMetaType::hasTemplateChildren() const
AbstractMetaType *child = children.pop();
if (child->typeEntry()->isTemplateArgument())
return true;
- children << child->m_children.toVector();
+ children << child->m_children;
}
return false;
@@ -300,10 +290,26 @@ QDebug operator<<(QDebug d, const AbstractMetaType *at)
d.noquote();
d.nospace();
d << "AbstractMetaType(";
- if (at)
+ if (at) {
d << at->name();
- else
+ if (d.verbosity() > 2) {
+ d << ", typeEntry=" << at->typeEntry() << ", signature=\""
+ << at->cppSignature() << "\", pattern="
+ << at->typeUsagePattern();
+ if (at->indirections())
+ d << ", indirections=" << at->indirections();
+ if (at->referenceType())
+ d << ", reftype=" << at->referenceType();
+ if (at->isConstant())
+ d << ", [const]";
+ if (at->isArray()) {
+ d << ", array of \"" << at->arrayElementType()->cppSignature()
+ << "\", arrayElementCount=" << at->arrayElementCount();
+ }
+ }
+ } else {
d << '0';
+ }
d << ')';
return d;
}
@@ -347,8 +353,8 @@ AbstractMetaFunction::~AbstractMetaFunction()
*/
bool AbstractMetaFunction::isModifiedRemoved(int types) const
{
- FunctionModificationList mods = modifications(implementingClass());
- foreach (const FunctionModification &mod, mods) {
+ const FunctionModificationList &mods = modifications(implementingClass());
+ for (const FunctionModification &mod : mods) {
if (!mod.isRemoveModifier())
continue;
@@ -368,7 +374,7 @@ bool AbstractMetaFunction::needsCallThrough() const
if (argumentsHaveNativeId() || !isStatic())
return true;
- foreach (const AbstractMetaArgument *arg, arguments()) {
+ for (const AbstractMetaArgument *arg : m_arguments) {
if (arg->type()->isArray() || arg->type()->isTargetLangEnum() || arg->type()->isTargetLangFlags())
return true;
}
@@ -388,8 +394,8 @@ bool AbstractMetaFunction::needsCallThrough() const
bool AbstractMetaFunction::needsSuppressUncheckedWarning() const
{
for (int i = -1; i <= arguments().size(); ++i) {
- QList<ReferenceCount> referenceCounts = this->referenceCounts(implementingClass(), i);
- foreach (const ReferenceCount &referenceCount, referenceCounts) {
+ const QVector<ReferenceCount> &referenceCounts = this->referenceCounts(implementingClass(), i);
+ for (const ReferenceCount &referenceCount : referenceCounts) {
if (referenceCount.action != ReferenceCount::Set)
return true;
}
@@ -400,8 +406,7 @@ bool AbstractMetaFunction::needsSuppressUncheckedWarning() const
QString AbstractMetaFunction::marshalledName() const
{
QString returned = QLatin1String("__qt_") + name();
- AbstractMetaArgumentList arguments = this->arguments();
- foreach (const AbstractMetaArgument *arg, arguments) {
+ for (const AbstractMetaArgument *arg : m_arguments) {
returned += QLatin1Char('_');
if (arg->type()->isNativePointer()) {
returned += QLatin1String("nativepointer");
@@ -510,7 +515,7 @@ AbstractMetaFunction *AbstractMetaFunction::copy() const
cpy->setConstant(isConstant());
cpy->setOriginalAttributes(originalAttributes());
- foreach (AbstractMetaArgument *arg, arguments())
+ for (AbstractMetaArgument *arg : m_arguments)
cpy->addArgument(arg->copy());
Q_ASSERT((!type() && !cpy->type())
@@ -525,7 +530,7 @@ bool AbstractMetaFunction::usesRValueReferences() const
return true;
if (m_type && m_type->referenceType() == RValueReference)
return true;
- foreach (const AbstractMetaArgument *a, m_arguments) {
+ for (const AbstractMetaArgument *a : m_arguments) {
if (a->type()->referenceType() == RValueReference)
return true;
}
@@ -600,13 +605,13 @@ int AbstractMetaFunction::actualMinimumArgumentCount() const
}
// Returns reference counts for argument at idx, or all arguments if idx == -2
-QList<ReferenceCount> AbstractMetaFunction::referenceCounts(const AbstractMetaClass *cls, int idx) const
+QVector<ReferenceCount> AbstractMetaFunction::referenceCounts(const AbstractMetaClass *cls, int idx) const
{
- QList<ReferenceCount> returned;
+ QVector<ReferenceCount> returned;
- FunctionModificationList mods = this->modifications(cls);
- foreach (const FunctionModification &mod, mods) {
- foreach (const ArgumentModification &argumentMod, mod.argument_mods) {
+ const FunctionModificationList &mods = this->modifications(cls);
+ for (const FunctionModification &mod : mods) {
+ for (const ArgumentModification &argumentMod : mod.argument_mods) {
if (argumentMod.index != idx && idx != -2)
continue;
returned += argumentMod.referenceCounts;
@@ -619,9 +624,9 @@ QList<ReferenceCount> AbstractMetaFunction::referenceCounts(const AbstractMetaCl
ArgumentOwner AbstractMetaFunction::argumentOwner(const AbstractMetaClass *cls, int idx) const
{
- FunctionModificationList mods = this->modifications(cls);
- foreach (const FunctionModification &mod, mods) {
- foreach (const ArgumentModification &argumentMod, mod.argument_mods) {
+ const FunctionModificationList &mods = this->modifications(cls);
+ for (const FunctionModification &mod : mods) {
+ for (const ArgumentModification &argumentMod : mod.argument_mods) {
if (argumentMod.index != idx)
continue;
return argumentMod.owner;
@@ -633,9 +638,9 @@ ArgumentOwner AbstractMetaFunction::argumentOwner(const AbstractMetaClass *cls,
QString AbstractMetaFunction::replacedDefaultExpression(const AbstractMetaClass *cls, int key) const
{
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == key
&& !argumentModification.replacedDefaultExpression.isEmpty()) {
return argumentModification.replacedDefaultExpression;
@@ -648,9 +653,9 @@ QString AbstractMetaFunction::replacedDefaultExpression(const AbstractMetaClass
bool AbstractMetaFunction::removedDefaultExpression(const AbstractMetaClass *cls, int key) const
{
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == key
&& argumentModification.removedDefaultExpression) {
return true;
@@ -664,9 +669,9 @@ bool AbstractMetaFunction::removedDefaultExpression(const AbstractMetaClass *cls
bool AbstractMetaFunction::resetObjectAfterUse(int argumentIdx) const
{
const AbstractMetaClass *cls = declaringClass();
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == argumentIdx && argumentModification.resetAfterUse)
return true;
}
@@ -684,9 +689,9 @@ QString AbstractMetaFunction::nullPointerDefaultValue(const AbstractMetaClass *m
cls = implementingClass();
do {
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == argumentIdx
&& argumentModification.noNullPointers) {
return argumentModification.nullPointerDefaultValue;
@@ -707,9 +712,9 @@ bool AbstractMetaFunction::nullPointersDisabled(const AbstractMetaClass *mainCla
cls = implementingClass();
do {
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == argumentIdx
&& argumentModification.noNullPointers) {
return true;
@@ -725,13 +730,13 @@ bool AbstractMetaFunction::nullPointersDisabled(const AbstractMetaClass *mainCla
QString AbstractMetaFunction::conversionRule(TypeSystem::Language language, int key) const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index != key)
continue;
- foreach (const CodeSnip &snip, argumentModification.conversion_rules) {
+ for (const CodeSnip &snip : argumentModification.conversion_rules) {
if (snip.language == language && !snip.code().isEmpty())
return snip.code();
}
@@ -743,9 +748,9 @@ QString AbstractMetaFunction::conversionRule(TypeSystem::Language language, int
QString AbstractMetaFunction::argumentReplaced(int key) const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == key && !argumentModification.replace_value.isEmpty())
return argumentModification.replace_value;
}
@@ -757,9 +762,9 @@ QString AbstractMetaFunction::argumentReplaced(int key) const
// FIXME If we remove a arg. in the method at the base class, it will not reflect here.
bool AbstractMetaFunction::argumentRemoved(int key) const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == key) {
if (argumentModification.removed)
return true;
@@ -772,8 +777,8 @@ bool AbstractMetaFunction::argumentRemoved(int key) const
bool AbstractMetaFunction::isVirtualSlot() const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
if (modification.isVirtualSlot())
return true;
}
@@ -785,9 +790,9 @@ bool AbstractMetaFunction::disabledGarbageCollection(const AbstractMetaClass *cl
{
typedef QHash<TypeSystem::Language, TypeSystem::Ownership>::const_iterator OwnershipMapIt;
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index != key)
continue;
@@ -804,8 +809,8 @@ bool AbstractMetaFunction::disabledGarbageCollection(const AbstractMetaClass *cl
bool AbstractMetaFunction::isDeprecated() const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
if (modification.isDeprecated())
return true;
}
@@ -814,8 +819,8 @@ bool AbstractMetaFunction::isDeprecated() const
bool AbstractMetaFunction::isThread() const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
if (modification.isThread())
return true;
}
@@ -824,8 +829,8 @@ bool AbstractMetaFunction::isThread() const
bool AbstractMetaFunction::allowThread() const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
if (modification.allowThread())
return true;
}
@@ -835,9 +840,9 @@ bool AbstractMetaFunction::allowThread() const
TypeSystem::Ownership AbstractMetaFunction::ownership(const AbstractMetaClass *cls, TypeSystem::Language language, int key) const
{
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == key)
return argumentModification.ownerships.value(language, TypeSystem::InvalidOwnership);
}
@@ -853,8 +858,8 @@ bool AbstractMetaFunction::isRemovedFromAllLanguages(const AbstractMetaClass *cl
bool AbstractMetaFunction::isRemovedFrom(const AbstractMetaClass *cls, TypeSystem::Language language) const
{
- FunctionModificationList modifications = this->modifications(cls);
- foreach (const FunctionModification &modification, modifications) {
+ const FunctionModificationList &modifications = this->modifications(cls);
+ for (const FunctionModification &modification : modifications) {
if ((modification.removal & language) == language)
return true;
}
@@ -865,9 +870,9 @@ bool AbstractMetaFunction::isRemovedFrom(const AbstractMetaClass *cls, TypeSyste
QString AbstractMetaFunction::typeReplaced(int key) const
{
- FunctionModificationList modifications = this->modifications(declaringClass());
- foreach (const FunctionModification &modification, modifications) {
- foreach (const ArgumentModification &argumentModification, modification.argument_mods) {
+ const FunctionModificationList &modifications = this->modifications(declaringClass());
+ for (const FunctionModification &modification : modifications) {
+ for (const ArgumentModification &argumentModification : modification.argument_mods) {
if (argumentModification.index == key
&& !argumentModification.modified_type.isEmpty()) {
return argumentModification.modified_type;
@@ -923,9 +928,9 @@ FunctionModificationList AbstractMetaFunction::modifications(const AbstractMetaC
if ((implementor == implementor->baseClass()) ||
(implementor == implementingClass() && (mods.size() > 0)))
break;
- foreach (const AbstractMetaClass* interface, implementor->interfaces()) {
+ const AbstractMetaClassList &interfaces = implementor->interfaces();
+ for (const AbstractMetaClass *interface : interfaces)
mods += this->modifications(interface);
- }
implementor = implementor->baseClass();
}
return mods;
@@ -950,7 +955,8 @@ bool AbstractMetaFunction::isCallOperator() const
bool AbstractMetaFunction::hasInjectedCode() const
{
- foreach (const FunctionModification &mod, modifications(ownerClass())) {
+ const FunctionModificationList &mods = modifications(ownerClass());
+ for (const FunctionModification &mod : mods) {
if (mod.isCodeInjection())
return true;
}
@@ -960,12 +966,12 @@ bool AbstractMetaFunction::hasInjectedCode() const
CodeSnipList AbstractMetaFunction::injectedCodeSnips(TypeSystem::CodeSnipPosition position, TypeSystem::Language language) const
{
CodeSnipList result;
- foreach (const FunctionModification &mod, modifications(ownerClass())) {
+ const FunctionModificationList &mods = modifications(ownerClass());
+ for (const FunctionModification &mod : mods) {
if (mod.isCodeInjection()) {
- QList<CodeSnip>::const_iterator it = mod.snips.constBegin();
- for (;it != mod.snips.constEnd(); ++it) {
- if ((it->language & language) && (it->position == position || position == TypeSystem::CodeSnipPositionAny))
- result << *it;
+ for (const CodeSnip &snip : mod.snips) {
+ if ((snip.language & language) && (snip.position == position || position == TypeSystem::CodeSnipPositionAny))
+ result << snip;
}
}
}
@@ -974,10 +980,11 @@ CodeSnipList AbstractMetaFunction::injectedCodeSnips(TypeSystem::CodeSnipPositio
bool AbstractMetaFunction::hasSignatureModifications() const
{
- foreach (const FunctionModification &mod, modifications()) {
+ const FunctionModificationList &mods = modifications();
+ for (const FunctionModification &mod : mods) {
if (mod.isRenameModifier())
return true;
- foreach (const ArgumentModification &argmod, mod.argument_mods) {
+ for (const ArgumentModification &argmod : mod.argument_mods) {
// since zero represents the return type and we're
// interested only in checking the function arguments,
// it will be ignored.
@@ -990,8 +997,9 @@ bool AbstractMetaFunction::hasSignatureModifications() const
bool AbstractMetaFunction::isConversionOperator(QString funcName)
{
- static QRegExp opRegEx(QLatin1String("^operator(?:\\s+(?:const|volatile))?\\s+(\\w+\\s*)&?$"));
- return opRegEx.indexIn(funcName) > -1;
+ static const QRegularExpression opRegEx(QStringLiteral("^operator(?:\\s+(?:const|volatile))?\\s+(\\w+\\s*)&?$"));
+ Q_ASSERT(opRegEx.isValid());
+ return opRegEx.match(funcName).hasMatch();
}
bool AbstractMetaFunction::isOperatorOverload(QString funcName)
@@ -999,12 +1007,13 @@ bool AbstractMetaFunction::isOperatorOverload(QString funcName)
if (isConversionOperator(funcName))
return true;
- static QRegExp opRegEx(QLatin1String("^operator([+\\-\\*/%=&\\|\\^\\<>!][=]?"
+ static const QRegularExpression opRegEx(QLatin1String("^operator([+\\-\\*/%=&\\|\\^\\<>!][=]?"
"|\\+\\+|\\-\\-|&&|\\|\\||<<[=]?|>>[=]?|~"
"|\\[\\]|\\s+delete\\[?\\]?"
"|\\(\\)"
"|\\s+new\\[?\\]?)$"));
- return opRegEx.indexIn(funcName) > -1;
+ Q_ASSERT(opRegEx.isValid());
+ return opRegEx.match(funcName).hasMatch();
}
bool AbstractMetaFunction::isCastOperator() const
@@ -1133,8 +1142,8 @@ bool AbstractMetaFunction::isVirtual() const
QString AbstractMetaFunction::modifiedName() const
{
if (m_cachedModifiedName.isEmpty()) {
- FunctionModificationList mods = modifications(implementingClass());
- foreach (const FunctionModification &mod, mods) {
+ const FunctionModificationList &mods = modifications(implementingClass());
+ for (const FunctionModification &mod : mods) {
if (mod.isRenameModifier()) {
m_cachedModifiedName = mod.renamedToName;
break;
@@ -1208,8 +1217,6 @@ void AbstractMetaFunction::formatDebugVerbose(QDebug &d) const
d << "), signature=\"" << minimalSignature() << '"';
if (m_constant)
d << " [const]";
- if (m_invalid)
- d << " [invalid]";
if (m_reverse)
d << " [reverse]";
if (m_userAdded)
@@ -1261,10 +1268,8 @@ AbstractMetaClass::~AbstractMetaClass()
qDeleteAll(m_functions);
qDeleteAll(m_fields);
qDeleteAll(m_enums);
- if (hasTemplateBaseClassInstantiations()) {
- foreach (AbstractMetaType* inst, templateBaseClassInstantiations())
- delete inst;
- }
+ if (hasTemplateBaseClassInstantiations())
+ qDeleteAll(templateBaseClassInstantiations());
}
/*******************************************************************************
@@ -1300,7 +1305,7 @@ AbstractMetaClass *AbstractMetaClass::extractInterface()
iface->setTypeEntry(typeEntry()->designatedInterface());
- foreach (AbstractMetaFunction *function, functions()) {
+ for (AbstractMetaFunction *function : qAsConst(m_functions)) {
if (!function->isConstructor())
iface->addFunction(function->copy());
}
@@ -1308,7 +1313,7 @@ AbstractMetaClass *AbstractMetaClass::extractInterface()
// iface->setEnums(enums());
// setEnums(AbstractMetaEnumList());
- foreach (const AbstractMetaField *field, fields()) {
+ for (const AbstractMetaField *field : qAsConst(m_fields)) {
if (field->isPublic()) {
AbstractMetaField *new_field = field->copy();
new_field->setEnclosingClass(iface);
@@ -1329,8 +1334,7 @@ AbstractMetaClass *AbstractMetaClass::extractInterface()
AbstractMetaFunctionList AbstractMetaClass::queryFunctionsByName(const QString &name) const
{
AbstractMetaFunctionList returned;
- AbstractMetaFunctionList functions = this->functions();
- foreach (AbstractMetaFunction *function, functions) {
+ for (AbstractMetaFunction *function : m_functions) {
if (function->name() == name)
returned.append(function);
}
@@ -1376,10 +1380,10 @@ AbstractMetaFunctionList AbstractMetaClass::functionsInTargetLang() const
AbstractMetaFunctionList AbstractMetaClass::virtualFunctions() const
{
- AbstractMetaFunctionList list = functionsInShellClass();
+ const AbstractMetaFunctionList &list = functionsInShellClass();
AbstractMetaFunctionList returned;
- foreach (AbstractMetaFunction *f, list) {
+ for (AbstractMetaFunction *f : list) {
if (!f->isFinalInCpp() || f->isVirtualSlot())
returned += f;
}
@@ -1393,14 +1397,12 @@ AbstractMetaFunctionList AbstractMetaClass::implicitConversions() const
return AbstractMetaFunctionList();
AbstractMetaFunctionList returned;
- AbstractMetaFunctionList list = queryFunctions(Constructors);
-
- list.append(externalConversionOperators());
+ const AbstractMetaFunctionList list = queryFunctions(Constructors) + externalConversionOperators();
// Exclude anything that uses rvalue references, be it a move
// constructor "QPolygon(QPolygon &&)" or something else like
// "QPolygon(QVector<QPoint> &&)".
- foreach (AbstractMetaFunction *f, list) {
+ for (AbstractMetaFunction *f : list) {
if ((f->actualMinimumArgumentCount() == 1 || f->arguments().size() == 1 || f->isConversionOperator())
&& !f->isExplicit()
&& f->functionType() != AbstractMetaFunction::CopyConstructorFunction
@@ -1415,9 +1417,9 @@ AbstractMetaFunctionList AbstractMetaClass::implicitConversions() const
AbstractMetaFunctionList AbstractMetaClass::operatorOverloads(OperatorQueryOptions query) const
{
- AbstractMetaFunctionList list = queryFunctions(OperatorOverloads | Visible);
+ const AbstractMetaFunctionList &list = queryFunctions(OperatorOverloads | Visible);
AbstractMetaFunctionList returned;
- foreach (AbstractMetaFunction *f, list) {
+ for (AbstractMetaFunction *f : list) {
if (((query & ArithmeticOp) && f->isArithmeticOperator())
|| ((query & BitwiseOp) && f->isBitwiseOperator())
|| ((query & ComparisonOp) && f->isComparisonOperator())
@@ -1434,7 +1436,7 @@ AbstractMetaFunctionList AbstractMetaClass::operatorOverloads(OperatorQueryOptio
bool AbstractMetaClass::hasOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isOperatorOverload() && !f->isPrivate())
return true;
}
@@ -1443,7 +1445,7 @@ bool AbstractMetaClass::hasOperatorOverload() const
bool AbstractMetaClass::hasArithmeticOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isArithmeticOperator() && !f->isPrivate())
return true;
}
@@ -1452,7 +1454,7 @@ bool AbstractMetaClass::hasArithmeticOperatorOverload() const
bool AbstractMetaClass::hasBitwiseOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isBitwiseOperator() && !f->isPrivate())
return true;
}
@@ -1461,7 +1463,7 @@ bool AbstractMetaClass::hasBitwiseOperatorOverload() const
bool AbstractMetaClass::hasComparisonOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isComparisonOperator() && !f->isPrivate())
return true;
}
@@ -1470,7 +1472,7 @@ bool AbstractMetaClass::hasComparisonOperatorOverload() const
bool AbstractMetaClass::hasLogicalOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isLogicalOperator() && !f->isPrivate())
return true;
}
@@ -1479,7 +1481,7 @@ bool AbstractMetaClass::hasLogicalOperatorOverload() const
bool AbstractMetaClass::hasSubscriptOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isSubscriptOperator() && !f->isPrivate())
return true;
}
@@ -1488,7 +1490,7 @@ bool AbstractMetaClass::hasSubscriptOperatorOverload() const
bool AbstractMetaClass::hasAssignmentOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isAssignmentOperator() && !f->isPrivate())
return true;
}
@@ -1497,7 +1499,7 @@ bool AbstractMetaClass::hasAssignmentOperatorOverload() const
bool AbstractMetaClass::hasConversionOperatorOverload() const
{
- foreach (const AbstractMetaFunction *f, m_functions) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isConversionOperator() && !f->isPrivate())
return true;
}
@@ -1558,7 +1560,7 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions)
QString currentName;
bool hasVirtuals = false;
AbstractMetaFunctionList finalFunctions;
- foreach (AbstractMetaFunction *f, m_functions) {
+ for (AbstractMetaFunction *f : qAsConst(m_functions)) {
f->setOwnerClass(this);
m_hasVirtualSlots = m_hasVirtualSlots || f->isVirtualSlot();
@@ -1574,7 +1576,7 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions)
finalFunctions += f;
} else {
if (hasVirtuals && finalFunctions.size() > 0) {
- foreach (AbstractMetaFunction *final_function, finalFunctions) {
+ for (AbstractMetaFunction *final_function : qAsConst(finalFunctions)) {
*final_function += AbstractMetaAttributes::ForceShellImplementation;
qCWarning(lcShiboken).noquote().nospace()
@@ -1594,7 +1596,7 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions)
bool AbstractMetaClass::hasFieldAccessors() const
{
- foreach (const AbstractMetaField *field, fields()) {
+ for (const AbstractMetaField *field : m_fields) {
if (field->getter() || field->setter())
return true;
}
@@ -1604,7 +1606,8 @@ bool AbstractMetaClass::hasFieldAccessors() const
bool AbstractMetaClass::hasDefaultToStringFunction() const
{
- foreach (AbstractMetaFunction *f, queryFunctionsByName(QLatin1String("toString"))) {
+ const AbstractMetaFunctionList &funcs = queryFunctionsByName(QLatin1String("toString"));
+ for (const AbstractMetaFunction *f : funcs) {
if (!f->actualMinimumArgumentCount())
return true;
}
@@ -1632,7 +1635,7 @@ bool AbstractMetaClass::hasSignal(const AbstractMetaFunction *other) const
if (!other->isSignal())
return false;
- foreach (const AbstractMetaFunction *f, functions()) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->isSignal() && f->compareTo(other) & AbstractMetaFunction::EqualName)
return other->modifiedName() == f->modifiedName();
}
@@ -1685,7 +1688,7 @@ bool AbstractMetaClass::hasFunction(const QString &str) const
const AbstractMetaFunction* AbstractMetaClass::findFunction(const QString& functionName) const
{
- foreach (const AbstractMetaFunction *f, functions()) {
+ for (const AbstractMetaFunction *f : m_functions) {
if (f->name() == functionName)
return f;
}
@@ -1694,7 +1697,7 @@ const AbstractMetaFunction* AbstractMetaClass::findFunction(const QString& funct
bool AbstractMetaClass::hasProtectedFunctions() const
{
- foreach (AbstractMetaFunction *func, m_functions) {
+ for (AbstractMetaFunction *func : m_functions) {
if (func->isProtected())
return true;
}
@@ -1703,7 +1706,7 @@ bool AbstractMetaClass::hasProtectedFunctions() const
bool AbstractMetaClass::hasProtectedFields() const
{
- foreach (const AbstractMetaField *field, fields()) {
+ for (const AbstractMetaField *field : m_fields) {
if (field->isProtected())
return true;
}
@@ -1775,7 +1778,7 @@ void AbstractMetaClass::setTemplateBaseClassInstantiations(AbstractMetaTypeList&
static bool functions_contains(const AbstractMetaFunctionList &l, const AbstractMetaFunction *func)
{
- foreach (const AbstractMetaFunction *f, l) {
+ for (const AbstractMetaFunction *f : l) {
if ((f->compareTo(func) & AbstractMetaFunction::PrettySimilar) == AbstractMetaFunction::PrettySimilar)
return true;
}
@@ -1809,8 +1812,8 @@ AbstractMetaField *AbstractMetaField::copy() const
*/
bool AbstractMetaField::isModifiedRemoved(int types) const
{
- FieldModificationList mods = modifications();
- foreach (const FieldModification &mod, mods) {
+ const FieldModificationList &mods = modifications();
+ for (const FieldModification &mod : mods) {
if (!mod.isRemoveModifier())
continue;
@@ -1854,8 +1857,8 @@ static AbstractMetaFunction *createXetter(const AbstractMetaField *g, const QStr
f->setAttributes(attr);
f->setOriginalAttributes(attr);
- FieldModificationList mods = g->modifications();
- foreach (const FieldModification &mod, mods) {
+ const FieldModificationList &mods = g->modifications();
+ for (const FieldModification &mod : mods) {
if (mod.isRenameModifier())
f->setName(mod.renamedTo());
if (mod.isAccessModifier()) {
@@ -1874,10 +1877,10 @@ static AbstractMetaFunction *createXetter(const AbstractMetaField *g, const QStr
FieldModificationList AbstractMetaField::modifications() const
{
- FieldModificationList mods = enclosingClass()->typeEntry()->fieldModifications();
+ const FieldModificationList &mods = enclosingClass()->typeEntry()->fieldModifications();
FieldModificationList returned;
- foreach (const FieldModification &mod, mods) {
+ for (const FieldModification &mod : mods) {
if (mod.name == name())
returned += mod;
}
@@ -1994,7 +1997,8 @@ bool AbstractMetaClass::hasConstructors() const
bool AbstractMetaClass::hasCopyConstructor() const
{
- foreach (const AbstractMetaFunction* ctor, queryFunctions(Constructors)) {
+ const AbstractMetaFunctionList &ctors = queryFunctions(Constructors);
+ for (const AbstractMetaFunction* ctor : ctors) {
if (ctor->functionType() == AbstractMetaFunction::CopyConstructorFunction)
return true;
}
@@ -2003,7 +2007,8 @@ bool AbstractMetaClass::hasCopyConstructor() const
bool AbstractMetaClass::hasPrivateCopyConstructor() const
{
- foreach (const AbstractMetaFunction* ctor, queryFunctions(Constructors)) {
+ const AbstractMetaFunctionList &ctors = queryFunctions(Constructors);
+ for (const AbstractMetaFunction *ctor : ctors) {
if (ctor->functionType() == AbstractMetaFunction::CopyConstructorFunction && ctor->isPrivate())
return true;
}
@@ -2077,7 +2082,7 @@ AbstractMetaFunctionList AbstractMetaClass::queryFunctions(FunctionQueryOptions
{
AbstractMetaFunctionList functions;
- foreach (AbstractMetaFunction *f, m_functions) {
+ for (AbstractMetaFunction *f : m_functions) {
if ((query & VirtualSlots) && !f->isVirtualSlot())
continue;
@@ -2199,8 +2204,10 @@ void AbstractMetaClass::addInterface(AbstractMetaClass *interface)
if (m_extractedInterface && m_extractedInterface != interface)
m_extractedInterface->addInterface(interface);
+
#if 0
- foreach (AbstractMetaFunction *function, interface->functions())
+ const AbstractMetaFunctionList &funcs = interface->functions();
+ for (AbstractMetaFunction *function : funcs)
if (!hasFunction(function) && !function->isConstructor()) {
AbstractMetaFunction *cpy = function->copy();
cpy->setImplementingClass(this);
@@ -2210,8 +2217,8 @@ void AbstractMetaClass::addInterface(AbstractMetaClass *interface)
*cpy += AbstractMetaAttributes::InterfaceFunction;
// Copy the modifications in interface into the implementing classes.
- FunctionModificationList mods = function->modifications(interface);
- foreach (const FunctionModification &mod, mods)
+ const FunctionModificationList &mods = function->modifications(interface);
+ for (const FunctionModification &mod : mods)
m_typeEntry->addFunctionModification(mod);
// It should be mostly safe to assume that when we implement an interface
@@ -2228,7 +2235,7 @@ void AbstractMetaClass::addInterface(AbstractMetaClass *interface)
void AbstractMetaClass::setInterfaces(const AbstractMetaClassList &interfaces)
{
m_interfaces = interfaces;
- foreach (const AbstractMetaClass* interface, interfaces) {
+ for (const AbstractMetaClass *interface : interfaces) {
if (interface)
m_isPolymorphic |= interface->isPolymorphic();
}
@@ -2237,7 +2244,7 @@ void AbstractMetaClass::setInterfaces(const AbstractMetaClassList &interfaces)
AbstractMetaEnum *AbstractMetaClass::findEnum(const QString &enumName)
{
- foreach (AbstractMetaEnum *e, m_enums) {
+ for (AbstractMetaEnum *e : qAsConst(m_enums)) {
if (e->name() == enumName)
return e;
}
@@ -2257,10 +2264,11 @@ AbstractMetaEnum *AbstractMetaClass::findEnum(const QString &enumName)
*/
AbstractMetaEnumValue *AbstractMetaClass::findEnumValue(const QString &enumValueName, AbstractMetaEnum *meta_enum)
{
- foreach (AbstractMetaEnum *e, m_enums) {
+ for (AbstractMetaEnum *e : qAsConst(m_enums)) {
if (e != meta_enum)
continue;
- foreach (AbstractMetaEnumValue *v, e->values()) {
+ const AbstractMetaEnumValueList &values = e->values();
+ for (AbstractMetaEnumValue *v : values) {
if (v->name() == enumValueName)
return v;
}
@@ -2284,8 +2292,9 @@ AbstractMetaEnumValue *AbstractMetaClass::findEnumValue(const QString &enumValue
*/
AbstractMetaEnum *AbstractMetaClass::findEnumForValue(const QString &enumValueName)
{
- foreach (AbstractMetaEnum *e, m_enums) {
- foreach (AbstractMetaEnumValue *v, e->values()) {
+ for (AbstractMetaEnum *e : qAsConst(m_enums)) {
+ const AbstractMetaEnumValueList &values = e->values();
+ for (AbstractMetaEnumValue *v : values) {
if (v->name() == enumValueName)
return e;
}
@@ -2316,8 +2325,8 @@ static void addExtraIncludeForType(AbstractMetaClass *metaClass, const AbstractM
}
if (type->hasInstantiations()) {
- AbstractMetaTypeList instantiations = type->instantiations();
- foreach (const AbstractMetaType *instantiation, instantiations)
+ const AbstractMetaTypeList &instantiations = type->instantiations();
+ for (const AbstractMetaType *instantiation : instantiations)
addExtraIncludeForType(metaClass, instantiation);
}
}
@@ -2328,9 +2337,9 @@ static void addExtraIncludesForFunction(AbstractMetaClass *metaClass, const Abst
Q_ASSERT(meta_function);
addExtraIncludeForType(metaClass, meta_function->type());
- AbstractMetaArgumentList arguments = meta_function->arguments();
- foreach (AbstractMetaArgument *argument, arguments)
- addExtraIncludeForType(metaClass, argument->type());
+ const AbstractMetaArgumentList &arguments = meta_function->arguments();
+ for (AbstractMetaArgument *argument : arguments)
+ addExtraIncludeForType(metaClass, argument->type());
}
void AbstractMetaClass::fixFunctions()
@@ -2448,8 +2457,8 @@ void AbstractMetaClass::fixFunctions()
bool hasNonFinalModifier = false;
bool isBaseImplPrivate = false;
- FunctionModificationList mods = sf->modifications(sf->implementingClass());
- foreach (const FunctionModification &mod, mods) {
+ const FunctionModificationList &mods = sf->modifications(sf->implementingClass());
+ for (const FunctionModification &mod : mods) {
if (mod.isNonFinal()) {
hasNonFinalModifier = true;
break;
@@ -2495,7 +2504,7 @@ void AbstractMetaClass::fixFunctions()
funcsToAdd << sf;
}
- foreach (AbstractMetaFunction *f, funcsToAdd)
+ for (AbstractMetaFunction *f : qAsConst(funcsToAdd))
funcs << f->copy();
if (superClass)
@@ -2506,9 +2515,9 @@ void AbstractMetaClass::fixFunctions()
bool hasPrivateConstructors = false;
bool hasPublicConstructors = false;
- foreach (AbstractMetaFunction *func, funcs) {
- FunctionModificationList mods = func->modifications(this);
- foreach (const FunctionModification &mod, mods) {
+ for (AbstractMetaFunction *func : qAsConst(funcs)) {
+ const FunctionModificationList &mods = func->modifications(this);
+ for (const FunctionModification &mod : mods) {
if (mod.isRenameModifier()) {
func->setName(mod.renamedTo());
}
@@ -2540,8 +2549,8 @@ void AbstractMetaClass::fixFunctions()
(*this) -= AbstractMetaAttributes::Final;
}
- foreach (AbstractMetaFunction *f1, funcs) {
- foreach (AbstractMetaFunction *f2, funcs) {
+ for (AbstractMetaFunction *f1 : qAsConst(funcs)) {
+ for (AbstractMetaFunction *f2 : qAsConst(funcs)) {
if (f1 != f2) {
const AbstractMetaFunction::CompareResult cmp = f1->compareTo(f2);
if ((cmp & AbstractMetaFunction::EqualName)
@@ -2556,38 +2565,59 @@ void AbstractMetaClass::fixFunctions()
setFunctions(funcs);
}
+static inline QString formatArraySize(int e)
+{
+ QString result;
+ result += QLatin1Char('[');
+ if (e >= 0)
+ result += QString::number(e);
+ result += QLatin1Char(']');
+ return result;
+}
-QString AbstractMetaType::minimalSignature() const
+QString AbstractMetaType::formatSignature(bool minimal) const
{
- QString minimalSignature;
+ QString result;
if (isConstant())
- minimalSignature += QLatin1String("const ");
- minimalSignature += typeEntry()->qualifiedCppName();
- if (hasInstantiations()) {
- AbstractMetaTypeList instantiations = this->instantiations();
- minimalSignature += QLatin1String("< ");
- for (int i = 0; i < instantiations.size(); ++i) {
+ result += QLatin1String("const ");
+ if (isArray()) {
+ // Build nested array dimensions a[2][3] in correct order
+ result += m_arrayElementType->minimalSignature();
+ const int arrayPos = result.indexOf(QLatin1Char('['));
+ if (arrayPos != -1)
+ result.insert(arrayPos, formatArraySize(m_arrayElementCount));
+ else
+ result.append(formatArraySize(m_arrayElementCount));
+ } else {
+ result += typeEntry()->qualifiedCppName();
+ }
+ if (!m_instantiations.isEmpty()) {
+ result += QLatin1Char('<');
+ if (minimal)
+ result += QLatin1Char(' ');
+ for (int i = 0, size = m_instantiations.size(); i < size; ++i) {
if (i > 0)
- minimalSignature += QLatin1Char(',');
- minimalSignature += instantiations[i]->minimalSignature();
+ result += QLatin1Char(',');
+ result += m_instantiations.at(i)->minimalSignature();
}
- minimalSignature += QLatin1String(" >");
+ result += QLatin1String(" >");
}
- for (int j = 0; j < indirections(); ++j)
- minimalSignature += QLatin1Char('*');
+ if (!minimal && (m_indirections != 0 || m_referenceType != NoReference))
+ result += QLatin1Char(' ');
+ if (m_indirections)
+ result += QString(m_indirections, QLatin1Char('*'));
switch (referenceType()) {
case NoReference:
break;
case LValueReference:
- minimalSignature += QLatin1Char('&');
+ result += QLatin1Char('&');
break;
case RValueReference:
- minimalSignature += QLatin1String("&&");
+ result += QLatin1String("&&");
break;
}
-
- return minimalSignature;
+ return result;
}
bool AbstractMetaType::hasNativeId() const
@@ -2595,6 +2625,11 @@ bool AbstractMetaType::hasNativeId() const
return (isQObject() || isValue() || isObject()) && typeEntry()->isNativeIdBased();
}
+bool AbstractMetaType::isCppPrimitive() const
+{
+ return m_pattern == PrimitivePattern && m_typeEntry->isCppPrimitive();
+}
+
bool AbstractMetaType::isTargetLangEnum() const
{
return isEnum() && !static_cast<const EnumTypeEntry *>(typeEntry())->forceInteger();
@@ -2641,15 +2676,6 @@ AbstractMetaEnum *AbstractMetaClass::findEnum(const AbstractMetaClassList &class
return metaClass->findEnum(enumName);
}
-AbstractMetaEnumValue *AbstractMetaEnumValueList::find(const QString &name) const
-{
- for (int i = 0; i < size(); ++i) {
- if (name == at(i)->name())
- return at(i);
- }
- return 0;
-}
-
AbstractMetaEnumValue *AbstractMetaClass::findEnumValue(const AbstractMetaClassList &classes,
const QString &name)
{
@@ -2664,8 +2690,9 @@ AbstractMetaEnumValue *AbstractMetaClass::findEnumValue(const AbstractMetaClassL
return cl->findEnumValue(enumName, 0);
}
- foreach (AbstractMetaClass* metaClass, classes) {
- foreach(AbstractMetaEnum* metaEnum, metaClass->enums()) {
+ for (AbstractMetaClass *metaClass : classes) {
+ const AbstractMetaEnumList &enums = metaClass->enums();
+ for (AbstractMetaEnum *metaEnum : enums) {
AbstractMetaEnumValue* enumValue = metaClass->findEnumValue(name, metaEnum);
if (enumValue)
return enumValue;
@@ -2688,17 +2715,17 @@ AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &cla
if (name.isEmpty())
return 0;
- foreach (AbstractMetaClass *c, classes) {
+ for (AbstractMetaClass *c : classes) {
if (c->qualifiedCppName() == name)
return c;
}
- foreach (AbstractMetaClass *c, classes) {
+ for (AbstractMetaClass *c : classes) {
if (c->fullName() == name)
return c;
}
- foreach (AbstractMetaClass *c, classes) {
+ for (AbstractMetaClass *c : classes) {
if (c->name() == name)
return c;
}
@@ -2709,7 +2736,7 @@ AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &cla
AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &classes,
const TypeEntry* typeEntry)
{
- foreach (AbstractMetaClass* c, classes) {
+ for (AbstractMetaClass* c : classes) {
if (c->typeEntry() == typeEntry)
return c;
}