summaryrefslogtreecommitdiffstats
path: root/src/tools/tracegen/provider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/tracegen/provider.cpp')
-rw-r--r--src/tools/tracegen/provider.cpp53
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);