diff options
Diffstat (limited to 'src/tools/tracegen/provider.cpp')
-rw-r--r-- | src/tools/tracegen/provider.cpp | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/src/tools/tracegen/provider.cpp b/src/tools/tracegen/provider.cpp index 741da3b099..bdd669c9cd 100644 --- a/src/tools/tracegen/provider.cpp +++ b/src/tools/tracegen/provider.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com> -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "provider.h" #include "panic.h" @@ -97,17 +97,14 @@ static QString removeBraces(QString type) } #define TYPEDATA_ENTRY(type, backendType) \ -{ QT_STRINGIFY(type), backendType, sizeof(type) * 8, std::is_signed<type>::value } +{ QT_STRINGIFY(type), backendType } -static Tracepoint::Field::BackendType backendType(QString rawType) +static Tracepoint::Field::Type backendType(QString rawType) { static const struct TypeData { const char *type; Tracepoint::Field::Type backendType; - int bits; - bool isSigned; } typeTable[] = { -#ifdef UNDERSCORE_TYPES_DEFINED TYPEDATA_ENTRY(short_int, Tracepoint::Field::Integer), TYPEDATA_ENTRY(signed_short, Tracepoint::Field::Integer), TYPEDATA_ENTRY(signed_short_int, Tracepoint::Field::Integer), @@ -125,7 +122,6 @@ static Tracepoint::Field::BackendType backendType(QString rawType) TYPEDATA_ENTRY(signed_long_long, Tracepoint::Field::Integer), TYPEDATA_ENTRY(signed_long_long_int, Tracepoint::Field::Integer), TYPEDATA_ENTRY(unsigned_long_long, Tracepoint::Field::Integer), -#endif TYPEDATA_ENTRY(bool, Tracepoint::Field::Boolean), TYPEDATA_ENTRY(int, Tracepoint::Field::Integer), TYPEDATA_ENTRY(signed, Tracepoint::Field::Integer), @@ -140,11 +136,13 @@ static Tracepoint::Field::BackendType backendType(QString rawType) TYPEDATA_ENTRY(float, Tracepoint::Field::Float), TYPEDATA_ENTRY(double, Tracepoint::Field::Float), TYPEDATA_ENTRY(long double, Tracepoint::Field::Float), - { "QString", Tracepoint::Field::QtString , 0, false}, - { "QByteArray", Tracepoint::Field::QtByteArray , 0, false}, - { "QUrl", Tracepoint::Field::QtUrl , 0, false}, - { "QRect", Tracepoint::Field::QtRect , 0, false}, - { "QSize", Tracepoint::Field::QtSize , 0, false} + TYPEDATA_ENTRY(QString, Tracepoint::Field::QtString), + TYPEDATA_ENTRY(QByteArray, Tracepoint::Field::QtByteArray), + TYPEDATA_ENTRY(QUrl, Tracepoint::Field::QtUrl), + TYPEDATA_ENTRY(QRect, Tracepoint::Field::QtRect), + TYPEDATA_ENTRY(QSize, Tracepoint::Field::QtSize), + TYPEDATA_ENTRY(QRectF, Tracepoint::Field::QtRectF), + TYPEDATA_ENTRY(QSizeF, Tracepoint::Field::QtSizeF) }; auto backendType = [](const QString &rawType) { @@ -155,7 +153,7 @@ static Tracepoint::Field::BackendType backendType(QString rawType) return typeTable[i]; } - TypeData unknown = { nullptr, Tracepoint::Field::Unknown, 0, false }; + TypeData unknown = { nullptr, Tracepoint::Field::Unknown }; return unknown; }; @@ -164,7 +162,7 @@ static Tracepoint::Field::BackendType backendType(QString rawType) rawType = removeBraces(rawType); if (!sequenceLength(rawType).isNull()) - return { Tracepoint::Field::Sequence, 0, false }; + return Tracepoint::Field::Sequence; static const QRegularExpression constMatch(QStringLiteral("\\bconst\\b")); rawType.remove(constMatch); @@ -176,13 +174,13 @@ static Tracepoint::Field::BackendType backendType(QString rawType) rawType.replace(QStringLiteral(" "), QStringLiteral("_")); if (rawType == "char_ptr"_L1) - return { Tracepoint::Field::String, 0, false }; + return Tracepoint::Field::String; if (rawType.endsWith("_ptr"_L1)) - return {Tracepoint::Field::Pointer, QT_POINTER_SIZE, false }; + return Tracepoint::Field::Pointer; TypeData d = backendType(rawType); - return { d.backendType, d.bits, d.isSigned }; + return d.backendType; } static Tracepoint parseTracepoint(const Provider &provider, const QString &name, const QStringList &args, @@ -246,9 +244,10 @@ static Tracepoint parseTracepoint(const Provider &provider, const QString &name, const TraceEnum &e = findEnumeration(provider.enumerations, type); const TraceFlags &f = findFlags(provider.flags, type); if (!e.name.isEmpty()) { - field.backendType = { Tracepoint::Field::EnumeratedType, e.valueSize, false }; + field.backendType = Tracepoint::Field::EnumeratedType; + field.enumValueSize = e.valueSize; } else if (!f.name.isEmpty()) { - field.backendType = { Tracepoint::Field::FlagType, 0, false }; + field.backendType = Tracepoint::Field::FlagType; } else { field.backendType = backendType(type); } @@ -301,7 +300,7 @@ Provider parseProvider(const QString &filename) static const QRegularExpression tracedef(QStringLiteral("^([A-Za-z][A-Za-z0-9_]*)\\((.*)\\)$")); static const QRegularExpression enumenddef(QStringLiteral("^} ?([A-Za-z][A-Za-z0-9_:]*);")); - static const QRegularExpression enumdef(QStringLiteral("^([A-Za-z][A-Za-z0-9_]*)( ?= ?([0-9]*))?")); + static const QRegularExpression enumdef(QStringLiteral("^([A-Za-z][A-Za-z0-9_]*)( *= *([xabcdef0-9]*))?")); static const QRegularExpression rangedef(QStringLiteral("^RANGE\\(([A-Za-z][A-Za-z0-9_]*) ?, ?([0-9]*) ?... ?([0-9]*) ?\\)")); Provider provider; @@ -373,7 +372,7 @@ Provider parseProvider(const QString &filename) value.name = m.captured(1); value.value = m.captured(2).toInt(); value.range = m.captured(3).toInt(); - currentEnumValue = value.range; + currentEnumValue = value.range + 1; currentEnum.values.push_back(value); maxEnumValue = qMax(maxEnumValue, value.range); minEnumValue = qMin(minEnumValue, value.value); @@ -385,22 +384,26 @@ Provider parseProvider(const QString &filename) value.name = m.captured(1); value.value = m.captured(3).toInt(); value.range = 0; - currentEnumValue = value.value; + currentEnumValue = value.value + 1; currentEnum.values.push_back(value); maxEnumValue = qMax(maxEnumValue, value.value); minEnumValue = qMin(minEnumValue, value.value); } else { TraceFlags::FlagValue value; value.name = m.captured(1); - value.value = m.captured(3).toInt(); + if (m.captured(3).startsWith(QStringLiteral("0x"))) + value.value = m.captured(3).toInt(nullptr, 16); + else + value.value = m.captured(3).toInt(); if (!isPow2OrZero(value.value)) { printf("Warning: '%s' line %d:\n" " '%s' flag value is not power of two.\n", qPrintable(filename), lineNumber, qPrintable(line)); + } else { + value.value = pow2Log2(value.value); + currentFlags.values.push_back(value); } - value.value = pow2Log2(value.value); - currentFlags.values.push_back(value); } } else { maxEnumValue = qMax(maxEnumValue, currentEnumValue); |