From ecdfee850dc72d85db6b887e069172dd40bede57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 11 Jan 2009 15:07:13 +0000 Subject: [PATCH] preprocessor: expand macro without parameters --- src/preprocessor.cpp | 12 +++++++++++- test/testpreprocessor.cpp | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/preprocessor.cpp b/src/preprocessor.cpp index 47544ae7f..1b8f01f8a 100644 --- a/src/preprocessor.cpp +++ b/src/preprocessor.cpp @@ -483,6 +483,14 @@ std::string Preprocessor::expandMacros(std::string code) if (pos1 != 0 && (isalnum(code[pos1-1]) || code[pos1-1] == '_')) continue; + // The char after the macroname must not be alphanumeric or '_' + if ( pos1 + macroname.length() < code.length() ) + { + std::string::size_type pos2 = pos1 + macroname.length(); + if (isalnum(code[pos2]) || code[pos2] == '_') + continue; + } + std::vector params; std::string::size_type pos2 = pos1 + macroname.length(); if (pos2 >= macro.length()) @@ -556,7 +564,9 @@ std::string Preprocessor::expandMacros(std::string code) } // Insert macro code.. - code.erase(pos1, pos2 + 1 - pos1); + if ( !macroparams.empty() ) + ++pos2; + code.erase(pos1, pos2 - pos1); code.insert(pos1, macrocode); pos1 += macrocode.length(); } diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 62d511f7f..cba5912ec 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -70,6 +70,7 @@ private: // Macros.. TEST_CASE(macro_simple1); TEST_CASE(macro_simple2); + TEST_CASE(macro_simple3); TEST_CASE(macro_mismatch); TEST_CASE(preprocessor_inside_string); } @@ -442,6 +443,13 @@ private: ASSERT_EQUALS("\na()