[PATCH] winapi_test: Add support for more base types.

Francois Gouget fgouget at free.fr
Tue Apr 14 13:10:04 CDT 2020


Signed-off-by: Francois Gouget <fgouget at free.fr>
---

That's not scalable though. To improve winapi will need to exploit the 
typedef so it knows that INT is int, PINT is int*, etc. Then only the 
base types will be needed. For the types that have multiple definitions, 
like DWORD, hardcoding the definition will probably still make sense.


 tools/winapi/winapi_test | 98 ++++++++++++++++++++++------------------
 1 file changed, 55 insertions(+), 43 deletions(-)

diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index 48c29f8f4ad..9d32f4eb78a 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -177,42 +177,74 @@ sub _find_align_kind_size($) {
 	$align = $pointer_size;
 	$kind = "pointer";
 	$size = $pointer_size;
+    } elsif (/^(?:void|VOID)$/) {
+	$align = 4;
+	$kind = "signed";
+	$size = 4;
     } elsif(/^char$/) {
 	$align = 1;
 	$kind = "char";
 	$size = 1;
-    } elsif(/^(?:(signed|unsigned)\s+)?(?:__int8|char|byte)$/) {
+    } elsif(/^(?:(signed|unsigned)\s+)?(?:__int8|char)$/) {
 	$align = 1;
 	$kind = defined($1) ? $1 : "signed";
 	$size = 1;
+    } elsif(/^CHAR$/) {
+	$align = 1;
+	$kind = "signed";
+	$size = 1;
+    } elsif(/^(?:byte|BOOLEAN|BYTE|UCHAR)$/) {
+	$align = 1;
+	$kind = "unsigned";
+	$size = 1;
     } elsif (/^(?:(signed|unsigned)\s+)?(?:__int16|short(?:\s+int)?)$/) {
 	$align = 2;
 	$kind = defined($1) ? $1 : "signed";
 	$size = 2;
-    } elsif (/^(?:wchar_t)$/) {
+    } elsif (/^SHORT$/) {
 	$align = 2;
 	$kind = "signed";
 	$size = 2;
+    } elsif (/^(?:char16_t|wchar_t|USHORT|WCHAR|WORD)$/) {
+	$align = 2;
+	$kind = "unsigned";
+	$size = 2;
     } elsif (/^(signed|unsigned)$/) {
 	$align = 4;
-	$kind = defined($1) ? $1 : "signed";
+	$kind = $1;
 	$size = 4;
     } elsif (/^(?:(signed|unsigned)\s+)?(?:__int32|int)$/) {
 	$align = 4;
 	$kind = defined($1) ? $1 : "signed";
 	$size = 4;
+    } elsif (/^(?:BOOL|INT|LONG)$/) {
+	$align = 4;
+	$kind = "signed";
+	$size = 4;
+    } elsif (/^(?:DWORD|FOURCC|LCID|UINT|ULONG)$/) {
+	$align = 4;
+	$kind = "unsigned";
+	$size = 4;
+    } elsif (/^(?:float|FLOAT)$/) {
+	$align = 4;
+	$kind = "float";
+	$size = 4;
     } elsif (/^(?:(signed|unsigned)\s+)?(?:long(?:\s+int)?)$/) {
 	$align = $pointer_size;
 	$kind = defined($1) ? $1 : "signed";
 	$size = $pointer_size;
-    } elsif (/^(?:float)$/) {
-	$align = 4;
-	$kind = "float";
-	$size = 4;
     } elsif (/^(?:(signed|unsigned)\s+)?__int64$/) {
 	$align = 8;
 	$kind = defined($1) ? $1 : "signed";
 	$size = 8;
+    } elsif (/^(?:INT64|LONG64|LONGLONG)$/) {
+	$align = 8;
+	$kind = "signed";
+	$size = 8;
+    } elsif (/^(?:UINT64|ULONG64|DWORD64|ULONGLONG|DWORDLONG)$/) {
+	$align = 8;
+	$kind = "unsigned";
+	$size = 8;
     } elsif (/^(?:double|DOUBLE|DATE)$/) {
 	$align = 8;
 	$kind = "float";
@@ -221,58 +253,38 @@ sub _find_align_kind_size($) {
 	$align = 4;
 	$kind = "float";
 	$size = 12;
-    } elsif (/^H(?:DC|BITMAP|BRUSH|ICON|INSTANCE|KEY|MENU|METAFILE|WND)$/) {
+    } elsif (/^(?:INT|LONG)_PTR$/) {
+	$align = $pointer_size;
+	$kind = "signed";
+	$size = $pointer_size;
+    } elsif (/^(?:UINT|MMVERSION|ULONG|DWORD)_PTR$/) {
+	$align = $pointer_size;
+	$kind = "unsigned";
+	$size = $pointer_size;
+    } elsif (/^H(?:ANDLE|DC|BITMAP|BRUSH|ICON|INSTANCE|KEY|MENU|METAFILE|MMIO|TASK|WND)$/) {
 	$align = $pointer_size;
 	$kind = "pointer";
 	$size = $pointer_size;
-    } elsif (/^LP(?:BYTE|CSTR|CWSTR|DWORD|STR|VOID|WSTR)$/) {
+    } elsif (/^(?:HPSTR|LP[A-Z0-9_]+|PVOID)$/) {
 	$align = $pointer_size;
 	$kind = "pointer";
 	$size = $pointer_size;
-    } elsif (/^(?:FILETIME)$/) {
+    } elsif (/^POINTS$/) {
+	$align = 2;
+	$kind = "struct";
+	$size = 4;
+    } elsif (/^(?:FILETIME|LUID|POINT|POINTL)$/) {
 	$align = 4;
 	$kind = "struct";
 	$size = 8;
-    } elsif (/^GUID$/) {
+    } elsif (/^(?:CLSID|GUID|RECT|RECTL)$/) {
 	$align = 4;
 	$kind = "struct";
 	$size = 16;
-    } elsif (/^(?:VOID)$/) {
- 	$align = 4;
- 	$kind = "signed";
- 	$size = 4;
-    } elsif (/^(?:SHORT)$/) {
-	$align = 2;
-	$kind = "unsigned";
-	$size = 2;
-    } elsif (/^(?:BYTE)$/) {
-	$align = 1;
-	$kind = "unsigned";
-	$size = 1;
-    } elsif (/^(?:DWORD)$/) {
-	$align = 4;
-	$kind = "unsigned";
-	$size = 4;
-    } elsif (/^(?:WORD)$/) {
-	$align = 2;
-	$kind = "unsigned";
-	$size = 2;
-    } elsif (/^(?:INT64|LONG64|LONGLONG)$/) {
-	$align = 8;
- 	$kind = "signed";
- 	$size = 8;
-    } elsif (/^(?:UINT64|ULONG64|DWORD64|ULONGLONG|DWORDLONG)$/) {
-	$align = 8;
- 	$kind = "unsigned";
- 	$size = 8;
     } elsif (/^(?:LARGE_INTEGER)$/) {
 	$align = 8;
 	$kind = "union";
 	$size = 8;
-    } elsif (/^(?:POINTS)$/) {
-	$align = 2;
-	$kind = "struct";
-	$size = 4;
     } elsif (/^(struct|union)$/) {
 	$kind = $1;
 	if (!$size_parse_reported{$_}) {
-- 
2.20.1



More information about the wine-devel mailing list