summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/bootstrap/bootstrap.pro13
-rw-r--r--src/tools/moc/generator.cpp7
-rw-r--r--src/tools/moc/keywords.cpp375
-rw-r--r--src/tools/moc/main.cpp70
-rw-r--r--src/tools/moc/moc.cpp105
-rw-r--r--src/tools/moc/moc.h42
-rw-r--r--src/tools/moc/preprocessor.cpp77
-rw-r--r--src/tools/moc/preprocessor.h1
-rw-r--r--src/tools/moc/token.h3
-rw-r--r--src/tools/moc/util/generate_keywords.cpp3
-rw-r--r--src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp8
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp4
-rw-r--r--src/tools/qlalr/lalr.cpp2
-rw-r--r--src/tools/qlalr/lalr.h1
-rw-r--r--src/tools/qlalr/main.cpp2
-rw-r--r--src/tools/qlalr/recognizer.cpp6
-rw-r--r--src/tools/rcc/rcc.cpp4
-rw-r--r--src/tools/uic/cpp/cppextractimages.cpp5
-rw-r--r--src/tools/uic/cpp/cppwritedeclaration.cpp21
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp50
-rw-r--r--src/tools/uic/databaseinfo.cpp2
-rw-r--r--src/tools/uic/main.cpp2
-rw-r--r--src/tools/uic/uic.cpp1
-rw-r--r--src/tools/uic/utils.h8
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