diff options
Diffstat (limited to 'typesystem.cpp')
-rw-r--r-- | typesystem.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
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"); |