summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@kde.org>2011-10-29 19:55:36 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-29 21:18:45 +0200
commit4fe3cf8ee991e6adf3756019ff9d326769f0acf0 (patch)
tree3f999612437e7430f3c66c6547ee58d770d56bdf /src
parentd94c61a941894c6ff28e2e7ad7b1446a8f1f52a1 (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')
-rw-r--r--src/tools/moc/generator.cpp10
-rw-r--r--src/tools/moc/moc.cpp7
-rw-r--r--src/tools/moc/moc.h2
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