diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index e2237413d..54a276968 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -5306,14 +5306,14 @@ void Tokenizer::simplifyPlatformTypes() _settings->platformType == Settings::Win32W || _settings->platformType == Settings::Win64) { for (Token *tok = _tokens; tok; tok = tok->next()) { - if (Token::Match(tok, "BOOL|INT|INT32")) + if (Token::Match(tok, "BOOL|INT|INT32|HFILE|LONG32")) tok->str("int"); else if (Token::Match(tok, "BOOLEAN|BYTE|UCHAR")) { tok->str("unsigned"); tok->insertToken("char"); } else if (tok->str() == "CHAR") tok->str("char"); - else if (Token::Match(tok, "DWORD|ULONG|COLORREF")) { + else if (Token::Match(tok, "DWORD|ULONG|COLORREF|LCID|LCTYPE|LGRPID")) { tok->str("unsigned"); tok->insertToken("long"); } else if (Token::Match(tok, "DWORD_PTR|ULONG_PTR|SIZE_T")) { @@ -5323,21 +5323,19 @@ void Tokenizer::simplifyPlatformTypes() tok->insertToken("long"); } else if (tok->str() == "FLOAT") tok->str("float"); - else if (tok->str() == "HRESULT") + else if (Token::Match(tok, "HRESULT|LONG")) tok->str("long"); - else if (tok->str() == "INT64") { + else if (Token::Match(tok, "INT64|LONG64")) { tok->str("long"); tok->insertToken("long"); - } else if (tok->str() == "LONG") - tok->str("long"); - else if (Token::Match(tok, "LONG_PTR|LPARAM|LRESULT")) { + } else if (Token::Match(tok, "LONG_PTR|LPARAM|LRESULT|SSIZE_T")) { tok->str("long"); if (_settings->platformType == Settings::Win64) tok->insertToken("long"); } else if (Token::Match(tok, "LPBOOL|PBOOL")) { tok->str("int"); tok->insertToken("*"); - } else if (Token::Match(tok, "LPBYTE|PBOOLEAN|PBYTE")) { + } else if (Token::Match(tok, "LPBYTE|PBOOLEAN|PBYTE|PUCHAR")) { tok->str("unsigned"); tok->insertToken("*"); tok->insertToken("char"); @@ -5349,7 +5347,7 @@ void Tokenizer::simplifyPlatformTypes() tok->str("const"); tok->insertToken("*"); tok->insertToken("void"); - } else if (tok->str() == "LPDWORD") { + } else if (Token::Match(tok, "LPDWORD|LPCOLORREF|PDWORD|PULONG")) { tok->str("unsigned"); tok->insertToken("*"); tok->insertToken("long"); @@ -5362,28 +5360,31 @@ void Tokenizer::simplifyPlatformTypes() } else if (Token::Match(tok, "LPSTR|PSTR|PCHAR")) { tok->str("char"); tok->insertToken("*"); - } else if (Token::Match(tok, "LPVOID|PVOID|HANDLE|HBITMAP|HBRUSH|HCOLORSPACE|HCURSOR|HDC|HFONT|HGDIOBJ|HGLOBAL|HICON|HINSTANCE|HKEY|HLOCAL|HMENU|HMETAFILE|HMODULE|HPALETTE|HPEN|HRGN|HRSRC|HWND")) { + } else if (Token::Match(tok, "LPVOID|PVOID|HANDLE|HBITMAP|HBRUSH|HCOLORSPACE|HCURSOR|HDC|HFONT|HGDIOBJ|HGLOBAL|HICON|HINSTANCE|HKEY|HLOCAL|HMENU|HMETAFILE|HMODULE|HPALETTE|HPEN|HRGN|HRSRC|HWND|SERVICE_STATUS_HANDLE|SC_LOCK|SC_HANDLE|HACCEL|HCONV|HCONVLIST|HDDEDATA|HDESK|HDROP|HDWP|HENHMETAFILE|HHOOK|HKL|HMONITOR|HSZ|HWINSTA")) { tok->str("void"); tok->insertToken("*"); } else if ((tok->str() == "PHANDLE")) { tok->str("void"); tok->insertToken("*"); tok->insertToken("*"); - } else if (Token::Match(tok, "LPWORD|PWORD")) { + } else if (Token::Match(tok, "LPWORD|PWORD|PWSTR|PWCHAR|PUSHORT")) { tok->str("unsigned"); tok->insertToken("*"); tok->insertToken("short"); } else if (tok->str() == "SHORT") tok->str("short"); - else if (Token::Match(tok, "UINT|MMRESULT|SOCKET")) { + else if (Token::Match(tok, "UINT|MMRESULT|SOCKET|ULONG32|UINT32|DWORD32")) { tok->str("unsigned"); tok->insertToken("int"); } else if (Token::Match(tok, "UINT_PTR|WPARAM")) { tok->str("unsigned"); - tok->insertToken("long"); - if (_settings->platformType == Settings::Win64) + if (_settings->platformType == Settings::Win64) { tok->insertToken("long"); - } else if (Token::Match(tok, "USHORT|WORD|WCHAR|ATOM|wchar_t")) { + tok->insertToken("long"); + } else { + tok->insertToken("int"); + } + } else if (Token::Match(tok, "USHORT|WORD|WCHAR|ATOM|wchar_t|LANGID")) { tok->str("unsigned"); tok->insertToken("short"); } else if (tok->str() == "VOID") @@ -5395,6 +5396,12 @@ void Tokenizer::simplifyPlatformTypes() tok->str("unsigned"); tok->insertToken("short"); } + } else if (tok->str() == "TBYTE") { + tok->str("unsigned"); + if (_settings->platformType == Settings::Win32A) + tok->insertToken("short"); + else + tok->insertToken("char"); } else if (Token::Match(tok, "PTSTR|LPTSTR")) { if (_settings->platformType == Settings::Win32A) { tok->str("char"); @@ -5405,16 +5412,35 @@ void Tokenizer::simplifyPlatformTypes() tok->insertToken("short"); } } else if (Token::Match(tok, "PCTSTR|LPCTSTR")) { + tok->str("const"); if (_settings->platformType == Settings::Win32A) { - tok->str("const"); tok->insertToken("*"); tok->insertToken("char"); } else { - tok->str("const"); tok->insertToken("*"); tok->insertToken("short"); tok->insertToken("unsigned"); } + } else if (Token::Match(tok, "ULONG64|DWORD64")) { + tok->str("unsigned"); + tok->insertToken("long"); + } else if (tok->str() == "HALF_PTR") { + if (_settings->platformType == Settings::Win64) + tok->str("int"); + else + tok->str("short"); + } else if (tok->str() == "INT_PTR") { + if (_settings->platformType == Settings::Win64) { + tok->str("long"); + tok->insertToken("long"); + } else { + tok->str("int"); + } + } else if (tok->str() == "LPCWSTR") { + tok->str("const"); + tok->insertToken("*"); + tok->insertToken("short"); + tok->insertToken("unsigned"); } } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index f3649058e..695bda7cf 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -6104,6 +6104,7 @@ private: } void platformWin32() { + // WIN32A const char code[] = "unsigned int sizeof_short = sizeof(short);" "unsigned int sizeof_unsigned_short = sizeof(unsigned short);" "unsigned int sizeof_int = sizeof(int);" @@ -6163,7 +6164,45 @@ private: "SIZE_T Q;" "HRESULT R;" "LONG_PTR S;" - "HANDLE T;"; + "HANDLE T;" + "BOOL _bool;" + "HFILE hfile;" + "LONG32 long32;" + "LCID lcid;" + "LCTYPE lctype;" + "LGRPID lgrpid;" + "LONG64 long64;" + "SSIZE_T _ssize_t;" + "PUCHAR puchar;" + "LPCOLORREF lpcolorref;" + "PDWORD pdword;" + "PULONG pulong;" + "SERVICE_STATUS_HANDLE service_status_hanlde;" + "SC_LOCK sc_lock;" + "SC_HANDLE sc_handle;" + "HACCEL haccel;" + "HCONV hconv;" + "HCONVLIST hconvlist;" + "HDDEDATA hddedata;" + "HDESK hdesk;" + "HDROP hdrop;" + "HDWP hdwp;" + "HENHMETAFILE henhmetafile;" + "HHOOK hhook;" + "HKL hkl;" + "HMONITOR hmonitor;" + "HSZ hsz;" + "HWINSTA hwinsta;" + "PWCHAR pwchar;" + "PUSHORT pushort;" + "UINT_PTR uint_ptr;" + "WPARAM wparam;" + "LANGID langid;" + "DWORD64 dword64;" + "ULONG64 ulong64;" + "HALF_PTR half_ptr;" + "INT_PTR int_ptr;" + "LPCWSTR lpcwstr;"; const char expected[] = "unsigned int sizeof_short ; sizeof_short = 2 ; " "unsigned int sizeof_unsigned_short ; sizeof_unsigned_short = 2 ; " @@ -6224,7 +6263,45 @@ private: "unsigned long Q ; " "long R ; " "long S ; " - "void * T ;"; + "void * T ; " + "int _bool ; " + "int hfile ; " + "int long32 ; " + "unsigned long lcid ; " + "unsigned long lctype ; " + "unsigned long lgrpid ; " + "long long long64 ; " + "long _ssize_t ; " + "unsigned char * puchar ; " + "unsigned long * lpcolorref ; " + "unsigned long * pdword ; " + "unsigned long * pulong ; " + "void * service_status_hanlde ; " + "void * sc_lock ; " + "void * sc_handle ; " + "void * haccel ; " + "void * hconv ; " + "void * hconvlist ; " + "void * hddedata ; " + "void * hdesk ; " + "void * hdrop ; " + "void * hdwp ; " + "void * henhmetafile ; " + "void * hhook ; " + "void * hkl ; " + "void * hmonitor ; " + "void * hsz ; " + "void * hwinsta ; " + "unsigned short * pwchar ; " + "unsigned short * pushort ; " + "unsigned int uint_ptr ; " + "unsigned int wparam ; " + "unsigned short langid ; " + "unsigned long dword64 ; " + "unsigned long ulong64 ; " + "short half_ptr ; " + "int int_ptr ; " + "const unsigned short * lpcwstr ;"; ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win32A)); } @@ -6249,7 +6326,8 @@ private: " _sntprintf(dst, sizeof(dst) / sizeof(TCHAR), _T(\"Hello world!\n\"));" " _tscanf(_T(\"%s\"), dst);" " _stscanf(dst, _T(\"%s\"), dst);" - "}"; + "}" + "TBYTE tbyte;"; const char expected[] = "unsigned short wc ; " "char c ; " "char * ptstr ; " @@ -6269,7 +6347,8 @@ private: "snprintf ( dst , sizeof ( dst ) / sizeof ( char ) , \"Hello world!\n\" ) ; " "scanf ( \"%s\" , dst ) ; " "sscanf ( dst , \"%s\" , dst ) ; " - "}"; + "} " + "unsigned short tbyte ;"; ASSERT_EQUALS(expected, tokenizeAndStringify(code, false, true, Settings::Win32A)); } @@ -6280,6 +6359,7 @@ private: "LPTSTR lptstr;" "PCTSTR pctstr;" "LPCTSTR lpctstr;" + "TBYTE tbyte;" "void foo() {" " TCHAR tc = _T(\'c\');" " TCHAR src[10] = _T(\"123456789\");" @@ -6300,6 +6380,7 @@ private: "unsigned short * lptstr ; " "const unsigned short * pctstr ; " "const unsigned short * lpctstr ; " + "unsigned char tbyte ; " "void foo ( ) { " "unsigned short tc ; tc = \'c\' ; " "unsigned short src [ 10 ] = \"123456789\" ; " @@ -6342,7 +6423,11 @@ private: "SIZE_T Q;" "HRESULT R;" "LONG_PTR S;" - "HANDLE T;"; + "HANDLE T;" + "SSIZE_T _ssize_t;" + "UINT_PTR uint_ptr;" + "WPARAM wparam;" + "INT_PTR int_ptr;"; const char expected[] = "unsigned int sizeof_short ; sizeof_short = 2 ; " "unsigned int sizeof_unsigned_short ; sizeof_unsigned_short = 2 ; " @@ -6368,7 +6453,12 @@ private: "unsigned long long Q ; " "long R ; " "long long S ; " - "void * T ;"; + "void * T ; " + "long long _ssize_t ; " + "unsigned long long uint_ptr ; " + "unsigned long long wparam ; " + "long long int_ptr ;" + ; ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win64)); }