diff --git a/simplecpp.cpp b/simplecpp.cpp index 77f635e5..81d09867 100644 --- a/simplecpp.cpp +++ b/simplecpp.cpp @@ -1994,14 +1994,17 @@ namespace simplecpp { if (nameTokInst->str() == "__FILE__") { output.push_back(new Token('\"'+output.file(loc)+'\"', loc)); + output.back()->macro = "__FILE__"; return nameTokInst->next; } if (nameTokInst->str() == "__LINE__") { output.push_back(new Token(toString(loc.line), loc)); + output.back()->macro = "__LINE__"; return nameTokInst->next; } if (nameTokInst->str() == "__COUNTER__") { output.push_back(new Token(toString(usageList.size()-1U), loc)); + output.back()->macro = "__COUNTER__"; return nameTokInst->next; } diff --git a/test.cpp b/test.cpp index 247f63e1..2b0e8ee0 100644 --- a/test.cpp +++ b/test.cpp @@ -3782,6 +3782,31 @@ static void tokenMacro5() ASSERT_EQUALS("SET_BPF_JUMP", tok->macro); } +static void tokenMacro6() +{ + const char code[] = "#define FILE() __FILE__\n" + "#define LINE() __LINE__\n" + "#define COUNTER() __COUNTER__\n" + "FILE()\n" + "LINE()\n" + "COUNTER()\n"; + std::vector files; + simplecpp::FileDataCache cache; + simplecpp::TokenList tokenList(files); + const simplecpp::TokenList rawtokens = makeTokenList(code,files); + simplecpp::preprocess(tokenList, rawtokens, files, cache, simplecpp::DUI()); + const simplecpp::Token *tok; + + tok = tokenList.cfront(); + ASSERT_EQUALS("__FILE__", tok->macro); + + tok = tok->next; + ASSERT_EQUALS("__LINE__", tok->macro); + + tok = tok->next; + ASSERT_EQUALS("__COUNTER__", tok->macro); +} + static void undef() { const char code[] = "#define A\n" @@ -4781,6 +4806,7 @@ static void runTests(int argc, char **argv, Input input) TEST_CASE(tokenMacro3); TEST_CASE(tokenMacro4); TEST_CASE(tokenMacro5); + TEST_CASE(tokenMacro6); TEST_CASE(undef);