Improve fix made for Ticket #85 to handle strings that are in 3 parts also.

This commit is contained in:
Reijo Tomperi 2009-02-08 10:25:33 +00:00
parent 4305d749ff
commit da3efe8fa2
3 changed files with 27 additions and 1 deletions

View File

@ -556,7 +556,7 @@ void Tokenizer::simplifyTokenList()
// Combine strings // Combine strings
for (Token *tok = _tokens; tok; tok = tok->next()) for (Token *tok = _tokens; tok; tok = tok->next())
{ {
if (tok->str()[0] == '"' && tok->next() && tok->next()->str()[0] == '"') while (tok->str()[0] == '"' && tok->next() && tok->next()->str()[0] == '"')
{ {
// Two strings after each other, combine them // Two strings after each other, combine them
std::string temp = tok->str(); std::string temp = tok->str();

View File

@ -107,6 +107,7 @@ private:
"const char *a =\n" "const char *a =\n"
"{\n" "{\n"
"\"hello \"\n" "\"hello \"\n"
"\"more \"\n"
"\"world\"\n" "\"world\"\n"
"};\n" "};\n"
"}\n"); "}\n");

View File

@ -109,6 +109,7 @@ private:
TEST_CASE(sizeof4); TEST_CASE(sizeof4);
TEST_CASE(simplify_numeric_condition); TEST_CASE(simplify_numeric_condition);
TEST_CASE(tokenize_double); TEST_CASE(tokenize_double);
TEST_CASE(tokenize_strings);
} }
@ -1008,6 +1009,30 @@ private:
ostr << " " << tok->str(); ostr << " " << tok->str();
ASSERT_EQUALS(std::string(" void f ( ) { double a = 4.2 ; float b = 4.2f ; }"), ostr.str()); ASSERT_EQUALS(std::string(" void f ( ) { double a = 4.2 ; float b = 4.2f ; }"), ostr.str());
} }
void tokenize_strings()
{
const char code[] = "void f()\n"
"{\n"
"const char *a =\n"
"{\n"
"\"hello \"\n"
"\"more \"\n"
"\"world\"\n"
"};\n"
"}\n";
// tokenize..
OurTokenizer tokenizer;
std::istringstream istr(code);
tokenizer.tokenize(istr, "test.cpp");
tokenizer.simplifyTokenList();
std::ostringstream ostr;
for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next())
ostr << " " << tok->str();
ASSERT_EQUALS(std::string(" void f ( ) { const char * a = { \"hello more world\" } ; }"), ostr.str());
}
}; };
REGISTER_TEST(TestTokenizer) REGISTER_TEST(TestTokenizer)