diff options
author | Olivier Goffart <ogoffart@kde.org> | 2011-10-29 19:55:36 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-29 21:18:45 +0200 |
commit | 4fe3cf8ee991e6adf3756019ff9d326769f0acf0 (patch) | |
tree | 3f999612437e7430f3c66c6547ee58d770d56bdf /src/tools | |
parent | d94c61a941894c6ff28e2e7ad7b1446a8f1f52a1 (diff) |
moc: support c++11 style enums
Task-number: QTBUG-21480
Change-Id: Ic116a5a06dd68036823f27146e49511c68cf2de6
Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/moc/generator.cpp | 10 | ||||
-rw-r--r-- | src/tools/moc/moc.cpp | 7 | ||||
-rw-r--r-- | src/tools/moc/moc.h | 2 |
3 files changed, 15 insertions, 4 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 72fda2ddf8..1ed7de228a 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -622,10 +622,12 @@ void Generator::generateEnums(int index) const EnumDef &e = cdef->enumList.at(i); for (int j = 0; j < e.values.count(); ++j) { const QByteArray &val = e.values.at(j); - fprintf(out, " %4d, uint(%s::%s),\n", - strreg(val), - cdef->qualified.constData(), - val.constData()); + QByteArray code = cdef->qualified.constData(); + if (e.isEnumClass) + code += "::" + e.name; + code += "::" + val; + fprintf(out, " %4d, uint(%s),\n", + strreg(val), code.constData()); } } } diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 6374a726ac..8999148108 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -251,6 +251,9 @@ bool Moc::parseEnum(EnumDef *def) { bool isTypdefEnum = false; // typedef enum { ... } Foo; + if (test(CLASS)) + def->isEnumClass = true; + if (test(IDENTIFIER)) { def->name = lexem(); } else { @@ -258,6 +261,10 @@ bool Moc::parseEnum(EnumDef *def) return false; // anonymous enum isTypdefEnum = true; } + if (test(COLON)) { // C++11 strongly typed enum + // enum Foo : unsigned long { ... }; + parseType(); //ignore the result + } if (!test(LBRACE)) return false; do { diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h index 1bb807c123..917cf69a51 100644 --- a/src/tools/moc/moc.h +++ b/src/tools/moc/moc.h @@ -70,6 +70,8 @@ struct EnumDef { QByteArray name; QList<QByteArray> values; + bool isEnumClass; // c++11 enum class + EnumDef() : isEnumClass(false) {} }; struct ArgumentDef |