Fix parsing of #if defined expression

We only need to match the closing parentheses if there was an opening one

This has caused mis-parsing of tst_qbytearray.cpp

Change-Id: I9d52916e3ed8549c5ddd968092451fef7389a952
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
This commit is contained in:
Olivier Goffart 2011-11-10 14:56:55 +01:00 committed by Qt by Nokia
parent c888e20f22
commit 96611a677f
2 changed files with 25 additions and 3 deletions

View File

@ -538,12 +538,13 @@ void Preprocessor::substituteUntilNewline(Symbols &substituted, MacroSafeSet saf
continue;
}
} else if (token == PP_DEFINED) {
test(PP_LPAREN);
bool braces = test(PP_LPAREN);
next(PP_IDENTIFIER);
Symbol definedOrNotDefined = symbol();
definedOrNotDefined.token = macros.contains(definedOrNotDefined)? PP_MOC_TRUE : PP_MOC_FALSE;
substituted += definedOrNotDefined;
test(PP_RPAREN);
if (braces)
test(PP_RPAREN);
continue;
} else if (token == PP_NEWLINE) {
substituted += symbol();

View File

@ -346,11 +346,28 @@ private slots:
void invalidSlot() {}
#endif
friend class Receiver; // task #85783
signals:
friend class Sender; // task #85783
#define MACRO_DEFINED
#if !(defined MACRO_UNDEF || defined MACRO_DEFINED) || 1
void signalInIf1();
#else
void doNotExist();
#endif
#if !(!defined MACRO_UNDEF || !defined MACRO_DEFINED) && 1
void doNotExist();
#else
void signalInIf2();
#endif
#if !(!defined (MACRO_DEFINED) || !defined (MACRO_UNDEF)) && 1
void doNotExist();
#else
void signalInIf3();
#endif
public slots:
void const slotWithSillyConst() {}
@ -756,6 +773,10 @@ void tst_Moc::preprocessorConditionals()
QVERIFY(mobj->indexOfSlot("slotInIf()") != -1);
QVERIFY(mobj->indexOfSlot("slotInLastElse()") != -1);
QVERIFY(mobj->indexOfSlot("slotInElif()") != -1);
QVERIFY(mobj->indexOfSignal("signalInIf1()") != -1);
QVERIFY(mobj->indexOfSignal("signalInIf2()") != -1);
QVERIFY(mobj->indexOfSignal("signalInIf3()") != -1);
QVERIFY(mobj->indexOfSignal("doNotExist()") == -1);
}
void tst_Moc::blackslashNewlines()