From 72c3ba791ed898ceb1d706f467dbacd19c4ab95c Mon Sep 17 00:00:00 2001 From: Erik Verbruggen <erik.verbruggen@nokia.com> Date: Mon, 22 Feb 2010 13:11:09 +0100 Subject: [PATCH] Fixed pre-processor handling for Q_PROPERTY, Q_ENUMS and Q_FLAGS. --- src/libs/cplusplus/pp-engine.cpp | 43 +++++++++++++++---------------- src/shared/cplusplus/Keywords.cpp | 12 ++++----- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 3f3c7099a1f..6a6e5274272 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -766,34 +766,27 @@ void Preprocessor::preprocess(const QString &fileName, const QByteArray &source, expandBuiltinMacro(identifierToken, spell); else { - if (spell != "Q_PROPERTY" - && spell != "Q_INVOKABLE" - && spell != "Q_ENUMS" - && spell != "Q_FLAGS") { - - // ### FIXME: shouldn't this be T_Q_PROPERTY & friends? - - if (Macro *m = env->resolve(spell)) { - if (! m->isFunctionLike()) { - if (0 == (m = processObjectLikeMacro(identifierToken, spell, m))) - continue; + if (Macro *m = env->resolve(spell)) { + if (! m->isFunctionLike()) { + if (0 == (m = processObjectLikeMacro(identifierToken, spell, m))) + continue; - // the macro expansion generated something that looks like - // a function-like macro. - } + // the macro expansion generated something that looks like + // a function-like macro. + } - // `m' is function-like macro. - if (_dot->is(T_LPAREN)) { - QVector<MacroArgumentReference> actuals; - collectActualArguments(&actuals); + // `m' is function-like macro. + if (_dot->is(T_LPAREN)) { + QVector<MacroArgumentReference> actuals; + collectActualArguments(&actuals); - if (_dot->is(T_RPAREN)) { - expandFunctionLikeMacro(identifierToken, m, actuals); - continue; - } + if (_dot->is(T_RPAREN)) { + expandFunctionLikeMacro(identifierToken, m, actuals); + continue; } } } + // it's not a function or object-like macro. out(spell); } @@ -1390,6 +1383,12 @@ bool Preprocessor::isQtReservedWord(const QByteArray ¯oId) const return true; else if (size == 3 && macroId.at(0) == 'Q' && macroId == "Q_Q") return true; + else if (size == 10 && macroId.at(0) == 'Q' && macroId == "Q_PROPERTY") + return true; + else if (size == 7 && macroId.at(0) == 'Q' && macroId == "Q_ENUMS") + return true; + else if (size == 7 && macroId.at(0) == 'Q' && macroId == "Q_FLAGS") + return true; else if (size == 6 && macroId.at(0) == 'S' && macroId == "SIGNAL") return true; else if (size == 4 && macroId.at(0) == 'S' && macroId == "SLOT") diff --git a/src/shared/cplusplus/Keywords.cpp b/src/shared/cplusplus/Keywords.cpp index e1e45373ea6..3ea26e24193 100644 --- a/src/shared/cplusplus/Keywords.cpp +++ b/src/shared/cplusplus/Keywords.cpp @@ -745,7 +745,7 @@ static inline int classify7(const char *s, bool q) { return T_IDENTIFIER; } -static inline int classify8(const char *s, bool) { +static inline int classify8(const char *s, bool q) { if (s[0] == '_') { if (s[1] == '_') { if (s[2] == 'i') { @@ -910,7 +910,7 @@ static inline int classify8(const char *s, bool) { } } } - else if (s[0] == 'Q') { + else if (q && s[0] == 'Q') { if (s[1] == '_') { if (s[2] == 'S') { if (s[3] == 'I') { @@ -1024,7 +1024,7 @@ static inline int classify9(const char *s, bool q) { return T_IDENTIFIER; } -static inline int classify10(const char *s, bool) { +static inline int classify10(const char *s, bool q) { if (s[0] == '_') { if (s[1] == '_') { if (s[2] == 'i') { @@ -1101,7 +1101,7 @@ static inline int classify10(const char *s, bool) { } } } - else if (s[0] == 'Q') { + else if (q && s[0] == 'Q') { if (s[1] == '_') { if (s[2] == 'P') { if (s[3] == 'R') { @@ -1125,7 +1125,7 @@ static inline int classify10(const char *s, bool) { return T_IDENTIFIER; } -static inline int classify11(const char *s, bool) { +static inline int classify11(const char *s, bool q) { if (s[0] == '_') { if (s[1] == '_') { if (s[2] == 'a') { @@ -1172,7 +1172,7 @@ static inline int classify11(const char *s, bool) { } } } - else if (s[0] == 'Q') { + else if (q && s[0] == 'Q') { if (s[1] == '_') { if (s[2] == 'I') { if (s[3] == 'N') { -- GitLab