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