diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 36d0d4177..557fea4fa 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -2124,12 +2124,14 @@ public: else if (_params.empty()) { - std::string::size_type pos = _macro.find(" "); + std::string::size_type pos = _macro.find_first_of(" \""); if (pos == std::string::npos) macrocode = ""; else { - macrocode = _macro.substr(pos + 1); + if (_macro[pos] == ' ') + pos++; + macrocode = _macro.substr(pos); if ((pos = macrocode.find_first_of("\r\n")) != std::string::npos) macrocode.erase(pos); } diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index fbd012632..fdeb61d22 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -149,6 +149,7 @@ private: TEST_CASE(macro_simple12); TEST_CASE(macro_simple13); TEST_CASE(macro_simple14); + TEST_CASE(macro_simple15); TEST_CASE(macroInMacro); TEST_CASE(macro_mismatch); TEST_CASE(macro_linenumbers); @@ -1589,6 +1590,13 @@ private: ASSERT_EQUALS("\nprintf(\" a \");\n", OurPreprocessor::expandMacros(filedata)); } + void macro_simple15() + { + const char filedata[] = "#define FOO\"foo\"\n" + "FOO\n"; + ASSERT_EQUALS("\n\"foo\"\n", OurPreprocessor::expandMacros(filedata)); + } + void macroInMacro() { {