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
|
lex(tk); // consume the identifier
|
||||||
|
|
||||||
|
// consume comments
|
||||||
|
while (tk->isComment()) {
|
||||||
|
lex(tk);
|
||||||
|
if (!tk)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (tk->isNot(T_LPAREN))
|
if (tk->isNot(T_LPAREN))
|
||||||
//### TODO: error message
|
//### TODO: error message
|
||||||
return false;
|
return false;
|
||||||
|
@@ -329,6 +329,7 @@ private slots:
|
|||||||
void dont_eagerly_expand_data();
|
void dont_eagerly_expand_data();
|
||||||
void comparisons_data();
|
void comparisons_data();
|
||||||
void comparisons();
|
void comparisons();
|
||||||
|
void comments_before_args();
|
||||||
void comments_within();
|
void comments_within();
|
||||||
void comments_within_data();
|
void comments_within_data();
|
||||||
void comments_within2();
|
void comments_within2();
|
||||||
@@ -1239,6 +1240,28 @@ void tst_Preprocessor::comments_within_data()
|
|||||||
QTest::newRow("case 7") << original << expected;
|
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()
|
void tst_Preprocessor::comments_within2()
|
||||||
{
|
{
|
||||||
compare_input_output(true);
|
compare_input_output(true);
|
||||||
|
Reference in New Issue
Block a user