diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-07-26 13:55:19 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-11 07:59:15 +0000 |
commit | 1c623bc6d1c0a7ca52d81ca72c64f36898b3e12c (patch) | |
tree | 1a8d9ff271d8b752fc5eaadcea3e48021692970e /src/tools | |
parent | 8f58e1319c064fbdf5ec00a2b261c9d8069c6cfb (diff) |
Fix QMetaObject naming of class enum flag
Adds an enumName to QMetaEnum to carry the name of the enum since for
flags that doesn't match the name of the Qt type, but is needed if the
flag is scoped.
Change-Id: I1c0f77eb9e40e6fd1eb6a59bea77caf0f33fcf43
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/moc/generator.cpp | 15 | ||||
-rw-r--r-- | src/tools/moc/moc.h | 2 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 3dddbe907d..a3ef1147d6 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -200,9 +200,9 @@ void Generator::generateCode() if (cdef->enumDeclarations.contains(def.name)) { enumList += def; } + def.enumName = def.name; QByteArray alias = cdef->flagAliases.value(def.name); if (cdef->enumDeclarations.contains(alias)) { - def.className = def.name; def.name = alias; enumList += def; } @@ -370,7 +370,7 @@ void Generator::generateCode() int enumsIndex = index; for (int i = 0; i < cdef->enumList.count(); ++i) - index += 4 + (cdef->enumList.at(i).values.count() * 2); + index += 5 + (cdef->enumList.at(i).values.count() * 2); fprintf(out, " %4d, %4d, // constructors\n", isConstructible ? cdef->constructorList.count() : 0, isConstructible ? index : 0); @@ -888,6 +888,8 @@ void Generator::registerEnumStrings() for (int i = 0; i < cdef->enumList.count(); ++i) { const EnumDef &e = cdef->enumList.at(i); strreg(e.name); + if (!e.enumName.isNull()) + strreg(e.enumName); for (int j = 0; j < e.values.count(); ++j) strreg(e.values.at(j)); } @@ -898,8 +900,8 @@ void Generator::generateEnums(int index) if (cdef->enumDeclarations.isEmpty()) return; - fprintf(out, "\n // enums: name, flags, count, data\n"); - index += 4 * cdef->enumList.count(); + fprintf(out, "\n // enums: name, alias, flags, count, data\n"); + index += 5 * cdef->enumList.count(); int i; for (i = 0; i < cdef->enumList.count(); ++i) { const EnumDef &e = cdef->enumList.at(i); @@ -908,8 +910,9 @@ void Generator::generateEnums(int index) flags |= EnumIsFlag; if (e.isEnumClass) flags |= EnumIsScoped; - fprintf(out, " %4d, 0x%.1x, %4d, %4d,\n", + fprintf(out, " %4d, %4d, 0x%.1x, %4d, %4d,\n", stridx(e.name), + e.enumName.isNull() ? stridx(e.name) : stridx(e.enumName), flags, e.values.count(), index); @@ -923,7 +926,7 @@ void Generator::generateEnums(int index) const QByteArray &val = e.values.at(j); QByteArray code = cdef->qualified.constData(); if (e.isEnumClass) - code += "::" + (e.className.isNull() ? e.name : e.className); + code += "::" + (e.enumName.isNull() ? e.name : e.enumName); code += "::" + val; fprintf(out, " %4d, uint(%s),\n", stridx(val), code.constData()); diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h index 190fdfb733..56763c5e59 100644 --- a/src/tools/moc/moc.h +++ b/src/tools/moc/moc.h @@ -64,7 +64,7 @@ Q_DECLARE_TYPEINFO(Type, Q_MOVABLE_TYPE); struct EnumDef { QByteArray name; - QByteArray className; + QByteArray enumName; QList<QByteArray> values; bool isEnumClass; // c++11 enum class EnumDef() : isEnumClass(false) {} |