diff options
author | Henri Chain <henri.chain@enioka.com> | 2020-02-18 23:21:30 +0100 |
---|---|---|
committer | Henri Chain <henri.chain@enioka.com> | 2020-02-25 15:46:53 +0100 |
commit | d218b93a535085c85889164d45a83c3a519f9f4b (patch) | |
tree | b9c051db2691321c6ef604cd138342b0f3e39fea /src/kconfig_compiler/kconfig_compiler.cpp | |
parent | c8bf5e96cf2f25bb85330cf2587e2e365e6f0f71 (diff) | |
download | kconfig-d218b93a535085c85889164d45a83c3a519f9f4b.tar.gz kconfig-d218b93a535085c85889164d45a83c3a519f9f4b.tar.bz2 |
Fix code generation for entries with min/max
Summary:
- When GenerateProperties and Mutators are activated, the generated code
did not handle min/max properly
- In the case of a parameterized entry, generated code also did not
handle min/max
BUG: 418146
Test Plan: - auto tests included
Reviewers: meven, crossi, ervin, bport, tcanabrava
Reviewed By: meven, ervin
Subscribers: kde-frameworks-devel
Tags: #frameworks
Differential Revision: https://phabricator.kde.org/D27497
Diffstat (limited to 'src/kconfig_compiler/kconfig_compiler.cpp')
-rw-r--r-- | src/kconfig_compiler/kconfig_compiler.cpp | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/src/kconfig_compiler/kconfig_compiler.cpp b/src/kconfig_compiler/kconfig_compiler.cpp index 989e2609..4e76f375 100644 --- a/src/kconfig_compiler/kconfig_compiler.cpp +++ b/src/kconfig_compiler/kconfig_compiler.cpp @@ -394,21 +394,23 @@ QString itemType(const QString &type) QString itemDeclaration(const CfgEntry *e, const KConfigParameters &cfg) { - if (cfg.itemAccessors) { - return QString(); + const QString type = cfg.inherits + "::Item" + itemType(e->type); + + QString fCap = e->name; + fCap[0] = fCap[0].toUpper(); + const QString argSuffix = (!e->param.isEmpty()) ? (QStringLiteral("[%1]").arg(e->paramMax + 1)) : QString(); + QString result; + + if (!cfg.itemAccessors && !cfg.dpointer) { + result += " " + (!e->signalList.isEmpty() ? QStringLiteral("KConfigCompilerSignallingItem") : type) + + " *item" + fCap + argSuffix + ";\n"; } - QString type; if (!e->signalList.isEmpty()) { - type = QStringLiteral("KConfigCompilerSignallingItem"); - } else { - type = cfg.inherits + "::Item" + itemType(e->type); + result += " " + type + " *" + innerItemVar(e, cfg) + argSuffix + ";\n"; } - QString fCap = e->name; - fCap[0] = fCap[0].toUpper(); - return " " + type + " *item" + fCap + - ( (!e->param.isEmpty())?(QStringLiteral("[%1]").arg(e->paramMax+1)) : QString()) + ";\n"; + return result; } // returns the name of an item variable @@ -432,6 +434,20 @@ QString itemVar(const CfgEntry *e, const KConfigParameters &cfg) return result; } +// returns the name of the local inner item if there is one +// (before wrapping with KConfigCompilerSignallingItem) +// Otherwise return itemVar() +QString innerItemVar(const CfgEntry *e, const KConfigParameters &cfg) +{ + if (e->signalList.isEmpty()) { + return itemVar(e, cfg); + } else { + QString result = "innerItem" + e->name; + result[9] = result[9].toUpper(); + return result; + } +} + QString itemPath(const CfgEntry *e, const KConfigParameters &cfg) { QString result; @@ -443,15 +459,9 @@ QString itemPath(const CfgEntry *e, const KConfigParameters &cfg) return result; } -QString newItem(const CfgEntry* entry, const QString &key, const QString& defaultValue, +QString newInnerItem(const CfgEntry *entry, const QString &key, const QString &defaultValue, const KConfigParameters &cfg, const QString ¶m) { - - QList<Signal> sigs = entry->signalList; - QString t; - if (!sigs.isEmpty()) { - t += QLatin1String("new KConfigCompilerSignallingItem("); - } - t += "new "+ cfg.inherits + "::Item" + itemType(entry->type) + "( currentGroup(), " + QString t = "new "+ cfg.inherits + "::Item" + itemType(entry->type) + "( currentGroup(), " + key + ", " + varPath( entry->name, cfg ) + param; if (entry->type == QLatin1String("Enum")) { @@ -460,9 +470,18 @@ QString newItem(const CfgEntry* entry, const QString &key, const QString& defaul if (!defaultValue.isEmpty()) { t += QLatin1String(", ") + defaultValue; } - t += QLatin1String(" )"); + t += QLatin1String(" );"); + + return t; +} + +QString newItem(const CfgEntry *entry, const QString &key, const QString &defaultValue, + const KConfigParameters &cfg, const QString ¶m) { + QList<Signal> sigs = entry->signalList; + QString t; if (!sigs.isEmpty()) { + t += QLatin1String("new KConfigCompilerSignallingItem(") + innerItemVar(entry, cfg) + param; t += QLatin1String(", this, notifyFunction, "); //append the signal flags for (int i = 0; i < sigs.size(); ++i) { @@ -470,9 +489,10 @@ QString newItem(const CfgEntry* entry, const QString &key, const QString& defaul t += QLatin1String(" | "); t += signalEnumName(sigs[i].name); } - t += QLatin1String(")"); + t += QLatin1String(");"); + } else { + t += newInnerItem(entry, key, defaultValue, cfg, param); } - t += QLatin1String(";"); return t; } |