aboutsummaryrefslogtreecommitdiff
path: root/src/kconfig_compiler/kconfig_compiler.cpp
diff options
context:
space:
mode:
authorHenri Chain <henri.chain@enioka.com>2020-02-18 23:21:30 +0100
committerHenri Chain <henri.chain@enioka.com>2020-02-25 15:46:53 +0100
commitd218b93a535085c85889164d45a83c3a519f9f4b (patch)
treeb9c051db2691321c6ef604cd138342b0f3e39fea /src/kconfig_compiler/kconfig_compiler.cpp
parentc8bf5e96cf2f25bb85330cf2587e2e365e6f0f71 (diff)
downloadkconfig-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.cpp62
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 &param) {
-
- 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 &param) {
+ 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;
}