diff options
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/bootstrap/bootstrap.pro | 13 | ||||
-rw-r--r-- | src/tools/moc/generator.cpp | 7 | ||||
-rw-r--r-- | src/tools/moc/keywords.cpp | 375 | ||||
-rw-r--r-- | src/tools/moc/main.cpp | 70 | ||||
-rw-r--r-- | src/tools/moc/moc.cpp | 105 | ||||
-rw-r--r-- | src/tools/moc/moc.h | 42 | ||||
-rw-r--r-- | src/tools/moc/preprocessor.cpp | 77 | ||||
-rw-r--r-- | src/tools/moc/preprocessor.h | 1 | ||||
-rw-r--r-- | src/tools/moc/token.h | 3 | ||||
-rw-r--r-- | src/tools/moc/util/generate_keywords.cpp | 3 | ||||
-rw-r--r-- | src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp | 8 | ||||
-rw-r--r-- | src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | 4 | ||||
-rw-r--r-- | src/tools/qlalr/lalr.cpp | 2 | ||||
-rw-r--r-- | src/tools/qlalr/lalr.h | 1 | ||||
-rw-r--r-- | src/tools/qlalr/main.cpp | 2 | ||||
-rw-r--r-- | src/tools/qlalr/recognizer.cpp | 6 | ||||
-rw-r--r-- | src/tools/rcc/rcc.cpp | 4 | ||||
-rw-r--r-- | src/tools/uic/cpp/cppextractimages.cpp | 5 | ||||
-rw-r--r-- | src/tools/uic/cpp/cppwritedeclaration.cpp | 21 | ||||
-rw-r--r-- | src/tools/uic/cpp/cppwriteinitialization.cpp | 50 | ||||
-rw-r--r-- | src/tools/uic/databaseinfo.cpp | 2 | ||||
-rw-r--r-- | src/tools/uic/main.cpp | 2 | ||||
-rw-r--r-- | src/tools/uic/uic.cpp | 1 | ||||
-rw-r--r-- | src/tools/uic/utils.h | 8 |
24 files changed, 503 insertions, 309 deletions
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index a43105297f..8a1e1fd6e3 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -6,6 +6,10 @@ CONFIG += minimal_syncqt internal_module force_bootstrap MODULE_INCNAME = QtCore QtXml MODULE_DEFINES = \ + QT_VERSION_STR=$$shell_quote(\"$$QT_VERSION\") \ + QT_VERSION_MAJOR=$$QT_MAJOR_VERSION \ + QT_VERSION_MINOR=$$QT_MINOR_VERSION \ + QT_VERSION_PATCH=$$QT_PATCH_VERSION \ QT_BOOTSTRAPPED \ QT_LITE_UNICODE \ QT_NO_CAST_TO_ASCII \ @@ -115,16 +119,17 @@ mac { ../../corelib/kernel/qcoreapplication_mac.cpp \ ../../corelib/kernel/qcore_mac.cpp OBJECTIVE_SOURCES += \ - ../../corelib/kernel/qcore_mac_objc.mm + ../../corelib/kernel/qcore_mac_objc.mm \ + ../../corelib/kernel/qcore_foundation.mm LIBS += -framework Foundation osx: LIBS_PRIVATE += -framework CoreServices - ios: LIBS_PRIVATE += -framework UIKit + uikit: LIBS_PRIVATE += -framework UIKit } macx { OBJECTIVE_SOURCES += \ - ../../corelib/tools/qstring_mac.mm \ + ../../corelib/kernel/qcore_foundation.mm \ ../../corelib/io/qstandardpaths_mac.mm } else:unix { SOURCES += \ @@ -134,7 +139,7 @@ macx { ../../corelib/io/qstandardpaths_win.cpp } -contains(QT_CONFIG, zlib)|cross_compile { +!qtConfig(system-zlib)|cross_compile { include(../../3rdparty/zlib.pri) } else { CONFIG += no_core_dep diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 7de6fe632f..ccc6d795d7 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -878,9 +878,14 @@ void Generator::generateEnums(int index) int i; for (i = 0; i < cdef->enumList.count(); ++i) { const EnumDef &e = cdef->enumList.at(i); + int flags = 0; + if (cdef->enumDeclarations.value(e.name)) + flags |= EnumIsFlag; + if (e.isEnumClass) + flags |= EnumIsScoped; fprintf(out, " %4d, 0x%.1x, %4d, %4d,\n", stridx(e.name), - cdef->enumDeclarations.value(e.name) ? 1 : 0, + flags, e.values.count(), index); index += e.values.count() * 2; diff --git a/src/tools/moc/keywords.cpp b/src/tools/moc/keywords.cpp index 4f1d16d2c5..07c59d155f 100644 --- a/src/tools/moc/keywords.cpp +++ b/src/tools/moc/keywords.cpp @@ -30,12 +30,12 @@ // DO NOT EDIT. static const short keyword_trans[][128] = { - {0,0,0,0,0,0,0,0,0,546,543,0,0,0,0,0, + {0,0,0,0,0,0,0,0,0,561,558,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 546,252,544,547,8,38,239,545,25,26,236,234,30,235,27,237, + 561,252,559,562,8,38,239,560,25,26,236,234,30,235,27,237, 22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43, 0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,21,8,8,8,8,8,8,8,8,8,31,549,32,238,8, + 8,21,8,8,8,8,8,8,8,8,8,31,564,32,238,8, 0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13, 14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -116,7 +116,7 @@ static const short keyword_trans[][128] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,290,222,0,0,475,0,0,0, + 0,0,0,0,0,0,0,0,290,222,0,0,490,0,0,0, 0,0,0,0,55,0,0,330,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -155,7 +155,7 @@ static const short keyword_trans[][128] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,357, + 0,0,0,0,514,0,0,0,0,0,0,0,0,0,0,357, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -177,7 +177,7 @@ static const short keyword_trans[][128] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0, - 552,552,552,552,552,552,552,552,552,552,0,0,0,0,0,0, + 567,567,567,567,567,567,567,567,567,567,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -336,7 +336,7 @@ static const short keyword_trans[][128] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,551,0,0,0,0,550, + 0,0,0,0,0,0,0,0,0,0,566,0,0,0,0,565, 0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -372,29 +372,29 @@ static const short keyword_trans[][128] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,472,0,0,0,300,0,0,0,0,0,0,0,0,0,0, + 0,487,0,0,0,300,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,453,402,392,397,364,0,462,0,0,0,0,0,358, - 370,0,535,450,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,468,417,401,409,373,0,477,0,0,0,0,364,358, + 379,0,550,465,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,378,0,0,0, - 0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,387,0,0,0, + 0,0,380,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,489,0,0,0,0,0,372, + 0,0,0,0,0,0,0,0,0,504,0,0,0,0,0,381, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, @@ -402,32 +402,48 @@ static const short keyword_trans[][128] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,432,410,0,0,415,0,0,0,424,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,405,0,0,0,0,0,0,0,0,0,0,0,406, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,518,0,451,0,0,0,479,0,0,485,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,413,0,0,0,0,0,0,0,0,0,0,0,414, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,447,425,0,0,430,0,0,0,439,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,464,0,511,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,533,0,466,0,0,0,494,0,0,500,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 527,0,0,495,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,479,0,526,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 542,0,0,510,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} }; @@ -805,189 +821,204 @@ static const struct {CHARACTER, 0, 84, 363, CHARACTER}, {Q_OBJECT_TOKEN, 0, 0, 0, CHARACTER}, {CHARACTER, 0, 65, 365, CHARACTER}, - {CHARACTER, 0, 68, 366, CHARACTER}, - {CHARACTER, 0, 71, 367, CHARACTER}, - {CHARACTER, 0, 69, 368, CHARACTER}, - {CHARACTER, 0, 84, 369, CHARACTER}, + {CHARACTER, 0, 77, 366, CHARACTER}, + {CHARACTER, 0, 69, 367, CHARACTER}, + {CHARACTER, 0, 83, 368, CHARACTER}, + {CHARACTER, 0, 80, 369, CHARACTER}, + {CHARACTER, 0, 65, 370, CHARACTER}, + {CHARACTER, 0, 67, 371, CHARACTER}, + {CHARACTER, 0, 69, 372, CHARACTER}, + {Q_NAMESPACE_TOKEN, 0, 0, 0, CHARACTER}, + {CHARACTER, 0, 65, 374, CHARACTER}, + {CHARACTER, 0, 68, 375, CHARACTER}, + {CHARACTER, 0, 71, 376, CHARACTER}, + {CHARACTER, 0, 69, 377, CHARACTER}, + {CHARACTER, 0, 84, 378, CHARACTER}, {Q_GADGET_TOKEN, 0, 0, 0, CHARACTER}, {CHARACTER, 44, 0, 0, CHARACTER}, {CHARACTER, 45, 0, 0, CHARACTER}, - {CHARACTER, 0, 80, 373, CHARACTER}, - {CHARACTER, 0, 69, 374, CHARACTER}, - {CHARACTER, 0, 82, 375, CHARACTER}, - {CHARACTER, 0, 84, 376, CHARACTER}, - {CHARACTER, 0, 89, 377, CHARACTER}, + {CHARACTER, 0, 80, 382, CHARACTER}, + {CHARACTER, 0, 69, 383, CHARACTER}, + {CHARACTER, 0, 82, 384, CHARACTER}, + {CHARACTER, 0, 84, 385, CHARACTER}, + {CHARACTER, 0, 89, 386, CHARACTER}, {Q_PROPERTY_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 85, 379, CHARACTER}, - {CHARACTER, 0, 71, 380, CHARACTER}, - {CHARACTER, 0, 73, 381, CHARACTER}, - {CHARACTER, 0, 78, 382, CHARACTER}, - {CHARACTER, 0, 95, 383, CHARACTER}, - {CHARACTER, 0, 77, 384, CHARACTER}, - {CHARACTER, 0, 69, 385, CHARACTER}, - {CHARACTER, 0, 84, 386, CHARACTER}, - {CHARACTER, 0, 65, 387, CHARACTER}, - {CHARACTER, 0, 68, 388, CHARACTER}, - {CHARACTER, 0, 65, 389, CHARACTER}, - {CHARACTER, 0, 84, 390, CHARACTER}, - {CHARACTER, 0, 65, 391, CHARACTER}, + {CHARACTER, 0, 85, 388, CHARACTER}, + {CHARACTER, 0, 71, 389, CHARACTER}, + {CHARACTER, 0, 73, 390, CHARACTER}, + {CHARACTER, 0, 78, 391, CHARACTER}, + {CHARACTER, 0, 95, 392, CHARACTER}, + {CHARACTER, 0, 77, 393, CHARACTER}, + {CHARACTER, 0, 69, 394, CHARACTER}, + {CHARACTER, 0, 84, 395, CHARACTER}, + {CHARACTER, 0, 65, 396, CHARACTER}, + {CHARACTER, 0, 68, 397, CHARACTER}, + {CHARACTER, 0, 65, 398, CHARACTER}, + {CHARACTER, 0, 84, 399, CHARACTER}, + {CHARACTER, 0, 65, 400, CHARACTER}, {Q_PLUGIN_METADATA_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 78, 393, CHARACTER}, - {CHARACTER, 0, 85, 394, CHARACTER}, - {CHARACTER, 0, 77, 395, CHARACTER}, - {Q_ENUM_TOKEN, 0, 83, 396, CHARACTER}, + {CHARACTER, 0, 78, 402, CHARACTER}, + {CHARACTER, 0, 85, 403, CHARACTER}, + {CHARACTER, 0, 77, 404, CHARACTER}, + {Q_ENUM_TOKEN, 46, 0, 0, CHARACTER}, {Q_ENUMS_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 76, 398, CHARACTER}, - {CHARACTER, 0, 65, 399, CHARACTER}, - {CHARACTER, 0, 71, 400, CHARACTER}, - {Q_FLAG_TOKEN, 0, 83, 401, CHARACTER}, + {CHARACTER, 0, 78, 407, CHARACTER}, + {CHARACTER, 0, 83, 408, CHARACTER}, + {Q_ENUM_NS_TOKEN, 0, 0, 0, CHARACTER}, + {CHARACTER, 0, 76, 410, CHARACTER}, + {CHARACTER, 0, 65, 411, CHARACTER}, + {CHARACTER, 0, 71, 412, CHARACTER}, + {Q_FLAG_TOKEN, 47, 0, 0, CHARACTER}, {Q_FLAGS_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 69, 403, CHARACTER}, - {CHARACTER, 0, 67, 404, CHARACTER}, - {CHARACTER, 0, 76, 405, CHARACTER}, - {CHARACTER, 0, 65, 406, CHARACTER}, - {CHARACTER, 0, 82, 407, CHARACTER}, - {CHARACTER, 0, 69, 408, CHARACTER}, - {CHARACTER, 0, 95, 409, CHARACTER}, - {CHARACTER, 46, 0, 0, CHARACTER}, - {CHARACTER, 0, 76, 411, CHARACTER}, - {CHARACTER, 0, 65, 412, CHARACTER}, - {CHARACTER, 0, 71, 413, CHARACTER}, - {CHARACTER, 0, 83, 414, CHARACTER}, - {Q_DECLARE_FLAGS_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 78, 416, CHARACTER}, - {CHARACTER, 0, 84, 417, CHARACTER}, + {CHARACTER, 0, 78, 415, CHARACTER}, + {CHARACTER, 0, 83, 416, CHARACTER}, + {Q_FLAG_NS_TOKEN, 0, 0, 0, CHARACTER}, {CHARACTER, 0, 69, 418, CHARACTER}, - {CHARACTER, 0, 82, 419, CHARACTER}, - {CHARACTER, 0, 70, 420, CHARACTER}, + {CHARACTER, 0, 67, 419, CHARACTER}, + {CHARACTER, 0, 76, 420, CHARACTER}, {CHARACTER, 0, 65, 421, CHARACTER}, - {CHARACTER, 0, 67, 422, CHARACTER}, + {CHARACTER, 0, 82, 422, CHARACTER}, {CHARACTER, 0, 69, 423, CHARACTER}, - {Q_DECLARE_INTERFACE_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 69, 425, CHARACTER}, - {CHARACTER, 0, 84, 426, CHARACTER}, + {CHARACTER, 0, 95, 424, CHARACTER}, + {CHARACTER, 48, 0, 0, CHARACTER}, + {CHARACTER, 0, 76, 426, CHARACTER}, {CHARACTER, 0, 65, 427, CHARACTER}, - {CHARACTER, 0, 84, 428, CHARACTER}, - {CHARACTER, 0, 89, 429, CHARACTER}, - {CHARACTER, 0, 80, 430, CHARACTER}, - {CHARACTER, 0, 69, 431, CHARACTER}, + {CHARACTER, 0, 71, 428, CHARACTER}, + {CHARACTER, 0, 83, 429, CHARACTER}, + {Q_DECLARE_FLAGS_TOKEN, 0, 0, 0, CHARACTER}, + {CHARACTER, 0, 78, 431, CHARACTER}, + {CHARACTER, 0, 84, 432, CHARACTER}, + {CHARACTER, 0, 69, 433, CHARACTER}, + {CHARACTER, 0, 82, 434, CHARACTER}, + {CHARACTER, 0, 70, 435, CHARACTER}, + {CHARACTER, 0, 65, 436, CHARACTER}, + {CHARACTER, 0, 67, 437, CHARACTER}, + {CHARACTER, 0, 69, 438, CHARACTER}, + {Q_DECLARE_INTERFACE_TOKEN, 0, 0, 0, CHARACTER}, + {CHARACTER, 0, 69, 440, CHARACTER}, + {CHARACTER, 0, 84, 441, CHARACTER}, + {CHARACTER, 0, 65, 442, CHARACTER}, + {CHARACTER, 0, 84, 443, CHARACTER}, + {CHARACTER, 0, 89, 444, CHARACTER}, + {CHARACTER, 0, 80, 445, CHARACTER}, + {CHARACTER, 0, 69, 446, CHARACTER}, {Q_DECLARE_METATYPE_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 88, 433, CHARACTER}, - {CHARACTER, 0, 84, 434, CHARACTER}, - {CHARACTER, 0, 69, 435, CHARACTER}, - {CHARACTER, 0, 78, 436, CHARACTER}, - {CHARACTER, 0, 83, 437, CHARACTER}, - {CHARACTER, 0, 73, 438, CHARACTER}, - {CHARACTER, 0, 79, 439, CHARACTER}, - {CHARACTER, 0, 78, 440, CHARACTER}, - {CHARACTER, 0, 95, 441, CHARACTER}, - {CHARACTER, 0, 73, 442, CHARACTER}, - {CHARACTER, 0, 78, 443, CHARACTER}, - {CHARACTER, 0, 84, 444, CHARACTER}, - {CHARACTER, 0, 69, 445, CHARACTER}, - {CHARACTER, 0, 82, 446, CHARACTER}, - {CHARACTER, 0, 70, 447, CHARACTER}, - {CHARACTER, 0, 65, 448, CHARACTER}, - {CHARACTER, 0, 67, 449, CHARACTER}, - {CHARACTER, 0, 69, 423, CHARACTER}, - {CHARACTER, 47, 0, 0, CHARACTER}, - {CHARACTER, 0, 84, 452, CHARACTER}, - {CHARACTER, 0, 83, 401, CHARACTER}, - {CHARACTER, 0, 76, 454, CHARACTER}, - {CHARACTER, 0, 65, 455, CHARACTER}, - {CHARACTER, 0, 83, 456, CHARACTER}, - {CHARACTER, 0, 83, 457, CHARACTER}, - {CHARACTER, 0, 73, 458, CHARACTER}, - {CHARACTER, 0, 78, 459, CHARACTER}, - {CHARACTER, 0, 70, 460, CHARACTER}, - {CHARACTER, 0, 79, 461, CHARACTER}, - {Q_CLASSINFO_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 78, 463, CHARACTER}, - {CHARACTER, 48, 0, 0, CHARACTER}, - {CHARACTER, 0, 69, 465, CHARACTER}, - {CHARACTER, 0, 82, 466, CHARACTER}, - {CHARACTER, 0, 70, 467, CHARACTER}, - {CHARACTER, 0, 65, 468, CHARACTER}, - {CHARACTER, 0, 67, 469, CHARACTER}, - {CHARACTER, 0, 69, 470, CHARACTER}, + {CHARACTER, 0, 88, 448, CHARACTER}, + {CHARACTER, 0, 84, 449, CHARACTER}, + {CHARACTER, 0, 69, 450, CHARACTER}, + {CHARACTER, 0, 78, 451, CHARACTER}, + {CHARACTER, 0, 83, 452, CHARACTER}, + {CHARACTER, 0, 73, 453, CHARACTER}, + {CHARACTER, 0, 79, 454, CHARACTER}, + {CHARACTER, 0, 78, 455, CHARACTER}, + {CHARACTER, 0, 95, 456, CHARACTER}, + {CHARACTER, 0, 73, 457, CHARACTER}, + {CHARACTER, 0, 78, 458, CHARACTER}, + {CHARACTER, 0, 84, 459, CHARACTER}, + {CHARACTER, 0, 69, 460, CHARACTER}, + {CHARACTER, 0, 82, 461, CHARACTER}, + {CHARACTER, 0, 70, 462, CHARACTER}, + {CHARACTER, 0, 65, 463, CHARACTER}, + {CHARACTER, 0, 67, 464, CHARACTER}, + {CHARACTER, 0, 69, 438, CHARACTER}, + {CHARACTER, 49, 0, 0, CHARACTER}, + {CHARACTER, 0, 84, 467, CHARACTER}, + {CHARACTER, 0, 83, 413, CHARACTER}, + {CHARACTER, 0, 76, 469, CHARACTER}, + {CHARACTER, 0, 65, 470, CHARACTER}, {CHARACTER, 0, 83, 471, CHARACTER}, + {CHARACTER, 0, 83, 472, CHARACTER}, + {CHARACTER, 0, 73, 473, CHARACTER}, + {CHARACTER, 0, 78, 474, CHARACTER}, + {CHARACTER, 0, 70, 475, CHARACTER}, + {CHARACTER, 0, 79, 476, CHARACTER}, + {Q_CLASSINFO_TOKEN, 0, 0, 0, CHARACTER}, + {CHARACTER, 0, 78, 478, CHARACTER}, + {CHARACTER, 50, 0, 0, CHARACTER}, + {CHARACTER, 0, 69, 480, CHARACTER}, + {CHARACTER, 0, 82, 481, CHARACTER}, + {CHARACTER, 0, 70, 482, CHARACTER}, + {CHARACTER, 0, 65, 483, CHARACTER}, + {CHARACTER, 0, 67, 484, CHARACTER}, + {CHARACTER, 0, 69, 485, CHARACTER}, + {CHARACTER, 0, 83, 486, CHARACTER}, {Q_INTERFACES_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 108, 473, CHARACTER}, - {CHARACTER, 0, 115, 474, CHARACTER}, + {CHARACTER, 0, 108, 488, CHARACTER}, + {CHARACTER, 0, 115, 489, CHARACTER}, {SIGNALS, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 111, 476, CHARACTER}, - {CHARACTER, 0, 116, 477, CHARACTER}, - {CHARACTER, 0, 115, 478, CHARACTER}, + {CHARACTER, 0, 111, 491, CHARACTER}, + {CHARACTER, 0, 116, 492, CHARACTER}, + {CHARACTER, 0, 115, 493, CHARACTER}, {SLOTS, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 71, 480, CHARACTER}, - {CHARACTER, 0, 78, 481, CHARACTER}, - {CHARACTER, 0, 65, 482, CHARACTER}, - {CHARACTER, 0, 76, 483, CHARACTER}, - {Q_SIGNAL_TOKEN, 0, 83, 484, CHARACTER}, + {CHARACTER, 0, 71, 495, CHARACTER}, + {CHARACTER, 0, 78, 496, CHARACTER}, + {CHARACTER, 0, 65, 497, CHARACTER}, + {CHARACTER, 0, 76, 498, CHARACTER}, + {Q_SIGNAL_TOKEN, 0, 83, 499, CHARACTER}, {Q_SIGNALS_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 79, 486, CHARACTER}, - {CHARACTER, 0, 84, 487, CHARACTER}, - {Q_SLOT_TOKEN, 0, 83, 488, CHARACTER}, + {CHARACTER, 0, 79, 501, CHARACTER}, + {CHARACTER, 0, 84, 502, CHARACTER}, + {Q_SLOT_TOKEN, 0, 83, 503, CHARACTER}, {Q_SLOTS_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 86, 490, CHARACTER}, - {CHARACTER, 0, 65, 491, CHARACTER}, - {CHARACTER, 0, 84, 492, CHARACTER}, - {CHARACTER, 0, 69, 493, CHARACTER}, - {CHARACTER, 0, 95, 494, CHARACTER}, - {CHARACTER, 49, 0, 0, CHARACTER}, - {CHARACTER, 0, 76, 496, CHARACTER}, - {CHARACTER, 0, 79, 497, CHARACTER}, - {CHARACTER, 0, 84, 498, CHARACTER}, + {CHARACTER, 0, 86, 505, CHARACTER}, + {CHARACTER, 0, 65, 506, CHARACTER}, + {CHARACTER, 0, 84, 507, CHARACTER}, + {CHARACTER, 0, 69, 508, CHARACTER}, + {CHARACTER, 0, 95, 509, CHARACTER}, + {CHARACTER, 51, 0, 0, CHARACTER}, + {CHARACTER, 0, 76, 511, CHARACTER}, + {CHARACTER, 0, 79, 512, CHARACTER}, + {CHARACTER, 0, 84, 513, CHARACTER}, {Q_PRIVATE_SLOT_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 95, 500, CHARACTER}, - {CHARACTER, 0, 77, 501, CHARACTER}, - {CHARACTER, 0, 79, 502, CHARACTER}, - {CHARACTER, 0, 67, 503, CHARACTER}, - {CHARACTER, 0, 95, 504, CHARACTER}, - {CHARACTER, 0, 67, 505, CHARACTER}, - {CHARACTER, 0, 79, 506, CHARACTER}, - {CHARACTER, 0, 77, 507, CHARACTER}, - {CHARACTER, 0, 80, 508, CHARACTER}, - {CHARACTER, 0, 65, 509, CHARACTER}, - {CHARACTER, 0, 84, 510, CHARACTER}, + {CHARACTER, 0, 95, 515, CHARACTER}, + {CHARACTER, 0, 77, 516, CHARACTER}, + {CHARACTER, 0, 79, 517, CHARACTER}, + {CHARACTER, 0, 67, 518, CHARACTER}, + {CHARACTER, 0, 95, 519, CHARACTER}, + {CHARACTER, 0, 67, 520, CHARACTER}, + {CHARACTER, 0, 79, 521, CHARACTER}, + {CHARACTER, 0, 77, 522, CHARACTER}, + {CHARACTER, 0, 80, 523, CHARACTER}, + {CHARACTER, 0, 65, 524, CHARACTER}, + {CHARACTER, 0, 84, 525, CHARACTER}, {Q_MOC_COMPAT_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 79, 512, CHARACTER}, - {CHARACTER, 0, 75, 513, CHARACTER}, - {CHARACTER, 0, 65, 514, CHARACTER}, - {CHARACTER, 0, 66, 515, CHARACTER}, - {CHARACTER, 0, 76, 516, CHARACTER}, - {CHARACTER, 0, 69, 517, CHARACTER}, + {CHARACTER, 0, 79, 527, CHARACTER}, + {CHARACTER, 0, 75, 528, CHARACTER}, + {CHARACTER, 0, 65, 529, CHARACTER}, + {CHARACTER, 0, 66, 530, CHARACTER}, + {CHARACTER, 0, 76, 531, CHARACTER}, + {CHARACTER, 0, 69, 532, CHARACTER}, {Q_INVOKABLE_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 82, 519, CHARACTER}, - {CHARACTER, 0, 73, 520, CHARACTER}, - {CHARACTER, 0, 80, 521, CHARACTER}, - {CHARACTER, 0, 84, 522, CHARACTER}, - {CHARACTER, 0, 65, 523, CHARACTER}, - {CHARACTER, 0, 66, 524, CHARACTER}, - {CHARACTER, 0, 76, 525, CHARACTER}, - {CHARACTER, 0, 69, 526, CHARACTER}, + {CHARACTER, 0, 82, 534, CHARACTER}, + {CHARACTER, 0, 73, 535, CHARACTER}, + {CHARACTER, 0, 80, 536, CHARACTER}, + {CHARACTER, 0, 84, 537, CHARACTER}, + {CHARACTER, 0, 65, 538, CHARACTER}, + {CHARACTER, 0, 66, 539, CHARACTER}, + {CHARACTER, 0, 76, 540, CHARACTER}, + {CHARACTER, 0, 69, 541, CHARACTER}, {Q_SCRIPTABLE_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 82, 528, CHARACTER}, - {CHARACTER, 0, 79, 529, CHARACTER}, - {CHARACTER, 0, 80, 530, CHARACTER}, - {CHARACTER, 0, 69, 531, CHARACTER}, - {CHARACTER, 0, 82, 532, CHARACTER}, - {CHARACTER, 0, 84, 533, CHARACTER}, - {CHARACTER, 0, 89, 534, CHARACTER}, + {CHARACTER, 0, 82, 543, CHARACTER}, + {CHARACTER, 0, 79, 544, CHARACTER}, + {CHARACTER, 0, 80, 545, CHARACTER}, + {CHARACTER, 0, 69, 546, CHARACTER}, + {CHARACTER, 0, 82, 547, CHARACTER}, + {CHARACTER, 0, 84, 548, CHARACTER}, + {CHARACTER, 0, 89, 549, CHARACTER}, {Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER}, - {CHARACTER, 0, 69, 536, CHARACTER}, - {CHARACTER, 0, 86, 537, CHARACTER}, - {CHARACTER, 0, 73, 538, CHARACTER}, - {CHARACTER, 0, 83, 539, CHARACTER}, - {CHARACTER, 0, 73, 540, CHARACTER}, - {CHARACTER, 0, 79, 541, CHARACTER}, - {CHARACTER, 0, 78, 542, CHARACTER}, + {CHARACTER, 0, 69, 551, CHARACTER}, + {CHARACTER, 0, 86, 552, CHARACTER}, + {CHARACTER, 0, 73, 553, CHARACTER}, + {CHARACTER, 0, 83, 554, CHARACTER}, + {CHARACTER, 0, 73, 555, CHARACTER}, + {CHARACTER, 0, 79, 556, CHARACTER}, + {CHARACTER, 0, 78, 557, CHARACTER}, {Q_REVISION_TOKEN, 0, 0, 0, CHARACTER}, {NEWLINE, 0, 0, 0, NOTOKEN}, {QUOTE, 0, 0, 0, NOTOKEN}, {SINGLEQUOTE, 0, 0, 0, NOTOKEN}, {WHITESPACE, 0, 0, 0, NOTOKEN}, - {HASH, 0, 35, 548, HASH}, + {HASH, 0, 35, 563, HASH}, {PP_HASHHASH, 0, 0, 0, NOTOKEN}, {BACKSLASH, 0, 0, 0, NOTOKEN}, {CPP_COMMENT, 0, 0, 0, NOTOKEN}, diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp index 0734a92d5a..55cf7ed872 100644 --- a/src/tools/moc/main.cpp +++ b/src/tools/moc/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. @@ -200,20 +201,24 @@ int runMoc(int argc, char **argv) .arg(mocOutputRevision).arg(QString::fromLatin1(QT_VERSION_STR))); parser.addHelpOption(); parser.addVersionOption(); + parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); QCommandLineOption outputOption(QStringLiteral("o")); outputOption.setDescription(QStringLiteral("Write output to file rather than stdout.")); outputOption.setValueName(QStringLiteral("file")); + outputOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(outputOption); QCommandLineOption includePathOption(QStringLiteral("I")); includePathOption.setDescription(QStringLiteral("Add dir to the include path for header files.")); includePathOption.setValueName(QStringLiteral("dir")); + includePathOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(includePathOption); QCommandLineOption macFrameworkOption(QStringLiteral("F")); macFrameworkOption.setDescription(QStringLiteral("Add Mac framework to the include path for header files.")); macFrameworkOption.setValueName(QStringLiteral("framework")); + macFrameworkOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(macFrameworkOption); QCommandLineOption preprocessOption(QStringLiteral("E")); @@ -223,18 +228,26 @@ int runMoc(int argc, char **argv) QCommandLineOption defineOption(QStringLiteral("D")); defineOption.setDescription(QStringLiteral("Define macro, with optional definition.")); defineOption.setValueName(QStringLiteral("macro[=def]")); + defineOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(defineOption); QCommandLineOption undefineOption(QStringLiteral("U")); undefineOption.setDescription(QStringLiteral("Undefine macro.")); undefineOption.setValueName(QStringLiteral("macro")); + undefineOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(undefineOption); QCommandLineOption metadataOption(QStringLiteral("M")); metadataOption.setDescription(QStringLiteral("Add key/value pair to plugin meta data")); metadataOption.setValueName(QStringLiteral("key=value")); + metadataOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(metadataOption); + QCommandLineOption compilerFlavorOption(QStringLiteral("compiler-flavor")); + compilerFlavorOption.setDescription(QStringLiteral("Set the compiler flavor: either \"msvc\" or \"unix\".")); + compilerFlavorOption.setValueName(QStringLiteral("flavor")); + parser.addOption(compilerFlavorOption); + QCommandLineOption noIncludeOption(QStringLiteral("i")); noIncludeOption.setDescription(QStringLiteral("Do not generate an #include statement.")); parser.addOption(noIncludeOption); @@ -242,11 +255,13 @@ int runMoc(int argc, char **argv) QCommandLineOption pathPrefixOption(QStringLiteral("p")); pathPrefixOption.setDescription(QStringLiteral("Path prefix for included file.")); pathPrefixOption.setValueName(QStringLiteral("path")); + pathPrefixOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(pathPrefixOption); QCommandLineOption forceIncludeOption(QStringLiteral("f")); forceIncludeOption.setDescription(QStringLiteral("Force #include <file> (overwrite default).")); forceIncludeOption.setValueName(QStringLiteral("file")); + forceIncludeOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(forceIncludeOption); QCommandLineOption prependIncludeOption(QStringLiteral("b")); @@ -254,9 +269,15 @@ int runMoc(int argc, char **argv) prependIncludeOption.setValueName(QStringLiteral("file")); parser.addOption(prependIncludeOption); + QCommandLineOption includeOption(QStringLiteral("include")); + includeOption.setDescription(QStringLiteral("Parse <file> as an #include before the main source(s).")); + includeOption.setValueName(QStringLiteral("file")); + parser.addOption(includeOption); + QCommandLineOption noNotesWarningsCompatOption(QStringLiteral("n")); noNotesWarningsCompatOption.setDescription(QStringLiteral("Do not display notes (-nn) or warnings (-nw). Compatibility option.")); noNotesWarningsCompatOption.setValueName(QStringLiteral("which")); + noNotesWarningsCompatOption.setFlags(QCommandLineOption::ShortOptionStyle); parser.addOption(noNotesWarningsCompatOption); QCommandLineOption noNotesOption(QStringLiteral("no-notes")); @@ -313,9 +334,32 @@ int runMoc(int argc, char **argv) if (parser.isSet(pathPrefixOption)) moc.includePath = QFile::encodeName(parser.value(pathPrefixOption)); } + const auto includePaths = parser.values(includePathOption); for (const QString &path : includePaths) pp.includes += Preprocessor::IncludePath(QFile::encodeName(path)); + QString compilerFlavor = parser.value(compilerFlavorOption); + if (compilerFlavor.isEmpty() || compilerFlavor == QLatin1String("unix")) { + // traditional Unix compilers use both CPATH and CPLUS_INCLUDE_PATH + // $CPATH feeds to #include <...> and #include "...", whereas + // CPLUS_INCLUDE_PATH is equivalent to GCC's -isystem, so we parse later + const auto cpath = qgetenv("CPATH").split(QDir::listSeparator().toLatin1()); + for (const QByteArray &p : cpath) + pp.includes += Preprocessor::IncludePath(p); + const auto cplus_include_path = qgetenv("CPLUS_INCLUDE_PATH").split(QDir::listSeparator().toLatin1()); + for (const QByteArray &p : cplus_include_path) + pp.includes += Preprocessor::IncludePath(p); + } else if (compilerFlavor == QLatin1String("msvc")) { + // MSVC uses one environment variable: INCLUDE + const auto include = qgetenv("INCLUDE").split(QDir::listSeparator().toLatin1()); + for (const QByteArray &p : include) + pp.includes += Preprocessor::IncludePath(p); + } else { + error(qPrintable(QLatin1String("Unknown compiler flavor '") + compilerFlavor + + QLatin1String("'; valid values are: msvc, unix."))); + parser.showHelp(1); + } + const auto macFrameworks = parser.values(macFrameworkOption); for (const QString &path : macFrameworks) { // minimalistic framework support for the mac @@ -410,7 +454,31 @@ int runMoc(int argc, char **argv) moc.includes = pp.includes; // 1. preprocess - moc.symbols = pp.preprocessed(moc.filename, &in); + const auto includeFiles = parser.values(includeOption); + for (const QString &includeName : includeFiles) { + QByteArray rawName = pp.resolveInclude(QFile::encodeName(includeName), moc.filename); + if (rawName.isEmpty()) { + fprintf(stderr, "Warning: Failed to resolve include \"%s\" for moc file %s\n", + includeName.toLocal8Bit().constData(), + moc.filename.isEmpty() ? "<standard input>" : moc.filename.constData()); + } else { + QFile f(QFile::decodeName(rawName)); + if (f.open(QIODevice::ReadOnly)) { + moc.symbols += Symbol(0, MOC_INCLUDE_BEGIN, rawName); + moc.symbols += pp.preprocessed(rawName, &f); + moc.symbols += Symbol(0, MOC_INCLUDE_END, rawName); + } else { + fprintf(stderr, "Warning: Cannot open %s included by moc file %s: %s\n", + rawName.constData(), + moc.filename.isEmpty() ? "<standard input>" : moc.filename.constData(), + f.errorString().toLocal8Bit().constData()); + } + } + } + moc.symbols += pp.preprocessed(moc.filename, &in); + + // We obviously do not support MS extensions + pp.macros.remove("_MSC_EXTENSIONS"); if (!pp.preprocessOnly) { // 2. parse diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 87fb1318f9..3bd87e1f01 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -163,7 +163,7 @@ Type Moc::parseType() case SIGNED: case UNSIGNED: hasSignedOrUnsigned = true; - // fall through + Q_FALLTHROUGH(); case CONST: case VOLATILE: type.name += lexem(); @@ -538,7 +538,6 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def) return true; } - void Moc::parse() { QVector<NamespaceDef> namespaceList; @@ -554,14 +553,76 @@ void Moc::parse() until(SEMIC); } else if (!test(SEMIC)) { NamespaceDef def; - def.name = lexem(); + def.classname = lexem(); next(LBRACE); def.begin = index - 1; until(RBRACE); def.end = index; index = def.begin + 1; + + const bool parseNamespace = currentFilenames.size() <= 1; + if (parseNamespace) { + for (int i = namespaceList.size() - 1; i >= 0; --i) { + if (inNamespace(&namespaceList.at(i))) { + def.qualified.prepend(namespaceList.at(i).classname + "::"); + } + } + } + while (parseNamespace && inNamespace(&def) && hasNext()) { + switch (next()) { + case NAMESPACE: + if (test(IDENTIFIER)) { + if (test(EQ)) { + // namespace Foo = Bar::Baz; + until(SEMIC); + } else if (!test(SEMIC)) { + until(RBRACE); + } + } + break; + case Q_NAMESPACE_TOKEN: + def.hasQNamespace = true; + break; + case Q_ENUMS_TOKEN: + case Q_ENUM_NS_TOKEN: + parseEnumOrFlag(&def, false); + break; + case Q_ENUM_TOKEN: + error("Q_ENUM can't be used in a Q_NAMESPACE, use Q_ENUM_NS instead"); + break; + case Q_FLAGS_TOKEN: + case Q_FLAG_NS_TOKEN: + parseEnumOrFlag(&def, true); + break; + case Q_FLAG_TOKEN: + error("Q_FLAG can't be used in a Q_NAMESPACE, use Q_FLAG_NS instead"); + break; + case Q_DECLARE_FLAGS_TOKEN: + parseFlag(&def); + break; + case Q_CLASSINFO_TOKEN: + parseClassInfo(&def); + break; + case ENUM: { + EnumDef enumDef; + if (parseEnum(&enumDef)) + def.enumList += enumDef; + } break; + case CLASS: + case STRUCT: { + ClassDef classdef; + if (!parseClassHead(&classdef)) + continue; + while (inClass(&classdef) && hasNext()) + next(); // consume all Q_XXXX macros from this class + } break; + default: break; + } + } namespaceList += def; index = rewind; + if (!def.hasQNamespace && (!def.classInfoList.isEmpty() || !def.enumDeclarations.isEmpty())) + error("Namespace declaration lacks Q_NAMESPACE macro."); } } break; @@ -618,7 +679,7 @@ void Moc::parse() for (int i = namespaceList.size() - 1; i >= 0; --i) if (inNamespace(&namespaceList.at(i))) - def.qualified.prepend(namespaceList.at(i).name + "::"); + def.qualified.prepend(namespaceList.at(i).classname + "::"); QHash<QByteArray, QByteArray> &classHash = def.hasQObject ? knownQObjectClasses : knownGadgets; classHash.insert(def.classname, def.qualified); @@ -634,7 +695,7 @@ void Moc::parse() FunctionDef::Access access = FunctionDef::Private; for (int i = namespaceList.size() - 1; i >= 0; --i) if (inNamespace(&namespaceList.at(i))) - def.qualified.prepend(namespaceList.at(i).name + "::"); + def.qualified.prepend(namespaceList.at(i).classname + "::"); while (inClass(&def) && hasNext()) { switch ((t = next())) { case PRIVATE: @@ -698,10 +759,16 @@ void Moc::parse() case Q_ENUM_TOKEN: parseEnumOrFlag(&def, false); break; + case Q_ENUM_NS_TOKEN: + error("Q_ENUM_NS can't be used in a Q_OBJECT/Q_GADGET, use Q_ENUM instead"); + break; case Q_FLAGS_TOKEN: case Q_FLAG_TOKEN: parseEnumOrFlag(&def, true); break; + case Q_FLAG_NS_TOKEN: + error("Q_FLAG_NS can't be used in a Q_OBJECT/Q_GADGET, use Q_FLAG instead"); + break; case Q_DECLARE_FLAGS_TOKEN: parseFlag(&def); break; @@ -802,6 +869,28 @@ void Moc::parse() classHash.insert(def.qualified, def.qualified); } } + for (const auto &n : qAsConst(namespaceList)) { + if (!n.hasQNamespace) + continue; + ClassDef def; + static_cast<BaseDef &>(def) = static_cast<BaseDef>(n); + def.qualified += def.classname; + def.hasQGadget = true; + auto it = std::find_if(classList.begin(), classList.end(), [&def](const ClassDef &val) { + return def.classname == val.classname && def.qualified == val.qualified; + }); + + if (it != classList.end()) { + it->classInfoList += def.classInfoList; + it->enumDeclarations.unite(def.enumDeclarations); + it->enumList += def.enumList; + it->flagAliases.unite(def.flagAliases); + } else { + knownGadgets.insert(def.classname, def.qualified); + knownGadgets.insert(def.qualified, def.qualified); + classList += def; + } + } } static bool any_type_contains(const QVector<PropertyDef> &properties, const QByteArray &pattern) @@ -1248,7 +1337,7 @@ void Moc::parsePrivateProperty(ClassDef *def) def->propertyList += propDef; } -void Moc::parseEnumOrFlag(ClassDef *def, bool isFlag) +void Moc::parseEnumOrFlag(BaseDef *def, bool isFlag) { next(LPAREN); QByteArray identifier; @@ -1263,7 +1352,7 @@ void Moc::parseEnumOrFlag(ClassDef *def, bool isFlag) next(RPAREN); } -void Moc::parseFlag(ClassDef *def) +void Moc::parseFlag(BaseDef *def) { next(LPAREN); QByteArray flagName, enumName; @@ -1287,7 +1376,7 @@ void Moc::parseFlag(ClassDef *def) next(RPAREN); } -void Moc::parseClassInfo(ClassDef *def) +void Moc::parseClassInfo(BaseDef *def) { next(LPAREN); ClassInfoDef infoDef; diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h index 843bdeb794..6040f944f3 100644 --- a/src/tools/moc/moc.h +++ b/src/tools/moc/moc.h @@ -144,12 +144,18 @@ struct ClassInfoDef }; Q_DECLARE_TYPEINFO(ClassInfoDef, Q_MOVABLE_TYPE); -struct ClassDef { - ClassDef(): - hasQObject(false), hasQGadget(false), notifyableProperties(0) - , revisionedMethods(0), revisionedProperties(0), begin(0), end(0){} +struct BaseDef { QByteArray classname; QByteArray qualified; + QVector<ClassInfoDef> classInfoList; + QMap<QByteArray, bool> enumDeclarations; + QVector<EnumDef> enumList; + QMap<QByteArray, QByteArray> flagAliases; + int begin = 0; + int end = 0; +}; + +struct ClassDef : BaseDef { QVector<QPair<QByteArray, FunctionDef::Access> > superclassList; struct Interface @@ -162,8 +168,8 @@ struct ClassDef { }; QVector<QVector<Interface> >interfaceList; - bool hasQObject; - bool hasQGadget; + bool hasQObject = false; + bool hasQGadget = false; struct PluginData { QByteArray iid; @@ -173,25 +179,17 @@ struct ClassDef { QVector<FunctionDef> constructorList; QVector<FunctionDef> signalList, slotList, methodList, publicList; - int notifyableProperties; + int notifyableProperties = 0; QVector<PropertyDef> propertyList; - QVector<ClassInfoDef> classInfoList; - QMap<QByteArray, bool> enumDeclarations; - QVector<EnumDef> enumList; - QMap<QByteArray, QByteArray> flagAliases; - int revisionedMethods; - int revisionedProperties; + int revisionedMethods = 0; + int revisionedProperties = 0; - int begin; - int end; }; Q_DECLARE_TYPEINFO(ClassDef, Q_MOVABLE_TYPE); Q_DECLARE_TYPEINFO(ClassDef::Interface, Q_MOVABLE_TYPE); -struct NamespaceDef { - QByteArray name; - int begin; - int end; +struct NamespaceDef : BaseDef { + bool hasQNamespace = false; }; Q_DECLARE_TYPEINFO(NamespaceDef, Q_MOVABLE_TYPE); @@ -240,9 +238,9 @@ public: void parseProperty(ClassDef *def); void parsePluginData(ClassDef *def); void createPropertyDef(PropertyDef &def); - void parseEnumOrFlag(ClassDef *def, bool isFlag); - void parseFlag(ClassDef *def); - void parseClassInfo(ClassDef *def); + void parseEnumOrFlag(BaseDef *def, bool isFlag); + void parseFlag(BaseDef *def); + void parseClassInfo(BaseDef *def); void parseInterfaces(ClassDef *def); void parseDeclareInterface(); void parseDeclareMetatype(); diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp index 74c75eda5b..11bf8d7937 100644 --- a/src/tools/moc/preprocessor.cpp +++ b/src/tools/moc/preprocessor.cpp @@ -251,7 +251,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso } token = FLOATING_LITERAL; ++data; - // fall through + Q_FALLTHROUGH(); case FLOATING_LITERAL: while (is_digit_char(*data)) ++data; @@ -321,7 +321,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso ++data; } token = WHITESPACE; // one comment, one whitespace - // fall through; + Q_FALLTHROUGH(); case WHITESPACE: if (column == 1) column = 0; @@ -428,7 +428,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso } token = PP_FLOATING_LITERAL; ++data; - // fall through + Q_FALLTHROUGH(); case PP_FLOATING_LITERAL: while (is_digit_char(*data)) ++data; @@ -482,7 +482,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso ++data; } token = PP_WHITESPACE; // one comment, one whitespace - // fall through; + Q_FALLTHROUGH(); case PP_WHITESPACE: while (*data && (*data == ' ' || *data == '\t')) ++data; @@ -696,12 +696,9 @@ Symbols Preprocessor::macroExpandIdentifier(Preprocessor *that, SymbolStack &sym next = arg.at(0); } - if (!expansion.isEmpty() && expansion.constLast().token == s.token) { - Symbol last = expansion.constLast(); - expansion.pop_back(); - - if (last.token == STRING_LITERAL || s.token == STRING_LITERAL) - that->error("Can't concatenate non identifier tokens"); + if (!expansion.isEmpty() && expansion.constLast().token == s.token + && expansion.constLast().token != STRING_LITERAL) { + Symbol last = expansion.takeLast(); QByteArray lexem = last.lexem() + next.lexem(); expansion += Symbol(lineNum, last.token, lexem); @@ -1008,6 +1005,36 @@ static void mergeStringLiterals(Symbols *_symbols) } } +QByteArray Preprocessor::resolveInclude(const QByteArray &include, const QByteArray &relativeTo) +{ + // #### stringery + QFileInfo fi; + if (!relativeTo.isEmpty()) + fi.setFile(QFileInfo(QString::fromLocal8Bit(relativeTo.constData())).dir(), QString::fromLocal8Bit(include.constData())); + for (int j = 0; j < Preprocessor::includes.size() && !fi.exists(); ++j) { + const IncludePath &p = Preprocessor::includes.at(j); + if (p.isFrameworkPath) { + const int slashPos = include.indexOf('/'); + if (slashPos == -1) + continue; + fi.setFile(QString::fromLocal8Bit(p.path + '/' + include.left(slashPos) + ".framework/Headers/"), + QString::fromLocal8Bit(include.mid(slashPos + 1).constData())); + } else { + fi.setFile(QString::fromLocal8Bit(p.path.constData()), QString::fromLocal8Bit(include.constData())); + } + // try again, maybe there's a file later in the include paths with the same name + // (186067) + if (fi.isDir()) { + fi = QFileInfo(); + continue; + } + } + + if (!fi.exists() || fi.isDir()) + return QByteArray(); + return fi.canonicalFilePath().toLocal8Bit(); +} + void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed) { currentFilenames.push(filename); @@ -1028,32 +1055,9 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed) continue; until(PP_NEWLINE); - // #### stringery - QFileInfo fi; - if (local) - fi.setFile(QFileInfo(QString::fromLocal8Bit(filename.constData())).dir(), QString::fromLocal8Bit(include.constData())); - for (int j = 0; j < Preprocessor::includes.size() && !fi.exists(); ++j) { - const IncludePath &p = Preprocessor::includes.at(j); - if (p.isFrameworkPath) { - const int slashPos = include.indexOf('/'); - if (slashPos == -1) - continue; - fi.setFile(QString::fromLocal8Bit(p.path + '/' + include.left(slashPos) + ".framework/Headers/"), - QString::fromLocal8Bit(include.mid(slashPos + 1).constData())); - } else { - fi.setFile(QString::fromLocal8Bit(p.path.constData()), QString::fromLocal8Bit(include.constData())); - } - // try again, maybe there's a file later in the include paths with the same name - // (186067) - if (fi.isDir()) { - fi = QFileInfo(); - continue; - } - } - - if (!fi.exists() || fi.isDir()) + include = resolveInclude(include, local ? filename : QByteArray()); + if (include.isNull()) continue; - include = fi.canonicalFilePath().toLocal8Bit(); if (Preprocessor::preprocessedIncludes.contains(include)) continue; @@ -1173,7 +1177,7 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed) case PP_ELIF: case PP_ELSE: skipUntilEndif(); - // fall through + Q_FALLTHROUGH(); case PP_ENDIF: until(PP_NEWLINE); continue; @@ -1208,6 +1212,7 @@ Symbols Preprocessor::preprocessed(const QByteArray &filename, QFile *file) input = cleaned(input); // phase 2: tokenize for the preprocessor + index = 0; symbols = tokenize(input); #if 0 diff --git a/src/tools/moc/preprocessor.h b/src/tools/moc/preprocessor.h index 9a49751eb0..a7eb1a19e1 100644 --- a/src/tools/moc/preprocessor.h +++ b/src/tools/moc/preprocessor.h @@ -62,6 +62,7 @@ public: QList<QByteArray> frameworks; QSet<QByteArray> preprocessedIncludes; Macros macros; + QByteArray resolveInclude(const QByteArray &filename, const QByteArray &relativeTo); Symbols preprocessed(const QByteArray &filename, QFile *device); void parseDefineArguments(Macro *m); diff --git a/src/tools/moc/token.h b/src/tools/moc/token.h index 3557da8aa8..db9d319b78 100644 --- a/src/tools/moc/token.h +++ b/src/tools/moc/token.h @@ -154,12 +154,15 @@ QT_BEGIN_NAMESPACE F(RETURN) \ F(Q_OBJECT_TOKEN) \ F(Q_GADGET_TOKEN) \ + F(Q_NAMESPACE_TOKEN) \ F(Q_PROPERTY_TOKEN) \ F(Q_PLUGIN_METADATA_TOKEN) \ F(Q_ENUMS_TOKEN) \ F(Q_ENUM_TOKEN) \ + F(Q_ENUM_NS_TOKEN) \ F(Q_FLAGS_TOKEN) \ F(Q_FLAG_TOKEN) \ + F(Q_FLAG_NS_TOKEN) \ F(Q_DECLARE_FLAGS_TOKEN) \ F(Q_DECLARE_INTERFACE_TOKEN) \ F(Q_DECLARE_METATYPE_TOKEN) \ diff --git a/src/tools/moc/util/generate_keywords.cpp b/src/tools/moc/util/generate_keywords.cpp index d0f76a4c45..df850c1bdc 100644 --- a/src/tools/moc/util/generate_keywords.cpp +++ b/src/tools/moc/util/generate_keywords.cpp @@ -213,13 +213,16 @@ static const Keyword keywords[] = { { "goto", "GOTO" }, { "return", "RETURN" }, { "Q_OBJECT", "Q_OBJECT_TOKEN" }, + { "Q_NAMESPACE", "Q_NAMESPACE_TOKEN" }, { "Q_GADGET", "Q_GADGET_TOKEN" }, { "Q_PROPERTY", "Q_PROPERTY_TOKEN" }, { "Q_PLUGIN_METADATA", "Q_PLUGIN_METADATA_TOKEN" }, { "Q_ENUMS", "Q_ENUMS_TOKEN" }, { "Q_ENUM", "Q_ENUM_TOKEN" }, + { "Q_ENUM_NS", "Q_ENUM_NS_TOKEN" }, { "Q_FLAGS", "Q_FLAGS_TOKEN" }, { "Q_FLAG", "Q_FLAG_TOKEN" }, + { "Q_FLAG_NS", "Q_FLAG_NS_TOKEN" }, { "Q_DECLARE_FLAGS", "Q_DECLARE_FLAGS_TOKEN" }, { "Q_DECLARE_INTERFACE", "Q_DECLARE_INTERFACE_TOKEN" }, { "Q_DECLARE_METATYPE", "Q_DECLARE_METATYPE_TOKEN" }, diff --git a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp index 083187555d..26e7b086d9 100644 --- a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp +++ b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp @@ -335,28 +335,28 @@ static void parseCmdLine(QStringList &arguments) switch (c) { case 'P': flags |= QDBusConnection::ExportNonScriptableProperties; - // fall through + Q_FALLTHROUGH(); case 'p': flags |= QDBusConnection::ExportScriptableProperties; break; case 'S': flags |= QDBusConnection::ExportNonScriptableSignals; - // fall through + Q_FALLTHROUGH(); case 's': flags |= QDBusConnection::ExportScriptableSignals; break; case 'M': flags |= QDBusConnection::ExportNonScriptableSlots; - // fall through + Q_FALLTHROUGH(); case 'm': flags |= QDBusConnection::ExportScriptableSlots; break; case 'A': flags |= QDBusConnection::ExportNonScriptableContents; - // fall through + Q_FALLTHROUGH(); case 'a': flags |= QDBusConnection::ExportScriptableContents; break; diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index 518b7984b0..bd94017821 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -32,6 +32,7 @@ #include <qdebug.h> #include <qfile.h> #include <qfileinfo.h> +#include <qloggingcategory.h> #include <qstring.h> #include <qstringlist.h> #include <qtextstream.h> @@ -1118,6 +1119,9 @@ int main(int argc, char **argv) } } + if (verbose) + QLoggingCategory::setFilterRules(QStringLiteral("dbus.parser.debug=true")); + QDBusIntrospection::Interfaces interfaces = readInput(); cleanInterfaces(interfaces); diff --git a/src/tools/qlalr/lalr.cpp b/src/tools/qlalr/lalr.cpp index 81975a0f2a..0ccf4c1588 100644 --- a/src/tools/qlalr/lalr.cpp +++ b/src/tools/qlalr/lalr.cpp @@ -187,7 +187,7 @@ Grammar::Grammar (): tk_end = intern ("$end"); terminals.insert (tk_end); - spells.insert (tk_end, "end of file"); + spells.insert (tk_end, QLatin1String("end of file")); /*tk_error= terminals.insert (intern ("error"))*/; } diff --git a/src/tools/qlalr/lalr.h b/src/tools/qlalr/lalr.h index 28c889e63f..b303b897d4 100644 --- a/src/tools/qlalr/lalr.h +++ b/src/tools/qlalr/lalr.h @@ -337,6 +337,7 @@ public: Grammar (); Name intern (const QString &id); + Name intern (const char *id) { return intern(QString::fromUtf8(id)); } inline bool isTerminal (Name name) const { return terminals.find (name) != terminals.end (); } diff --git a/src/tools/qlalr/main.cpp b/src/tools/qlalr/main.cpp index e16d5f1e8d..c16bdcdf17 100644 --- a/src/tools/qlalr/main.cpp +++ b/src/tools/qlalr/main.cpp @@ -65,7 +65,7 @@ int main (int argc, char *argv[]) bool no_lines = false; bool debug_info = true; bool qt_copyright = false; - QString file_name = 0; + QString file_name; const QStringList args = app.arguments().mid(1); for (const QString &arg : args) { diff --git a/src/tools/qlalr/recognizer.cpp b/src/tools/qlalr/recognizer.cpp index ca2551707e..69dad1a6c1 100644 --- a/src/tools/qlalr/recognizer.cpp +++ b/src/tools/qlalr/recognizer.cpp @@ -178,7 +178,8 @@ int Recognizer::nextToken() text.clear (); if (! _M_no_lines) - text += QLatin1String ("\n#line ") + QString::number (_M_action_line) + " \"" + _M_input_file + "\"\n"; + text += QLatin1String("\n#line ") + QString::number (_M_action_line) + + QLatin1String(" \"") + _M_input_file + QLatin1String("\"\n"); inp (); // skip ':' forever @@ -215,7 +216,8 @@ int Recognizer::nextToken() text.clear (); if (! _M_no_lines) - text += QLatin1String ("\n#line ") + QString::number (_M_action_line) + " \"" + _M_input_file + "\"\n"; + text += QLatin1String ("\n#line ") + QString::number (_M_action_line) + + QLatin1String(" \"") + _M_input_file + QLatin1String("\"\n"); inp (); // skip ':' diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 3156df3f30..18772d2816 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -705,9 +705,7 @@ static void resourceDataFileMapRecursion(const RCCFileInfo *m_root, const QStrin const ChildConstIterator cend = m_root->m_children.constEnd(); for (ChildConstIterator it = m_root->m_children.constBegin(); it != cend; ++it) { const RCCFileInfo *child = it.value(); - QString childName = path; - childName += slash; - childName += child->m_name; + const QString childName = path + slash + child->m_name; if (child->m_flags & RCCFileInfo::Directory) { resourceDataFileMapRecursion(child, childName, m); } else { diff --git a/src/tools/uic/cpp/cppextractimages.cpp b/src/tools/uic/cpp/cppextractimages.cpp index 22abd54283..4d06d08dae 100644 --- a/src/tools/uic/cpp/cppextractimages.cpp +++ b/src/tools/uic/cpp/cppextractimages.cpp @@ -33,7 +33,6 @@ #include "utils.h" #include "uic.h" -#include <qdatastream.h> #include <qtextstream.h> #include <qtextcodec.h> #include <qdir.h> @@ -77,7 +76,9 @@ void ExtractImages::acceptUI(DomUI *node) m_imagesDir = dir; m_output = new QTextStream(&f); +#ifndef QT_NO_TEXTCODEC m_output->setCodec(QTextCodec::codecForName("UTF-8")); +#endif QTextStream &out = *m_output; @@ -121,7 +122,9 @@ void ExtractImages::acceptImage(DomImage *image) if (isXPM_GZ) { QTextStream *imageOut = new QTextStream(&f); +#ifndef QT_NO_TEXTCODEC imageOut->setCodec(QTextCodec::codecForName("UTF-8")); +#endif CPP::WriteIconData::writeImage(*imageOut, QString(), m_option.limitXPM_LineLength, image); delete imageOut; diff --git a/src/tools/uic/cpp/cppwritedeclaration.cpp b/src/tools/uic/cpp/cppwritedeclaration.cpp index 4c9d2db6df..3aadc878e3 100644 --- a/src/tools/uic/cpp/cppwritedeclaration.cpp +++ b/src/tools/uic/cpp/cppwritedeclaration.cpp @@ -44,27 +44,16 @@ QT_BEGIN_NAMESPACE namespace { void openNameSpaces(const QStringList &namespaceList, QTextStream &output) { - if (namespaceList.empty()) - return; - const QStringList::const_iterator cend = namespaceList.constEnd(); - for (QStringList::const_iterator it = namespaceList.constBegin(); it != cend; ++it) { - if (!it->isEmpty()) { + for (auto it = namespaceList.begin(), end = namespaceList.end(); it != end; ++it) { + if (!it->isEmpty()) output << "namespace " << *it << " {\n"; - } } } void closeNameSpaces(const QStringList &namespaceList, QTextStream &output) { - if (namespaceList.empty()) - return; - - QListIterator<QString> it(namespaceList); - it.toBack(); - while (it.hasPrevious()) { - const QString ns = it.previous(); - if (!ns.isEmpty()) { - output << "} // namespace " << ns << "\n"; - } + for (auto it = namespaceList.rbegin(), end = namespaceList.rend(); it != end; ++it) { + if (!it->isEmpty()) + output << "} // namespace " << *it << "\n"; } } diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index dfc7ee3a61..d69eeebc5c 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -774,22 +774,22 @@ void WriteInitialization::acceptWidget(DomWidget *node) // // Special handling for qtableview/qtreeview fake header attributes // - static const QStringList realPropertyNames = - (QStringList() << QLatin1String("visible") - << QLatin1String("cascadingSectionResizes") - << QLatin1String("defaultSectionSize") - << QLatin1String("highlightSections") - << QLatin1String("minimumSectionSize") - << QLatin1String("showSortIndicator") - << QLatin1String("stretchLastSection")); + static const QLatin1String realPropertyNames[] = { + QLatin1String("visible"), + QLatin1String("cascadingSectionResizes"), + QLatin1String("defaultSectionSize"), + QLatin1String("highlightSections"), + QLatin1String("minimumSectionSize"), + QLatin1String("showSortIndicator"), + QLatin1String("stretchLastSection"), + }; if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTreeView")) || m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTreeWidget"))) { DomPropertyList headerProperties; - for (const QString &realPropertyName : realPropertyNames) { - const QString upperPropertyName = realPropertyName.at(0).toUpper() - + realPropertyName.mid(1); - const QString fakePropertyName = QLatin1String("header") + upperPropertyName; + for (auto realPropertyName : realPropertyNames) { + const QString fakePropertyName = QLatin1String("header") + + QChar(realPropertyName.at(0)).toUpper() + realPropertyName.mid(1); if (DomProperty *fakeProperty = attributes.value(fakePropertyName)) { fakeProperty->setAttributeName(realPropertyName); headerProperties << fakeProperty; @@ -801,16 +801,16 @@ void WriteInitialization::acceptWidget(DomWidget *node) } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTableView")) || m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTableWidget"))) { - static const QStringList headerPrefixes = - (QStringList() << QLatin1String("horizontalHeader") - << QLatin1String("verticalHeader")); + static const QLatin1String headerPrefixes[] = { + QLatin1String("horizontalHeader"), + QLatin1String("verticalHeader"), + }; - for (const QString &headerPrefix : headerPrefixes) { + for (auto headerPrefix : headerPrefixes) { DomPropertyList headerProperties; - for (const QString &realPropertyName : realPropertyNames) { - const QString upperPropertyName = realPropertyName.at(0).toUpper() - + realPropertyName.mid(1); - const QString fakePropertyName = headerPrefix + upperPropertyName; + for (auto realPropertyName : realPropertyNames) { + const QString fakePropertyName = headerPrefix + + QChar(realPropertyName.at(0)).toUpper() + realPropertyName.mid(1); if (DomProperty *fakeProperty = attributes.value(fakePropertyName)) { fakeProperty->setAttributeName(realPropertyName); headerProperties << fakeProperty; @@ -1717,9 +1717,7 @@ void WriteInitialization::writeColorGroup(DomColorGroup *colorGroup, const QStri // new format const QList<DomColorRole *> colorRoles = colorGroup->elementColorRole(); - QListIterator<DomColorRole *> itRole(colorRoles); - while (itRole.hasNext()) { - const DomColorRole *colorRole = itRole.next(); + for (const DomColorRole *colorRole : colorRoles) { if (colorRole->hasAttributeRole()) { const QString brushName = writeBrushInitialization(colorRole->elementBrush()); m_output << m_indent << paletteName << ".setBrush(" << group @@ -1796,9 +1794,7 @@ void WriteInitialization::writeBrush(const DomBrush *brush, const QString &brush } const QList<DomGradientStop *> stops = gradient->elementGradientStop(); - QListIterator<DomGradientStop *> it(stops); - while (it.hasNext()) { - const DomGradientStop *stop = it.next(); + for (const DomGradientStop *stop : stops) { const DomColor *color = stop->elementColor(); m_output << m_indent << gradientName << ".setColorAt(" << stop->attributePosition() << ", " @@ -2027,7 +2023,7 @@ void WriteInitialization::addInitializer(Item *item, const QString &name, int column, const QString &value, const QString &directive, bool translatable) const { if (!value.isEmpty()) - item->addSetter(QLatin1String("->set") + name.at(0).toUpper() + name.mid(1) + + item->addSetter(QLatin1String("->set") + name.at(0).toUpper() + name.midRef(1) + QLatin1Char('(') + (column < 0 ? QString() : QString::number(column) + QLatin1String(", ")) + value + QLatin1String(");"), directive, translatable); } diff --git a/src/tools/uic/databaseinfo.cpp b/src/tools/uic/databaseinfo.cpp index e491d6b19a..73fcf06c54 100644 --- a/src/tools/uic/databaseinfo.cpp +++ b/src/tools/uic/databaseinfo.cpp @@ -45,7 +45,7 @@ void DatabaseInfo::acceptUI(DomUI *node) TreeWalker::acceptUI(node); - m_connections = unique(m_connections); + m_connections.removeDuplicates(); } void DatabaseInfo::acceptWidget(DomWidget *node) diff --git a/src/tools/uic/main.cpp b/src/tools/uic/main.cpp index 229e2a9c2f..e2399cd1fd 100644 --- a/src/tools/uic/main.cpp +++ b/src/tools/uic/main.cpp @@ -132,7 +132,9 @@ int runUic(int argc, char *argv[]) return 1; } out = new QTextStream(&f); +#ifndef QT_NO_TEXTCODEC out->setCodec(QTextCodec::codecForName("UTF-8")); +#endif } bool rtn = driver.uic(inputFile, out); diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp index 389214cbb2..fa775161e5 100644 --- a/src/tools/uic/uic.cpp +++ b/src/tools/uic/uic.cpp @@ -46,7 +46,6 @@ #include <qxmlstream.h> #include <qfileinfo.h> #include <qtextstream.h> -#include <qdatetime.h> QT_BEGIN_NAMESPACE diff --git a/src/tools/uic/utils.h b/src/tools/uic/utils.h index a6532eb534..7c5918cab9 100644 --- a/src/tools/uic/utils.h +++ b/src/tools/uic/utils.h @@ -132,14 +132,6 @@ inline QHash<QString, DomProperty *> propertyMap(const QList<DomProperty *> &pro return map; } -inline QStringList unique(const QStringList &lst) -{ - QHash<QString, bool> h; - for (int i=0; i<lst.size(); ++i) - h.insert(lst.at(i), true); - return h.keys(); -} - QT_END_NAMESPACE #endif // UTILS_H |