Fixed #5015 (strings not being concatinated properly)
This commit is contained in:
parent
56680ef399
commit
489a3a6e53
|
@ -993,7 +993,7 @@ void Token::stringify(std::ostream& os, bool varid, bool attributes) const
|
||||||
else if (isSigned())
|
else if (isSigned())
|
||||||
os << "signed ";
|
os << "signed ";
|
||||||
if (isLong()) {
|
if (isLong()) {
|
||||||
if (_type == eString)
|
if (_type == eString || _type == eChar)
|
||||||
os << "L";
|
os << "L";
|
||||||
else
|
else
|
||||||
os << "long ";
|
os << "long ";
|
||||||
|
|
|
@ -9358,6 +9358,13 @@ void Tokenizer::simplifyMicrosoftStringFunctions()
|
||||||
tok->deleteNext();
|
tok->deleteNext();
|
||||||
tok->deleteThis();
|
tok->deleteThis();
|
||||||
tok->deleteNext();
|
tok->deleteNext();
|
||||||
|
while (tok->next() && Token::Match(tok->next(), "_T ( %char%|%str% )")) {
|
||||||
|
tok->next()->deleteNext();
|
||||||
|
tok->next()->deleteThis();
|
||||||
|
tok->next()->deleteNext();
|
||||||
|
tok->concatStr(tok->next()->str());
|
||||||
|
tok->deleteNext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (_settings->platformType == Settings::Win32W ||
|
} else if (_settings->platformType == Settings::Win32W ||
|
||||||
|
@ -9401,6 +9408,14 @@ void Tokenizer::simplifyMicrosoftStringFunctions()
|
||||||
tok->deleteNext();
|
tok->deleteNext();
|
||||||
tok->deleteThis();
|
tok->deleteThis();
|
||||||
tok->deleteNext();
|
tok->deleteNext();
|
||||||
|
tok->isLong(true);
|
||||||
|
while (tok->next() && Token::Match(tok->next(), "_T ( %char%|%str% )")) {
|
||||||
|
tok->next()->deleteNext();
|
||||||
|
tok->next()->deleteThis();
|
||||||
|
tok->next()->deleteNext();
|
||||||
|
tok->concatStr(tok->next()->str());
|
||||||
|
tok->deleteNext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -493,6 +493,8 @@ private:
|
||||||
TEST_CASE(platformWin64);
|
TEST_CASE(platformWin64);
|
||||||
TEST_CASE(platformUnix32);
|
TEST_CASE(platformUnix32);
|
||||||
TEST_CASE(platformUnix64);
|
TEST_CASE(platformUnix64);
|
||||||
|
TEST_CASE(platformWin32AStringCat); // ticket #5015
|
||||||
|
TEST_CASE(platformWin32WStringCat); // ticket #5015
|
||||||
|
|
||||||
TEST_CASE(simplifyMathExpressions); //ticket #1620
|
TEST_CASE(simplifyMathExpressions); //ticket #1620
|
||||||
|
|
||||||
|
@ -8084,18 +8086,18 @@ private:
|
||||||
"const wchar_t * lpctstr ; "
|
"const wchar_t * lpctstr ; "
|
||||||
"unsigned char tbyte ; "
|
"unsigned char tbyte ; "
|
||||||
"void foo ( ) { "
|
"void foo ( ) { "
|
||||||
"wchar_t tc ; tc = \'c\' ; "
|
"wchar_t tc ; tc = L\'c\' ; "
|
||||||
"wchar_t src [ 10 ] = \"123456789\" ; "
|
"wchar_t src [ 10 ] = L\"123456789\" ; "
|
||||||
"wchar_t dst [ 10 ] ; "
|
"wchar_t dst [ 10 ] ; "
|
||||||
"wcscpy ( dst , src ) ; "
|
"wcscpy ( dst , src ) ; "
|
||||||
"dst [ 0 ] = 0 ; "
|
"dst [ 0 ] = 0 ; "
|
||||||
"wcscat ( dst , src ) ; "
|
"wcscat ( dst , src ) ; "
|
||||||
"wchar_t * d ; d = wcsdup ( str ) ; "
|
"wchar_t * d ; d = wcsdup ( str ) ; "
|
||||||
"wprintf ( \"Hello world!\n\" ) ; "
|
"wprintf ( L\"Hello world!\n\" ) ; "
|
||||||
"swprintf ( dst , \"Hello!\n\" ) ; "
|
"swprintf ( dst , L\"Hello!\n\" ) ; "
|
||||||
"snwprintf ( dst , sizeof ( dst ) / sizeof ( wchar_t ) , \"Hello world!\n\" ) ; "
|
"snwprintf ( dst , sizeof ( dst ) / sizeof ( wchar_t ) , L\"Hello world!\n\" ) ; "
|
||||||
"wscanf ( \"%s\" , dst ) ; "
|
"wscanf ( L\"%s\" , dst ) ; "
|
||||||
"swscanf ( dst , \"%s\" , dst ) ; "
|
"swscanf ( dst , L\"%s\" , dst ) ; "
|
||||||
"}";
|
"}";
|
||||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, false, true, Settings::Win32W));
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, false, true, Settings::Win32W));
|
||||||
}
|
}
|
||||||
|
@ -8262,6 +8264,18 @@ private:
|
||||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Unix64));
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Unix64));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void platformWin32AStringCat() { //#5150
|
||||||
|
const char code[] = "TCHAR text[] = _T(\"123\") _T(\"456\") _T(\"789\");";
|
||||||
|
const char expected[] = "char text [ 10 ] = \"123456789\" ;";
|
||||||
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win32A));
|
||||||
|
}
|
||||||
|
|
||||||
|
void platformWin32WStringCat() { //#5150
|
||||||
|
const char code[] = "TCHAR text[] = _T(\"123\") _T(\"456\") _T(\"789\");";
|
||||||
|
const char expected[] = "wchar_t text [ 10 ] = L\"123456789\" ;";
|
||||||
|
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win32W));
|
||||||
|
}
|
||||||
|
|
||||||
void simplifyMathExpressions() {//#1620
|
void simplifyMathExpressions() {//#1620
|
||||||
const char code1[] = "void foo() {\n"
|
const char code1[] = "void foo() {\n"
|
||||||
" std::cout<<sin(0);\n"
|
" std::cout<<sin(0);\n"
|
||||||
|
|
Loading…
Reference in New Issue