diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index e827551c2..e84a2fd4b 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -3151,7 +3151,18 @@ std::string Preprocessor::expandMacros(const std::string &code, std::string file chr = !chr; else if (str || chr) continue; - else if (std::isalnum(macrocode[i]) || macrocode[i] == '_') { + else if (macrocode[i] == '.') { // 5. / .5 + if ((i > 0U && std::isdigit(macrocode[i-1])) || + (i+1 < macrocode.size() && std::isdigit(macrocode[i+1]))) { + if (i > 0U && !std::isdigit(macrocode[i-1])) { + macrocode.insert(i, 1U, macroChar); + i++; + } + i++; + if (i 0U) && (!std::isalnum(macrocode[i-1])) && (macrocode[i-1] != '_') && diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 856143261..66d6a2a17 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -2002,6 +2002,14 @@ private: const char filedata5[] = "#define A (1.7f)\n" "a=A;"; ASSERT_EQUALS("\na=$($1.7f);", OurPreprocessor::expandMacros(filedata5)); + + const char filedata6[] = "#define A (.1)\n" + "a=A;"; + ASSERT_EQUALS("\na=$($.1);", OurPreprocessor::expandMacros(filedata6)); + + const char filedata7[] = "#define A (1.)\n" + "a=A;"; + ASSERT_EQUALS("\na=$($1.);", OurPreprocessor::expandMacros(filedata7)); } void macroInMacro1() {