- Support implict_handle attribute in IDL files.
- Build mixed-mode stub files.
Modified: trunk/reactos/tools/widl/Makefile
Modified: trunk/reactos/tools/widl/client.c
Modified: trunk/reactos/tools/widl/header.c
Modified: trunk/reactos/tools/widl/lex.yy.c
Modified: trunk/reactos/tools/widl/parser.l
Modified: trunk/reactos/tools/widl/parser.y
Modified: trunk/reactos/tools/widl/server.c
Modified: trunk/reactos/tools/widl/widltypes.h
Modified: trunk/reactos/tools/widl/y.tab.c
Modified: trunk/reactos/tools/widl/y.tab.h

Modified: trunk/reactos/tools/widl/Makefile
--- trunk/reactos/tools/widl/Makefile	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/Makefile	2005-02-22 11:46:44 UTC (rev 13711)
@@ -63,10 +63,10 @@
 #	Optional use of flex and bison, this will allow independent building from
 #	Wine.
 #
-#y.tab.c y.tab.h: parser.y
-#	bison $(YACCOPT) -d -o y.tab.c parser.y
+y.tab.c y.tab.h: parser.y
+	bison $(YACCOPT) -d -o y.tab.c parser.y
 #
-#lex.yy.c: parser.l y.tab.h
-#	flex $(LEXOPT) -d -8 -olex.yy.c parser.l
+lex.yy.c: parser.l y.tab.h
+	flex $(LEXOPT) -d -8 -olex.yy.c parser.l
 
 # EOF

Modified: trunk/reactos/tools/widl/client.c
--- trunk/reactos/tools/widl/client.c	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/client.c	2005-02-22 11:46:44 UTC (rev 13711)
@@ -116,6 +116,7 @@
 static void write_function_stubs(type_t *iface)
 {
     func_t *cur = iface->funcs;
+    char *handle_name = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
     int method_count = 0;
     unsigned int proc_offset = 0;
 
@@ -148,6 +149,9 @@
             fprintf(client, " _RetVal;\n");
         }
 
+        if (handle_name)
+            print_client("RPC_BINDING_HANDLE _Handle = 0;\n");
+
         print_client("RPC_MESSAGE _RpcMessage;\n");
         print_client("MIDL_STUB_MESSAGE _StubMsg;\n");
         fprintf(client, "\n");
@@ -164,24 +168,32 @@
         indent--;
         fprintf(client, "\n");
 
+        if (handle_name)
+            print_client("_Handle = %s;\n", handle_name);
 
         /* FIXME: marshal arguments */
         print_client("_StubMsg.BufferLength = 0UL;\n");
-        print_client("NdrNsGetBuffer(\n");
+//        print_client("NdrNsGetBuffer(\n");
+        print_client("NdrGetBuffer(\n");
         indent++;
         print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
         print_client("_StubMsg.BufferLength,\n");
-        print_client("%s__MIDL_AutoBindHandle);\n", iface->name);
+        if (handle_name)
+            print_client("%_Handle);\n");
+        else
+            print_client("%s__MIDL_AutoBindHandle);\n", iface->name);
         indent--;
         fprintf(client, "\n");
 
 
         /* send/recieve message */
-        print_client("NdrNsSendReceive(\n");
+//        print_client("NdrNsSendReceive(\n");
+        print_client("NdrSendReceive(\n");
         indent++;
         print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n");
-        print_client("(unsigned char __RPC_FAR *)_StubMsg.Buffer,\n");
-        print_client("(RPC_BINDING_HANDLE __RPC_FAR *) &%s__MIDL_AutoBindHandle);\n", iface->name);
+        print_client("(unsigned char __RPC_FAR *)_StubMsg.Buffer);\n");
+//        print_client("(unsigned char __RPC_FAR *)_StubMsg.Buffer,\n");
+//        print_client("(RPC_BINDING_HANDLE __RPC_FAR *) &%s__MIDL_AutoBindHandle);\n", iface->name);
         indent--;
 
         /* unmarshal return value */
@@ -206,7 +218,7 @@
             write_type(client, def->type, def, def->tname);
             fprintf(client, " __RPC_FAR *)_StubMsg.Buffer)++;\n");
 
-            /* FIXME: update pro_offset */
+            /* FIXME: update proc_offset */
             proc_offset += 2;
         }
 
@@ -242,12 +254,14 @@
     }
 }
 
+
 static void write_bindinghandledecl(type_t *iface)
 {
     print_client("static RPC_BINDING_HANDLE %s__MIDL_AutoBindHandle;\n", iface->name);
     fprintf(client, "\n");
 }
 
+
 static void write_stubdescdecl(type_t *iface)
 {
     print_client("extern const MIDL_STUB_DESC %s_StubDesc;\n", iface->name);
@@ -257,13 +271,18 @@
 
 static void write_stubdescriptor(type_t *iface)
 {
+    char *handle_name = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
+
     print_client("static const MIDL_STUB_DESC %s_StubDesc =\n", iface->name);
     print_client("{\n");
     indent++;
     print_client("(void __RPC_FAR *)& %s___RpcClientInterface,\n", iface->name);
     print_client("MIDL_user_allocate,\n");
     print_client("MIDL_user_free,\n");
-    print_client("&%s__MIDL_AutoBindHandle,\n", iface->name);
+    if (handle_name)
+        print_client("&%s,\n", handle_name);
+    else
+        print_client("&%s__MIDL_AutoBindHandle,\n", iface->name);
     print_client("0,\n");
     print_client("0,\n");
     print_client("0,\n");
@@ -354,6 +373,18 @@
 }
 
 
+static void write_implicithandledecl(type_t *iface)
+{
+    char *var = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
+
+    if (var)
+    {
+        fprintf(client, "handle_t %s;\n", var);
+        fprintf(client, "\n");
+    }
+}
+
+
 static void init_client(void)
 {
     if (client) return;
@@ -388,6 +419,7 @@
         return;
 
     write_formatstringsdecl(lcur->iface);
+    write_implicithandledecl(lcur->iface);
 
     write_clientinterfacedecl(lcur->iface);
     write_stubdescdecl(lcur->iface);

Modified: trunk/reactos/tools/widl/header.c
--- trunk/reactos/tools/widl/header.c	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/header.c	2005-02-22 11:46:44 UTC (rev 13711)
@@ -668,7 +668,10 @@
     fprintf(header, " ");
     write_name(header, def);
     fprintf(header, "(\n");
-    write_args(header, cur->args, iface->name, 0, TRUE);
+    if (cur->args)
+      write_args(header, cur->args, iface->name, 0, TRUE);
+    else
+      fprintf(header, "    void");
     fprintf(header, ");\n");
 
     cur = PREV_LINK(cur);
@@ -783,6 +786,7 @@
 void write_rpc_interface(type_t *iface)
 {
   unsigned long ver = get_attrv(iface->attrs, ATTR_VERSION);
+  char *var = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
 
   if (!iface->funcs) return;
 
@@ -790,6 +794,10 @@
   fprintf(header, " * %s interface (v%d.%d)\n", iface->name, LOWORD(ver), HIWORD(ver));
   fprintf(header, " */\n");
   write_iface_guid(iface);
+  if (var)
+  {
+    fprintf(header, "extern handle_t %s;\n", var);
+  }
   fprintf(header, "extern RPC_IF_HANDLE %s_v%d_%d_c_ifspec;\n", iface->name, LOWORD(ver), HIWORD(ver));
   fprintf(header, "extern RPC_IF_HANDLE %s_v%d_%d_s_ifspec;\n", iface->name, LOWORD(ver), HIWORD(ver));
   write_function_proto(iface);

Modified: trunk/reactos/tools/widl/lex.yy.c
--- trunk/reactos/tools/widl/lex.yy.c	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/lex.yy.c	2005-02-22 11:46:44 UTC (rev 13711)
@@ -4498,7 +4498,7 @@
 	{"entry",			tENTRY},
 	{"enum",			tENUM},
 	{"error_status_t",		tERRORSTATUST},
-/* ... */
+	{"explicit_handle",		tEXPLICITHANDLE},
 	{"extern",			tEXTERN},
 /* ... */
 	{"float",			tFLOAT},
@@ -4512,13 +4512,14 @@
 	{"helpstringcontext",		tHELPSTRINGCONTEXT},
 	{"helpstringdll",		tHELPSTRINGDLL},
 /* ... */
-	{"hidden",                      tHIDDEN},
+	{"hidden",			tHIDDEN},
 	{"hyper",			tHYPER},
 	{"id",				tID},
 	{"idempotent",			tIDEMPOTENT},
 /* ... */
 	{"iid_is",			tIIDIS},
 /* ... */
+	{"implicit_handle",		tIMPLICITHANDLE},
 	{"import",			tIMPORT},
 	{"importlib",			tIMPORTLIB},
 	{"in",				tIN},
@@ -4559,7 +4560,7 @@
 	{"readonly",			tREADONLY},
 	{"ref",				tREF},
 /* ... */
-	{"restricted",                  tRESTRICTED},
+	{"restricted",			tRESTRICTED},
 	{"retval",			tRETVAL},
 /* ... */
 	{"short",			tSHORT},

Modified: trunk/reactos/tools/widl/parser.l
--- trunk/reactos/tools/widl/parser.l	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/parser.l	2005-02-22 11:46:44 UTC (rev 13711)
@@ -218,7 +218,7 @@
 	{"entry",			tENTRY},
 	{"enum",			tENUM},
 	{"error_status_t",		tERRORSTATUST},
-/* ... */
+	{"explicit_handle",		tEXPLICITHANDLE},
 	{"extern",			tEXTERN},
 /* ... */
 	{"float",			tFLOAT},
@@ -232,13 +232,14 @@
 	{"helpstringcontext",		tHELPSTRINGCONTEXT},
 	{"helpstringdll",		tHELPSTRINGDLL},
 /* ... */
-	{"hidden",                      tHIDDEN},
+	{"hidden",			tHIDDEN},
 	{"hyper",			tHYPER},
 	{"id",				tID},
 	{"idempotent",			tIDEMPOTENT},
 /* ... */
 	{"iid_is",			tIIDIS},
 /* ... */
+	{"implicit_handle",		tIMPLICITHANDLE},
 	{"import",			tIMPORT},
 	{"importlib",			tIMPORTLIB},
 	{"in",				tIN},
@@ -279,7 +280,7 @@
 	{"readonly",			tREADONLY},
 	{"ref",				tREF},
 /* ... */
-	{"restricted",                  tRESTRICTED},
+	{"restricted",			tRESTRICTED},
 	{"retval",			tRETVAL},
 /* ... */
 	{"short",			tSHORT},

Modified: trunk/reactos/tools/widl/parser.y
--- trunk/reactos/tools/widl/parser.y	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/parser.y	2005-02-22 11:46:44 UTC (rev 13711)
@@ -138,7 +138,7 @@
 %token tDLLNAME tDOUBLE tDUAL
 %token tENDPOINT
 %token tENTRY tENUM tERRORSTATUST
-%token tEXTERN
+%token tEXPLICITHANDLE tEXTERN
 %token tFLOAT
 %token tHANDLE
 %token tHANDLET
@@ -147,6 +147,7 @@
 %token tHIDDEN
 %token tHYPER tID tIDEMPOTENT
 %token tIIDIS
+%token tIMPLICITHANDLE
 %token tIMPORT tIMPORTLIB
 %token tIN tINCLUDE tINLINE
 %token tINPUTSYNC
@@ -333,6 +334,7 @@
 
 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 +349,7 @@
 	| 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 +360,7 @@
 	| 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 +369,7 @@
 	| 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 +435,19 @@
 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 +494,8 @@
 	;
 
 expr_const: expr				{ $$ = $1;
-						  if (!$$->is_const) yyerror("expression is not constant\n");
+						  if (!$$->is_const)
+						      yyerror("expression is not constant\n");
 						}
 	;
 
@@ -713,13 +718,13 @@
 	;
 
 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)); }

Modified: trunk/reactos/tools/widl/server.c
--- trunk/reactos/tools/widl/server.c	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/server.c	2005-02-22 11:46:44 UTC (rev 13711)
@@ -118,6 +118,28 @@
 }
 
 
+unsigned int get_required_stack_size(type_t *type)
+{
+    switch(type->type)
+    {
+        case RPC_FC_BYTE:
+        case RPC_FC_CHAR:
+        case RPC_FC_WCHAR:
+        case RPC_FC_USHORT:
+        case RPC_FC_SHORT:
+        case RPC_FC_ULONG:
+        case RPC_FC_LONG:
+            return 4;
+
+      case RPC_FC_HYPER:
+            return 8;
+
+        default:
+            error("Unknown/unsupported type: %s\n", type->name);
+    }
+}
+
+
 static void write_function_stubs(type_t *iface)
 {
     func_t *cur = iface->funcs;
@@ -197,7 +219,7 @@
         if (!is_void(def->type, NULL))
         {
             fprintf(server, "\n");
-            print_server("_StubMsg.BufferLength = %uU;\n", 4); /* FIXME */
+            print_server("_StubMsg.BufferLength = %uU;\n", get_required_stack_size(def->type));
             print_server("_pRpcMessage->BufferLength = _StubMsg.BufferLength;\n");
             fprintf(server, "\n");
             print_server("_Status = I_RpcGetBuffer(_pRpcMessage);\n");

Modified: trunk/reactos/tools/widl/widltypes.h
--- trunk/reactos/tools/widl/widltypes.h	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/widltypes.h	2005-02-22 11:46:44 UTC (rev 13711)
@@ -58,6 +58,7 @@
 enum attr_type
 {
     ATTR_ASYNC,
+    ATTR_AUTO_HANDLE,
     ATTR_CALLAS,
     ATTR_CASE,
     ATTR_CONTEXTHANDLE,
@@ -70,6 +71,7 @@
     ATTR_ENDPOINT,
     ATTR_ENTRY_STRING,
     ATTR_ENTRY_ORDINAL,
+    ATTR_EXPLICIT_HANDLE,
     ATTR_HANDLE,
     ATTR_HELPCONTEXT,
     ATTR_HELPFILE,
@@ -80,6 +82,7 @@
     ATTR_ID,
     ATTR_IDEMPOTENT,
     ATTR_IIDIS,
+    ATTR_IMPLICIT_HANDLE,
     ATTR_IN,
     ATTR_INPUTSYNC,
     ATTR_LENGTHIS,
@@ -147,7 +150,7 @@
     TKIND_UNION,
     TKIND_MAX
 };
-   
+
 struct _attr_t {
   enum attr_type type;
   union {

Modified: trunk/reactos/tools/widl/y.tab.c
--- trunk/reactos/tools/widl/y.tab.c	2005-02-22 09:35:59 UTC (rev 13710)
+++ trunk/reactos/tools/widl/y.tab.c	2005-02-22 11:46:44 UTC (rev 13711)
@@ -49,79 +49,81 @@
 #define	tENTRY	299
 #define	tENUM	300
 #define	tERRORSTATUST	301
-#define	tEXTERN	302
-#define	tFLOAT	303
-#define	tHANDLE	304
-#define	tHANDLET	305
-#define	tHELPCONTEXT	306
-#define	tHELPFILE	307
-#define	tHELPSTRING	308
-#define	tHELPSTRINGCONTEXT	309
-#define	tHELPSTRINGDLL	310
-#define	tHIDDEN	311
-#define	tHYPER	312
-#define	tID	313
-#define	tIDEMPOTENT	314
-#define	tIIDIS	315
-#define	tIMPORT	316
-#define	tIMPORTLIB	317
-#define	tIN	318
-#define	tINCLUDE	319
-#define	tINLINE	320
-#define	tINPUTSYNC	321
-#define	tINT	322
-#define	tINT64	323
-#define	tINTERFACE	324
-#define	tLENGTHIS	325
-#define	tLIBRARY	326
-#define	tLOCAL	327
-#define	tLONG	328
-#define	tMETHODS	329
-#define	tMODULE	330
-#define	tNONCREATABLE	331
-#define	tOBJECT	332
-#define	tODL	333
-#define	tOLEAUTOMATION	334
-#define	tOPTIONAL	335
-#define	tOUT	336
-#define	tPOINTERDEFAULT	337
-#define	tPROPERTIES	338
-#define	tPROPGET	339
-#define	tPROPPUT	340
-#define	tPROPPUTREF	341
-#define	tPUBLIC	342
-#define	tREADONLY	343
-#define	tREF	344
-#define	tRESTRICTED	345
-#define	tRETVAL	346
-#define	tSHORT	347
-#define	tSIGNED	348
-#define	tSIZEIS	349
-#define	tSIZEOF	350
-#define	tSOURCE	351
-#define	tSTDCALL	352
-#define	tSTRING	353
-#define	tSTRUCT	354
-#define	tSWITCH	355
-#define	tSWITCHIS	356
-#define	tSWITCHTYPE	357
-#define	tTRANSMITAS	358
-#define	tTYPEDEF	359
-#define	tUNION	360
-#define	tUNIQUE	361
-#define	tUNSIGNED	362
-#define	tUUID	363
-#define	tV1ENUM	364
-#define	tVARARG	365
-#define	tVERSION	366
-#define	tVOID	367
-#define	tWCHAR	368
-#define	tWIREMARSHAL	369
-#define	tPOINTERTYPE	370
-#define	COND	371
-#define	CAST	372
-#define	PPTR	373
-#define	NEG	374
+#define	tEXPLICITHANDLE	302
+#define	tEXTERN	303
+#define	tFLOAT	304
+#define	tHANDLE	305
+#define	tHANDLET	306
+#define	tHELPCONTEXT	307
+#define	tHELPFILE	308
+#define	tHELPSTRING	309
+#define	tHELPSTRINGCONTEXT	310
+#define	tHELPSTRINGDLL	311
+#define	tHIDDEN	312
+#define	tHYPER	313
+#define	tID	314
+#define	tIDEMPOTENT	315
+#define	tIIDIS	316
+#define	tIMPLICITHANDLE	317
+#define	tIMPORT	318
+#define	tIMPORTLIB	319
+#define	tIN	320
+#define	tINCLUDE	321
+#define	tINLINE	322
+#define	tINPUTSYNC	323
+#define	tINT	324
+#define	tINT64	325
+#define	tINTERFACE	326
+#define	tLENGTHIS	327
+#define	tLIBRARY	328
+#define	tLOCAL	329
+#define	tLONG	330
+#define	tMETHODS	331
+#define	tMODULE	332
+#define	tNONCREATABLE	333
+#define	tOBJECT	334
+#define	tODL	335
+#define	tOLEAUTOMATION	336
+#define	tOPTIONAL	337
+#define	tOUT	338
+#define	tPOINTERDEFAULT	339
+#define	tPROPERTIES	340
+#define	tPROPGET	341
+#define	tPROPPUT	342
+#define	tPROPPUTREF	343
+#define	tPUBLIC	344
+#define	tREADONLY	345
+#define	tREF	346
+#define	tRESTRICTED	347
+#define	tRETVAL	348
+#define	tSHORT	349
+#define	tSIGNED	350
+#define	tSIZEIS	351
+#define	tSIZEOF	352
+#define	tSOURCE	353
+#define	tSTDCALL	354
+#define	tSTRING	355
+#define	tSTRUCT	356
+#define	tSWITCH	357
+#define	tSWITCHIS	358
+#define	tSWITCHTYPE	359
+#define	tTRANSMITAS	360
+#define	tTYPEDEF	361
+#define	tUNION	362
+#define	tUNIQUE	363
+#define	tUNSIGNED	364
+#define	tUUID	365
+#define	tV1ENUM	366
+#define	tVARARG	367
+#define	tVERSION	368
+#define	tVOID	369
+#define	tWCHAR	370
+#define	tWIREMARSHAL	371
+#define	tPOINTERTYPE	372
+#define	COND	373
+#define	CAST	374
+#define	PPTR	375
+#define	NEG	376
 
 #line 1 "parser.y"
 
@@ -232,7 +234,7 @@
 static type_t std_uhyper = { "MIDL_uhyper" };
 
 
-#line 111 "parser.y"
+#line 109 "parser.y"
 typedef union {
 	attr_t *attr;
 	expr_t *expr;
@@ -256,26 +258,26 @@
 
 
 
-#define	YYFINAL		450
+#define	YYFINAL		457
 #define	YYFLAG		-32768
-#define	YYNTBASE	140
+#define	YYNTBASE	142
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 374 ? yytranslate[x] : 212)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 376 ? yytranslate[x] : 214)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,   120,     2,   130,
-   131,   123,   122,   117,   121,   139,   124,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,   136,   129,     2,
-   137,     2,   138,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,   122,     2,   132,
+   133,   125,   124,   119,   123,   141,   126,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,   138,   131,     2,
+   139,     2,   140,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-   134,     2,   135,     2,     2,     2,     2,     2,     2,     2,
+   136,     2,   137,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   132,   119,   133,   125,     2,     2,     2,     2,
+     2,     2,   134,   121,   135,   127,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -300,7 +302,7 @@
     87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
     97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
    107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   118,   126,   127,   128
+   117,   118,   120,   128,   129,   130
 };
 
 #if YYDEBUG != 0
@@ -310,133 +312,136 @@
     52,    55,    58,    60,    63,    66,    69,    74,    78,    82,
     85,    89,    93,    94,    96,    98,   100,   104,   106,   111,
    115,   122,   128,   129,   133,   137,   139,   143,   148,   149,
-   151,   155,   157,   161,   166,   168,   173,   178,   180,   182,
-   184,   186,   188,   193,   198,   203,   205,   210,   215,   220,
-   222,   227,   232,   237,   242,   247,   249,   254,   256,   261,
-   263,   265,   270,   272,   274,   276,   278,   280,   282,   284,
-   289,   291,   293,   295,   297,   299,   301,   303,   308,   310,
-   312,   317,   322,   327,   332,   334,   336,   341,   346,   348,
-   349,   351,   352,   355,   360,   364,   370,   371,   374,   376,
-   378,   382,   386,   388,   394,   396,   400,   401,   403,   405,
-   407,   409,   415,   419,   423,   427,   431,   435,   439,   443,
-   447,   450,   453,   456,   461,   466,   470,   472,   476,   478,
-   483,   484,   487,   490,   494,   497,   499,   504,   512,   513,
-   515,   516,   518,   520,   522,   524,   526,   528,   530,   532,
-   534,   536,   539,   542,   544,   546,   548,   550,   552,   553,
-   555,   557,   560,   563,   566,   568,   570,   573,   576,   579,
-   584,   585,   588,   591,   594,   597,   600,   603,   607,   610,
-   614,   620,   621,   624,   627,   630,   633,   639,   647,   649,
-   652,   655,   658,   661,   664,   669,   672,   675,   677,   679,
-   683,   685,   689,   691,   693,   699,   701,   703,   705,   708,
-   710,   713,   715,   718,   720,   723,   728,   734,   745,   747
+   151,   155,   157,   161,   166,   168,   170,   175,   180,   182,
+   184,   186,   188,   190,   195,   200,   205,   207,   212,   217,
+   222,   224,   226,   231,   236,   241,   246,   251,   253,   258,
+   260,   265,   271,   273,   275,   280,   282,   284,   286,   288,
+   290,   292,   294,   299,   301,   303,   305,   307,   309,   311,
+   313,   318,   320,   322,   327,   332,   337,   342,   344,   346,
+   351,   356,   358,   359,   361,   362,   365,   370,   374,   380,
+   381,   384,   386,   388,   392,   396,   398,   404,   406,   410,
+   411,   413,   415,   417,   419,   425,   429,   433,   437,   441,
+   445,   449,   453,   457,   460,   463,   466,   471,   476,   480,
+   482,   486,   488,   493,   494,   497,   500,   504,   507,   509,
+   514,   522,   523,   525,   526,   528,   530,   532,   534,   536,
+   538,   540,   542,   544,   546,   549,   552,   554,   556,   558,
+   560,   562,   563,   565,   567,   570,   573,   576,   578,   580,
+   583,   586,   589,   594,   595,   598,   601,   604,   607,   610,
+   613,   617,   620,   624,   630,   631,   634,   637,   640,   643,
+   649,   657,   659,   662,   665,   668,   671,   674,   679,   682,
+   685,   687,   689,   693,   695,   699,   701,   703,   709,   711,
+   713,   715,   718,   720,   723,   725,   728,   730,   733,   738,
+   744,   755,   757
 };
 
-static const short yyrhs[] = {   141,
-     0,     0,   141,   199,     0,   141,   198,     0,   141,   187,
-     0,   141,   202,     0,   141,   150,     0,   141,   144,     0,
-     0,   142,   199,     0,   142,   198,     0,   142,   187,     0,
-   142,   202,     0,   142,   144,     0,     0,   143,   178,   129,
-     0,   143,   144,     0,   129,     0,   164,   129,     0,   145,
-     0,   168,   129,     0,   174,   129,     0,   147,     0,   207,
-   129,     0,   209,   129,     0,   210,   129,     0,    37,   130,
-     7,   131,     0,    62,     7,   129,     0,   146,   142,     9,
-     0,    72,     3,     0,   158,   148,   132,     0,   149,   142,
-   133,     0,     0,   153,     0,   113,     0,   154,     0,   153,
-   117,   154,     0,   152,     0,   158,   208,   204,   155,     0,
-   208,   204,   155,     0,   158,   208,   204,   130,   151,   131,
-     0,   208,   204,   130,   151,   131,     0,     0,   134,   156,
-   135,     0,   134,   123,   135,     0,   170,     0,   156,   117,
-   171,     0,   156,   135,   134,   171,     0,     0,   158,     0,
-   134,   159,   135,     0,   160,     0,   159,   117,   160,     0,
-   159,   135,   134,   160,     0,    16,     0,    24,   130,   181,
-   131,     0,    26,   130,   172,   131,     0,    33,     0,    34,
-     0,    35,     0,    36,     0,    38,     0,    39,   130,   173,
-   131,     0,    39,   130,     7,   131,     0,    41,   130,     7,
-   131,     0,    43,     0,    44,   130,     7,   131,     0,    45,
-   130,     7,   131,     0,    45,   130,   173,   131,     0,    50,
-     0,    52,   130,   173,   131,     0,    53,   130,     7,   131,
-     0,    54,   130,     7,   131,     0,    55,   130,   173,   131,
-     0,    56,   130,     7,   131,     0,    57,     0,    59,   130,
-   173,   131,     0,    60,     0,    61,   130,   181,   131,     0,
-    64,     0,    67,     0,    71,   130,   169,   131,     0,    73,
-     0,    77,     0,    78,     0,    79,     0,    80,     0,    81,
-     0,    82,     0,    83,   130,   206,   131,     0,    85,     0,
-    86,     0,    87,     0,    88,     0,    89,     0,    91,     0,
-    92,     0,    95,   130,   169,   131,     0,    97,     0,    99,
-     0,   102,   130,   171,   131,     0,   103,   130,   208,   131,
-     0,   104,   130,   208,   131,     0,   109,   130,     8,   131,
-     0,   110,     0,   111,     0,   112,   130,   211,   131,     0,
-   115,   130,   208,   131,     0,   206,     0,     0,    98,     0,
-     0,   162,   163,     0,    26,   171,   136,   176,     0,    38,
-   136,   176,     0,    32,   208,   181,   137,   173,     0,     0,
-   166,   117,     0,   166,     0,   167,     0,   166,   117,   167,
-     0,   181,   137,   173,     0,   181,     0,    46,   180,   132,
-   165,   133,     0,   170,     0,   169,   117,   170,     0,     0,
-   171,     0,     5,     0,     6,     0,     3,     0,   171,   138,
-   171,   136,   171,     0,   171,   119,   171,     0,   171,   120,
-   171,     0,   171,   122,   171,     0,   171,   121,   171,     0,
-   171,   123,   171,     0,   171,   124,   171,     0,   171,    10,
-   171,     0,   171,    11,   171,     0,   125,   171,     0,   121,
-   171,     0,   123,   171,     0,   130,   208,   131,   171,     0,
-    96,   130,   208,   131,     0,   130,   171,   131,     0,   173,
-     0,   172,   117,   173,     0,   171,     0,    48,    32,   208,
-   181,     0,     0,   175,   176,     0,   177,   129,     0,   157,
-   210,   129,     0,   158,   129,     0,   129,     0,   157,   208,
-   204,   155,     0,   157,   208,   161,   204,   130,   151,   131,
-     0,     0,   181,     0,     0,     3,     0,     4,     0,     3,
-     0,     4,     0,    59,     0,    92,     0,   112,     0,    22,
-     0,   114,     0,   184,     0,    94,   184,     0,   108,   184,
-     0,    49,     0,    42,     0,    20,     0,    47,     0,    51,
-     0,     0,    68,     0,    68,     0,    93,   183,     0,    74,
-   183,     0,    58,   183,     0,    69,     0,    28,     0,    29,
-     3,     0,    29,     4,     0,   158,   185,     0,   186,   132,
-   188,   133,     0,     0,   188,   189,     0,   157,   199,     0,
-    40,     3,     0,    40,     4,     0,   158,   190,     0,    84,
-   136,     0,   192,   177,   129,     0,    75,   136,     0,   193,
-   178,   129,     0,   191,   132,   192,   193,   133,     0,     0,
-   136,     4,     0,    70,     3,     0,    70,     4,     0,   158,
-   196,     0,   197,   195,   132,   143,   133,     0,   197,   136,
-     3,   132,   147,   143,   133,     0,   194,     0,   196,   129,
-     0,   190,   129,     0,    76,     3,     0,    76,     4,     0,
-   158,   200,     0,   201,   132,   143,   133,     0,   123,   204,
-     0,    32,   203,     0,   181,     0,   203,     0,   130,   204,
-   131,     0,   204,     0,   205,   117,   204,     0,    90,     0,
-   107,     0,   100,   180,   132,   175,   133,     0,   113,     0,
-     4,     0,   182,     0,    32,   208,     0,   168,     0,    46,
-     3,     0,   207,     0,   100,     3,     0,   210,     0,   106,
-     3,     0,   105,   157,   208,   205,     0,   106,   180,   132,
-   175,   133,     0,   106,   180,   101,   130,   177,   131,   179,
-   132,   162,   133,     0,     5,     0,     5,   139,     5,     0
+static const short yyrhs[] = {   143,
+     0,     0,   143,   201,     0,   143,   200,     0,   143,   189,
+     0,   143,   204,     0,   143,   152,     0,   143,   146,     0,
+     0,   144,   201,     0,   144,   200,     0,   144,   189,     0,
+   144,   204,     0,   144,   146,     0,     0,   145,   180,   131,
+     0,   145,   146,     0,   131,     0,   166,   131,     0,   147,
+     0,   170,   131,     0,   176,   131,     0,   149,     0,   209,
+   131,     0,   211,   131,     0,   212,   131,     0,    37,   132,
+     7,   133,     0,    64,     7,   131,     0,   148,   144,     9,
+     0,    74,     3,     0,   160,   150,   134,     0,   151,   144,
+   135,     0,     0,   155,     0,   115,     0,   156,     0,   155,
+   119,   156,     0,   154,     0,   160,   210,   206,   157,     0,
+   210,   206,   157,     0,   160,   210,   206,   132,   153,   133,
+     0,   210,   206,   132,   153,   133,     0,     0,   136,   158,
+   137,     0,   136,   125,   137,     0,   172,     0,   158,   119,
+   173,     0,   158,   137,   136,   173,     0,     0,   160,     0,
+   136,   161,   137,     0,   162,     0,   161,   119,   162,     0,
+   161,   137,   136,   162,     0,    16,     0,    18,     0,    24,
+   132,   183,   133,     0,    26,   132,   174,   133,     0,    33,
+     0,    34,     0,    35,     0,    36,     0,    38,     0,    39,
+   132,   175,   133,     0,    39,   132,     7,   133,     0,    41,
+   132,     7,   133,     0,    43,     0,    44,   132,     7,   133,
+     0,    45,   132,     7,   133,     0,    45,   132,   175,   133,
+     0,    48,     0,    51,     0,    53,   132,   175,   133,     0,
+    54,   132,     7,   133,     0,    55,   132,     7,   133,     0,
+    56,   132,   175,   133,     0,    57,   132,     7,   133,     0,
+    58,     0,    60,   132,   175,   133,     0,    61,     0,    62,
+   132,   183,   133,     0,    63,   132,    52,     3,   133,     0,
+    66,     0,    69,     0,    73,   132,   171,   133,     0,    75,
+     0,    79,     0,    80,     0,    81,     0,    82,     0,    83,
+     0,    84,     0,    85,   132,   208,   133,     0,    87,     0,
+    88,     0,    89,     0,    90,     0,    91,     0,    93,     0,
+    94,     0,    97,   132,   171,   133,     0,    99,     0,   101,
+     0,   104,   132,   173,   133,     0,   105,   132,   210,   133,
+     0,   106,   132,   210,   133,     0,   111,   132,     8,   133,
+     0,   112,     0,   113,     0,   114,   132,   213,   133,     0,
+   117,   132,   210,   133,     0,   208,     0,     0,   100,     0,
+     0,   164,   165,     0,    26,   173,   138,   178,     0,    38,
+   138,   178,     0,    32,   210,   183,   139,   175,     0,     0,
+   168,   119,     0,   168,     0,   169,     0,   168,   119,   169,
+     0,   183,   139,   175,     0,   183,     0,    46,   182,   134,
+   167,   135,     0,   172,     0,   171,   119,   172,     0,     0,
+   173,     0,     5,     0,     6,     0,     3,     0,   173,   140,
+   173,   138,   173,     0,   173,   121,   173,     0,   173,   122,
+   173,     0,   173,   124,   173,     0,   173,   123,   173,     0,
+   173,   125,   173,     0,   173,   126,   173,     0,   173,    10,
+   173,     0,   173,    11,   173,     0,   127,   173,     0,   123,
+   173,     0,   125,   173,     0,   132,   210,   133,   173,     0,
+    98,   132,   210,   133,     0,   132,   173,   133,     0,   175,
+     0,   174,   119,   175,     0,   173,     0,    49,    32,   210,
+   183,     0,     0,   177,   178,     0,   179,   131,     0,   159,
+   212,   131,     0,   160,   131,     0,   131,     0,   159,   210,
+   206,   157,     0,   159,   210,   163,   206,   132,   153,   133,
+     0,     0,   183,     0,     0,     3,     0,     4,     0,     3,
+     0,     4,     0,    60,     0,    94,     0,   114,     0,    22,
+     0,   116,     0,   186,     0,    96,   186,     0,   110,   186,
+     0,    50,     0,    42,     0,    20,     0,    47,     0,    52,
+     0,     0,    70,     0,    70,     0,    95,   185,     0,    76,
+   185,     0,    59,   185,     0,    71,     0,    28,     0,    29,
+     3,     0,    29,     4,     0,   160,   187,     0,   188,   134,
+   190,   135,     0,     0,   190,   191,     0,   159,   201,     0,
+    40,     3,     0,    40,     4,     0,   160,   192,     0,    86,
+   138,     0,   194,   179,   131,     0,    77,   138,     0,   195,
+   180,   131,     0,   193,   134,   194,   195,   135,     0,     0,
+   138,     4,     0,    72,     3,     0,    72,     4,     0,   160,
+   198,     0,   199,   197,   134,   145,   135,     0,   199,   138,
+     3,   134,   149,   145,   135,     0,   196,     0,   198,   131,
+     0,   192,   131,     0,    78,     3,     0,    78,     4,     0,
+   160,   202,     0,   203,   134,   145,   135,     0,   125,   206,
+     0,    32,   205,     0,   183,     0,   205,     0,   132,   206,
+   133,     0,   206,     0,   207,   119,   206,     0,    92,     0,
+   109,     0,   102,   182,   134,   177,   135,     0,   115,     0,
+     4,     0,   184,     0,    32,   210,     0,   170,     0,    46,
+     3,     0,   209,     0,   102,     3,     0,   212,     0,   108,
+     3,     0,   107,   159,   210,   207,     0,   108,   182,   134,
+   177,   135,     0,   108,   182,   103,   132,   179,   133,   181,
+   134,   164,   135,     0,     5,     0,     5,   141,     5,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   229,   232,   233,   234,   235,   236,   237,   238,   241,   242,
-   243,   244,   245,   246,   249,   250,   251,   254,   255,   256,
-   257,   258,   259,   260,   261,   262,   265,   267,   270,   273,
-   275,   277,   280,   281,   284,   287,   288,   289,   293,   297,
-   300,   306,   313,   314,   315,   318,   319,   320,   323,   324,
-   327,   331,   332,   333,   336,   338,   339,   340,   341,   342,
-   343,   344,   345,   346,   347,   348,   349,   350,   351,   352,
-   353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-   363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-   373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-   383,   384,   385,   386,   387,   388,   389,   390,   391,   394,
-   395,   398,   399,   404,   408,   414,   421,   422,   423,   426,
-   427,   433,   438,   444,   452,   453,   466,   467,   470,   471,
-   472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
-   482,   483,   484,   485,   486,   487,   490,   491,   494,   499,
-   504,   505,   510,   511,   512,   513,   516,   519,   530,   531,
-   534,   535,   536,   539,   541,   542,   543,   544,   547,   548,
-   549,   550,   551,   563,   564,   565,   566,   567,   570,   571,
-   574,   575,   576,   577,   578,   579,   582,   583,   586,   592,
-   597,   598,   601,   605,   606,   609,   621,   622,   625,   626,
-   629,   644,   645,   648,   649,   652,   660,   668,   675,   678,
-   680,   683,   684,   687,   692,   698,   699,   702,   703,   704,
-   707,   709,   712,   714,   717,   727,   728,   729,   730,   731,
-   732,   733,   734,   735,   736,   739,   751,   755,   768,   770
+   228,   231,   232,   233,   234,   235,   236,   237,   240,   241,
+   242,   243,   244,   245,   248,   249,   250,   253,   254,   255,
+   256,   257,   258,   259,   260,   261,   264,   266,   269,   272,
+   274,   276,   279,   280,   283,   286,   287,   288,   292,   296,
+   299,   305,   312,   313,   314,   317,   318,   319,   322,   323,
+   326,   330,   331,   332,   335,   337,   338,   339,   340,   341,
+   342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
+   352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+   362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+   372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+   382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
+   392,   393,   396,   397,   400,   401,   406,   410,   416,   423,
+   424,   425,   428,   429,   435,   440,   446,   454,   455,   468,
+   469,   472,   473,   474,   475,   476,   477,   478,   479,   480,
+   481,   482,   483,   484,   485,   486,   487,   488,   489,   492,
+   493,   496,   502,   507,   508,   513,   514,   515,   516,   519,
+   522,   533,   534,   537,   538,   539,   542,   544,   545,   546,
+   547,   550,   551,   552,   553,   554,   566,   567,   568,   569,
+   570,   573,   574,   577,   578,   579,   580,   581,   582,   585,
+   586,   589,   595,   600,   601,   604,   608,   609,   612,   624,
+   625,   628,   629,   632,   647,   648,   651,   652,   655,   663,
+   671,   678,   681,   683,   686,   687,   690,   695,   701,   702,
+   705,   706,   707,   710,   712,   715,   717,   720,   730,   731,
+   732,   733,   734,   735,   736,   737,   738,   739,   742,   754,
+   758,   771,   773
 };
 #endif
 
@@ -450,22 +455,22 @@
 "tCHAR","tCOCLASS","tCODE","tCOMMSTATUS","tCONST","tCONTEXTHANDLE","tCONTEXTHANDLENOSERIALIZE",
 "tCONTEXTHANDLESERIALIZE","tCONTROL","tCPPQUOTE","tDEFAULT","tDEFAULTVALUE",
 "tDISPINTERFACE","tDLLNAME","tDOUBLE","tDUAL","tENDPOINT","tENTRY","tENUM","tERRORSTATUST",
-"tEXTERN","tFLOAT","tHANDLE","tHANDLET","tHELPCONTEXT","tHELPFILE","tHELPSTRING",
-"tHELPSTRINGCONTEXT","tHELPSTRINGDLL","tHIDDEN","tHYPER","tID","tIDEMPOTENT",
-"tIIDIS","tIMPORT","tIMPORTLIB","tIN","tINCLUDE","tINLINE","tINPUTSYNC","tINT",
-"tINT64","tINTERFACE","tLENGTHIS","tLIBRARY","tLOCAL","tLONG","tMETHODS","tMODULE",
-"tNONCREATABLE","tOBJECT","tODL","tOLEAUTOMATION","tOPTIONAL","tOUT","tPOINTERDEFAULT",
-"tPROPERTIES","tPROPGET","tPROPPUT","tPROPPUTREF","tPUBLIC","tREADONLY","tREF",
-"tRESTRICTED","tRETVAL","tSHORT","tSIGNED","tSIZEIS","tSIZEOF","tSOURCE","tSTDCALL",
-"tSTRING","tSTRUCT","tSWITCH","tSWITCHIS","tSWITCHTYPE","tTRANSMITAS","tTYPEDEF",
-"tUNION","tUNIQUE","tUNSIGNED","tUUID","tV1ENUM","tVARARG","tVERSION","tVOID",
-"tWCHAR","tWIREMARSHAL","tPOINTERTYPE","','","COND","'|'","'&'","'-'","'+'",
-"'*'","'/'","'~'","CAST","PPTR","NEG","';'","'('","')'","'{'","'}'","'['","']'",
-"':'","'='","'?'","'.'","input","gbl_statements","imp_statements","int_statements",
-"statement","cppquote","import_start","import","libraryhdr","library_start",
-"librarydef","m_args","no_args","args","arg","array","array_list","m_attributes",
-"attributes","attrib_list","attribute","callconv","cases","case","constdef",
-"enums","enum_list","enum","enumdef","m_exprs","m_expr","expr","expr_list_const",
+"tEXPLICITHANDLE","tEXTERN","tFLOAT","tHANDLE","tHANDLET","tHELPCONTEXT","tHELPFILE",
+"tHELPSTRING","tHELPSTRINGCONTEXT","tHELPSTRINGDLL","tHIDDEN","tHYPER","tID",
+"tIDEMPOTENT","tIIDIS","tIMPLICITHANDLE","tIMPORT","tIMPORTLIB","tIN","tINCLUDE",
+"tINLINE","tINPUTSYNC","tINT","tINT64","tINTERFACE","tLENGTHIS","tLIBRARY","tLOCAL",
+"tLONG","tMETHODS","tMODULE","tNONCREATABLE","tOBJECT","tODL","tOLEAUTOMATION",
+"tOPTIONAL","tOUT","tPOINTERDEFAULT","tPROPERTIES","tPROPGET","tPROPPUT","tPROPPUTREF",
+"tPUBLIC","tREADONLY","tREF","tRESTRICTED","tRETVAL","tSHORT","tSIGNED","tSIZEIS",
+"tSIZEOF","tSOURCE","tSTDCALL","tSTRING","tSTRUCT","tSWITCH","tSWITCHIS","tSWITCHTYPE",
+"tTRANSMITAS","tTYPEDEF","tUNION","tUNIQUE","tUNSIGNED","tUUID","tV1ENUM","tVARARG",
+"tVERSION","tVOID","tWCHAR","tWIREMARSHAL","tPOINTERTYPE","','","COND","'|'",
+"'&'","'-'","'+'","'*'","'/'","'~'","CAST","PPTR","NEG","';'","'('","')'","'{'",
+"'}'","'['","']'","':'","'='","'?'","'.'","input","gbl_statements","imp_statements",
+"int_statements","statement","cppquote","import_start","import","libraryhdr",
+"library_start","librarydef","m_args","no_args","args","arg","array","array_list",
+"m_attributes","attributes","attrib_list","attribute","callconv","cases","case",
+"constdef","enums","enum_list","enum","enumdef","m_exprs","m_expr","expr","expr_list_const",
 "expr_const","externdef","fields","field","s_field","funcdef","m_ident","t_ident",
 "ident","base_type","m_int","int_std","coclass","coclasshdr","coclassdef","coclass_ints",
 "coclass_int","dispinterface","dispinterfacehdr","dispint_props","dispint_meths",
@@ -476,30 +481,31 @@
 #endif
 
 static const short yyr1[] = {     0,
-   140,   141,   141,   141,   141,   141,   141,   141,   142,   142,
-   142,   142,   142,   142,   143,   143,   143,   144,   144,   144,
-   144,   144,   144,   144,   144,   144,   145,   146,   147,   148,
-   149,   150,   151,   151,   152,   153,   153,   153,   154,   154,
-   154,   154,   155,   155,   155,   156,   156,   156,   157,   157,
-   158,   159,   159,   159,   160,   160,   160,   160,   160,   160,
-   160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-   160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-   160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-   160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-   160,   160,   160,   160,   160,   160,   160,   160,   160,   161,
-   161,   162,   162,   163,   163,   164,   165,   165,   165,   166,
-   166,   167,   167,   168,   169,   169,   170,   170,   171,   171,
-   171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-   171,   171,   171,   171,   171,   171,   172,   172,   173,   174,
-   175,   175,   176,   176,   176,   176,   177,   178,   179,   179,
-   180,   180,   180,   181,   181,   181,   181,   181,   182,   182,
-   182,   182,   182,   182,   182,   182,   182,   182,   183,   183,
-   184,   184,   184,   184,   184,   184,   185,   185,   186,   187,
-   188,   188,   189,   190,   190,   191,   192,   192,   193,   193,
-   194,   195,   195,   196,   196,   197,   198,   198,   198,   199,
-   199,   200,   200,   201,   202,   203,   203,   204,   204,   204,
-   205,   205,   206,   206,   207,   208,   208,   208,   208,   208,
-   208,   208,   208,   208,   208,   209,   210,   210,   211,   211
+   142,   143,   143,   143,   143,   143,   143,   143,   144,   144,
+   144,   144,   144,   144,   145,   145,   145,   146,   146,   146,
+   146,   146,   146,   146,   146,   146,   147,   148,   149,   150,
+   151,   152,   153,   153,   154,   155,   155,   155,   156,   156,
+   156,   156,   157,   157,   157,   158,   158,   158,   159,   159,
+   160,   161,   161,   161,   162,   162,   162,   162,   162,   162,
+   162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+   162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+   162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+   162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+   162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+   162,   162,   163,   163,   164,   164,   165,   165,   166,   167,
+   167,   167,   168,   168,   169,   169,   170,   171,   171,   172,
+   172,   173,   173,   173,   173,   173,   173,   173,   173,   173,
+   173,   173,   173,   173,   173,   173,   173,   173,   173,   174,
+   174,   175,   176,   177,   177,   178,   178,   178,   178,   179,
+   180,   181,   181,   182,   182,   182,   183,   183,   183,   183,
+   183,   184,   184,   184,   184,   184,   184,   184,   184,   184,
[truncated at 1000 lines; 2195 more skipped]