From 55d0e4f860cf0bddfb176708768c9b592451ec37 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 3 Mar 2009 16:32:08 +0100 Subject: [PATCH] Improved the way we expand function-like macros when we can't collect all the arguments. --- src/libs/cplusplus/pp-engine.cpp | 5 ++--- .../preprocessor/tst_preprocessor.cpp | 22 +++++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 350e6108001..08b286a2bc1 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -810,9 +810,8 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour ++_dot; } - if (_dot->isNot(T_RPAREN)) { - // ### warning expected T_RPAREN - } + if (_dot->isNot(T_RPAREN)) + _result->append(spell); else expandFunctionLikeMacro(identifierToken, m); diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 7bb98f0590a..4d91f2c79fd 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -1,7 +1,7 @@ #include #include -CPLUSPLUS_USE_NAMESPACE +using namespace CPlusPlus; class tst_Preprocessor: public QObject { @@ -9,21 +9,35 @@ Q_OBJECT private Q_SLOTS: void pp_with_no_client(); + + void unfinished_function_like_macro_call(); }; void tst_Preprocessor::pp_with_no_client() { - using namespace CPlusPlus; - Client *client = 0; // no client. Environment env; Preprocessor preprocess(client, &env); QByteArray preprocessed = preprocess("", - "#define foo(a,b) a + b\nfoo(1, 2)\n"); + "\n#define foo(a,b) a + b" + "\nfoo(1, 2)\n"); QByteArray expected = "1 + 2"; QCOMPARE(preprocessed.trimmed(), expected); } +void tst_Preprocessor::unfinished_function_like_macro_call() +{ + Client *client = 0; // no client. + Environment env; + + Preprocessor preprocess(client, &env); + QByteArray preprocessed = preprocess("", + "\n#define foo(a,b) a + b" + "\nfoo(1, 2\n"); + QByteArray expected = "foo"; + QCOMPARE(preprocessed.trimmed(), expected); +} + QTEST_APPLESS_MAIN(tst_Preprocessor) #include "tst_preprocessor.moc"