diff options
Diffstat (limited to 'src/tools/tracepointgen/parser.cpp')
-rw-r--r-- | src/tools/tracepointgen/parser.cpp | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/tools/tracepointgen/parser.cpp b/src/tools/tracepointgen/parser.cpp index 6199098371e..940e609b44a 100644 --- a/src/tools/tracepointgen/parser.cpp +++ b/src/tools/tracepointgen/parser.cpp @@ -78,14 +78,14 @@ static void simplifyData(QString &data, QList<LineNumber> &offsets) } } -static QString preprocessPrefix(const QString &in) +static QString preprocessMetadata(const QString &in) { - DEBUGPRINTF(printf("prefix: %s\n", qPrintable(in))); + DEBUGPRINTF(printf("in: %s\n", qPrintable(in))); QList<QString> lines = in.split(QLatin1Char('\\')); QString out; for (int i = 0; i < lines.size(); i++) { QString l = lines.at(i).simplified(); - DEBUGPRINTF(printf("prefix line: %s\n", qPrintable(l))); + DEBUGPRINTF(printf("line: %s\n", qPrintable(l))); if (l.length() < 2) continue; if (l.startsWith(QStringLiteral("\""))) @@ -100,7 +100,7 @@ static QString preprocessPrefix(const QString &in) out.append(l); } } - DEBUGPRINTF(printf("prefix out: %s\n", qPrintable(out))); + DEBUGPRINTF(printf("out: %s\n", qPrintable(out))); return out; } @@ -207,7 +207,25 @@ void Parser::parsePrefix(const QString &data, qsizetype offset) DEBUGPRINTF(printf("tracepointgen: prefix: %s\n", qPrintable(prefix))); if (!m_prefixes.contains(prefix)) - m_prefixes.push_back(preprocessPrefix(prefix)); + m_prefixes.push_back(preprocessMetadata(prefix)); +} + +void Parser::parseMetadata(const QString &data, qsizetype offset) +{ + qsizetype beginOfProvider = data.indexOf(QLatin1Char('('), offset); + qsizetype endOfProvider = data.indexOf(QLatin1Char(','), beginOfProvider); + QString metadata; + QString provider = data.mid(beginOfProvider + 1, endOfProvider - beginOfProvider - 1).simplified(); + if (provider != m_provider) + return; + + qsizetype endOfPoint = data.indexOf(QLatin1Char(')'), endOfProvider + 1); + metadata = data.mid(endOfProvider + 1, endOfPoint - endOfProvider - 1).simplified(); + + DEBUGPRINTF(printf("tracepointgen: metadata: %s", qPrintable(metadata))); + + if (!m_metadata.contains(metadata)) + m_metadata.push_back(preprocessMetadata(metadata)); } void Parser::parse(QIODevice &input, const QString &name) @@ -239,6 +257,8 @@ void Parser::parse(QIODevice &input, const QString &name) parsePoint(data, match.capturedEnd()); else if (macroType == QStringLiteral("PREFIX")) parsePrefix(data, match.capturedEnd()); + else if (macroType == QStringLiteral("METADATA")) + parseMetadata(data, match.capturedEnd()); } for (auto &func : m_functions) { @@ -256,6 +276,8 @@ void Parser::write(QIODevice &input) const out << prefix << "\n"; out << QStringLiteral("}\n"); } + for (auto m : m_metadata) + out << m << "\n"; for (auto func : m_functions) { out << func.className << "_" << func.functionName << "_entry(" << func.functionParameters << ")\n"; out << func.className << "_" << func.functionName << "_exit()\n"; |