X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Ftools%2Fwidl%2Fparser.y;h=4d27f2f2e6ac7513f2e97dc56e5a5bf930822e90;hp=80b781559779fa064693227e7f0dd223ba0dfeab;hb=219b034127fce109c89b9ca4a5f843873d6bd188;hpb=50c2b2938904c95e5ed5ee045885fc05dba23e56 diff --git a/reactos/tools/widl/parser.y b/reactos/tools/widl/parser.y index 80b78155977..4d27f2f2e6a 100644 --- a/reactos/tools/widl/parser.y +++ b/reactos/tools/widl/parser.y @@ -31,13 +31,10 @@ #include #endif -#include "windef.h" - #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" -#include "proxy.h" #include "typelib.h" #if defined(YYBYACC) @@ -138,7 +135,7 @@ static type_t std_uhyper = { "MIDL_uhyper" }; %token tDLLNAME tDOUBLE tDUAL %token tENDPOINT %token tENTRY tENUM tERRORSTATUST -%token tEXTERN +%token tEXPLICITHANDLE tEXTERN %token tFLOAT %token tHANDLE %token tHANDLET @@ -147,6 +144,7 @@ static type_t std_uhyper = { "MIDL_uhyper" }; %token tHIDDEN %token tHYPER tID tIDEMPOTENT %token tIIDIS +%token tIMPLICITHANDLE %token tIMPORT tIMPORTLIB %token tIN tINCLUDE tINLINE %token tINPUTSYNC @@ -171,6 +169,7 @@ static type_t std_uhyper = { "MIDL_uhyper" }; %token tSHORT %token tSIGNED %token tSIZEIS tSIZEOF +%token tSMALL %token tSOURCE %token tSTDCALL %token tSTRING tSTRUCT @@ -224,7 +223,7 @@ static type_t std_uhyper = { "MIDL_uhyper" }; %% -input: gbl_statements { write_proxies($1); } +input: gbl_statements { write_proxies($1); write_client($1); write_server($1); } ; gbl_statements: { $$ = NULL; } @@ -333,6 +332,7 @@ attrib_list: attribute attribute: tASYNC { $$ = make_attr(ATTR_ASYNC); } + | tAUTOHANDLE { $$ = make_attr(ATTR_AUTO_HANDLE); } | tCALLAS '(' ident ')' { $$ = make_attrp(ATTR_CALLAS, $3); } | tCASE '(' expr_list_const ')' { $$ = make_attrp(ATTR_CASE, $3); } | tCONTEXTHANDLE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); } @@ -347,6 +347,7 @@ attribute: | tENDPOINT '(' aSTRING ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); } | tENTRY '(' aSTRING ')' { $$ = make_attrp(ATTR_ENTRY_STRING, $3); } | tENTRY '(' expr_const ')' { $$ = make_attrp(ATTR_ENTRY_ORDINAL, $3); } + | tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); } | tHANDLE { $$ = make_attr(ATTR_HANDLE); } | tHELPCONTEXT '(' expr_const ')' { $$ = make_attrp(ATTR_HELPCONTEXT, $3); } | tHELPFILE '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPFILE, $3); } @@ -357,6 +358,7 @@ attribute: | tID '(' expr_const ')' { $$ = make_attrp(ATTR_ID, $3); } | tIDEMPOTENT { $$ = make_attr(ATTR_IDEMPOTENT); } | tIIDIS '(' ident ')' { $$ = make_attrp(ATTR_IIDIS, $3); } + | tIMPLICITHANDLE '(' tHANDLET aIDENTIFIER ')' { $$ = make_attrp(ATTR_IMPLICIT_HANDLE, $4); } | tIN { $$ = make_attr(ATTR_IN); } | tINPUTSYNC { $$ = make_attr(ATTR_INPUTSYNC); } | tLENGTHIS '(' m_exprs ')' { $$ = make_attrp(ATTR_LENGTHIS, $3); } @@ -365,7 +367,7 @@ attribute: | tOBJECT { $$ = make_attr(ATTR_OBJECT); } | tODL { $$ = make_attr(ATTR_ODL); } | tOLEAUTOMATION { $$ = make_attr(ATTR_OLEAUTOMATION); } - | tOPTIONAL { $$ = make_attr(ATTR_OPTIONAL); } + | tOPTIONAL { $$ = make_attr(ATTR_OPTIONAL); } | tOUT { $$ = make_attr(ATTR_OUT); } | tPOINTERDEFAULT '(' pointer_type ')' { $$ = make_attrv(ATTR_POINTERDEFAULT, $3); } | tPROPGET { $$ = make_attr(ATTR_PROPGET); } @@ -431,19 +433,19 @@ enum_list: enum enum: ident '=' expr_const { $$ = reg_const($1); $$->eval = $3; $$->lval = $3->cval; - $$->type = make_type(RPC_FC_LONG, &std_int); + $$->type = make_type(RPC_FC_LONG, &std_int); } | ident { $$ = reg_const($1); $$->lval = 0; /* default for first enum entry */ - $$->type = make_type(RPC_FC_LONG, &std_int); + $$->type = make_type(RPC_FC_LONG, &std_int); } ; enumdef: tENUM t_ident '{' enums '}' { $$ = get_typev(RPC_FC_ENUM16, $2, tsENUM); $$->fields = $4; $$->defined = TRUE; - if(in_typelib) - add_enum($$); + if(in_typelib) + add_enum($$); } ; @@ -490,7 +492,8 @@ expr_list_const: expr_const ; expr_const: expr { $$ = $1; - if (!$$->is_const) yyerror("expression is not constant\n"); + if (!$$->is_const) + yyerror("expression is not constant\n"); } ; @@ -548,7 +551,7 @@ base_type: tBYTE { $$ = make_type(RPC_FC_BYTE, NULL); } | tSIGNED int_std { $$ = $2; $$->sign = 1; } | tUNSIGNED int_std { $$ = $2; $$->sign = -1; switch ($$->type) { - case RPC_FC_CHAR: $$->type = RPC_FC_BYTE; $$->sign = 0; break; + case RPC_FC_CHAR: break; case RPC_FC_SMALL: $$->type = RPC_FC_USMALL; break; case RPC_FC_SHORT: $$->type = RPC_FC_USHORT; break; case RPC_FC_LONG: $$->type = RPC_FC_ULONG; break; @@ -560,9 +563,9 @@ base_type: tBYTE { $$ = make_type(RPC_FC_BYTE, NULL); } } | tFLOAT { $$ = make_type(RPC_FC_FLOAT, NULL); } | tDOUBLE { $$ = make_type(RPC_FC_DOUBLE, NULL); } - | tBOOLEAN { $$ = make_type(RPC_FC_BYTE, &std_bool); /* ? */ } + | tBOOLEAN { $$ = make_type(RPC_FC_SMALL, &std_bool); } | tERRORSTATUST { $$ = make_type(RPC_FC_ERROR_STATUS_T, NULL); } - | tHANDLET { $$ = make_type(RPC_FC_BIND_PRIMITIVE, NULL); /* ? */ } + | tHANDLET { $$ = make_type(RPC_FC_IGNORE, NULL); } ; m_int: @@ -570,6 +573,7 @@ m_int: ; int_std: tINT { $$ = make_type(RPC_FC_LONG, &std_int); } /* win32 only */ + | tSMALL m_int { $$ = make_type(RPC_FC_SMALL, NULL); } | tSHORT m_int { $$ = make_type(RPC_FC_SHORT, NULL); } | tLONG m_int { $$ = make_type(RPC_FC_LONG, NULL); } | tHYPER m_int { $$ = make_type(RPC_FC_HYPER, NULL); } @@ -713,13 +717,13 @@ pointer_type: ; structdef: tSTRUCT t_ident '{' fields '}' { $$ = get_typev(RPC_FC_STRUCT, $2, tsSTRUCT); - /* overwrite RPC_FC_STRUCT with a more exact type */ + /* overwrite RPC_FC_STRUCT with a more exact type */ $$->type = get_struct_type( $4 ); $$->fields = $4; $$->defined = TRUE; - if(in_typelib) - add_struct($$); - } + if(in_typelib) + add_struct($$); + } ; type: tVOID { $$ = make_tref(NULL, make_type(0, NULL)); }