summaryrefslogtreecommitdiffstats
path: root/qmake/library/qmakeparser.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-02-19 13:25:10 +0100
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-02-25 13:55:01 +0000
commitb7e839fbbd366863292566afbe736d7432d439ea (patch)
tree8875a4935789535ef71676508cfcc5bcb5e11031 /qmake/library/qmakeparser.cpp
parent73c84fb32bfb09a87d3a63b1f0c78d3f500ba20b (diff)
don't make an even number of bangs almost entirely invisible
otherwise we'd silently accept this nonsensical code: !!defineTest(foo) {} Change-Id: I66b59c8a89852c6451ce8d7269a3dc66a53e3b1f Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'qmake/library/qmakeparser.cpp')
-rw-r--r--qmake/library/qmakeparser.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/qmake/library/qmakeparser.cpp b/qmake/library/qmakeparser.cpp
index d4e9bac86f..0df3c16ea0 100644
--- a/qmake/library/qmakeparser.cpp
+++ b/qmake/library/qmakeparser.cpp
@@ -320,7 +320,7 @@ void QMakeParser::read(ProFile *pro, const QString &in, int line, SubGrammar gra
m_canElse = false;
freshLine:
m_state = StNew;
- m_invert = false;
+ m_invert = 0;
m_operator = NoOperator;
m_markLine = m_lineNo;
m_inError = false;
@@ -603,7 +603,7 @@ void QMakeParser::read(ProFile *pro, const QString &in, int line, SubGrammar gra
quote = 0;
goto nextChr;
} else if (c == '!' && ptr == xprPtr && context == CtxTest) {
- m_invert ^= true;
+ m_invert++;
goto nextChr;
}
} else if (c == '\'' || c == '"') {
@@ -666,7 +666,7 @@ void QMakeParser::read(ProFile *pro, const QString &in, int line, SubGrammar gra
term = ':';
goto funcCall;
} else if (c == '!' && ptr == xprPtr) {
- m_invert ^= true;
+ m_invert++;
goto nextChr;
} else if (c == ':') {
FLUSH_LHS_LITERAL();
@@ -923,7 +923,7 @@ void QMakeParser::warnOperator(const char *msg)
{
if (m_invert) {
languageWarning(fL1S("Stray NOT operator %1.").arg(fL1S(msg)));
- m_invert = false;
+ m_invert = 0;
}
if (m_operator == AndOperator) {
languageWarning(fL1S("Stray AND operator %1.").arg(fL1S(msg)));
@@ -939,7 +939,7 @@ bool QMakeParser::failOperator(const char *msg)
bool fail = false;
if (m_invert) {
parseError(fL1S("Unexpected NOT operator %1.").arg(fL1S(msg)));
- m_invert = false;
+ m_invert = 0;
fail = true;
}
if (m_operator == AndOperator) {
@@ -980,10 +980,9 @@ void QMakeParser::finalizeTest(ushort *&tokPtr)
flushScopes(tokPtr);
putLineMarker(tokPtr);
putOperator(tokPtr);
- if (m_invert) {
+ if (m_invert & 1)
putTok(tokPtr, TokNot);
- m_invert = false;
- }
+ m_invert = 0;
m_state = StCond;
m_canElse = true;
}
@@ -994,7 +993,7 @@ void QMakeParser::bogusTest(ushort *&tokPtr, const QString &msg)
parseError(msg);
flushScopes(tokPtr);
m_operator = NoOperator;
- m_invert = false;
+ m_invert = 0;
m_state = StCond;
m_canElse = true;
}