From 965daabe6050644458f71d3a918b01d5218aa1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 18 Jan 2009 16:56:12 +0000 Subject: [PATCH] preprocessor: Make sure that "#define ABC (a+b+c)" is expanded correctly --- src/preprocessor.cpp | 19 +++++++++++-------- test/testpreprocessor.cpp | 8 ++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/preprocessor.cpp b/src/preprocessor.cpp index 3fc5d9bce..570572006 100644 --- a/src/preprocessor.cpp +++ b/src/preprocessor.cpp @@ -466,18 +466,21 @@ public: if (tokens() && tokens()->isName()) _name = tokens()->str(); - // Extract macro parameters - if (Token::Match(tokens(), "%var% ( %var%")) + std::string::size_type pos = macro.find_first_of(" ("); + if ( pos != std::string::npos && macro[pos] == '(' ) { - for (const Token *tok = tokens()->tokAt(2); tok; tok = tok->next()) + // Extract macro parameters + if (Token::Match(tokens(), "%var% ( %var%")) { - if (tok->str() == ")") - break; - if (tok->isName()) - _params.push_back(tok->str()); + for (const Token *tok = tokens()->tokAt(2); tok; tok = tok->next()) + { + if (tok->str() == ")") + break; + if (tok->isName()) + _params.push_back(tok->str()); + } } } - } const Token *tokens() const diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 2d304c203..0313d4074 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -75,6 +75,7 @@ private: TEST_CASE(macro_simple3); TEST_CASE(macro_simple4); TEST_CASE(macro_simple5); + TEST_CASE(macro_simple6); TEST_CASE(macro_mismatch); TEST_CASE(preprocessor_inside_string); TEST_CASE(preprocessor_undef); @@ -486,6 +487,13 @@ private: ASSERT_EQUALS("\n\nvoid foo()\n{\n int temp = 0;\n if( temp > 0 ) return 1;\n}\n", Preprocessor::expandMacros(filedata)); } + void macro_simple6() + { + const char filedata[] = "#define ABC (a+b+c)\n" + "ABC"; + ASSERT_EQUALS("\n(a+b+c)", Preprocessor::expandMacros(filedata)); + } + void macro_mismatch() { const char filedata[] = "#define AAA(aa,bb) f(aa)\n"