From 2761fc91d0f23406b8ed8930325915eaa41ef6cf Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Thu, 1 Nov 2018 15:02:28 +0100 Subject: [PATCH] widl: Add __int32 type support. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- 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 b461aee2835..2ed4aff6ad3 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 7681a3fde14..b8e11bbea5e 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 a57ac648b8c..342109e8bd1 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 1cb9ab981f5..0f8549831a9 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 6151b1c464b..ce4c5781d96 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 30838394479..9b1de2c8c0a 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 baf53a11a6b..10657b04d6a 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 7891a1d360d..b4eb0033d26 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, -- 2.11.4.GIT