diff options
-rw-r--r-- | abstractmetalang.cpp | 4 | ||||
-rw-r--r-- | typesystem.cpp | 22 | ||||
-rw-r--r-- | typesystem.h | 2 |
3 files changed, 24 insertions, 4 deletions
diff --git a/abstractmetalang.cpp b/abstractmetalang.cpp index 13942f769..db6e1b3e6 100644 --- a/abstractmetalang.cpp +++ b/abstractmetalang.cpp @@ -305,7 +305,7 @@ QStringList AbstractMetaFunction::introspectionCompatibleSignatures(const QStrin { AbstractMetaArgumentList arguments = this->arguments(); if (arguments.size() == resolvedArguments.size()) { - return (QStringList() << QMetaObject::normalizedSignature((name() + "(" + resolvedArguments.join(",") + ")").toUtf8().constData())); + return (QStringList() << TypeDatabase::normalizedSignature((name() + "(" + resolvedArguments.join(",") + ")").toUtf8().constData())); } else { QStringList returned; @@ -669,7 +669,7 @@ QString AbstractMetaFunction::minimalSignature() const if (isConstant()) minimalSignature += "const"; - minimalSignature = QMetaObject::normalizedSignature(minimalSignature.toLocal8Bit().constData()); + minimalSignature = TypeDatabase::normalizedSignature(minimalSignature.toLocal8Bit().constData()); m_cachedMinimalSignature = minimalSignature; return minimalSignature; diff --git a/typesystem.cpp b/typesystem.cpp index 74bb6c384..1a5fbffd7 100644 --- a/typesystem.cpp +++ b/typesystem.cpp @@ -1293,7 +1293,7 @@ bool Handler::startElement(const QString &, const QString &n, } QString signature = attributes["signature"]; - signature = QMetaObject::normalizedSignature(signature.toLocal8Bit().constData()); + signature = TypeDatabase::normalizedSignature(signature.toLocal8Bit().constData()); if (signature.isEmpty()) { m_error = "No signature for the added function"; return false; @@ -1331,7 +1331,7 @@ bool Handler::startElement(const QString &, const QString &n, } QString signature = attributes["signature"]; - signature = QMetaObject::normalizedSignature(signature.toLocal8Bit().constData()); + signature = TypeDatabase::normalizedSignature(signature.toLocal8Bit().constData()); if (signature.isEmpty()) { m_error = "No signature for modified function"; return false; @@ -1670,6 +1670,24 @@ TypeDatabase *TypeDatabase::instance(bool newInstance) return db; } +QString TypeDatabase::normalizedSignature(const char* signature) +{ + QString normalized = QMetaObject::normalizedSignature(signature); + + if (!instance() || !QString(signature).contains("unsigned")) + return normalized; + + QStringList types; + types << "char" << "short" << "int" << "long"; + foreach (const QString& type, types) { + if (instance()->findType(QString("u%1").arg(type))) + continue; + normalized.replace(QRegExp(QString("\\bu%1\\b").arg(type)), QString("unsigned %1").arg(type)); + } + + return normalized; +} + TypeDatabase::TypeDatabase() : m_suppressWarnings(true) { StringTypeEntry* e = new StringTypeEntry("QXmlStreamStringRef"); diff --git a/typesystem.h b/typesystem.h index 2c9be3e31..28a3cb85f 100644 --- a/typesystem.h +++ b/typesystem.h @@ -1754,6 +1754,8 @@ public: */ static TypeDatabase *instance(bool newInstance = false); + static QString normalizedSignature(const char* signature); + QStringList requiredTargetImports() { return m_requiredTargetImports; |