summaryrefslogtreecommitdiffstats
path: root/src/tools/moc
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2013-09-25 21:36:15 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-17 01:36:37 +0100
commit55659fb5a4efd3fee813627350287c0b45a6dc9c (patch)
tree14756bd173ed3251483e65cac76d135b36d842f7 /src/tools/moc
parent39262323d32306fb8f3bd0f5543b406a786c088e (diff)
moc: Fix parsing of complex defines defined via command line
Since now in Qt5 the moc does full macro substitution, it needs to handle the defines passed is command argument, even if they span over multiple tokens, or if they do not have any token. Example: moc '-DCOMPLEX=QVector<int>' '-DEMPTY=' foo.h [ChangeLog][moc] Fixed passing -D of a macro defined to something more complex than a single identifier. Task-number: QTBUG-33668 Change-Id: Ie8131de215f1659a24af4778d52ee40cda19759f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Diffstat (limited to 'src/tools/moc')
-rw-r--r--src/tools/moc/main.cpp3
-rw-r--r--src/tools/moc/preprocessor.cpp3
-rw-r--r--src/tools/moc/preprocessor.h2
3 files changed, 5 insertions, 3 deletions
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
index 3ae6445093..0a5f6ec241 100644
--- a/src/tools/moc/main.cpp
+++ b/src/tools/moc/main.cpp
@@ -343,7 +343,8 @@ int runMoc(int argc, char **argv)
parser.showHelp(1);
}
Macro macro;
- macro.symbols += Symbol(0, PP_IDENTIFIER, value);
+ macro.symbols = Preprocessor::tokenize(value, 1, Preprocessor::TokenizeDefine);
+ macro.symbols.removeLast(); // remove the EOF symbol
pp.macros.insert(name, macro);
}
foreach (const QString &arg, parser.values(undefineOption)) {
diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp
index 3615262b67..2de495f010 100644
--- a/src/tools/moc/preprocessor.cpp
+++ b/src/tools/moc/preprocessor.cpp
@@ -158,8 +158,7 @@ bool Preprocessor::skipBranch()
}
-enum TokenizeMode { TokenizeCpp, TokenizePreprocessor, PreparePreprocessorStatement, TokenizePreprocessorStatement, TokenizeInclude, PrepareDefine, TokenizeDefine };
-static Symbols tokenize(const QByteArray &input, int lineNum = 1, TokenizeMode mode = TokenizeCpp)
+Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocessor::TokenizeMode mode)
{
Symbols symbols;
const char *begin = input.constData();
diff --git a/src/tools/moc/preprocessor.h b/src/tools/moc/preprocessor.h
index dc7c98de85..6403955c1b 100644
--- a/src/tools/moc/preprocessor.h
+++ b/src/tools/moc/preprocessor.h
@@ -89,6 +89,8 @@ public:
int evaluateCondition();
+ enum TokenizeMode { TokenizeCpp, TokenizePreprocessor, PreparePreprocessorStatement, TokenizePreprocessorStatement, TokenizeInclude, PrepareDefine, TokenizeDefine };
+ static Symbols tokenize(const QByteArray &input, int lineNum = 1, TokenizeMode mode = TokenizeCpp);
private:
void until(Token);