forked from qt-creator/qt-creator
C++: fix macro calls with comment before arguments
When in 'keep comments' mode, the preprocessor does not properly handle macro calls with comments between the macro name and the opening parenthesis: "FOO /*something to say*/ (45)". Change-Id: I6fe733242e4d2ccff2985d17399d0a084917415a Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
f7470d3230
commit
4c43655cec
@@ -1330,6 +1330,13 @@ bool Preprocessor::collectActualArguments(PPToken *tk, QVector<QVector<PPToken>
|
||||
|
||||
lex(tk); // consume the identifier
|
||||
|
||||
// consume comments
|
||||
while (tk->isComment()) {
|
||||
lex(tk);
|
||||
if (!tk)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (tk->isNot(T_LPAREN))
|
||||
//### TODO: error message
|
||||
return false;
|
||||
|
@@ -329,6 +329,7 @@ private slots:
|
||||
void dont_eagerly_expand_data();
|
||||
void comparisons_data();
|
||||
void comparisons();
|
||||
void comments_before_args();
|
||||
void comments_within();
|
||||
void comments_within_data();
|
||||
void comments_within2();
|
||||
@@ -1239,6 +1240,28 @@ void tst_Preprocessor::comments_within_data()
|
||||
QTest::newRow("case 7") << original << expected;
|
||||
}
|
||||
|
||||
void tst_Preprocessor::comments_before_args()
|
||||
{
|
||||
Client *client = 0; // no client.
|
||||
Environment env;
|
||||
|
||||
Preprocessor preprocess(client, &env);
|
||||
preprocess.setKeepComments(true);
|
||||
QByteArray preprocessed = preprocess.run(QLatin1String("<stdin>"),
|
||||
"\n#define foo(a,b) int a = b;"
|
||||
"\nfoo/*C comment*/(a,1)\n"
|
||||
"\nfoo/**Doxygen comment*/(b,2)\n"
|
||||
"\nfoo//C++ comment\n(c,3)\n"
|
||||
"\nfoo///Doxygen C++ comment\n(d,4)\n"
|
||||
"\nfoo/*multiple*///comments\n/**as well*/(e,5)\n",
|
||||
true, false);
|
||||
|
||||
preprocessed = preprocessed.simplified();
|
||||
// DUMP_OUTPUT(preprocessed);
|
||||
QCOMPARE(simplified(preprocessed),
|
||||
QString("int a=1;int b=2;int c=3;int d=4;int e=5;"));
|
||||
}
|
||||
|
||||
void tst_Preprocessor::comments_within2()
|
||||
{
|
||||
compare_input_output(true);
|
||||
|
Reference in New Issue
Block a user