Preprocessor: support for ##-comma-eating in variadic macros; passing now fmt2 test.

This commit is contained in:
Leandro Penz 2009-02-13 13:34:24 +00:00
parent 127a910516
commit de80baeea1
2 changed files with 10 additions and 2 deletions

View File

@ -645,6 +645,7 @@ public:
tok = tok->next();
if (tok)
{
bool optcomma = false;
while ((tok = tok->next()) != NULL)
{
std::string str = tok->str();
@ -667,8 +668,9 @@ public:
str = "";
for (unsigned int j = _params.size() - 1; j < params2.size(); ++j)
{
if (j > _params.size() - 1)
if (optcomma || j > _params.size() - 1)
str += ",";
optcomma = false;
str += params2[j];
}
break;
@ -681,6 +683,12 @@ public:
}
}
}
if (_variadic && Token::Match(tok, ",") && tok->next() && Token::Match(tok->next(), "##"))
{
optcomma = true;
continue;
}
optcomma = false;
macrocode += str;
if (Token::Match(tok, "%type% %var%"))
macrocode += " ";

View File

@ -102,7 +102,7 @@ private:
TEST_CASE(preprocessor_doublesharp);
TEST_CASE(preprocessor_include_in_str);
TEST_CASE(fmt1);
// TODO TEST_CASE(fmt2);
TEST_CASE(fmt2);
TEST_CASE(multi_character_character);
TEST_CASE(stringify);