Jacek Caban : widl: Add __int32 type support.

Alexandre Julliard julliard at winehq.org
Thu Nov 1 16:33:52 CDT 2018


Module: wine
Branch: master
Commit: 2761fc91d0f23406b8ed8930325915eaa41ef6cf
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2761fc91d0f23406b8ed8930325915eaa41ef6cf

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Nov  1 15:02:28 2018 +0100

widl: Add __int32 type support.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/widl/expr.c      | 2 ++
 tools/widl/header.c    | 7 +++++++
 tools/widl/parser.l    | 1 +
 tools/widl/parser.y    | 7 +++++--
 tools/widl/typegen.c   | 4 +++-
 tools/widl/typelib.c   | 1 +
 tools/widl/typetree.c  | 1 +
 tools/widl/widltypes.h | 1 +
 8 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/tools/widl/expr.c b/tools/widl/expr.c
index b461aee..2ed4aff 100644
--- a/tools/widl/expr.c
+++ b/tools/widl/expr.c
@@ -50,6 +50,7 @@ static int is_integer_type(const type_t *type)
         case TYPE_BASIC_INT64:
         case TYPE_BASIC_INT:
         case TYPE_BASIC_INT3264:
+        case TYPE_BASIC_LONG:
         case TYPE_BASIC_CHAR:
         case TYPE_BASIC_HYPER:
         case TYPE_BASIC_BYTE:
@@ -82,6 +83,7 @@ static int is_signed_integer_type(const type_t *type)
         case TYPE_BASIC_INT64:
         case TYPE_BASIC_INT:
         case TYPE_BASIC_INT3264:
+        case TYPE_BASIC_LONG:
             return type_basic_get_sign(type) < 0;
         case TYPE_BASIC_CHAR:
             return TRUE;
diff --git a/tools/widl/header.c b/tools/widl/header.c
index 7681a3f..b8e11bb 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -369,6 +369,7 @@ void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)
       case TYPE_BASIC:
         if (type_basic_get_type(t) != TYPE_BASIC_INT32 &&
             type_basic_get_type(t) != TYPE_BASIC_INT64 &&
+            type_basic_get_type(t) != TYPE_BASIC_LONG &&
             type_basic_get_type(t) != TYPE_BASIC_HYPER)
         {
           if (type_basic_get_sign(t) < 0) fprintf(h, "signed ");
@@ -389,6 +390,12 @@ void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)
         case TYPE_BASIC_HANDLE: fprintf(h, "handle_t"); break;
         case TYPE_BASIC_INT32:
           if (type_basic_get_sign(t) > 0)
+            fprintf(h, "UINT32");
+          else
+            fprintf(h, "INT32");
+          break;
+        case TYPE_BASIC_LONG:
+          if (type_basic_get_sign(t) > 0)
             fprintf(h, "ULONG");
           else
             fprintf(h, "LONG");
diff --git a/tools/widl/parser.l b/tools/widl/parser.l
index a57ac64..342109e 100644
--- a/tools/widl/parser.l
+++ b/tools/widl/parser.l
@@ -250,6 +250,7 @@ static const struct keyword keywords[] = {
 	{"TRUE",			tTRUE},
 	{"__cdecl",			tCDECL},
 	{"__fastcall",			tFASTCALL},
+	{"__int32",			tINT32},
 	{"__int3264",			tINT3264},
 	{"__int64",			tINT64},
 	{"__pascal",			tPASCAL},
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 1cb9ab9..0f85498 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -208,7 +208,7 @@ static typelib_t *current_typelib;
 %token tIMPORT tIMPORTLIB
 %token tIN tIN_LINE tINLINE
 %token tINPUTSYNC
-%token tINT tINT3264 tINT64
+%token tINT tINT32 tINT3264 tINT64
 %token tINTERFACE
 %token tLCID
 %token tLENGTHIS tLIBRARY
@@ -815,10 +815,11 @@ m_int:
 int_std:  tINT					{ $$ = type_new_int(TYPE_BASIC_INT, 0); }
 	| tSHORT m_int				{ $$ = type_new_int(TYPE_BASIC_INT16, 0); }
 	| tSMALL				{ $$ = type_new_int(TYPE_BASIC_INT8, 0); }
-	| tLONG m_int				{ $$ = type_new_int(TYPE_BASIC_INT32, 0); }
+	| tLONG m_int				{ $$ = type_new_int(TYPE_BASIC_LONG, 0); }
 	| tHYPER m_int				{ $$ = type_new_int(TYPE_BASIC_HYPER, 0); }
 	| tINT64				{ $$ = type_new_int(TYPE_BASIC_INT64, 0); }
 	| tCHAR					{ $$ = type_new_int(TYPE_BASIC_CHAR, 0); }
+	| tINT32				{ $$ = type_new_int(TYPE_BASIC_INT32, 0); }
 	| tINT3264				{ $$ = type_new_int(TYPE_BASIC_INT3264, 0); }
 	;
 
@@ -1408,6 +1409,7 @@ static int is_allowed_range_type(const type_t *type)
         case TYPE_BASIC_INT64:
         case TYPE_BASIC_INT:
         case TYPE_BASIC_INT3264:
+        case TYPE_BASIC_LONG:
         case TYPE_BASIC_BYTE:
         case TYPE_BASIC_CHAR:
         case TYPE_BASIC_WCHAR:
@@ -2399,6 +2401,7 @@ static int is_allowed_conf_type(const type_t *type)
         case TYPE_BASIC_INT32:
         case TYPE_BASIC_INT64:
         case TYPE_BASIC_INT:
+        case TYPE_BASIC_LONG:
         case TYPE_BASIC_CHAR:
         case TYPE_BASIC_HYPER:
         case TYPE_BASIC_BYTE:
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 6151b1c..ce4c578 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -208,7 +208,8 @@ unsigned char get_basic_fc(const type_t *type)
     {
     case TYPE_BASIC_INT8: return (sign <= 0 ? FC_SMALL : FC_USMALL);
     case TYPE_BASIC_INT16: return (sign <= 0 ? FC_SHORT : FC_USHORT);
-    case TYPE_BASIC_INT32: return (sign <= 0 ? FC_LONG : FC_ULONG);
+    case TYPE_BASIC_INT32:
+    case TYPE_BASIC_LONG: return (sign <= 0 ? FC_LONG : FC_ULONG);
     case TYPE_BASIC_INT64: return FC_HYPER;
     case TYPE_BASIC_INT: return (sign <= 0 ? FC_LONG : FC_ULONG);
     case TYPE_BASIC_INT3264: return (sign <= 0 ? FC_INT3264 : FC_UINT3264);
@@ -234,6 +235,7 @@ static unsigned char get_basic_fc_signed(const type_t *type)
     case TYPE_BASIC_INT64: return FC_HYPER;
     case TYPE_BASIC_INT: return FC_LONG;
     case TYPE_BASIC_INT3264: return FC_INT3264;
+    case TYPE_BASIC_LONG: return FC_LONG;
     case TYPE_BASIC_BYTE: return FC_BYTE;
     case TYPE_BASIC_CHAR: return FC_CHAR;
     case TYPE_BASIC_WCHAR: return FC_WCHAR;
diff --git a/tools/widl/typelib.c b/tools/widl/typelib.c
index 3083839..9b1de2c 100644
--- a/tools/widl/typelib.c
+++ b/tools/widl/typelib.c
@@ -156,6 +156,7 @@ unsigned short get_type_vt(type_t *t)
       else
         return VT_INT;
     case TYPE_BASIC_INT32:
+    case TYPE_BASIC_LONG:
     case TYPE_BASIC_ERROR_STATUS_T:
       if (type_basic_get_sign(t) > 0)
         return VT_UI4;
diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c
index baf53a1..10657b0 100644
--- a/tools/widl/typetree.c
+++ b/tools/widl/typetree.c
@@ -377,6 +377,7 @@ static int is_valid_bitfield_type(const type_t *type)
         case TYPE_BASIC_INT64:
         case TYPE_BASIC_INT:
         case TYPE_BASIC_INT3264:
+        case TYPE_BASIC_LONG:
         case TYPE_BASIC_CHAR:
         case TYPE_BASIC_HYPER:
         case TYPE_BASIC_BYTE:
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h
index 7891a1d..b4eb003 100644
--- a/tools/widl/widltypes.h
+++ b/tools/widl/widltypes.h
@@ -265,6 +265,7 @@ enum type_basic_type
     TYPE_BASIC_INT64,
     TYPE_BASIC_INT,
     TYPE_BASIC_INT3264,
+    TYPE_BASIC_LONG,
     TYPE_BASIC_CHAR,
     TYPE_BASIC_HYPER,
     TYPE_BASIC_BYTE,




More information about the wine-cvs mailing list