Tracegen: code tidies

* Do not rely on the side-effect that QTextStream returns _null_ strings
(rather than empty strings) to signal EOF; just check for it,
making the code easier to read.

* Scope a variable properly

* Use the char-based functions, rather than string-based functions
(e.g. QString::split(QChar), not QString::split(QString)) when we're
actually passing just one character

* Make error cases more verbose

Change-Id: I415773a60ea1b9013193a9a77e52655a6459047d
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
This commit is contained in:
Giuseppe D'Angelo 2018-06-18 17:03:05 +02:00
parent ce6c4349f7
commit d5e5e15c1c

View File

@ -272,35 +272,28 @@ Provider parseProvider(const QString &filename)
static const QRegExp tracedef(QStringLiteral("([A-Za-z][A-Za-z0-9_]*)\\((.*)\\)"));
int lineNumber = 0;
Provider provider;
provider.name = QFileInfo(filename).baseName();
for (;;) {
for (int lineNumber = 1; !s.atEnd(); ++lineNumber) {
QString line = s.readLine().trimmed();
if (line.isNull())
break;
if (line.isEmpty() || line.startsWith(QStringLiteral("#"))) {
++lineNumber;
if (line.isEmpty() || line.startsWith(QLatin1Char('#')))
continue;
}
if (tracedef.exactMatch(line)) {
const QString name = tracedef.cap(1);
QStringList args = tracedef.cap(2).split(QStringLiteral(","), QString::SkipEmptyParts);
if (args.at(0).isNull())
args.clear();
const QString argsString = tracedef.cap(2);
const QStringList args = argsString.split(QLatin1Char(','),
QString::SkipEmptyParts);
provider.tracepoints << parseTracepoint(name, args, filename, lineNumber);
} else {
panic("Syntax error whilre processing %s on line %d", qPrintable(filename), lineNumber);
panic("Syntax error while processing '%s' line %d:\n"
" '%s' does not look like a tracepoint definition",
qPrintable(filename), lineNumber,
qPrintable(line));
}
++lineNumber;
}
#ifdef TRACEGEN_DEBUG