#include <alloca.h>
#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)
%token tDLLNAME tDOUBLE tDUAL
%token tENDPOINT
%token tENTRY tENUM tERRORSTATUST
-%token tEXTERN
+%token tEXPLICITHANDLE tEXTERN
%token tFLOAT
%token tHANDLE
%token tHANDLET
%token tHIDDEN
%token tHYPER tID tIDEMPOTENT
%token tIIDIS
+%token tIMPLICITHANDLE
%token tIMPORT tIMPORTLIB
%token tIN tINCLUDE tINLINE
%token tINPUTSYNC
%token tSHORT
%token tSIGNED
%token tSIZEIS tSIZEOF
+%token tSMALL
%token tSOURCE
%token tSTDCALL
%token tSTRING tSTRUCT
%%
-input: gbl_statements { write_proxies($1); }
+input: gbl_statements { write_proxies($1); write_client($1); write_server($1); }
;
gbl_statements: { $$ = NULL; }
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); }
| 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); }
| 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); }
| 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); }
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($$);
}
;
;
expr_const: expr { $$ = $1;
- if (!$$->is_const) yyerror("expression is not constant\n");
+ if (!$$->is_const)
+ yyerror("expression is not constant\n");
}
;
| 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;
}
| 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:
;
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); }
;
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)); }