diff options
Diffstat (limited to 'src/tools/tracegen/ctf.cpp')
-rw-r--r-- | src/tools/tracegen/ctf.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/tools/tracegen/ctf.cpp b/src/tools/tracegen/ctf.cpp index e49f5622c64..1d47e646fea 100644 --- a/src/tools/tracegen/ctf.cpp +++ b/src/tools/tracegen/ctf.cpp @@ -305,11 +305,20 @@ static void writeEnums(QTextStream &stream, const Provider &provider) name.replace(QStringLiteral("::"), QStringLiteral("_")); stream << "TRACEPOINT_METADATA(" << provider.name << ", " << name << ", \n"; stream << "QStringLiteral(\"typealias enum : integer { size = " << e.valueSize << "; } {\\n\\\n"; - for (const auto &v : e.values) { - if (v.range) + + const auto values = e.values; + QList<int> handledValues; + + for (const auto &v : values) { + if (handledValues.contains(v.value)) + continue; + if (v.range) { stream << v.name << " = " << v.value << " ... " << v.range << ", \\n\\\n"; - else - stream << v.name << " = " << v.value << ", \\n\\\n"; + } else { + const QString names = aggregateListValues(v.value, values); + stream << names << " = " << v.value << ", \\n\\\n"; + handledValues.append(v.value); + } } stream << "} := " << name << ";\\n\\n\"));\n\n"; } @@ -323,8 +332,16 @@ static void writeFlags(QTextStream &stream, const Provider &provider) name.replace(QStringLiteral("::"), QStringLiteral("_")); stream << "TRACEPOINT_METADATA(" << provider.name << ", " << name << ", \n"; stream << "QStringLiteral(\"typealias enum : integer { size = 8; } {\\n\\\n"; - for (const auto &v : e.values) { - stream << v.name << " = " << v.value << ", \\n\\\n"; + + const auto values = e.values; + QList<int> handledValues; + + for (const auto &v : values) { + if (handledValues.contains(v.value)) + continue; + const QString names = aggregateListValues(v.value, values); + stream << names << " = " << v.value << ", \\n\\\n"; + handledValues.append(v.value); } stream << "} := " << name << ";\\n\\n\"));\n\n"; } |