Update WIDL to Wine 1.2 rc6 + sync/modify two idl files making problems with the...
authorDaniel Reimer <reimer.daniel@freenet.de>
Sun, 4 Jul 2010 19:52:38 +0000 (19:52 +0000)
committerDaniel Reimer <reimer.daniel@freenet.de>
Sun, 4 Jul 2010 19:52:38 +0000 (19:52 +0000)
svn path=/trunk/; revision=47940

20 files changed:
reactos/include/psdk/mlang.idl
reactos/include/psdk/shobjidl.idl
reactos/tools/widl/expr.c
reactos/tools/widl/expr.h
reactos/tools/widl/header.c
reactos/tools/widl/header.h
reactos/tools/widl/parser.l
reactos/tools/widl/parser.tab.c
reactos/tools/widl/parser.tab.h
reactos/tools/widl/parser.y
reactos/tools/widl/parser.yy.c
reactos/tools/widl/typegen.c
reactos/tools/widl/typegen.h
reactos/tools/widl/typelib.c
reactos/tools/widl/typelib_struct.h
reactos/tools/widl/typetree.c
reactos/tools/widl/typetree.h
reactos/tools/widl/widl.c
reactos/tools/widl/widltypes.h
reactos/tools/widl/write_msft.c

index a5b1b47..7664a22 100644 (file)
@@ -668,7 +668,7 @@ interface IMultiLanguage2 : IUnknown
     HRESULT GetCodePageDescription(      
         [in] UINT uiCodePage,
         [in] LCID lcid,
-        [in,out] LPWSTR lpWideCharStr,
+        [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,
         [in] int cchWideChar);
 
     HRESULT IsCodePageInstallable(
index 221ab04..bbbb39a 100644 (file)
@@ -1305,7 +1305,8 @@ interface IResolveShellLink : IUnknown
 [
     object,
     uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497),
-    pointer_default(unique)
+    pointer_default(unique),
+       local
 ]
 interface IURLSearchHook : IUnknown
 {
@@ -1340,7 +1341,8 @@ interface ISearchContext : IUnknown
 [
     object,
     uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0),
-    pointer_default(unique)
+    pointer_default(unique),
+       local
 ]
 interface IURLSearchHook2 : IURLSearchHook
 {
@@ -1359,7 +1361,8 @@ cpp_quote("#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)")
 [
     object,
     uuid(000214e1-0000-0000-c000-000000000046),
-    pointer_default(unique)
+    pointer_default(unique),
+       local
 ]
 interface INewShortcutHookA : IUnknown
 {
@@ -1389,7 +1392,8 @@ interface INewShortcutHookA : IUnknown
 [
     object,
     uuid(000214f7-0000-0000-c000-000000000046),
-    pointer_default(unique)
+    pointer_default(unique),
+       local
 ]
 interface INewShortcutHookW : IUnknown
 {
index bca7c5a..8511ce5 100644 (file)
 #include "typetree.h"
 #include "typegen.h"
 
-static int is_integer_type(const type_t *type);
-static int is_float_type(const type_t *type);
+static int is_integer_type(const type_t *type)
+{
+    switch (type_get_type(type))
+    {
+    case TYPE_ENUM:
+        return TRUE;
+    case TYPE_BASIC:
+        switch (type_basic_get_type(type))
+        {
+        case TYPE_BASIC_INT8:
+        case TYPE_BASIC_INT16:
+        case TYPE_BASIC_INT32:
+        case TYPE_BASIC_INT64:
+        case TYPE_BASIC_INT:
+        case TYPE_BASIC_INT3264:
+        case TYPE_BASIC_CHAR:
+        case TYPE_BASIC_HYPER:
+        case TYPE_BASIC_BYTE:
+        case TYPE_BASIC_WCHAR:
+        case TYPE_BASIC_ERROR_STATUS_T:
+            return TRUE;
+        case TYPE_BASIC_FLOAT:
+        case TYPE_BASIC_DOUBLE:
+        case TYPE_BASIC_HANDLE:
+            return FALSE;
+        }
+        return FALSE;
+    default:
+        return FALSE;
+    }
+}
+
+static int is_signed_integer_type(const type_t *type)
+{
+    switch (type_get_type(type))
+    {
+    case TYPE_ENUM:
+        return FALSE;
+    case TYPE_BASIC:
+        switch (type_basic_get_type(type))
+        {
+        case TYPE_BASIC_INT8:
+        case TYPE_BASIC_INT16:
+        case TYPE_BASIC_INT32:
+        case TYPE_BASIC_INT64:
+        case TYPE_BASIC_INT:
+        case TYPE_BASIC_INT3264:
+            return type_basic_get_sign(type) < 0;
+        case TYPE_BASIC_CHAR:
+            return TRUE;
+        case TYPE_BASIC_HYPER:
+        case TYPE_BASIC_BYTE:
+        case TYPE_BASIC_WCHAR:
+        case TYPE_BASIC_ERROR_STATUS_T:
+        case TYPE_BASIC_FLOAT:
+        case TYPE_BASIC_DOUBLE:
+        case TYPE_BASIC_HANDLE:
+            return FALSE;
+        }
+    default:
+        return FALSE;
+    }
+}
+
+static int is_float_type(const type_t *type)
+{
+    return (type_get_type(type) == TYPE_BASIC &&
+        (type_basic_get_type(type) == TYPE_BASIC_FLOAT ||
+         type_basic_get_type(type) == TYPE_BASIC_DOUBLE));
+}
 
 expr_t *make_expr(enum expr_type type)
 {
@@ -49,7 +117,7 @@ expr_t *make_expr(enum expr_type type)
     return e;
 }
 
-expr_t *make_exprl(enum expr_type type, long val)
+expr_t *make_exprl(enum expr_type type, int val)
 {
     expr_t *e = xmalloc(sizeof(expr_t));
     e->type = type;
@@ -138,16 +206,40 @@ expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr)
         /* only do this for types that should be the same on all platforms */
         if (is_integer_type(tref) || is_float_type(tref))
         {
-            unsigned int align = 0;
             e->is_const = TRUE;
-            e->cval = type_memsize(tref, &align);
+            e->cval = type_memsize(tref);
         }
     }
     /* check for cast of constant expression */
     if (type == EXPR_CAST && expr->is_const)
     {
-        e->is_const = TRUE;
-        e->cval = expr->cval;
+        if (is_integer_type(tref))
+        {
+            unsigned int cast_type_bits = type_memsize(tref) * 8;
+            unsigned int cast_mask;
+
+            e->is_const = TRUE;
+            if (is_signed_integer_type(tref))
+            {
+                cast_mask = (1 << (cast_type_bits - 1)) - 1;
+                if (expr->cval & (1 << (cast_type_bits - 1)))
+                    e->cval = -((-expr->cval) & cast_mask);
+                else
+                    e->cval = expr->cval & cast_mask;
+            }
+            else
+            {
+                /* calculate ((1 << cast_type_bits) - 1) avoiding overflow */
+                cast_mask = ((1 << (cast_type_bits - 1)) - 1) |
+                            1 << (cast_type_bits - 1);
+                e->cval = expr->cval & cast_mask;
+            }
+        }
+        else
+        {
+            e->is_const = TRUE;
+            e->cval = expr->cval;
+        }
     }
     free(var);
     return e;
@@ -308,45 +400,6 @@ struct expression_type
     type_t *type;
 };
 
-static int is_integer_type(const type_t *type)
-{
-    switch (type_get_type(type))
-    {
-    case TYPE_ENUM:
-        return TRUE;
-    case TYPE_BASIC:
-        switch (type_basic_get_type(type))
-        {
-        case TYPE_BASIC_INT8:
-        case TYPE_BASIC_INT16:
-        case TYPE_BASIC_INT32:
-        case TYPE_BASIC_INT64:
-        case TYPE_BASIC_INT:
-        case TYPE_BASIC_INT3264:
-        case TYPE_BASIC_CHAR:
-        case TYPE_BASIC_HYPER:
-        case TYPE_BASIC_BYTE:
-        case TYPE_BASIC_WCHAR:
-        case TYPE_BASIC_ERROR_STATUS_T:
-            return TRUE;
-        case TYPE_BASIC_FLOAT:
-        case TYPE_BASIC_DOUBLE:
-        case TYPE_BASIC_HANDLE:
-            return FALSE;
-        }
-        return FALSE;
-    default:
-        return FALSE;
-    }
-}
-
-static int is_float_type(const type_t *type)
-{
-    return (type_get_type(type) == TYPE_BASIC &&
-        (type_basic_get_type(type) == TYPE_BASIC_FLOAT ||
-         type_basic_get_type(type) == TYPE_BASIC_DOUBLE));
-}
-
 static void check_scalar_type(const struct expr_loc *expr_loc,
                               const type_t *cont_type, const type_t *type)
 {
@@ -644,10 +697,10 @@ void write_expr(FILE *h, const expr_t *e, int brackets,
     case EXPR_VOID:
         break;
     case EXPR_NUM:
-        fprintf(h, "%lu", e->u.lval);
+        fprintf(h, "%u", e->u.lval);
         break;
     case EXPR_HEXNUM:
-        fprintf(h, "0x%lx", e->u.lval);
+        fprintf(h, "0x%x", e->u.lval);
         break;
     case EXPR_DOUBLE:
         fprintf(h, "%#.15g", e->u.dval);
index e16975a..7b0e1b2 100644 (file)
@@ -26,7 +26,7 @@ struct expr_loc
 };
 
 extern expr_t *make_expr(enum expr_type type);
-extern expr_t *make_exprl(enum expr_type type, long val);
+extern expr_t *make_exprl(enum expr_type type, int val);
 extern expr_t *make_exprd(enum expr_type type, double val);
 extern expr_t *make_exprs(enum expr_type type, char *val);
 extern expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr);
index 5602b6d..91ea2a0 100644 (file)
@@ -100,7 +100,7 @@ void *get_attrp(const attr_list_t *list, enum attr_type t)
     return NULL;
 }
 
-unsigned long get_attrv(const attr_list_t *list, enum attr_type t)
+unsigned int get_attrv(const attr_list_t *list, enum attr_type t)
 {
     const attr_t *attr;
     if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry )
@@ -334,7 +334,7 @@ void write_type_right(FILE *h, type_t *t, int is_field)
     }
     break;
   case TYPE_BITFIELD:
-    fprintf(h, " : %lu", type_bitfield_get_bits(t)->cval);
+    fprintf(h, " : %u", type_bitfield_get_bits(t)->cval);
     break;
   case TYPE_VOID:
   case TYPE_BASIC:
index 7d6c543..97a2726 100644 (file)
@@ -27,7 +27,7 @@ extern int is_ptrchain_attr(const var_t *var, enum attr_type t);
 extern int is_aliaschain_attr(const type_t *var, enum attr_type t);
 extern int is_attr(const attr_list_t *list, enum attr_type t);
 extern void *get_attrp(const attr_list_t *list, enum attr_type t);
-extern unsigned long get_attrv(const attr_list_t *list, enum attr_type t);
+extern unsigned int get_attrv(const attr_list_t *list, enum attr_type t);
 extern int is_void(const type_t *t);
 extern int is_conformant_array(const type_t *t);
 extern int is_declptr(const type_t *t);
index 0d231fc..e7673d1 100644 (file)
@@ -42,6 +42,7 @@ double        [0-9]+\.[0-9]+([eE][+-]?[0-9]+)*
 %{
 
 #include "config.h"
+#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -85,15 +86,15 @@ int import_stack_ptr = 0;
 
 /* converts an integer in string form to an unsigned long and prints an error
  * on overflow */
-static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
+static unsigned int xstrtoul(const char *nptr, char **endptr, int base)
 {
-    unsigned long l;
+    unsigned long val;
 
     errno = 0;
-    l = strtoul(nptr, endptr, base);
-    if (l == ULONG_MAX && errno == ERANGE)
+    val = strtoul(nptr, endptr, base);
+    if ((val == ULONG_MAX && errno == ERANGE) || ((unsigned int)val != val))
         error_loc("integer constant %s is too large\n", nptr);
-    return l;
+    return val;
 }
 
 UUID *parse_uuid(const char *u)
@@ -150,7 +151,7 @@ UUID *parse_uuid(const char *u)
                                parser_lval.str = get_buffered_cstring();
                                return aSTRING;
                        }
-<INITIAL,ATTR>L\"      yy_push_state(WSTRQUOTE);
+<INITIAL,ATTR>L\"      yy_push_state(WSTRQUOTE); cbufidx = 0;
 <WSTRQUOTE>\"          {
                                yy_pop_state();
                                parser_lval.str = get_buffered_cstring();
@@ -442,10 +443,10 @@ struct imports {
 int do_import(char *fname)
 {
        FILE *f;
-       char *path;
+       char *path, *name;
        struct imports *import;
        int ptr = import_stack_ptr;
-       int ret;
+       int ret, fd;
 
        import = first_import;
        while (import && strcmp(import->name, fname))
@@ -460,7 +461,7 @@ int do_import(char *fname)
         /* don't search for a file name with a path in the include directories,
          * for compatibility with MIDL */
         if (strchr( fname, '/' ) || strchr( fname, '\\' ))
-            path = strdup( fname );
+            path = xstrdup( fname );
         else if (!(path = wpp_find_include( fname, input_name )))
             error_loc("Unable to open include file %s\n", fname);
 
@@ -471,7 +472,16 @@ int do_import(char *fname)
         input_name = path;
         line_number = 1;
 
-        ret = wpp_parse_temp( path, NULL, &temp_name );
+        name = xstrdup( "widl.XXXXXX" );
+        if((fd = mkstemps( name, 0 )) == -1)
+            error("Could not generate a temp name from %s\n", name);
+
+        temp_name = name;
+        if (!(f = fdopen(fd, "wt")))
+            error("Could not open fd %s for writing\n", name);
+
+        ret = wpp_parse( path, f );
+        fclose( f );
         if (ret) exit(1);
 
        if((f = fopen(temp_name, "r")) == NULL)
index 8ed813d..057bab5 100644 (file)
@@ -176,7 +176,7 @@ static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
 static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);
 static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass);
 static attr_t *make_attr(enum attr_type type);
-static attr_t *make_attrv(enum attr_type type, unsigned long val);
+static attr_t *make_attrv(enum attr_type type, unsigned int val);
 static attr_t *make_attrp(enum attr_type type, void *val);
 static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
 static array_dims_t *append_array(array_dims_t *list, expr_t *expr);
@@ -187,8 +187,6 @@ static ifref_t *make_ifref(type_t *iface);
 static var_list_t *append_var_list(var_list_t *list, var_list_t *vars);
 static declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *p);
 static declarator_t *make_declarator(var_t *var);
-static func_list_t *append_func(func_list_t *list, func_t *func);
-static func_t *make_func(var_t *def);
 static type_t *make_safearray(type_t *type);
 static typelib_t *make_library(const char *name, const attr_list_t *attrs);
 static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type);
@@ -234,7 +232,7 @@ static statement_list_t *append_statement(statement_list_t *list, statement_t *s
 
 
 /* Line 189 of yacc.c  */
-#line 238 "parser.tab.c"
+#line 228 "parser.tab.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -423,7 +421,7 @@ typedef union YYSTYPE
 {
 
 /* Line 214 of yacc.c  */
-#line 156 "parser.y"
+#line 154 "parser.y"
 
        attr_t *attr;
        attr_list_t *attr_list;
@@ -436,8 +434,6 @@ typedef union YYSTYPE
        var_list_t *var_list;
        declarator_t *declarator;
        declarator_list_t *declarator_list;
-       func_t *func;
-       func_list_t *func_list;
        statement_t *statement;
        statement_list_t *stmt_list;
        ifref_t *ifref;
@@ -455,7 +451,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 459 "parser.tab.c"
+#line 447 "parser.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -467,7 +463,7 @@ typedef union YYSTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 471 "parser.tab.c"
+#line 459 "parser.tab.c"
 
 #ifdef short
 # undef short
@@ -682,7 +678,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2343
+#define YYLAST   2469
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  179
@@ -691,7 +687,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  345
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  607
+#define YYNSTATES  606
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -772,20 +768,20 @@ static const yytype_uint16 yyprhs[] =
      540,   544,   548,   552,   556,   559,   562,   565,   568,   571,
      574,   578,   582,   588,   594,   599,   603,   605,   609,   611,
      613,   614,   617,   622,   626,   629,   632,   633,   636,   639,
-     641,   645,   649,   653,   656,   657,   659,   660,   662,   664,
-     666,   668,   670,   672,   674,   677,   680,   682,   684,   686,
-     688,   690,   692,   693,   695,   697,   700,   702,   705,   708,
-     710,   712,   714,   717,   720,   723,   729,   730,   733,   736,
-     739,   742,   745,   748,   752,   755,   759,   765,   771,   772,
-     775,   778,   781,   784,   791,   800,   803,   806,   809,   812,
-     815,   818,   824,   826,   828,   830,   832,   834,   835,   838,
-     841,   845,   846,   848,   851,   854,   857,   861,   864,   866,
-     868,   872,   875,   880,   884,   887,   889,   893,   896,   897,
-     899,   903,   906,   908,   912,   917,   921,   924,   926,   930,
-     933,   934,   936,   938,   942,   945,   947,   951,   956,   958,
-     962,   963,   966,   969,   971,   975,   977,   981,   983,   985,
-     987,   993,   995,   997,   999,  1001,  1004,  1006,  1009,  1011,
-    1014,  1019,  1024,  1030,  1041,  1043
+     641,   645,   647,   651,   654,   655,   657,   658,   660,   662,
+     664,   666,   668,   670,   672,   675,   678,   680,   682,   684,
+     686,   688,   690,   691,   693,   695,   698,   700,   703,   706,
+     708,   710,   712,   715,   718,   721,   727,   728,   731,   734,
+     737,   740,   743,   746,   750,   753,   757,   763,   769,   770,
+     773,   776,   779,   782,   789,   798,   801,   804,   807,   810,
+     813,   816,   822,   824,   826,   828,   830,   832,   833,   836,
+     839,   843,   844,   846,   849,   852,   855,   859,   862,   864,
+     866,   870,   873,   878,   882,   885,   887,   891,   894,   895,
+     897,   901,   904,   906,   910,   915,   919,   922,   924,   928,
+     931,   932,   934,   936,   940,   943,   945,   949,   954,   956,
+     960,   961,   964,   967,   969,   973,   975,   979,   981,   983,
+     985,   991,   993,   995,   997,   999,  1002,  1004,  1007,  1009,
+    1012,  1017,  1022,  1028,  1039,  1041
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -855,87 +851,87 @@ static const yytype_int16 yyrhs[] =
       -1,   214,    -1,    -1,   218,   219,    -1,   199,   254,   270,
      173,    -1,   199,   276,   173,    -1,   223,   173,    -1,   200,
      173,    -1,    -1,   221,   220,    -1,   223,   173,    -1,   173,
-      -1,   199,   254,   257,    -1,   199,   254,   257,    -1,   200,
-     254,   271,    -1,   254,   271,    -1,    -1,   228,    -1,    -1,
-       3,    -1,     4,    -1,     3,    -1,     4,    -1,    33,    -1,
-     148,    -1,   231,    -1,   124,   231,    -1,   142,   231,    -1,
-     142,    -1,    66,    -1,    56,    -1,    31,    -1,    61,    -1,
-      68,    -1,    -1,    87,    -1,    87,    -1,   123,   230,    -1,
-     127,    -1,    95,   230,    -1,    75,   230,    -1,    89,    -1,
-      39,    -1,    88,    -1,    40,     3,    -1,    40,     4,    -1,
-     200,   232,    -1,   233,   176,   235,   177,   184,    -1,    -1,
-     235,   236,    -1,   199,   246,    -1,    54,     3,    -1,    54,
-       4,    -1,   200,   237,    -1,   109,   152,    -1,   239,   223,
-     173,    -1,    96,   152,    -1,   240,   224,   173,    -1,   238,
-     176,   239,   240,   177,    -1,   238,   176,   243,   173,   177,
-      -1,    -1,   152,     4,    -1,    90,     3,    -1,    90,     4,
-      -1,   200,   243,    -1,   244,   242,   176,   183,   177,   184,
-      -1,   244,   152,     3,   176,   189,   183,   177,   184,    -1,
-     241,   184,    -1,   243,   173,    -1,   237,   173,    -1,    97,
-       3,    -1,    97,     4,    -1,   200,   247,    -1,   248,   176,
-     183,   177,   184,    -1,    63,    -1,   129,    -1,   118,    -1,
-      85,    -1,    43,    -1,    -1,   253,   252,    -1,   274,   255,
-      -1,   256,   274,   255,    -1,    -1,   256,    -1,   252,   255,
-      -1,   251,   255,    -1,   250,   255,    -1,   160,   253,   257,
-      -1,   205,   257,    -1,   258,    -1,   228,    -1,   174,   257,
-     175,    -1,   258,   198,    -1,   258,   174,   194,   175,    -1,
-     160,   253,   261,    -1,   205,   261,    -1,   262,    -1,   160,
-     253,   265,    -1,   205,   265,    -1,    -1,   259,    -1,   174,
-     260,   175,    -1,   262,   198,    -1,   198,    -1,   174,   194,
-     175,    -1,   262,   174,   194,   175,    -1,   160,   253,   265,
-      -1,   205,   265,    -1,   266,    -1,   160,   253,   265,    -1,
-     205,   265,    -1,    -1,   263,    -1,   228,    -1,   174,   264,
-     175,    -1,   266,   198,    -1,   198,    -1,   174,   194,   175,
-      -1,   266,   174,   194,   175,    -1,   257,    -1,   267,   150,
-     257,    -1,    -1,   152,   217,    -1,   263,   268,    -1,   269,
-      -1,   270,   150,   269,    -1,   257,    -1,   257,   178,   217,
-      -1,   117,    -1,   141,    -1,   113,    -1,   133,   227,   176,
-     218,   177,    -1,   147,    -1,     4,    -1,   229,    -1,   211,
-      -1,    60,     3,    -1,   273,    -1,   133,     3,    -1,   276,
-      -1,   140,     3,    -1,   122,   174,   274,   175,    -1,   139,
-     199,   254,   267,    -1,   140,   227,   176,   221,   177,    -1,
-     140,   227,   134,   174,   223,   175,   226,   176,   206,   177,
-      -1,     5,    -1,     5,   170,     5,    -1
+      -1,   199,   254,   257,    -1,   225,    -1,   200,   254,   271,
+      -1,   254,   271,    -1,    -1,   228,    -1,    -1,     3,    -1,
+       4,    -1,     3,    -1,     4,    -1,    33,    -1,   148,    -1,
+     231,    -1,   124,   231,    -1,   142,   231,    -1,   142,    -1,
+      66,    -1,    56,    -1,    31,    -1,    61,    -1,    68,    -1,
+      -1,    87,    -1,    87,    -1,   123,   230,    -1,   127,    -1,
+      95,   230,    -1,    75,   230,    -1,    89,    -1,    39,    -1,
+      88,    -1,    40,     3,    -1,    40,     4,    -1,   200,   232,
+      -1,   233,   176,   235,   177,   184,    -1,    -1,   235,   236,
+      -1,   199,   246,    -1,    54,     3,    -1,    54,     4,    -1,
+     200,   237,    -1,   109,   152,    -1,   239,   223,   173,    -1,
+      96,   152,    -1,   240,   224,   173,    -1,   238,   176,   239,
+     240,   177,    -1,   238,   176,   243,   173,   177,    -1,    -1,
+     152,     4,    -1,    90,     3,    -1,    90,     4,    -1,   200,
+     243,    -1,   244,   242,   176,   183,   177,   184,    -1,   244,
+     152,     3,   176,   189,   183,   177,   184,    -1,   241,   184,
+      -1,   243,   173,    -1,   237,   173,    -1,    97,     3,    -1,
+      97,     4,    -1,   200,   247,    -1,   248,   176,   183,   177,
+     184,    -1,    63,    -1,   129,    -1,   118,    -1,    85,    -1,
+      43,    -1,    -1,   253,   252,    -1,   274,   255,    -1,   256,
+     274,   255,    -1,    -1,   256,    -1,   252,   255,    -1,   251,
+     255,    -1,   250,   255,    -1,   160,   253,   257,    -1,   205,
+     257,    -1,   258,    -1,   228,    -1,   174,   257,   175,    -1,
+     258,   198,    -1,   258,   174,   194,   175,    -1,   160,   253,
+     261,    -1,   205,   261,    -1,   262,    -1,   160,   253,   265,
+      -1,   205,   265,    -1,    -1,   259,    -1,   174,   260,   175,
+      -1,   262,   198,    -1,   198,    -1,   174,   194,   175,    -1,
+     262,   174,   194,   175,    -1,   160,   253,   265,    -1,   205,
+     265,    -1,   266,    -1,   160,   253,   265,    -1,   205,   265,
+      -1,    -1,   263,    -1,   228,    -1,   174,   264,   175,    -1,
+     266,   198,    -1,   198,    -1,   174,   194,   175,    -1,   266,
+     174,   194,   175,    -1,   257,    -1,   267,   150,   257,    -1,
+      -1,   152,   217,    -1,   263,   268,    -1,   269,    -1,   270,
+     150,   269,    -1,   257,    -1,   257,   178,   217,    -1,   117,
+      -1,   141,    -1,   113,    -1,   133,   227,   176,   218,   177,
+      -1,   147,    -1,     4,    -1,   229,    -1,   211,    -1,    60,
+       3,    -1,   273,    -1,   133,     3,    -1,   276,    -1,   140,
+       3,    -1,   122,   174,   274,   175,    -1,   139,   199,   254,
+     267,    -1,   140,   227,   176,   221,   177,    -1,   140,   227,
+     134,   174,   223,   175,   226,   176,   206,   177,    -1,     5,
+      -1,     5,   170,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   330,   330,   343,   344,   345,   346,   349,   352,   353,
-     354,   357,   358,   359,   360,   361,   364,   365,   366,   367,
-     370,   371,   374,   375,   379,   380,   381,   382,   383,   387,
-     388,   389,   390,   391,   392,   395,   397,   405,   411,   415,
-     417,   421,   428,   429,   432,   433,   436,   437,   441,   446,
-     453,   454,   457,   458,   462,   465,   466,   467,   470,   471,
-     474,   475,   476,   477,   478,   479,   480,   481,   482,   483,
-     484,   485,   486,   487,   488,   489,   490,   491,   492,   493,
-     494,   495,   496,   497,   498,   499,   500,   501,   502,   503,
-     504,   505,   506,   507,   508,   509,   510,   511,   512,   513,
-     514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
-     524,   525,   526,   527,   528,   529,   533,   534,   535,   536,
-     537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
-     547,   548,   549,   553,   554,   559,   560,   561,   562,   565,
-     566,   569,   573,   579,   580,   581,   584,   588,   597,   601,
-     606,   609,   610,   623,   624,   627,   628,   629,   630,   631,
-     632,   633,   634,   635,   636,   637,   638,   639,   640,   641,
-     642,   643,   644,   645,   646,   647,   648,   649,   650,   651,
-     652,   653,   654,   655,   656,   657,   658,   659,   660,   661,
-     662,   663,   664,   666,   668,   669,   672,   673,   676,   682,
-     688,   689,   692,   697,   704,   705,   708,   709,   713,   714,
-     717,   724,   733,   737,   742,   743,   746,   747,   748,   751,
-     753,   756,   757,   758,   759,   760,   761,   762,   763,   764,
-     765,   766,   769,   770,   773,   774,   775,   776,   777,   778,
-     779,   780,   783,   784,   792,   798,   802,   803,   807,   810,
-     811,   814,   824,   825,   828,   829,   832,   838,   844,   845,
-     848,   849,   852,   863,   870,   876,   880,   881,   884,   885,
-     888,   893,   900,   901,   902,   906,   910,   913,   914,   917,
-     918,   922,   923,   927,   928,   929,   933,   935,   936,   940,
-     941,   942,   943,   951,   953,   954,   959,   961,   965,   966,
-     971,   972,   973,   974,   979,   988,   990,   991,   996,   998,
-    1002,  1003,  1010,  1011,  1012,  1013,  1014,  1019,  1027,  1028,
-    1031,  1032,  1035,  1042,  1043,  1048,  1049,  1053,  1054,  1055,
-    1058,  1061,  1062,  1063,  1064,  1065,  1066,  1067,  1068,  1069,
-    1070,  1073,  1079,  1081,  1087,  1088
+       0,   326,   326,   339,   340,   341,   342,   345,   348,   349,
+     350,   353,   354,   355,   356,   357,   360,   361,   362,   363,
+     366,   367,   370,   371,   375,   376,   377,   378,   379,   383,
+     384,   385,   386,   387,   388,   391,   393,   401,   407,   411,
+     413,   417,   424,   425,   428,   429,   432,   433,   437,   442,
+     449,   450,   453,   454,   458,   461,   462,   463,   466,   467,
+     470,   471,   472,   473,   474,   475,   476,   477,   478,   479,
+     480,   481,   482,   483,   484,   485,   486,   487,   488,   489,
+     490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
+     500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
+     510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
+     520,   521,   522,   523,   524,   525,   529,   530,   531,   532,
+     533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
+     543,   544,   545,   549,   550,   555,   556,   557,   558,   561,
+     562,   565,   569,   575,   576,   577,   580,   584,   593,   597,
+     602,   605,   606,   619,   620,   623,   624,   625,   626,   627,
+     628,   629,   630,   631,   632,   633,   634,   635,   636,   637,
+     638,   639,   640,   641,   642,   643,   644,   645,   646,   647,
+     648,   649,   650,   651,   652,   653,   654,   655,   656,   657,
+     658,   659,   660,   662,   664,   665,   668,   669,   672,   678,
+     684,   685,   688,   693,   700,   701,   704,   705,   709,   710,
+     713,   719,   727,   731,   736,   737,   740,   741,   742,   745,
+     747,   750,   751,   752,   753,   754,   755,   756,   757,   758,
+     759,   760,   763,   764,   767,   768,   769,   770,   771,   772,
+     773,   774,   777,   778,   786,   792,   796,   797,   801,   804,
+     805,   808,   818,   819,   822,   823,   826,   832,   838,   839,
+     842,   843,   846,   857,   864,   870,   874,   875,   878,   879,
+     882,   887,   894,   895,   896,   900,   904,   907,   908,   911,
+     912,   916,   917,   921,   922,   923,   927,   929,   930,   934,
+     935,   936,   937,   945,   947,   948,   953,   955,   959,   960,
+     965,   966,   967,   968,   973,   982,   984,   985,   990,   992,
+     996,   997,  1004,  1005,  1006,  1007,  1008,  1013,  1021,  1022,
+    1025,  1026,  1029,  1036,  1037,  1042,  1043,  1047,  1048,  1049,
+    1052,  1055,  1056,  1057,  1058,  1059,  1060,  1061,  1062,  1063,
+    1064,  1067,  1073,  1075,  1081,  1082
 };
 #endif
 
@@ -1091,7 +1087,7 @@ static const yytype_uint8 yyr2[] =
        3,     3,     3,     3,     2,     2,     2,     2,     2,     2,
        3,     3,     5,     5,     4,     3,     1,     3,     1,     1,
        0,     2,     4,     3,     2,     2,     0,     2,     2,     1,
-       3,     3,     3,     2,     0,     1,     0,     1,     1,     1,
+       3,     1,     3,     2,     0,     1,     0,     1,     1,     1,
        1,     1,     1,     1,     2,     2,     1,     1,     1,     1,
        1,     1,     0,     1,     1,     2,     1,     2,     2,     1,
        1,     1,     2,     2,     2,     5,     0,     2,     2,     2,
@@ -1148,7 +1144,7 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,   151,   154,
        0,     0,     0,     0,     0,     0,   134,   133,     0,   344,
        0,     0,    56,    60,     0,    14,    41,    22,     0,   247,
-     252,     0,     0,     0,    52,     0,     0,     0,    22,    21,
+     252,     0,     0,     0,     0,     0,     0,     0,    22,    21,
        0,   278,   286,   290,   326,     0,     0,     0,    46,    43,
       44,     0,   310,   150,   144,     0,   330,     0,   201,     0,
        0,   342,    53,   207,     0,    62,    68,     0,   188,   187,
@@ -1158,119 +1154,119 @@ static const yytype_uint16 yydefact[] =
       76,    79,     0,    81,    82,    85,    86,    87,    88,    89,
       91,    93,     0,    99,   153,    98,   110,     0,   120,   124,
      125,   126,   127,     0,   130,   131,    57,     0,   245,   248,
-     254,     0,   253,   256,     0,     0,   257,    20,    22,   271,
-      51,    50,   292,     0,   310,   277,    42,   315,   310,   312,
-     311,    49,   307,   147,   148,     0,   338,   319,   214,   205,
-     204,   298,   195,   277,    42,   302,   298,   299,     0,   295,
-     177,   178,   190,   171,   172,   175,   176,   166,   167,     0,
-     168,   169,   170,   174,   173,   180,   179,   182,   183,   181,
-     191,     0,   197,    59,    95,   152,     0,   345,    22,   210,
-       0,   255,     0,   263,    47,    45,    48,   310,   277,     0,
+     254,     0,   253,   256,     0,     0,   211,   257,    20,    22,
+     271,    51,    50,   292,     0,   310,   277,    42,   315,   310,
+     312,   311,    49,   307,   147,   148,     0,   338,   319,   214,
+     205,   204,   298,   195,   277,    42,   302,   298,   299,     0,
+     295,   177,   178,   190,   171,   172,   175,   176,   166,   167,
+       0,   168,   169,   170,   174,   173,   180,   179,   182,   183,
+     181,   191,     0,   197,    59,    95,   152,     0,   345,    22,
+     210,   255,     0,   263,    47,    45,    48,   310,   277,     0,
      310,     0,   306,    42,   314,   320,   323,     0,   203,     0,
      215,     0,   298,   277,     0,   310,     0,   294,     0,    42,
-     301,     0,   194,   115,    38,   211,    22,   305,   310,   316,
-     309,   313,     0,     0,   322,     0,   202,   139,   193,   293,
-     310,   303,   297,   300,   192,     0,   165,   264,   308,   317,
-     321,   324,     0,   296,   304,     0,     0,   343,   140,     0,
-      52,    52,   209,   142,     0,   141,   208
+     301,     0,   194,   115,    38,    22,   305,   310,   316,   309,
+     313,     0,     0,   322,     0,   202,   139,   193,   293,   310,
+     303,   297,   300,   192,     0,   165,   264,   308,   317,   321,
+     324,     0,   296,   304,     0,     0,   343,   140,     0,    52,
+      52,   209,   142,     0,   141,   208
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,     2,   173,   279,   192,   369,    40,    41,    42,
-      43,   259,   177,    44,   260,   377,   378,   379,   380,   477,
-     362,    92,   169,   326,   170,   348,   478,   592,   598,   289,
+      43,   259,   177,    44,   260,   377,   378,   379,   380,   478,
+     362,    92,   169,   326,   170,   348,   479,   591,   597,   289,
      290,   291,   214,   337,   338,   319,   320,   321,   323,   294,
-     388,   393,   298,   603,   604,   465,    48,   549,    79,   479,
+     388,   393,   298,   602,   603,   465,    48,   549,    79,   480,
       49,    81,    50,   261,    52,   262,   272,   359,    54,    55,
      274,   364,    56,   195,    57,    58,   263,   264,   182,    61,
      265,    63,    64,    65,   280,    66,   197,    67,   211,   212,
-     497,   556,   498,   499,   480,   541,   481,   482,   296,   574,
+     498,   556,   499,   500,   481,   541,   482,   483,   296,   573,
      546,   547,   213,   171,   215,    69,    70,   217,   350
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -459
+#define YYPACT_NINF -460
 static const yytype_int16 yypact[] =
 {
-    -459,    58,  1214,  -459,  -459,  -459,  -459,  -459,   161,  -459,
-    -102,   256,  -459,   264,  -459,  -459,  -459,  -459,    -1,    88,
-    -459,  -459,  -459,  -459,   289,    -1,  -459,   -67,    -1,   484,
-    -459,  -459,   295,   -19,   297,   484,  -459,  -459,  2194,  -459,
-     -16,  -459,  -459,  -459,  -459,  -459,  2007,     5,    13,  -459,
-    -459,    39,    25,  -459,    46,    72,    54,    89,   117,  -459,
-    -459,    98,  -459,   -14,   -14,   -14,   287,   992,   103,   -14,
-     109,   113,  -459,  -459,   276,  -459,  -459,   112,  -459,   119,
-    -459,  -459,   129,  -459,  -459,  -459,   992,  -459,  -459,   112,
-     128,  2085,  -459,  -103,  -101,  -459,  -459,   134,  -459,  -459,
-    -459,  -459,  -459,   140,   144,  -459,  -459,  -459,  -459,  -459,
-    -459,   146,  -459,  -459,   149,  -459,   153,   154,  -459,  -459,
-     163,   164,   168,   171,   174,  -459,   175,  -459,   177,  -459,
-     182,  -459,  -459,   184,   185,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  -459,   186,  -459,  -459,  -459,  -459,  -459,
-     192,  -459,  -459,  -459,  -459,  -459,   194,  -459,  -459,  -459,
-     200,   201,   204,  -459,   205,  -459,  -459,   207,   208,   -93,
-    -459,  -459,  -459,  1119,   500,   359,   303,   209,   210,  -459,
-    -459,  -459,  -459,   287,   211,   216,  -459,  -459,  -459,  -459,
-      33,  -459,  -459,  -459,   307,   212,  -459,  -459,  -459,  -459,
-    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,   287,   287,
-    -459,   213,   -87,  -459,  -459,  -459,   -14,  -459,  -459,  -459,
-     218,   309,  -459,   220,  -459,   287,   223,  -459,   391,   309,
-     944,   944,   392,   398,   944,   944,   399,   400,   944,   402,
-     944,   944,   344,   944,   944,   -72,   944,   944,   944,   992,
-     992,   111,   410,   992,  2194,   245,  -459,   244,  -459,  -459,
-    -459,   246,  -459,  -459,  -459,  -459,    54,  -459,  -459,  -459,
-    -459,  -459,   -50,   268,   -32,   248,   247,  -459,  -459,   595,
-      40,   253,  -459,   944,   983,  1577,  -459,  -459,  -459,   255,
-     272,  -459,   252,  -459,   -18,  -459,   284,   -19,    -8,   260,
-     262,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-     266,  -459,   944,   944,   944,   944,   944,   944,   880,  1826,
-     -80,  -459,  1826,   263,   267,  -459,   -69,   269,   270,   271,
-     273,   274,   280,   281,  1582,   438,   285,   -62,  -459,  1826,
-     291,   293,   -24,  1640,   294,   298,  -459,  -459,   300,   302,
-     301,   304,  -459,  2194,   443,  -459,  -459,    54,     7,  -459,
-    -459,   316,  2085,   305,    14,   306,   389,   690,    54,  -459,
-    2085,  -459,  -459,  -459,  -459,   326,   308,   313,   327,  -459,
-    -459,  2085,    90,  -459,   309,   944,  -459,  2085,  -459,   287,
-     318,  -459,   321,  -459,   322,  -459,  -459,  2085,    11,    11,
-      11,    11,    11,    11,  1663,   279,   944,   944,   479,   944,
-     944,   944,   944,   944,   944,   944,   944,   944,   944,   944,
-     944,   944,   944,   944,   944,   944,   488,   944,   944,  -459,
-    -459,  -459,   489,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
-    -459,  -459,   324,  -459,   944,  -459,  -459,   944,  -459,  -459,
-    -459,  -459,  -459,   491,  -459,  -459,  -459,   330,  -459,  -459,
-    -459,   287,  -459,  -459,  2085,   328,  -459,  -459,    54,  -459,
-    -459,  -459,  -459,  1499,    90,  -459,  1326,  -459,    90,  -459,
-    -459,  -459,    16,  -459,  -459,    90,   329,  -459,   309,  -459,
-    -459,   279,  -459,  -459,  1404,  -459,   279,  -459,   331,    31,
-     243,   243,  -459,   444,   444,    95,    95,  1713,  1790,  1767,
-    1844,  1863,  1895,    95,    95,   193,   193,    11,    11,    11,
-    -459,  1745,  -459,  -459,  -459,  -459,   332,  -459,    54,  -459,
-     287,  -459,   785,  -459,  -459,  -459,  -459,   145,  -459,   333,
-      90,   334,  -459,  1577,  -459,   358,  -459,   -74,  -459,   335,
-    -459,   337,    47,  -459,   338,    90,   339,  -459,   944,  1577,
-    -459,   944,  -459,  -459,  -459,  -459,    54,  -459,   145,  -459,
-    -459,  -459,   340,   944,  -459,    90,  -459,  -459,  -459,  -459,
-     145,  -459,  -459,  -459,    11,   341,  1826,  -459,  -459,  -459,
-    -459,  -459,    -9,  -459,  -459,   944,   365,  -459,  -459,   366,
-      51,    51,  -459,  -459,   347,  -459,  -459
+    -460,    69,  1270,  -460,  -460,  -460,  -460,  -460,   165,  -460,
+     -81,   217,  -460,   260,  -460,  -460,  -460,  -460,    -6,    78,
+    -460,  -460,  -460,  -460,   272,    -6,  -460,   -62,    -6,   356,
+    -460,  -460,   284,   -54,   287,   356,  -460,  -460,  2320,  -460,
+     -49,  -460,  -460,  -460,  -460,  -460,  2063,   -25,   -19,  -460,
+    -460,   -14,   -13,  -460,    12,     1,    19,    22,    49,  -460,
+    -460,    30,  -460,    -8,    -8,    -8,   398,  2211,    35,    -8,
+      37,    40,  -460,  -460,   210,  -460,  -460,    48,  -460,    66,
+    -460,  -460,    43,  -460,  -460,  -460,  2211,  -460,  -460,    48,
+      68,  2141,  -460,   -78,   -69,  -460,  -460,    75,  -460,  -460,
+    -460,  -460,  -460,    85,    91,  -460,  -460,  -460,  -460,  -460,
+    -460,    94,  -460,  -460,    98,  -460,   108,   138,  -460,  -460,
+     144,   149,   151,   155,   157,  -460,   158,  -460,   159,  -460,
+     160,  -460,  -460,   161,   162,  -460,  -460,  -460,  -460,  -460,
+    -460,  -460,  -460,  -460,   169,  -460,  -460,  -460,  -460,  -460,
+     170,  -460,  -460,  -460,  -460,  -460,   171,  -460,  -460,  -460,
+     176,   179,   181,  -460,   182,  -460,  -460,   184,   186,   -75,
+    -460,  -460,  -460,  1175,   461,   258,   289,   119,   166,  -460,
+    -460,  -460,  -460,   398,   190,   202,  -460,  -460,  -460,  -460,
+      -3,  -460,  -460,  -460,   295,   204,  -460,  -460,  -460,  -460,
+    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,   398,   398,
+    -460,   200,   -34,  -460,  -460,  -460,    -8,  -460,  -460,  -460,
+     209,   324,  -460,   211,  -460,   398,   215,  -460,   377,   324,
+    1000,  1000,   382,   383,  1000,  1000,   384,   385,  1000,   386,
+    1000,  1000,   329,  1000,  1000,   -45,  1000,  1000,  1000,  2211,
+    2211,   130,   394,  2211,  2320,   236,  -460,   237,  -460,  -460,
+    -460,   241,  -460,  -460,  -460,  -460,    19,  -460,  -460,  -460,
+    -460,  -460,   -98,   263,   -67,   243,   242,  -460,  -460,   556,
+     316,   246,  -460,  1000,  1039,  1633,  -460,  -460,  -460,   248,
+     270,  -460,   244,  -460,   -93,  -460,   283,   -54,   -88,   264,
+     266,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
+     261,  -460,  1000,  1000,  1000,  1000,  1000,  1000,   936,  1882,
+     -84,  -460,  1882,   267,   273,  -460,   -80,   274,   275,   278,
+     279,   281,   282,   285,  1638,   435,   286,   -74,  -460,  1882,
+     291,   297,   -70,  1696,   292,   293,  -460,  -460,   294,   288,
+     296,   302,  -460,  2320,   454,  -460,  -460,    19,     4,  -460,
+    -460,   312,  2141,   301,   841,   303,   397,   651,    19,  -460,
+    2141,  -460,  -460,  -460,  -460,   245,   309,   307,   334,  -460,
+    -460,  2141,   208,  -460,   324,  1000,  -460,  2141,  -460,   398,
+     310,  -460,   313,  -460,   315,  -460,  -460,  2141,    11,    11,
+      11,    11,    11,    11,  1719,   140,  1000,  1000,   486,  1000,
+    1000,  1000,  1000,  1000,  1000,  1000,  1000,  1000,  1000,  1000,
+    1000,  1000,  1000,  1000,  1000,  1000,   488,  1000,  1000,  -460,
+    -460,  -460,   487,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
+    -460,  -460,   321,  -460,  1000,  -460,  -460,  1000,  -460,  -460,
+    -460,  -460,  -460,   492,  -460,  -460,  -460,   323,  -460,  -460,
+    -460,   398,  -460,  -460,  2141,   326,  -460,  -460,  -460,    19,
+    -460,  -460,  -460,  -460,  1555,   208,  -460,  1382,  -460,   208,
+    -460,  -460,  -460,   -32,  -460,  -460,   208,   333,  -460,   324,
+    -460,  -460,   140,  -460,  -460,  1460,  -460,   140,  -460,   327,
+     -24,   146,   146,  -460,   958,   958,    28,    28,  1769,  1846,
+    1823,  1900,  1919,  1951,    28,    28,    96,    96,    11,    11,
+      11,  -460,  1801,  -460,  -460,  -460,  -460,   332,  -460,    19,
+    -460,  -460,   746,  -460,  -460,  -460,  -460,   299,  -460,   335,
+     208,   336,  -460,  1633,  -460,   360,  -460,   -83,  -460,   337,
+    -460,   339,    -4,  -460,   341,   208,   343,  -460,  1000,  1633,
+    -460,  1000,  -460,  -460,  -460,    19,  -460,   299,  -460,  -460,
+    -460,   345,  1000,  -460,   208,  -460,  -460,  -460,  -460,   299,
+    -460,  -460,  -460,    11,   348,  1882,  -460,  -460,  -460,  -460,
+    -460,   -12,  -460,  -460,  1000,   373,  -460,  -460,   374,   -48,
+     -48,  -460,  -460,   358,  -460,  -460
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -459,  -459,  -459,   477,  -258,  -257,    19,  -459,  -459,  -459,
-     156,  -459,  -459,  -459,   522,  -429,  -459,  -459,    52,  -202,
-     -21,    -2,  -459,  -459,  -229,  -459,   -65,  -459,  -459,  -459,
-    -459,   142,     2,   282,  -260,  -181,  -459,  -224,  -227,  -459,
-    -459,  -459,  -459,   -73,  -206,  -459,  -459,  -459,   215,   -63,
-    -459,   188,   121,    28,  -459,   525,  -459,  -459,   490,  -459,
-    -459,  -459,  -459,  -459,   -23,  -459,   533,     3,  -459,  -459,
-     535,  -459,  -459,  -265,  -413,   -40,   -10,   -27,  -191,  -459,
-    -459,  -459,  -414,  -459,  -458,  -459,  -439,  -459,  -459,  -459,
-     -33,  -459,   361,   310,     6,   -54,  -459,     0,  -459
+    -460,  -460,  -460,   464,  -259,  -255,    20,  -460,  -460,  -460,
+     167,  -460,  -460,  -460,   533,  -424,  -460,  -460,    63,  -203,
+     -10,    -2,  -460,  -460,  -226,  -460,   -65,  -460,  -460,  -460,
+    -460,   156,     2,   298,  -260,  -184,  -460,  -228,  -221,  -460,
+    -460,  -460,  -460,   -61,  -189,  -460,   180,  -460,   121,   -63,
+    -460,   124,    87,    36,  -460,   545,  -460,  -460,   506,  -460,
+    -460,  -460,  -460,  -460,   -26,  -460,   551,     3,  -460,  -460,
+     552,  -460,  -460,  -266,  -402,   -40,   -20,   -33,  -192,  -460,
+    -460,  -460,  -438,  -460,  -459,  -460,  -127,  -460,  -460,  -460,
+     -15,  -460,   372,   317,     6,   -46,  -460,     0,  -460
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1280,480 +1276,504 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -218
 static const yytype_int16 yytable[] =
 {
-      46,   209,    71,   210,    47,    60,   183,   327,    68,   356,
-     286,   328,    91,   216,   331,   371,   333,   281,   282,   336,
-     367,    39,   341,   181,   376,   352,   408,   545,   595,     9,
-      51,  -217,   223,   226,   295,   536,   198,   198,   198,   542,
-     596,   148,   198,   201,   202,   152,   185,   539,   178,    15,
-     322,   225,   184,   322,   199,   200,   374,   254,     3,   218,
-     334,    11,   537,   339,   361,   554,   339,   343,   363,   163,
-     428,    20,    74,  -217,   179,   227,   575,   551,   203,   255,
-     552,   432,   557,     9,   284,   203,    80,   285,   444,   372,
-       9,   390,   394,   201,   202,   429,    82,    24,   567,   576,
-     458,   570,   322,   339,    26,   204,   433,    86,   406,   407,
-     408,   469,   204,   445,   572,    31,   582,   545,   209,   346,
-     210,    38,   347,    24,   456,   568,   444,   357,   203,   588,
-     585,   398,   399,   400,   401,   402,   403,   404,   579,    38,
-     580,   593,   273,   209,   209,   210,   210,   205,   201,   202,
-      88,   448,    38,    38,   205,   204,    95,   172,   292,   386,
-     209,   484,   210,    38,    72,    73,   300,   275,   597,   391,
-     206,    46,    46,    71,    71,    47,    47,   206,   -29,    68,
-      68,   426,   427,   203,   525,    38,   186,   284,     9,   198,
-     543,   463,   258,   258,   401,   344,   345,   205,   487,   351,
-     207,   188,   284,   495,   522,   559,   287,   493,   408,   532,
-     204,   533,   187,    85,   208,   209,    87,   210,   284,   189,
-     206,   494,    38,   526,   602,   500,   501,   191,   503,   504,
-     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
-     515,   516,   517,   518,   519,   382,   521,    90,   190,    94,
-     475,   358,   205,   421,   422,   423,   424,   425,   408,    75,
-      76,   284,   193,   339,   476,   426,   427,    77,    78,   194,
-     529,   564,   371,   387,   196,   206,   -30,   370,   405,    71,
-     544,    47,   219,   381,   220,    68,   -31,   371,  -217,   495,
-     201,   202,    83,    84,   495,   221,   392,   560,    89,    78,
-      93,    78,   222,   371,   224,   475,   268,   269,   228,   587,
-     276,   277,   201,   202,   229,   371,   284,   203,   230,   476,
-     231,   292,   461,   232,   209,   203,   210,   233,   234,   301,
-     183,   302,   303,   304,   305,   306,   307,   235,   236,   565,
-     496,   474,   237,   464,   204,   238,   590,   485,   239,   240,
-     495,   241,   204,   423,   424,   425,   242,   491,   243,   244,
-     245,   459,   267,   426,   427,   370,   246,    71,   247,    47,
-     185,   599,   178,    68,   248,   249,   184,   584,   250,   251,
-     586,   252,   253,   -32,   -33,   270,   205,   486,   278,   -34,
-     308,   283,   322,   288,   205,   293,   209,   297,   210,   299,
-     324,   421,   422,   423,   424,   425,   325,   329,   330,   206,
-     332,   540,   335,   426,   427,   349,   353,   206,   354,   355,
-     360,   365,   384,   366,   530,   550,   496,   309,   373,   555,
-     385,   496,   383,   382,   389,   395,   382,   396,   430,   493,
-     397,   442,   431,   447,   434,   435,   436,   207,   437,   438,
-     284,   457,   310,   494,   382,   439,   440,   406,   407,   408,
-     443,   208,   411,   412,   311,   209,   446,   210,   460,   450,
-      19,   381,   453,   451,   381,   452,   454,   473,   462,   455,
-     471,   312,   502,   466,   313,   314,   315,   496,   472,   316,
-     317,   520,   381,   488,   489,   490,   527,   523,   470,   524,
-     318,   531,   548,   382,     4,   528,   558,   563,   569,   571,
-     573,   577,   578,   581,   583,   589,   594,   600,   601,   382,
-     606,   174,   467,     7,    45,   535,   483,    53,   605,   342,
-     370,     5,    71,     6,    47,    59,   180,    62,    68,     7,
-       8,   381,   591,     9,   271,     0,     0,     0,    10,     0,
-       0,     0,     0,     0,    11,   340,    12,   381,     0,    18,
-      13,    14,     0,    15,     0,     0,    16,     0,    17,     0,
-       0,    21,    22,    23,     0,    18,     0,     0,     0,    25,
-       0,    19,   257,     0,     0,    20,     0,    21,    22,    23,
-      24,     0,     0,     0,     0,    25,     0,     0,     0,     4,
-     419,   420,   421,   422,   423,   424,   425,    28,     0,     0,
-       0,    30,     0,     0,   426,   427,     0,     0,    26,     0,
-       0,     0,    27,    28,    29,     0,     5,    30,     6,    31,
-       0,     0,     0,    32,     7,     0,     0,     0,     9,    33,
-      34,     0,    35,    10,     0,     0,     0,    36,    37,     0,
+      46,   209,    71,   210,    47,    60,   183,   328,    68,   286,
+     331,   356,   333,   327,   371,   336,   281,   282,   341,   367,
+     181,   216,    39,    91,   376,   594,   408,   545,   352,   361,
+     198,   198,   198,   295,   203,     9,   198,   595,    51,     9,
+     223,   406,   407,   408,   199,   200,   185,   322,   178,   218,
+     322,   225,   184,   539,   551,    15,  -217,   334,    11,   557,
+     339,   204,   374,   339,   343,   226,   428,   574,   148,     3,
+     432,   554,   152,    38,   537,   254,   444,    20,    38,   357,
+     444,    80,   179,    38,   386,   363,    82,    24,   372,   391,
+     575,   429,   552,    74,    24,   433,   163,   255,  -217,   322,
+     339,   445,   458,   205,    38,   448,   273,   227,   390,   394,
+      26,   408,    86,   470,   578,   545,    88,    38,   209,   571,
+     210,    31,    95,    38,   172,   601,   206,   456,   398,   399,
+     400,   401,   402,   403,   404,   584,   567,   284,   346,   284,
+     285,   347,   543,   209,   209,   210,   210,   284,   -29,    85,
+     559,   579,    87,    90,   186,    94,   494,   485,   292,   187,
+     209,   408,   210,   188,   275,   596,   300,   284,    72,    73,
+     495,    46,    46,    71,    71,    47,    47,   190,   203,    68,
+      68,   426,   427,   198,   526,   189,   421,   422,   423,   424,
+     425,   401,   191,   258,   258,   193,   287,   488,   426,   427,
+     523,   194,   496,   344,   345,   204,   196,   351,   -30,   532,
+     219,   201,   202,   -31,   533,   209,   222,   210,   220,   527,
+      75,    76,   501,   502,  -217,   504,   505,   506,   507,   508,
+     509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
+     519,   520,   221,   522,   224,   382,   203,   205,   301,   228,
+     302,   303,   304,   305,   306,   307,   423,   424,   425,   229,
+     339,   267,   358,    77,    78,   230,   426,   427,   231,   530,
+     206,   371,   232,   204,   564,    83,    84,   370,   405,    71,
+     544,    47,   233,   381,   387,    68,   371,    89,    78,   496,
+      93,    78,   268,   269,   496,   270,   392,   560,   276,   277,
+     494,   371,   201,   202,   421,   422,   423,   424,   425,   308,
+     586,   284,   234,   371,   495,   205,   426,   427,   235,   201,
+     202,   292,   461,   236,   209,   237,   210,   201,   202,   238,
+     183,   239,   240,   241,   242,   243,   244,   203,   206,   -32,
+     497,   475,     9,   245,   246,   247,   309,   486,   536,   496,
+     248,   589,   542,   249,   203,   250,   251,   492,   252,     9,
+     253,   459,   464,   -33,   204,   370,   598,    71,   476,    47,
+     185,   310,   178,    68,   583,   -34,   184,   585,   283,   284,
+     278,   204,   477,   311,   288,   299,   293,   487,   322,   297,
+     324,   325,   329,   330,   332,     7,   209,   335,   210,   349,
+     312,   201,   202,   313,   314,   315,   205,   353,   316,   317,
+     566,   354,   540,   569,   355,   360,   365,   471,   366,   318,
+     384,   373,   385,   205,   183,   383,   550,   497,   581,   206,
+     555,    18,   497,   389,   382,   397,   203,   382,   442,   395,
+     587,   396,   430,    21,    22,    23,   206,   447,   431,   434,
+     435,    25,   592,   436,   437,   382,   438,   439,   453,   476,
+     440,   443,   457,   204,   460,     4,   446,   450,   451,   452,
+     284,   454,   381,   477,   462,   381,   207,   455,    19,    28,
+     467,   472,   473,    30,   474,   489,   490,   497,   491,   503,
+     208,   521,     5,   381,     6,   524,   525,   528,   529,   531,
+       7,     8,   558,   382,     9,   205,   548,   563,   174,    10,
+     568,   570,   572,   576,   577,    11,   580,    12,   582,   382,
+     588,    13,    14,   593,    15,   599,   600,    16,   206,    17,
+     370,   605,    71,   468,    47,    45,    18,   535,    68,   604,
+     484,   381,    19,   257,   466,   342,    20,    53,    21,    22,
+      23,    24,   180,    59,    62,   271,    25,   381,   207,   590,
+       4,     0,   340,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   208,     0,     0,     0,     0,     0,     0,    26,
+       0,     0,     0,    27,    28,    29,     0,     5,    30,     6,
+      31,     0,     0,     0,    32,     7,     0,     0,     0,     9,
+      33,    34,     0,    35,    10,     0,     0,     0,    36,    37,
+       0,     0,    12,     0,     0,     0,    13,    14,     0,    15,
+       0,     0,    16,     0,    17,     0,     0,     0,     0,     0,
+       0,    18,    38,     0,     0,     0,     0,    19,   266,     0,
+       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
+       0,    25,     0,     0,     0,     4,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    26,     0,     0,     0,    27,    28,
+      29,     0,     5,    30,     6,    31,     0,     0,     0,    32,
+       7,     0,     0,     0,     9,    33,    34,     0,    35,    10,
+       0,     0,     0,    36,    37,     0,     0,    12,     0,     0,
+       0,    13,    14,     0,    15,     0,     0,    16,     0,    17,
+       0,     0,     0,     0,     0,     0,    18,    38,     0,     0,
+       0,     0,    19,   368,     0,     0,    20,     0,    21,    22,
+      23,     0,     0,     0,     0,     0,    25,     0,     0,     0,
+       4,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
+       0,     0,     0,    27,    28,    29,     0,     5,    30,     6,
+      31,     0,     0,     0,    32,     7,     0,     0,     0,     9,
+      33,    34,     0,    35,    10,     0,     0,     0,    36,    37,
+       0,     0,    12,     0,     0,     0,    13,    14,     0,    15,
+       0,     0,    16,     0,    17,     0,     0,     0,     0,     0,
+       0,    18,    38,     0,     0,     0,     0,    19,   469,     0,
+       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
+       0,    25,     0,     0,     0,     4,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    26,     0,     0,     0,    27,    28,
+      29,     0,     5,    30,     6,    31,     0,     0,     0,    32,
+       7,     0,     0,     0,     9,    33,    34,     0,    35,     0,
+       0,     0,     0,    36,    37,     0,     0,    12,     0,     0,
+       0,    13,    14,     0,    15,     0,     0,    16,     0,    17,
+       0,     0,     0,     0,     0,     0,    18,    38,     0,     0,
+       0,     0,     0,   565,     0,     0,    20,     0,    21,    22,
+      23,     0,     0,     0,     0,     0,    25,     0,     0,   301,
+       4,   302,   303,   304,   305,   306,   307,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
+       0,     0,     0,    27,    28,    29,     0,     5,    30,     6,
+      31,   406,   407,   408,    32,     7,   411,   412,     0,     9,
+       0,    34,     0,    35,     0,     0,     0,     0,    36,    37,
+       0,     0,    12,     0,     0,     0,    13,    14,     0,    15,
+     308,     0,    16,   301,    17,   302,   303,   304,   305,   306,
+     307,    18,    38,     0,     0,     0,     0,     0,   463,     0,
+       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
+       0,    25,     0,     0,     0,     0,     0,   309,     0,     0,
+       0,     0,   301,     0,   302,   303,   304,   305,   306,   307,
+       0,     0,     0,     0,    26,     0,     0,     0,    27,    28,
+      29,     0,   310,    30,   308,    31,     0,     0,     0,    32,
+       0,     0,     0,     0,   311,     0,    34,     0,    35,     0,
+       0,     0,     0,    36,    37,     0,     0,     0,     0,     0,
+       0,   312,     0,     0,   313,   314,   315,     0,     0,   316,
+     317,   309,     0,   308,     0,     0,     0,     0,     0,     0,
+     318,     0,     0,     0,   419,   420,   421,   422,   423,   424,
+     425,     0,     0,     0,     0,     0,   310,     0,   426,   427,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,     0,
+     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   312,     0,     0,   313,   314,
+     315,     0,     0,   316,   317,   310,     0,     0,     0,     0,
+       0,     0,     0,     0,   318,     0,     0,   311,     0,     4,
+       0,     0,     0,     0,     0,     0,     0,   256,     0,     0,
+       0,     0,     0,     0,   312,     0,     0,   313,   314,   375,
+       0,     0,   316,   317,     0,     0,     5,     0,     6,     0,
+       0,     0,     0,   318,     7,     8,     0,     0,     9,     0,
+       0,     0,     0,    10,     0,     0,     0,     0,     0,    11,
        0,    12,     0,     0,     0,    13,    14,     0,    15,     0,
        0,    16,     0,    17,     0,     0,     0,     0,     0,     0,
-      18,    38,     0,     0,     0,     0,    19,   266,     0,     0,
-      20,     0,    21,    22,    23,     0,     0,     0,     0,     0,
+      18,     0,     0,     0,     0,     0,    19,   257,     0,     0,
+      20,     0,    21,    22,    23,    24,     0,     0,     0,     0,
       25,     0,     0,     0,     4,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    26,     0,     0,     0,    27,    28,    29,
        0,     5,    30,     6,    31,     0,     0,     0,    32,     7,
-       0,     0,     0,     9,    33,    34,     0,    35,    10,     0,
-       0,     0,    36,    37,     0,     0,    12,     0,     0,     0,
+       8,     0,     0,     9,    33,    34,     0,    35,    10,     0,
+       0,     0,    36,    37,    11,     0,    12,     0,     0,     0,
       13,    14,     0,    15,     0,     0,    16,     0,    17,     0,
        0,     0,     0,     0,     0,    18,    38,     0,     0,     0,
-       0,    19,   368,     0,     0,    20,     0,    21,    22,    23,
-       0,     0,     0,     0,     0,    25,     0,     0,     0,     4,
+       0,    19,     0,     0,     0,    20,     0,    21,    22,    23,
+      24,     0,     0,     0,     0,    25,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    26,     0,
+       0,     0,     0,     0,     0,     0,     4,     0,    26,     0,
+       0,     0,    27,    28,    29,     0,     0,    30,     0,    31,
+       0,     0,     0,    32,     0,     0,     0,     0,     0,    33,
+      34,     0,    35,     5,     0,     6,     0,    36,    37,     0,
+     203,     7,     0,     0,     0,     9,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,     0,
+       0,    38,    13,    14,     0,    15,     0,   204,    16,     0,
+      17,     0,     0,     0,     0,     0,     0,    18,     0,     0,
+       0,     0,     0,     0,     4,     0,     0,    20,     0,    21,
+      22,    23,     0,     0,     0,     0,     0,    25,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   205,
+       0,     5,     0,     6,     0,     0,     0,     0,   203,     7,
+      26,     0,     0,     9,    27,    28,    29,     0,     0,    30,
+       0,    31,   206,     0,     0,    32,    12,     0,     0,     0,
+      13,    14,    34,    15,    35,   204,    16,     0,    17,    36,
+      37,     0,     0,     0,     0,    18,     0,     0,     0,     0,
+       0,     0,   538,     0,     0,    20,     0,    21,    22,    23,
+       0,     0,     0,    38,     0,    25,     0,     0,     0,     4,
+       0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   534,    26,     0,
        0,     0,    27,    28,    29,     0,     5,    30,     6,    31,
-       0,     0,     0,    32,     7,     0,     0,     0,     9,    33,
-      34,     0,    35,    10,     0,     0,     0,    36,    37,     0,
+     206,     0,     0,    32,     7,     0,     0,     0,     9,     0,
+      34,     0,    35,     0,     0,     0,     0,    36,    37,     0,
        0,    12,     0,     0,     0,    13,    14,     0,    15,     0,
-       0,    16,     0,    17,     0,     0,     0,     0,     0,     0,
-      18,    38,     0,     0,     0,     0,    19,   468,     0,     0,
+     553,    16,     0,    17,     0,     0,     0,     0,     0,     0,
+      18,    38,     0,     0,     0,     0,     0,     4,     0,     0,
       20,     0,    21,    22,    23,     0,     0,     0,     0,     0,
-      25,     0,     0,   301,     4,   302,   303,   304,   305,   306,
-     307,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    26,     0,     0,     0,    27,    28,    29,
-       0,     5,    30,     6,    31,     0,     0,     0,    32,     7,
-       0,     0,     0,     9,    33,    34,     0,    35,     0,     0,
-       0,     0,    36,    37,     0,     0,    12,     0,     0,     0,
-      13,    14,     0,    15,   308,     0,    16,   301,    17,   302,
-     303,   304,   305,   306,   307,    18,    38,     0,     0,     0,
-       0,     0,   566,     0,     0,    20,     0,    21,    22,    23,
-       0,     0,     0,     0,     0,    25,     0,     0,     0,     0,
-       0,   309,     0,     0,     0,     0,   301,     0,   302,   303,
-     304,   305,   306,   307,     0,     0,     4,     0,    26,     0,
-       0,     0,    27,    28,    29,     0,   310,    30,   308,    31,
-       0,     0,     0,    32,     0,     0,     0,     0,   311,     0,
-      34,     0,    35,     5,     0,     6,     0,    36,    37,     0,
-       0,     7,     0,     0,     0,   312,     0,     0,   313,   314,
-     315,     0,     0,   316,   317,   309,     0,   308,    12,     0,
-       0,     0,    13,    14,   318,     0,     0,     0,    16,     0,
-      17,     0,     0,     0,     0,     0,     0,    18,     0,     0,
-     310,     0,     0,     0,     0,     0,     0,     0,     0,    21,
-      22,    23,   311,     0,   309,     0,     0,    25,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   312,
-       0,     0,   313,   314,   315,     0,     0,   316,   317,   310,
-       0,     0,     0,     0,    27,    28,    29,     0,   318,    30,
-       0,   311,     0,     4,     0,    32,     0,     0,     0,     0,
-       0,   256,    34,     0,    35,     0,     0,     0,   312,    36,
-      37,   313,   314,   375,     0,     0,   316,   317,     0,     0,
-       5,     0,     6,     0,     0,     0,     0,   318,     7,     8,
-       0,     0,     9,     0,     0,     0,     0,    10,     0,     0,
-       0,     0,     0,    11,     0,    12,     0,     0,     0,    13,
-      14,     0,    15,     0,     0,    16,     0,    17,     0,     0,
-       0,     0,     0,     0,    18,     0,     0,     0,     0,     0,
-      19,   257,     0,     0,    20,     0,    21,    22,    23,    24,
-       0,     0,     0,     0,    25,     0,     0,     0,     4,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    26,     0,     0,
-       0,    27,    28,    29,     0,     5,    30,     6,    31,     0,
-       0,     0,    32,     7,     8,     0,     0,     9,    33,    34,
-       0,    35,    10,     0,     0,     0,    36,    37,    11,     0,
-      12,     0,     0,     0,    13,    14,     0,    15,     0,     0,
-      16,     0,    17,     0,     0,     0,     0,     0,     0,    18,
-      38,     0,     0,     0,     0,    19,     0,     0,     0,    20,
-       0,    21,    22,    23,    24,     0,     0,     0,     0,    25,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       4,     0,    26,     0,     0,     0,    27,    28,    29,     0,
-       0,    30,     0,    31,     0,     0,     0,    32,     0,     0,
-       0,     0,     0,    33,    34,     0,    35,     5,     0,     6,
-       0,    36,    37,     0,   203,     7,     0,     0,     0,     9,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,     0,     0,    38,    13,    14,     0,    15,
-       0,   204,    16,     0,    17,     0,     0,     0,     0,     0,
-       0,    18,     0,     0,     0,     0,     0,     0,     4,     0,
-       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
-       0,    25,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   205,     0,     5,     0,     6,     0,     0,
-       0,     0,   203,     7,    26,     0,     0,     9,    27,    28,
-      29,     0,     0,    30,     0,    31,   206,     0,     0,    32,
-      12,     0,     0,     0,    13,    14,    34,    15,    35,   204,
-      16,     0,    17,    36,    37,     0,     0,     0,     0,    18,
-       0,     0,     0,     0,     0,     0,   538,     0,     0,    20,
-       0,    21,    22,    23,     0,     0,     0,    38,     0,    25,
-       0,     0,     0,     4,     0,     0,     0,     0,     0,     0,
-       0,   205,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   534,    26,     0,     0,     0,    27,    28,    29,     0,
-       5,    30,     6,    31,   206,     0,     0,    32,     7,     0,
-       0,     0,     9,     0,    34,     0,    35,     0,     0,     0,
-       0,    36,    37,     0,     0,    12,     0,     0,     0,    13,
-      14,     0,    15,     0,   553,    16,     0,    17,     0,     0,
-       0,     0,     0,     0,    18,    38,     0,     0,     0,     0,
-       0,     4,     0,     0,    20,     0,    21,    22,    23,     0,
-       0,     0,     0,     0,    25,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,     0,     0,     0,     0,     5,     0,
-       6,     0,     0,     0,     0,     0,     7,    26,     0,     0,
-       9,    27,    28,    29,     0,     0,    30,     0,    31,     0,
-       0,     0,    32,    12,     0,     0,     0,    13,    14,    34,
-      15,    35,     0,    16,     0,    17,    36,    37,     0,     0,
-       0,     0,    18,   406,   407,   408,   409,   410,   411,   412,
-     413,   414,    20,     0,    21,    22,    23,     0,     0,     0,
-      38,     0,    25,     0,     0,     0,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    26,     0,     0,     0,    27,
-      28,    29,     0,     0,    30,     0,    31,     0,     0,     0,
-      32,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,     0,     0,     0,    36,    37,   406,   407,   408,   409,
-     410,   411,   412,   415,   414,   416,   417,   418,   419,   420,
-     421,   422,   423,   424,   425,     0,     0,     0,    38,     0,
-       0,     0,   426,   427,     0,     0,     0,   441,   406,   407,
-     408,   409,   410,   411,   412,   413,   414,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     406,   407,   408,   409,   410,   411,   412,   413,   414,     0,
-       0,   415,     0,   416,   417,   418,   419,   420,   421,   422,
-     423,   424,   425,   406,   407,   408,   409,   410,   411,   412,
-     426,   427,     0,     0,   415,   449,   416,   417,   418,   419,
+      25,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+       0,     0,     0,     0,     5,     0,     6,     0,     0,     0,
+       0,     0,     7,    26,     0,     0,     9,    27,    28,    29,
+       0,     0,    30,     0,    31,     0,     0,     0,    32,    12,
+       0,     0,     0,    13,    14,    34,    15,    35,     0,    16,
+       0,    17,    36,    37,     0,     0,     0,     0,    18,   406,
+     407,   408,   409,   410,   411,   412,   413,   414,    20,     0,
+      21,    22,    23,     0,     0,     0,    38,     0,    25,     0,
+       0,     0,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    26,     0,     0,     0,    27,    28,    29,     0,     0,
+      30,     0,    31,     0,     0,     0,    32,     0,     0,     0,
+       0,     0,     0,    34,     0,    35,     0,     0,     0,     0,
+      36,    37,   406,   407,   408,   409,   410,   411,   412,   415,
+     414,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,     0,     0,     0,    38,     0,     0,     0,   426,   427,
+       0,     0,     0,   441,   406,   407,   408,   409,   410,   411,
+     412,   413,   414,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,     0,     0,   415,     0,   416,
+     417,   418,   419,   420,   421,   422,   423,   424,   425,   406,
+     407,   408,   409,   410,   411,   412,   426,   427,     0,     0,
+     415,   449,   416,   417,   418,   419,   420,   421,   422,   423,
+     424,   425,     0,     0,     0,     0,     0,     0,     0,   426,
+     427,     0,     0,     0,   493,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   406,   407,   408,   409,   410,   411,   412,
+       0,     0,   416,   417,   418,   419,   420,   421,   422,   423,
+     424,   425,   406,   407,   408,   409,   410,   411,   412,   426,
+     427,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   415,     0,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   406,   407,   408,   409,   410,   411,
+     412,   426,   427,   562,   415,   561,   416,   417,   418,   419,
      420,   421,   422,   423,   424,   425,     0,     0,     0,     0,
-       0,     0,     0,   426,   427,     0,     0,     0,   492,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   406,   407,   408,
-     409,   410,   411,   412,     0,     0,   416,   417,   418,   419,
-     420,   421,   422,   423,   424,   425,   406,   407,   408,   409,
-     410,   411,   412,   426,   427,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   415,     0,   416,   417,
-     418,   419,   420,   421,   422,   423,   424,   425,   406,   407,
-     408,   409,   410,   411,   412,   426,   427,   562,   415,   561,
-     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
-       0,     0,     0,     0,     0,     0,     0,   426,   427,     0,
-       0,     0,     0,   416,   417,   418,   419,   420,   421,   422,
-     423,   424,   425,     0,     0,     0,     0,     0,     0,     0,
-     426,   427,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   415,     0,   416,
+       0,     0,     0,   426,   427,     0,     0,     0,     0,   416,
      417,   418,   419,   420,   421,   422,   423,   424,   425,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   417,   418,
-     419,   420,   421,   422,   423,   424,   425,     0,     0,     0,
-       0,     4,     0,     0,   426,   427,     0,     0,   418,   419,
-     420,   421,   422,   423,   424,   425,     0,     0,     0,     0,
-       0,     0,     0,   426,   427,     0,     0,     0,     5,     0,
-       6,     0,     0,     0,     0,     0,     7,     8,     0,     0,
-       9,   419,   420,   421,   422,   423,   424,   425,     0,     0,
-       0,    11,     0,    12,     0,   426,   427,    13,    14,     0,
-      15,     0,     0,    16,     0,    17,     0,     0,     0,     0,
-       0,     0,    18,     0,     0,     0,     0,     0,     0,     4,
-       0,     0,    20,     0,    21,    22,    23,    24,     0,     0,
-     175,     0,    25,     0,   176,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     5,     0,     6,     0,
-       0,     0,     0,     0,     7,    26,     0,     0,     9,    27,
-      28,    29,     0,     0,    30,     0,    31,     0,     0,     0,
-      32,    12,     0,     0,     0,    13,    14,    34,    15,    35,
-       0,    16,     0,    17,    36,    37,     0,     0,     0,     0,
-      18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      20,     0,    21,    22,    23,     0,     0,     0,     0,     0,
-      25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   426,   427,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    26,     0,     0,     0,    27,    28,    29,
-       0,     0,    30,     0,    31,     0,     0,    96,    32,    97,
-      98,    99,     0,   100,   101,    34,   102,    35,     0,   103,
-       0,   104,    36,    37,     0,     0,     0,     0,   105,   106,
-     107,   108,     0,   109,   110,   111,   112,   113,     0,   114,
-       0,   115,   116,   117,     0,     0,   118,     0,     0,     0,
-       0,   119,     0,   120,   121,   122,   123,   124,   125,     0,
-     126,   127,   128,   129,   130,     0,     0,   131,     0,     0,
-     132,     0,     0,     0,     0,   133,   134,     0,   135,     0,
-       0,     0,   136,   137,   138,     0,   139,   140,   141,   142,
-     143,     0,   144,     0,   145,   146,   147,   148,   149,   150,
-     151,   152,     0,   153,   154,   155,     0,     0,     0,   156,
-       0,     0,   157,     0,     0,   158,   159,     0,     0,   160,
-     161,   162,     0,     0,     0,   163,     0,   164,   165,   166,
-     167,     0,     0,   168
+       0,     0,     0,   415,     0,   416,   417,   418,   419,   420,
+     421,   422,   423,   424,   425,     0,     0,     0,     0,     0,
+       0,     0,   426,   427,   417,   418,   419,   420,   421,   422,
+     423,   424,   425,     0,     0,     0,     0,     4,     0,     0,
+     426,   427,     0,     0,   418,   419,   420,   421,   422,   423,
+     424,   425,     0,     0,     0,     0,     0,     0,     0,   426,
+     427,     0,     0,     0,     5,     0,     6,     0,     0,     0,
+       0,     0,     7,     8,     0,     0,     9,   419,   420,   421,
+     422,   423,   424,   425,     0,     0,     0,    11,     0,    12,
+       0,   426,   427,    13,    14,     0,    15,     0,     0,    16,
+       0,    17,     0,     0,     0,     0,     0,     0,    18,     0,
+       0,     0,     0,     0,     0,     4,     0,     0,    20,     0,
+      21,    22,    23,    24,     0,     0,   175,     0,    25,     0,
+     176,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     5,     0,     6,     0,     0,     0,     0,     0,
+       7,    26,     0,     0,     9,    27,    28,    29,     0,     0,
+      30,     0,    31,     0,     0,     0,    32,    12,     0,     0,
+       0,    13,    14,    34,    15,    35,     0,    16,     0,    17,
+      36,    37,     0,     0,     0,     4,    18,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    20,     0,    21,    22,
+      23,     0,     0,     0,     0,     0,    25,     0,     0,     0,
+       0,     0,     5,     0,     6,     0,     0,     0,     0,     0,
+       7,     0,     0,     0,     0,     0,     0,     0,     0,    26,
+       0,     0,     0,    27,    28,    29,     0,    12,    30,     0,
+      31,    13,    14,     0,    32,     0,     0,    16,     0,    17,
+       0,    34,     0,    35,     0,     0,    18,     0,    36,    37,
+       0,     0,     0,     0,     0,     0,     0,     0,    21,    22,
+      23,     0,     0,     0,     0,     0,    25,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    27,    28,    29,     0,     0,    30,     0,
+       0,     0,     0,    96,    32,    97,    98,    99,     0,   100,
+     101,    34,   102,    35,     0,   103,     0,   104,    36,    37,
+       0,     0,     0,     0,   105,   106,   107,   108,     0,   109,
+     110,   111,   112,   113,     0,   114,     0,   115,   116,   117,
+       0,     0,   118,     0,     0,     0,     0,   119,     0,   120,
+     121,   122,   123,   124,   125,     0,   126,   127,   128,   129,
+     130,     0,     0,   131,     0,     0,   132,     0,     0,     0,
+       0,   133,   134,     0,   135,     0,     0,     0,   136,   137,
+     138,     0,   139,   140,   141,   142,   143,     0,   144,     0,
+     145,   146,   147,   148,   149,   150,   151,   152,     0,   153,
+     154,   155,     0,     0,     0,   156,     0,     0,   157,     0,
+       0,   158,   159,     0,     0,   160,   161,   162,     0,     0,
+       0,   163,     0,   164,   165,   166,   167,     0,     0,   168
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,    66,     2,    66,     2,     2,    46,   234,     2,   266,
-     212,   235,    33,    67,   238,   280,   240,   208,   209,   243,
-     278,     2,   246,    46,   284,   254,    15,   485,    37,    43,
-       2,   134,    86,   134,   225,   474,    63,    64,    65,   478,
-      49,   113,    69,     3,     4,   117,    46,   476,    46,    63,
-     231,    91,    46,   234,    64,    65,   283,   150,     0,    69,
-     241,    54,   475,   244,    96,   494,   247,   248,   274,   141,
-     150,    85,   174,   176,    46,   176,   150,   491,    38,   172,
-     493,   150,   496,    43,   171,    38,    87,   174,   150,   280,
-      43,   297,   298,     3,     4,   175,     8,    90,   537,   173,
-     357,   540,   283,   284,   118,    65,   175,   174,    13,    14,
-      15,   368,    65,   175,   543,   129,   555,   575,   183,     8,
-     183,   171,    11,    90,   353,   538,   150,   177,    38,   568,
-     559,   312,   313,   314,   315,   316,   317,   318,   552,   171,
-     553,   580,   109,   208,   209,   208,   209,   107,     3,     4,
-      29,   175,   171,   171,   107,    65,    35,   173,   221,   177,
-     225,   385,   225,   171,     3,     4,   229,   190,   177,   177,
-     130,   173,   174,   173,   174,   173,   174,   130,   173,   173,
-     174,   170,   171,    38,   444,   171,   173,   171,    43,   216,
-     174,   177,   173,   174,   375,   249,   250,   107,   389,   253,
-     160,   176,   171,   405,   428,   174,   216,   160,    15,   467,
-      65,   468,   173,    25,   174,   280,    28,   280,   171,   173,
-     130,   174,   171,   447,   173,   406,   407,   173,   409,   410,
-     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
-     421,   422,   423,   424,   425,   285,   427,    32,   176,    34,
-     160,   272,   107,   158,   159,   160,   161,   162,    15,     3,
-       4,   171,   173,   444,   174,   170,   171,     3,     4,   152,
-     461,   528,   537,   294,   176,   130,   173,   279,   318,   279,
-     482,   279,   173,   285,     8,   279,   173,   552,   176,   491,
-       3,     4,     3,     4,   496,   176,   298,   499,     3,     4,
-       3,     4,   173,   568,   176,   160,     3,     4,   174,   566,
-       3,     4,     3,     4,   174,   580,   171,    38,   174,   174,
-     174,   384,   362,   174,   389,    38,   389,   174,   174,     3,
-     370,     5,     6,     7,     8,     9,    10,   174,   174,   530,
-     405,   381,   174,   364,    65,   174,   573,   387,   174,   174,
-     552,   174,    65,   160,   161,   162,   174,   397,   174,   174,
-     174,   358,     3,   170,   171,   367,   174,   367,   174,   367,
-     370,   595,   370,   367,   174,   174,   370,   558,   174,   174,
-     561,   174,   174,   173,   173,   176,   107,   387,   176,   173,
-      64,   178,   573,   175,   107,   175,   461,   174,   461,     8,
-       8,   158,   159,   160,   161,   162,     8,     8,     8,   130,
-       8,   476,    68,   170,   171,     5,   171,   130,   174,   173,
-     152,   173,   150,   176,   464,   488,   491,   101,   175,   494,
-     178,   496,   177,   473,   150,   175,   476,   175,   175,   160,
-     174,     3,   175,   150,   175,   175,   175,   160,   175,   175,
-     171,     8,   126,   174,   494,   175,   175,    13,    14,    15,
-     175,   174,    18,    19,   138,   530,   175,   530,   152,   175,
-      81,   473,   170,   175,   476,   175,   175,   150,   173,   175,
-     172,   155,     3,   177,   158,   159,   160,   552,   175,   163,
-     164,     3,   494,   175,   173,   173,     5,     8,   172,   175,
-     174,   173,   173,   543,     4,   175,   175,   175,   175,   175,
-     152,   176,   175,   175,   175,   175,   175,   152,   152,   559,
-     173,    44,   366,    39,     2,   473,   384,     2,   601,   247,
-     532,    31,   532,    33,   532,     2,    46,     2,   532,    39,
-      40,   543,   575,    43,   183,    -1,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    54,   245,    56,   559,    -1,    75,
-      60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,    -1,
-      -1,    87,    88,    89,    -1,    75,    -1,    -1,    -1,    95,
-      -1,    81,    82,    -1,    -1,    85,    -1,    87,    88,    89,
-      90,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,     4,
-     156,   157,   158,   159,   160,   161,   162,   123,    -1,    -1,
-      -1,   127,    -1,    -1,   170,   171,    -1,    -1,   118,    -1,
-      -1,    -1,   122,   123,   124,    -1,    31,   127,    33,   129,
-      -1,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,   139,
-     140,    -1,   142,    48,    -1,    -1,    -1,   147,   148,    -1,
+       2,    66,     2,    66,     2,     2,    46,   235,     2,   212,
+     238,   266,   240,   234,   280,   243,   208,   209,   246,   278,
+      46,    67,     2,    33,   284,    37,    15,   486,   254,    96,
+      63,    64,    65,   225,    38,    43,    69,    49,     2,    43,
+      86,    13,    14,    15,    64,    65,    46,   231,    46,    69,
+     234,    91,    46,   477,   492,    63,   134,   241,    54,   497,
+     244,    65,   283,   247,   248,   134,   150,   150,   113,     0,
+     150,   495,   117,   171,   476,   150,   150,    85,   171,   177,
+     150,    87,    46,   171,   177,   274,     8,    90,   280,   177,
+     173,   175,   494,   174,    90,   175,   141,   172,   176,   283,
+     284,   175,   357,   107,   171,   175,   109,   176,   297,   298,
+     118,    15,   174,   368,   552,   574,    29,   171,   183,   543,
+     183,   129,    35,   171,   173,   173,   130,   353,   312,   313,
+     314,   315,   316,   317,   318,   559,   538,   171,     8,   171,
+     174,    11,   174,   208,   209,   208,   209,   171,   173,    25,
+     174,   553,    28,    32,   173,    34,   160,   385,   221,   173,
+     225,    15,   225,   176,   190,   177,   229,   171,     3,     4,
+     174,   173,   174,   173,   174,   173,   174,   176,    38,   173,
+     174,   170,   171,   216,   444,   173,   158,   159,   160,   161,
+     162,   375,   173,   173,   174,   173,   216,   389,   170,   171,
+     428,   152,   405,   249,   250,    65,   176,   253,   173,   468,
+     173,     3,     4,   173,   469,   280,   173,   280,     8,   447,
+       3,     4,   406,   407,   176,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
+     424,   425,   176,   427,   176,   285,    38,   107,     3,   174,
+       5,     6,     7,     8,     9,    10,   160,   161,   162,   174,
+     444,     3,   272,     3,     4,   174,   170,   171,   174,   461,
+     130,   537,   174,    65,   529,     3,     4,   279,   318,   279,
+     483,   279,   174,   285,   294,   279,   552,     3,     4,   492,
+       3,     4,     3,     4,   497,   176,   298,   500,     3,     4,
+     160,   567,     3,     4,   158,   159,   160,   161,   162,    64,
+     565,   171,   174,   579,   174,   107,   170,   171,   174,     3,
+       4,   384,   362,   174,   389,   174,   389,     3,     4,   174,
+     370,   174,   174,   174,   174,   174,   174,    38,   130,   173,
+     405,   381,    43,   174,   174,   174,   101,   387,   475,   552,
+     174,   572,   479,   174,    38,   174,   174,   397,   174,    43,
+     174,   358,   364,   173,    65,   367,   594,   367,   160,   367,
+     370,   126,   370,   367,   558,   173,   370,   561,   178,   171,
+     176,    65,   174,   138,   175,     8,   175,   387,   572,   174,
+       8,     8,     8,     8,     8,    39,   461,    68,   461,     5,
+     155,     3,     4,   158,   159,   160,   107,   171,   163,   164,
+     537,   174,   477,   540,   173,   152,   173,   172,   176,   174,
+     150,   175,   178,   107,   464,   177,   489,   492,   555,   130,
+     495,    75,   497,   150,   474,   174,    38,   477,     3,   175,
+     567,   175,   175,    87,    88,    89,   130,   150,   175,   175,
+     175,    95,   579,   175,   175,   495,   175,   175,   170,   160,
+     175,   175,     8,    65,   152,     4,   175,   175,   175,   175,
+     171,   175,   474,   174,   173,   477,   160,   175,    81,   123,
+     177,   172,   175,   127,   150,   175,   173,   552,   173,     3,
+     174,     3,    31,   495,    33,     8,   175,     5,   175,   173,
+      39,    40,   175,   543,    43,   107,   173,   175,    44,    48,
+     175,   175,   152,   176,   175,    54,   175,    56,   175,   559,
+     175,    60,    61,   175,    63,   152,   152,    66,   130,    68,
+     532,   173,   532,   366,   532,     2,    75,   474,   532,   600,
+     384,   543,    81,    82,   364,   247,    85,     2,    87,    88,
+      89,    90,    46,     2,     2,   183,    95,   559,   160,   574,
+       4,    -1,   245,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   174,    -1,    -1,    -1,    -1,    -1,    -1,   118,
+      -1,    -1,    -1,   122,   123,   124,    -1,    31,   127,    33,
+     129,    -1,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,
+     139,   140,    -1,   142,    48,    -1,    -1,    -1,   147,   148,
+      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,
+      -1,    -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,
+      -1,    75,   171,    -1,    -1,    -1,    -1,    81,   177,    -1,
+      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+      -1,    95,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,
+     124,    -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,
+      39,    -1,    -1,    -1,    43,   139,   140,    -1,   142,    48,
+      -1,    -1,    -1,   147,   148,    -1,    -1,    56,    -1,    -1,
+      -1,    60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,   171,    -1,    -1,
+      -1,    -1,    81,   177,    -1,    -1,    85,    -1,    87,    88,
+      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
+       4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
+      -1,    -1,    -1,   122,   123,   124,    -1,    31,   127,    33,
+     129,    -1,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,
+     139,   140,    -1,   142,    48,    -1,    -1,    -1,   147,   148,
+      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,
+      -1,    -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,
+      -1,    75,   171,    -1,    -1,    -1,    -1,    81,   177,    -1,
+      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+      -1,    95,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,
+     124,    -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,
+      39,    -1,    -1,    -1,    43,   139,   140,    -1,   142,    -1,
+      -1,    -1,    -1,   147,   148,    -1,    -1,    56,    -1,    -1,
+      -1,    60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,   171,    -1,    -1,
+      -1,    -1,    -1,   177,    -1,    -1,    85,    -1,    87,    88,
+      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,     3,
+       4,     5,     6,     7,     8,     9,    10,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
+      -1,    -1,    -1,   122,   123,   124,    -1,    31,   127,    33,
+     129,    13,    14,    15,   133,    39,    18,    19,    -1,    43,
+      -1,   140,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,
+      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,
+      64,    -1,    66,     3,    68,     5,     6,     7,     8,     9,
+      10,    75,   171,    -1,    -1,    -1,    -1,    -1,   177,    -1,
+      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+      -1,    95,    -1,    -1,    -1,    -1,    -1,   101,    -1,    -1,
+      -1,    -1,     3,    -1,     5,     6,     7,     8,     9,    10,
+      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,
+     124,    -1,   126,   127,    64,   129,    -1,    -1,    -1,   133,
+      -1,    -1,    -1,    -1,   138,    -1,   140,    -1,   142,    -1,
+      -1,    -1,    -1,   147,   148,    -1,    -1,    -1,    -1,    -1,
+      -1,   155,    -1,    -1,   158,   159,   160,    -1,    -1,   163,
+     164,   101,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
+     174,    -1,    -1,    -1,   156,   157,   158,   159,   160,   161,
+     162,    -1,    -1,    -1,    -1,    -1,   126,    -1,   170,   171,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,
+     101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   155,    -1,    -1,   158,   159,
+     160,    -1,    -1,   163,   164,   126,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   174,    -1,    -1,   138,    -1,     4,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,    -1,    -1,
+      -1,    -1,    -1,    -1,   155,    -1,    -1,   158,   159,   160,
+      -1,    -1,   163,   164,    -1,    -1,    31,    -1,    33,    -1,
+      -1,    -1,    -1,   174,    39,    40,    -1,    -1,    43,    -1,
+      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
       -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
       -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,   171,    -1,    -1,    -1,    -1,    81,   177,    -1,    -1,
-      85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
+      75,    -1,    -1,    -1,    -1,    -1,    81,    82,    -1,    -1,
+      85,    -1,    87,    88,    89,    90,    -1,    -1,    -1,    -1,
       95,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,   124,
       -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,    39,
-      -1,    -1,    -1,    43,   139,   140,    -1,   142,    48,    -1,
-      -1,    -1,   147,   148,    -1,    -1,    56,    -1,    -1,    -1,
+      40,    -1,    -1,    43,   139,   140,    -1,   142,    48,    -1,
+      -1,    -1,   147,   148,    54,    -1,    56,    -1,    -1,    -1,
       60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,    -1,
       -1,    -1,    -1,    -1,    -1,    75,   171,    -1,    -1,    -1,
-      -1,    81,   177,    -1,    -1,    85,    -1,    87,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,     4,
+      -1,    81,    -1,    -1,    -1,    85,    -1,    87,    88,    89,
+      90,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     4,    -1,   118,    -1,
+      -1,    -1,   122,   123,   124,    -1,    -1,   127,    -1,   129,
+      -1,    -1,    -1,   133,    -1,    -1,    -1,    -1,    -1,   139,
+     140,    -1,   142,    31,    -1,    33,    -1,   147,   148,    -1,
+      38,    39,    -1,    -1,    -1,    43,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,
+      -1,   171,    60,    61,    -1,    63,    -1,    65,    66,    -1,
+      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,
+      -1,    -1,    -1,    -1,     4,    -1,    -1,    85,    -1,    87,
+      88,    89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
+      -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    38,    39,
+     118,    -1,    -1,    43,   122,   123,   124,    -1,    -1,   127,
+      -1,   129,   130,    -1,    -1,   133,    56,    -1,    -1,    -1,
+      60,    61,   140,    63,   142,    65,    66,    -1,    68,   147,
+     148,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,   160,    -1,    -1,    85,    -1,    87,    88,    89,
+      -1,    -1,    -1,   171,    -1,    95,    -1,    -1,    -1,     4,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,   118,    -1,
       -1,    -1,   122,   123,   124,    -1,    31,   127,    33,   129,
-      -1,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,   139,
-     140,    -1,   142,    48,    -1,    -1,    -1,   147,   148,    -1,
+     130,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,    -1,
+     140,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,    -1,
       -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
-      -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,   171,    -1,    -1,    -1,    -1,    81,   177,    -1,    -1,
+     160,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,   171,    -1,    -1,    -1,    -1,    -1,     4,    -1,    -1,
       85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-      10,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,   124,
-      -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,    39,
-      -1,    -1,    -1,    43,   139,   140,    -1,   142,    -1,    -1,
-      -1,    -1,   147,   148,    -1,    -1,    56,    -1,    -1,    -1,
-      60,    61,    -1,    63,    64,    -1,    66,     3,    68,     5,
-       6,     7,     8,     9,    10,    75,   171,    -1,    -1,    -1,
-      -1,    -1,   177,    -1,    -1,    85,    -1,    87,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
-      -1,   101,    -1,    -1,    -1,    -1,     3,    -1,     5,     6,
-       7,     8,     9,    10,    -1,    -1,     4,    -1,   118,    -1,
-      -1,    -1,   122,   123,   124,    -1,   126,   127,    64,   129,
-      -1,    -1,    -1,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,    -1,   142,    31,    -1,    33,    -1,   147,   148,    -1,
-      -1,    39,    -1,    -1,    -1,   155,    -1,    -1,   158,   159,
-     160,    -1,    -1,   163,   164,   101,    -1,    64,    56,    -1,
-      -1,    -1,    60,    61,   174,    -1,    -1,    -1,    66,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,
-     126,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,    89,   138,    -1,   101,    -1,    -1,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
-      -1,    -1,   158,   159,   160,    -1,    -1,   163,   164,   126,
-      -1,    -1,    -1,    -1,   122,   123,   124,    -1,   174,   127,
-      -1,   138,    -1,     4,    -1,   133,    -1,    -1,    -1,    -1,
-      -1,    12,   140,    -1,   142,    -1,    -1,    -1,   155,   147,
-     148,   158,   159,   160,    -1,    -1,   163,   164,    -1,    -1,
-      31,    -1,    33,    -1,    -1,    -1,    -1,   174,    39,    40,
-      -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    54,    -1,    56,    -1,    -1,    -1,    60,
-      61,    -1,    63,    -1,    -1,    66,    -1,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,
-      81,    82,    -1,    -1,    85,    -1,    87,    88,    89,    90,
-      -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,     4,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
-      -1,   122,   123,   124,    -1,    31,   127,    33,   129,    -1,
-      -1,    -1,   133,    39,    40,    -1,    -1,    43,   139,   140,
-      -1,   142,    48,    -1,    -1,    -1,   147,   148,    54,    -1,
-      56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    -1,
-      66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
-     171,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    85,
-      -1,    87,    88,    89,    90,    -1,    -1,    -1,    -1,    95,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       4,    -1,   118,    -1,    -1,    -1,   122,   123,   124,    -1,
-      -1,   127,    -1,   129,    -1,    -1,    -1,   133,    -1,    -1,
-      -1,    -1,    -1,   139,   140,    -1,   142,    31,    -1,    33,
-      -1,   147,   148,    -1,    38,    39,    -1,    -1,    -1,    43,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    -1,    -1,   171,    60,    61,    -1,    63,
-      -1,    65,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,     4,    -1,
-      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   107,    -1,    31,    -1,    33,    -1,    -1,
-      -1,    -1,    38,    39,   118,    -1,    -1,    43,   122,   123,
-     124,    -1,    -1,   127,    -1,   129,   130,    -1,    -1,   133,
-      56,    -1,    -1,    -1,    60,    61,   140,    63,   142,    65,
-      66,    -1,    68,   147,   148,    -1,    -1,    -1,    -1,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,   160,    -1,    -1,    85,
-      -1,    87,    88,    89,    -1,    -1,    -1,   171,    -1,    95,
-      -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    22,   118,    -1,    -1,    -1,   122,   123,   124,    -1,
-      31,   127,    33,   129,   130,    -1,    -1,   133,    39,    -1,
-      -1,    -1,    43,    -1,   140,    -1,   142,    -1,    -1,    -1,
-      -1,   147,   148,    -1,    -1,    56,    -1,    -1,    -1,    60,
-      61,    -1,    63,    -1,   160,    66,    -1,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,   171,    -1,    -1,    -1,    -1,
-      -1,     4,    -1,    -1,    85,    -1,    87,    88,    89,    -1,
-      -1,    -1,    -1,    -1,    95,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    -1,    -1,    -1,    -1,    31,    -1,
-      33,    -1,    -1,    -1,    -1,    -1,    39,   118,    -1,    -1,
-      43,   122,   123,   124,    -1,    -1,   127,    -1,   129,    -1,
-      -1,    -1,   133,    56,    -1,    -1,    -1,    60,    61,   140,
-      63,   142,    -1,    66,    -1,    68,   147,   148,    -1,    -1,
-      -1,    -1,    75,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    85,    -1,    87,    88,    89,    -1,    -1,    -1,
-     171,    -1,    95,    -1,    -1,    -1,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,
-     123,   124,    -1,    -1,   127,    -1,   129,    -1,    -1,    -1,
-     133,    -1,    -1,    -1,    -1,    -1,    -1,   140,    -1,   142,
-      -1,    -1,    -1,    -1,   147,   148,    13,    14,    15,    16,
-      17,    18,    19,   151,    21,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,    -1,    -1,    -1,   171,    -1,
-      -1,    -1,   170,   171,    -1,    -1,    -1,   175,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      -1,   151,    -1,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,    13,    14,    15,    16,    17,    18,    19,
-     170,   171,    -1,    -1,   151,   175,   153,   154,   155,   156,
+      95,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    31,    -1,    33,    -1,    -1,    -1,
+      -1,    -1,    39,   118,    -1,    -1,    43,   122,   123,   124,
+      -1,    -1,   127,    -1,   129,    -1,    -1,    -1,   133,    56,
+      -1,    -1,    -1,    60,    61,   140,    63,   142,    -1,    66,
+      -1,    68,   147,   148,    -1,    -1,    -1,    -1,    75,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    85,    -1,
+      87,    88,    89,    -1,    -1,    -1,   171,    -1,    95,    -1,
+      -1,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   118,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
+     127,    -1,   129,    -1,    -1,    -1,   133,    -1,    -1,    -1,
+      -1,    -1,    -1,   140,    -1,   142,    -1,    -1,    -1,    -1,
+     147,   148,    13,    14,    15,    16,    17,    18,    19,   151,
+      21,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,    -1,    -1,    -1,   171,    -1,    -1,    -1,   170,   171,
+      -1,    -1,    -1,   175,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    -1,    -1,   151,    -1,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,    13,
+      14,    15,    16,    17,    18,    19,   170,   171,    -1,    -1,
+     151,   175,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   170,
+     171,    -1,    -1,    -1,   175,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    13,    14,    15,    16,    17,    18,    19,
+      -1,    -1,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,    13,    14,    15,    16,    17,    18,    19,   170,
+     171,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   151,    -1,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,    13,    14,    15,    16,    17,    18,
+      19,   170,   171,   172,   151,   152,   153,   154,   155,   156,
      157,   158,   159,   160,   161,   162,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   170,   171,    -1,    -1,    -1,   175,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,
-      16,    17,    18,    19,    -1,    -1,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,    13,    14,    15,    16,
-      17,    18,    19,   170,   171,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   151,    -1,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,    13,    14,
-      15,    16,    17,    18,    19,   170,   171,   172,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   170,   171,    -1,
-      -1,    -1,    -1,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   171,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    -1,   153,
+      -1,    -1,    -1,   170,   171,    -1,    -1,    -1,    -1,   153,
      154,   155,   156,   157,   158,   159,   160,   161,   162,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   171,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,    -1,    -1,    -1,
-      -1,     4,    -1,    -1,   170,   171,    -1,    -1,   155,   156,
-     157,   158,   159,   160,   161,   162,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   170,   171,    -1,    -1,    -1,    31,    -1,
-      33,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    -1,
-      43,   156,   157,   158,   159,   160,   161,   162,    -1,    -1,
-      -1,    54,    -1,    56,    -1,   170,   171,    60,    61,    -1,
-      63,    -1,    -1,    66,    -1,    68,    -1,    -1,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,     4,
-      -1,    -1,    85,    -1,    87,    88,    89,    90,    -1,    -1,
-      93,    -1,    95,    -1,    97,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,    33,    -1,
-      -1,    -1,    -1,    -1,    39,   118,    -1,    -1,    43,   122,
-     123,   124,    -1,    -1,   127,    -1,   129,    -1,    -1,    -1,
-     133,    56,    -1,    -1,    -1,    60,    61,   140,    63,   142,
-      -1,    66,    -1,    68,   147,   148,    -1,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   170,   171,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,   124,
-      -1,    -1,   127,    -1,   129,    -1,    -1,    23,   133,    25,
-      26,    27,    -1,    29,    30,   140,    32,   142,    -1,    35,
-      -1,    37,   147,   148,    -1,    -1,    -1,    -1,    44,    45,
-      46,    47,    -1,    49,    50,    51,    52,    53,    -1,    55,
-      -1,    57,    58,    59,    -1,    -1,    62,    -1,    -1,    -1,
-      -1,    67,    -1,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    -1,    -1,    83,    -1,    -1,
-      86,    -1,    -1,    -1,    -1,    91,    92,    -1,    94,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,   103,   104,   105,
-     106,    -1,   108,    -1,   110,   111,   112,   113,   114,   115,
-     116,   117,    -1,   119,   120,   121,    -1,    -1,    -1,   125,
-      -1,    -1,   128,    -1,    -1,   131,   132,    -1,    -1,   135,
-     136,   137,    -1,    -1,    -1,   141,    -1,   143,   144,   145,
-     146,    -1,    -1,   149
+      -1,    -1,    -1,   151,    -1,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   170,   171,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,    -1,    -1,    -1,    -1,     4,    -1,    -1,
+     170,   171,    -1,    -1,   155,   156,   157,   158,   159,   160,
+     161,   162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   170,
+     171,    -1,    -1,    -1,    31,    -1,    33,    -1,    -1,    -1,
+      -1,    -1,    39,    40,    -1,    -1,    43,   156,   157,   158,
+     159,   160,   161,   162,    -1,    -1,    -1,    54,    -1,    56,
+      -1,   170,   171,    60,    61,    -1,    63,    -1,    -1,    66,
+      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,
+      -1,    -1,    -1,    -1,    -1,     4,    -1,    -1,    85,    -1,
+      87,    88,    89,    90,    -1,    -1,    93,    -1,    95,    -1,
+      97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,
+      39,   118,    -1,    -1,    43,   122,   123,   124,    -1,    -1,
+     127,    -1,   129,    -1,    -1,    -1,   133,    56,    -1,    -1,
+      -1,    60,    61,   140,    63,   142,    -1,    66,    -1,    68,
+     147,   148,    -1,    -1,    -1,     4,    75,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    87,    88,
+      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
+      -1,    -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
+      -1,    -1,    -1,   122,   123,   124,    -1,    56,   127,    -1,
+     129,    60,    61,    -1,   133,    -1,    -1,    66,    -1,    68,
+      -1,   140,    -1,   142,    -1,    -1,    75,    -1,   147,   148,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   122,   123,   124,    -1,    -1,   127,    -1,
+      -1,    -1,    -1,    23,   133,    25,    26,    27,    -1,    29,
+      30,   140,    32,   142,    -1,    35,    -1,    37,   147,   148,
+      -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    -1,    57,    58,    59,
+      -1,    -1,    62,    -1,    -1,    -1,    -1,    67,    -1,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    -1,    -1,    83,    -1,    -1,    86,    -1,    -1,    -1,
+      -1,    91,    92,    -1,    94,    -1,    -1,    -1,    98,    99,
+     100,    -1,   102,   103,   104,   105,   106,    -1,   108,    -1,
+     110,   111,   112,   113,   114,   115,   116,   117,    -1,   119,
+     120,   121,    -1,    -1,    -1,   125,    -1,    -1,   128,    -1,
+      -1,   131,   132,    -1,    -1,   135,   136,   137,    -1,    -1,
+      -1,   141,    -1,   143,   144,   145,   146,    -1,    -1,   149
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1806,21 +1826,21 @@ static const yytype_uint16 yystos[] =
      175,   175,   150,   175,   175,   175,   175,   175,   175,   175,
      175,   175,     3,   175,   150,   175,   175,   150,   175,   175,
      175,   175,   175,   170,   175,   175,   203,     8,   184,   246,
-     152,   254,   173,   177,   199,   224,   177,   189,   177,   184,
-     172,   172,   175,   150,   254,   160,   174,   198,   205,   228,
-     263,   265,   266,   210,   216,   254,   276,   257,   175,   173,
-     173,   254,   175,   160,   174,   198,   205,   259,   261,   262,
-     214,   214,     3,   214,   214,   214,   214,   214,   214,   214,
+     152,   254,   173,   177,   200,   224,   225,   177,   189,   177,
+     184,   172,   172,   175,   150,   254,   160,   174,   198,   205,
+     228,   263,   265,   266,   210,   216,   254,   276,   257,   175,
+     173,   173,   254,   175,   160,   174,   198,   205,   259,   261,
+     262,   214,   214,     3,   214,   214,   214,   214,   214,   214,
      214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
-       3,   214,   216,     8,   175,   213,   216,     5,   175,   257,
-     254,   173,   183,   184,    22,   197,   265,   253,   160,   194,
+     214,     3,   214,   216,     8,   175,   213,   216,     5,   175,
+     257,   173,   183,   184,    22,   197,   265,   253,   160,   194,
      205,   264,   265,   174,   198,   263,   269,   270,   173,   226,
      228,   261,   253,   160,   194,   205,   260,   261,   175,   174,
-     198,   152,   172,   175,   184,   257,   177,   265,   253,   175,
-     265,   175,   194,   152,   268,   150,   173,   176,   175,   261,
-     253,   175,   265,   175,   214,   194,   214,   184,   265,   175,
-     217,   269,   206,   265,   175,    37,    49,   177,   207,   216,
-     152,   152,   173,   222,   223,   222,   173
+     198,   152,   172,   175,   184,   177,   265,   253,   175,   265,
+     175,   194,   152,   268,   150,   173,   176,   175,   261,   253,
+     175,   265,   175,   214,   194,   214,   184,   265,   175,   217,
+     269,   206,   265,   175,    37,    49,   177,   207,   216,   152,
+     152,   173,   222,   223,   222,   173
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2634,7 +2654,7 @@ yyreduce:
         case 2:
 
 /* Line 1455 of yacc.c  */
-#line 330 "parser.y"
+#line 326 "parser.y"
     { fix_incomplete();
                                                  check_statements((yyvsp[(1) - (1)].stmt_list), FALSE);
                                                  check_all_user_types((yyvsp[(1) - (1)].stmt_list));
@@ -2651,28 +2671,28 @@ yyreduce:
   case 3:
 
 /* Line 1455 of yacc.c  */
-#line 343 "parser.y"
+#line 339 "parser.y"
     { (yyval.stmt_list) = NULL; ;}
     break;
 
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 344 "parser.y"
+#line 340 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_reference((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 5:
 
 /* Line 1455 of yacc.c  */
-#line 345 "parser.y"
+#line 341 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 6:
 
 /* Line 1455 of yacc.c  */
-#line 346 "parser.y"
+#line 342 "parser.y"
     { (yyval.stmt_list) = (yyvsp[(1) - (3)].stmt_list);
                                                  reg_type((yyvsp[(2) - (3)].type), (yyvsp[(2) - (3)].type)->name, 0);
                                                ;}
@@ -2681,7 +2701,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 349 "parser.y"
+#line 345 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type)));
                                                  reg_type((yyvsp[(2) - (2)].type), (yyvsp[(2) - (2)].type)->name, 0);
                                                ;}
@@ -2690,56 +2710,56 @@ yyreduce:
   case 8:
 
 /* Line 1455 of yacc.c  */
-#line 352 "parser.y"
+#line 348 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_module((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 9:
 
 /* Line 1455 of yacc.c  */
-#line 353 "parser.y"
+#line 349 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_library((yyvsp[(2) - (2)].typelib))); ;}
     break;
 
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 354 "parser.y"
+#line 350 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), (yyvsp[(2) - (2)].statement)); ;}
     break;
 
   case 11:
 
 /* Line 1455 of yacc.c  */
-#line 357 "parser.y"
+#line 353 "parser.y"
     { (yyval.stmt_list) = NULL; ;}
     break;
 
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 358 "parser.y"
+#line 354 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_reference((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 359 "parser.y"
+#line 355 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 14:
 
 /* Line 1455 of yacc.c  */
-#line 360 "parser.y"
+#line 356 "parser.y"
     { (yyval.stmt_list) = (yyvsp[(1) - (3)].stmt_list); reg_type((yyvsp[(2) - (3)].type), (yyvsp[(2) - (3)].type)->name, 0); ;}
     break;
 
   case 15:
 
 /* Line 1455 of yacc.c  */
-#line 361 "parser.y"
+#line 357 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type)));
                                                  reg_type((yyvsp[(2) - (2)].type), (yyvsp[(2) - (2)].type)->name, 0);
                                                ;}
@@ -2748,112 +2768,112 @@ yyreduce:
   case 16:
 
 /* Line 1455 of yacc.c  */
-#line 364 "parser.y"
+#line 360 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_module((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 17:
 
 /* Line 1455 of yacc.c  */
-#line 365 "parser.y"
+#line 361 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), (yyvsp[(2) - (2)].statement)); ;}
     break;
 
   case 18:
 
 /* Line 1455 of yacc.c  */
-#line 366 "parser.y"
+#line 362 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_importlib((yyvsp[(2) - (2)].str))); ;}
     break;
 
   case 19:
 
 /* Line 1455 of yacc.c  */
-#line 367 "parser.y"
+#line 363 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_library((yyvsp[(2) - (2)].typelib))); ;}
     break;
 
   case 20:
 
 /* Line 1455 of yacc.c  */
-#line 370 "parser.y"
+#line 366 "parser.y"
     { (yyval.stmt_list) = NULL; ;}
     break;
 
   case 21:
 
 /* Line 1455 of yacc.c  */
-#line 371 "parser.y"
+#line 367 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), (yyvsp[(2) - (2)].statement)); ;}
     break;
 
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 379 "parser.y"
+#line 375 "parser.y"
     { (yyval.statement) = make_statement_cppquote((yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 380 "parser.y"
+#line 376 "parser.y"
     { (yyval.statement) = make_statement_type_decl((yyvsp[(1) - (2)].type)); ;}
     break;
 
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 381 "parser.y"
+#line 377 "parser.y"
     { (yyval.statement) = make_statement_declaration((yyvsp[(1) - (2)].var)); ;}
     break;
 
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 382 "parser.y"
+#line 378 "parser.y"
     { (yyval.statement) = make_statement_import((yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 383 "parser.y"
+#line 379 "parser.y"
     { (yyval.statement) = (yyvsp[(1) - (2)].statement); ;}
     break;
 
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 390 "parser.y"
+#line 386 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[(1) - (2)].attr_list)); ;}
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 391 "parser.y"
+#line 387 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[(1) - (2)].attr_list)); ;}
     break;
 
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 392 "parser.y"
+#line 388 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); (yyval.type)->attrs = check_union_attrs((yyvsp[(1) - (2)].attr_list)); ;}
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 395 "parser.y"
+#line 391 "parser.y"
     { (yyval.str) = (yyvsp[(3) - (4)].str); ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 397 "parser.y"
+#line 393 "parser.y"
     { assert(yychar == YYEMPTY);
                                                  (yyval.import) = xmalloc(sizeof(struct _import_t));
                                                  (yyval.import)->name = (yyvsp[(2) - (3)].str);
@@ -2865,7 +2885,7 @@ yyreduce:
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 405 "parser.y"
+#line 401 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (3)].import)->name;
                                                  if ((yyvsp[(1) - (3)].import)->import_performed) pop_import();
                                                  free((yyvsp[(1) - (3)].import));
@@ -2875,21 +2895,21 @@ yyreduce:
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 412 "parser.y"
+#line 408 "parser.y"
     { (yyval.str) = (yyvsp[(3) - (5)].str); if(!parse_only) add_importlib((yyvsp[(3) - (5)].str)); ;}
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 415 "parser.y"
+#line 411 "parser.y"
     { (yyval.str) = (yyvsp[(2) - (2)].str); ;}
     break;
 
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 417 "parser.y"
+#line 413 "parser.y"
     { (yyval.typelib) = make_library((yyvsp[(2) - (3)].str), check_library_attrs((yyvsp[(2) - (3)].str), (yyvsp[(1) - (3)].attr_list)));
                                                  if (!parse_only) start_typelib((yyval.typelib));
                                                ;}
@@ -2898,7 +2918,7 @@ yyreduce:
   case 41:
 
 /* Line 1455 of yacc.c  */
-#line 422 "parser.y"
+#line 418 "parser.y"
     { (yyval.typelib) = (yyvsp[(1) - (4)].typelib);
                                                  (yyval.typelib)->stmts = (yyvsp[(2) - (4)].stmt_list);
                                                  if (!parse_only) end_typelib();
@@ -2908,35 +2928,35 @@ yyreduce:
   case 42:
 
 /* Line 1455 of yacc.c  */
-#line 428 "parser.y"
+#line 424 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 432 "parser.y"
+#line 428 "parser.y"
     { check_arg_attrs((yyvsp[(1) - (1)].var)); (yyval.var_list) = append_var( NULL, (yyvsp[(1) - (1)].var) ); ;}
     break;
 
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 433 "parser.y"
+#line 429 "parser.y"
     { check_arg_attrs((yyvsp[(3) - (3)].var)); (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), (yyvsp[(3) - (3)].var) ); ;}
     break;
 
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 437 "parser.y"
+#line 433 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), make_var(strdup("...")) ); ;}
     break;
 
   case 48:
 
 /* Line 1455 of yacc.c  */
-#line 441 "parser.y"
+#line 437 "parser.y"
     { if ((yyvsp[(2) - (3)].declspec)->stgclass != STG_NONE && (yyvsp[(2) - (3)].declspec)->stgclass != STG_REGISTER)
                                                    error_loc("invalid storage class for function parameter\n");
                                                  (yyval.var) = declare_var((yyvsp[(1) - (3)].attr_list), (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), TRUE);
@@ -2947,7 +2967,7 @@ yyreduce:
   case 49:
 
 /* Line 1455 of yacc.c  */
-#line 446 "parser.y"
+#line 442 "parser.y"
     { if ((yyvsp[(1) - (2)].declspec)->stgclass != STG_NONE && (yyvsp[(1) - (2)].declspec)->stgclass != STG_REGISTER)
                                                    error_loc("invalid storage class for function parameter\n");
                                                  (yyval.var) = declare_var(NULL, (yyvsp[(1) - (2)].declspec), (yyvsp[(2) - (2)].declarator), TRUE);
@@ -2958,455 +2978,455 @@ yyreduce:
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 453 "parser.y"
+#line 449 "parser.y"
     { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
     break;
 
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 454 "parser.y"
+#line 450 "parser.y"
     { (yyval.expr) = make_expr(EXPR_VOID); ;}
     break;
 
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 457 "parser.y"
+#line 453 "parser.y"
     { (yyval.attr_list) = NULL; ;}
     break;
 
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 462 "parser.y"
+#line 458 "parser.y"
     { (yyval.attr_list) = (yyvsp[(2) - (3)].attr_list); ;}
     break;
 
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 465 "parser.y"
+#line 461 "parser.y"
     { (yyval.attr_list) = append_attr( NULL, (yyvsp[(1) - (1)].attr) ); ;}
     break;
 
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 466 "parser.y"
+#line 462 "parser.y"
     { (yyval.attr_list) = append_attr( (yyvsp[(1) - (3)].attr_list), (yyvsp[(3) - (3)].attr) ); ;}
     break;
 
   case 57:
 
 /* Line 1455 of yacc.c  */
-#line 467 "parser.y"
+#line 463 "parser.y"
     { (yyval.attr_list) = append_attr( (yyvsp[(1) - (4)].attr_list), (yyvsp[(4) - (4)].attr) ); ;}
     break;
 
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 470 "parser.y"
+#line 466 "parser.y"
     { (yyval.str_list) = append_str( NULL, (yyvsp[(1) - (1)].str) ); ;}
     break;
 
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 471 "parser.y"
+#line 467 "parser.y"
     { (yyval.str_list) = append_str( (yyvsp[(1) - (3)].str_list), (yyvsp[(3) - (3)].str) ); ;}
     break;
 
   case 60:
 
 /* Line 1455 of yacc.c  */
-#line 474 "parser.y"
+#line 470 "parser.y"
     { (yyval.attr) = NULL; ;}
     break;
 
   case 61:
 
 /* Line 1455 of yacc.c  */
-#line 475 "parser.y"
+#line 471 "parser.y"
     { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); ;}
     break;
 
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 476 "parser.y"
+#line 472 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 63:
 
 /* Line 1455 of yacc.c  */
-#line 477 "parser.y"
+#line 473 "parser.y"
     { (yyval.attr) = make_attr(ATTR_APPOBJECT); ;}
     break;
 
   case 64:
 
 /* Line 1455 of yacc.c  */
-#line 478 "parser.y"
+#line 474 "parser.y"
     { (yyval.attr) = make_attr(ATTR_ASYNC); ;}
     break;
 
   case 65:
 
 /* Line 1455 of yacc.c  */
-#line 479 "parser.y"
+#line 475 "parser.y"
     { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); ;}
     break;
 
   case 66:
 
 /* Line 1455 of yacc.c  */
-#line 480 "parser.y"
+#line 476 "parser.y"
     { (yyval.attr) = make_attr(ATTR_BINDABLE); ;}
     break;
 
   case 67:
 
 /* Line 1455 of yacc.c  */
-#line 481 "parser.y"
+#line 477 "parser.y"
     { (yyval.attr) = make_attr(ATTR_BROADCAST); ;}
     break;
 
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 482 "parser.y"
+#line 478 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[(3) - (4)].var)); ;}
     break;
 
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 483 "parser.y"
+#line 479 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[(3) - (4)].expr_list)); ;}
     break;
 
   case 70:
 
 /* Line 1455 of yacc.c  */
-#line 484 "parser.y"
+#line 480 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
     break;
 
   case 71:
 
 /* Line 1455 of yacc.c  */
-#line 485 "parser.y"
+#line 481 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
     break;
 
   case 72:
 
 /* Line 1455 of yacc.c  */
-#line 486 "parser.y"
+#line 482 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
     break;
 
   case 73:
 
 /* Line 1455 of yacc.c  */
-#line 487 "parser.y"
+#line 483 "parser.y"
     { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
     break;
 
   case 74:
 
 /* Line 1455 of yacc.c  */
-#line 488 "parser.y"
+#line 484 "parser.y"
     { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
     break;
 
   case 75:
 
 /* Line 1455 of yacc.c  */
-#line 489 "parser.y"
+#line 485 "parser.y"
     { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
     break;
 
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 490 "parser.y"
+#line 486 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 77:
 
 /* Line 1455 of yacc.c  */
-#line 491 "parser.y"
+#line 487 "parser.y"
     { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
     break;
 
   case 78:
 
 /* Line 1455 of yacc.c  */
-#line 492 "parser.y"
+#line 488 "parser.y"
     { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
     break;
 
   case 79:
 
 /* Line 1455 of yacc.c  */
-#line 493 "parser.y"
+#line 489 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 80:
 
 /* Line 1455 of yacc.c  */
-#line 494 "parser.y"
+#line 490 "parser.y"
     { (yyval.attr) = make_attr(ATTR_DUAL); ;}
     break;
 
   case 81:
 
 /* Line 1455 of yacc.c  */
-#line 495 "parser.y"
+#line 491 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[(3) - (4)].str_list)); ;}
     break;
 
   case 82:
 
 /* Line 1455 of yacc.c  */
-#line 496 "parser.y"
+#line 492 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 83:
 
 /* Line 1455 of yacc.c  */
-#line 497 "parser.y"
+#line 493 "parser.y"
     { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
     break;
 
   case 84:
 
 /* Line 1455 of yacc.c  */
-#line 498 "parser.y"
+#line 494 "parser.y"
     { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
     break;
 
   case 85:
 
 /* Line 1455 of yacc.c  */
-#line 499 "parser.y"
+#line 495 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 86:
 
 /* Line 1455 of yacc.c  */
-#line 500 "parser.y"
+#line 496 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 87:
 
 /* Line 1455 of yacc.c  */
-#line 501 "parser.y"
+#line 497 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 88:
 
 /* Line 1455 of yacc.c  */
-#line 502 "parser.y"
+#line 498 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 89:
 
 /* Line 1455 of yacc.c  */
-#line 503 "parser.y"
+#line 499 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 90:
 
 /* Line 1455 of yacc.c  */
-#line 504 "parser.y"
+#line 500 "parser.y"
     { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
     break;
 
   case 91:
 
 /* Line 1455 of yacc.c  */
-#line 505 "parser.y"
+#line 501 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 92:
 
 /* Line 1455 of yacc.c  */
-#line 506 "parser.y"
+#line 502 "parser.y"
     { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
     break;
 
   case 93:
 
 /* Line 1455 of yacc.c  */
-#line 507 "parser.y"
+#line 503 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 508 "parser.y"
+#line 504 "parser.y"
     { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
     break;
 
   case 95:
 
 /* Line 1455 of yacc.c  */
-#line 509 "parser.y"
+#line 505 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[(4) - (5)].str)); ;}
     break;
 
   case 96:
 
 /* Line 1455 of yacc.c  */
-#line 510 "parser.y"
+#line 506 "parser.y"
     { (yyval.attr) = make_attr(ATTR_IN); ;}
     break;
 
   case 97:
 
 /* Line 1455 of yacc.c  */
-#line 511 "parser.y"
+#line 507 "parser.y"
     { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
     break;
 
   case 98:
 
 /* Line 1455 of yacc.c  */
-#line 512 "parser.y"
+#line 508 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[(3) - (4)].expr_list)); ;}
     break;
 
   case 99:
 
 /* Line 1455 of yacc.c  */
-#line 513 "parser.y"
+#line 509 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 100:
 
 /* Line 1455 of yacc.c  */
-#line 514 "parser.y"
+#line 510 "parser.y"
     { (yyval.attr) = make_attr(ATTR_PARAMLCID); ;}
     break;
 
   case 101:
 
 /* Line 1455 of yacc.c  */
-#line 515 "parser.y"
+#line 511 "parser.y"
     { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
     break;
 
   case 102:
 
 /* Line 1455 of yacc.c  */
-#line 516 "parser.y"
+#line 512 "parser.y"
     { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
     break;
 
   case 103:
 
 /* Line 1455 of yacc.c  */
-#line 517 "parser.y"
+#line 513 "parser.y"
     { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
     break;
 
   case 104:
 
 /* Line 1455 of yacc.c  */
-#line 518 "parser.y"
+#line 514 "parser.y"
     { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
     break;
 
   case 105:
 
 /* Line 1455 of yacc.c  */
-#line 519 "parser.y"
+#line 515 "parser.y"
     { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
     break;
 
   case 106:
 
 /* Line 1455 of yacc.c  */
-#line 520 "parser.y"
+#line 516 "parser.y"
     { (yyval.attr) = make_attr(ATTR_ODL); ;}
     break;
 
   case 107:
 
 /* Line 1455 of yacc.c  */
-#line 521 "parser.y"
+#line 517 "parser.y"
     { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
     break;
 
   case 108:
 
 /* Line 1455 of yacc.c  */
-#line 522 "parser.y"
+#line 518 "parser.y"
     { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
     break;
 
   case 109:
 
 /* Line 1455 of yacc.c  */
-#line 523 "parser.y"
+#line 519 "parser.y"
     { (yyval.attr) = make_attr(ATTR_OUT); ;}
     break;
 
   case 110:
 
 /* Line 1455 of yacc.c  */
-#line 524 "parser.y"
+#line 520 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[(3) - (4)].num)); ;}
     break;
 
   case 111:
 
 /* Line 1455 of yacc.c  */
-#line 525 "parser.y"
+#line 521 "parser.y"
     { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
     break;
 
   case 112:
 
 /* Line 1455 of yacc.c  */
-#line 526 "parser.y"
+#line 522 "parser.y"
     { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
     break;
 
   case 113:
 
 /* Line 1455 of yacc.c  */
-#line 527 "parser.y"
+#line 523 "parser.y"
     { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
     break;
 
   case 114:
 
 /* Line 1455 of yacc.c  */
-#line 528 "parser.y"
+#line 524 "parser.y"
     { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
     break;
 
   case 115:
 
 /* Line 1455 of yacc.c  */
-#line 530 "parser.y"
+#line 526 "parser.y"
     { expr_list_t *list = append_expr( NULL, (yyvsp[(3) - (6)].expr) );
                                                  list = append_expr( list, (yyvsp[(5) - (6)].expr) );
                                                  (yyval.attr) = make_attrp(ATTR_RANGE, list); ;}
@@ -3415,126 +3435,126 @@ yyreduce:
   case 116:
 
 /* Line 1455 of yacc.c  */
-#line 533 "parser.y"
+#line 529 "parser.y"
     { (yyval.attr) = make_attr(ATTR_READONLY); ;}
     break;
 
   case 117:
 
 /* Line 1455 of yacc.c  */
-#line 534 "parser.y"
+#line 530 "parser.y"
     { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); ;}
     break;
 
   case 118:
 
 /* Line 1455 of yacc.c  */
-#line 535 "parser.y"
+#line 531 "parser.y"
     { (yyval.attr) = make_attr(ATTR_RESTRICTED); ;}
     break;
 
   case 119:
 
 /* Line 1455 of yacc.c  */
-#line 536 "parser.y"
+#line 532 "parser.y"
     { (yyval.attr) = make_attr(ATTR_RETVAL); ;}
     break;
 
   case 120:
 
 /* Line 1455 of yacc.c  */
-#line 537 "parser.y"
+#line 533 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[(3) - (4)].expr_list)); ;}
     break;
 
   case 121:
 
 /* Line 1455 of yacc.c  */
-#line 538 "parser.y"
+#line 534 "parser.y"
     { (yyval.attr) = make_attr(ATTR_SOURCE); ;}
     break;
 
   case 122:
 
 /* Line 1455 of yacc.c  */
-#line 539 "parser.y"
+#line 535 "parser.y"
     { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); ;}
     break;
 
   case 123:
 
 /* Line 1455 of yacc.c  */
-#line 540 "parser.y"
+#line 536 "parser.y"
     { (yyval.attr) = make_attr(ATTR_STRING); ;}
     break;
 
   case 124:
 
 /* Line 1455 of yacc.c  */
-#line 541 "parser.y"
+#line 537 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 125:
 
 /* Line 1455 of yacc.c  */
-#line 542 "parser.y"
+#line 538 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[(3) - (4)].type)); ;}
     break;
 
   case 126:
 
 /* Line 1455 of yacc.c  */
-#line 543 "parser.y"
+#line 539 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[(3) - (4)].type)); ;}
     break;
 
   case 127:
 
 /* Line 1455 of yacc.c  */
-#line 544 "parser.y"
+#line 540 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[(3) - (4)].uuid)); ;}
     break;
 
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 545 "parser.y"
+#line 541 "parser.y"
     { (yyval.attr) = make_attr(ATTR_V1ENUM); ;}
     break;
 
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 546 "parser.y"
+#line 542 "parser.y"
     { (yyval.attr) = make_attr(ATTR_VARARG); ;}
     break;
 
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 547 "parser.y"
+#line 543 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[(3) - (4)].num)); ;}
     break;
 
   case 131:
 
 /* Line 1455 of yacc.c  */
-#line 548 "parser.y"
+#line 544 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[(3) - (4)].type)); ;}
     break;
 
   case 132:
 
 /* Line 1455 of yacc.c  */
-#line 549 "parser.y"
+#line 545 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[(1) - (1)].num)); ;}
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
-#line 554 "parser.y"
+#line 550 "parser.y"
     { if (!is_valid_uuid((yyvsp[(1) - (1)].str)))
                                                    error_loc("invalid UUID: %s\n", (yyvsp[(1) - (1)].str));
                                                  (yyval.uuid) = parse_uuid((yyvsp[(1) - (1)].str)); ;}
@@ -3543,49 +3563,49 @@ yyreduce:
   case 135:
 
 /* Line 1455 of yacc.c  */
-#line 559 "parser.y"
+#line 555 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 136:
 
 /* Line 1455 of yacc.c  */
-#line 560 "parser.y"
+#line 556 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 137:
 
 /* Line 1455 of yacc.c  */
-#line 561 "parser.y"
+#line 557 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
-#line 562 "parser.y"
+#line 558 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 139:
 
 /* Line 1455 of yacc.c  */
-#line 565 "parser.y"
+#line 561 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 140:
 
 /* Line 1455 of yacc.c  */
-#line 566 "parser.y"
+#line 562 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (2)].var_list), (yyvsp[(2) - (2)].var) ); ;}
     break;
 
   case 141:
 
 /* Line 1455 of yacc.c  */
-#line 569 "parser.y"
+#line 565 "parser.y"
     { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[(2) - (4)].expr) ));
                                                  (yyval.var) = (yyvsp[(4) - (4)].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
                                                  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
@@ -3595,7 +3615,7 @@ yyreduce:
   case 142:
 
 /* Line 1455 of yacc.c  */
-#line 573 "parser.y"
+#line 569 "parser.y"
     { attr_t *a = make_attr(ATTR_DEFAULT);
                                                  (yyval.var) = (yyvsp[(3) - (3)].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
                                                  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
@@ -3605,21 +3625,21 @@ yyreduce:
   case 143:
 
 /* Line 1455 of yacc.c  */
-#line 579 "parser.y"
+#line 575 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 144:
 
 /* Line 1455 of yacc.c  */
-#line 580 "parser.y"
+#line 576 "parser.y"
     { (yyval.var_list) = (yyvsp[(1) - (2)].var_list); ;}
     break;
 
   case 146:
 
 /* Line 1455 of yacc.c  */
-#line 584 "parser.y"
+#line 580 "parser.y"
     { if (!(yyvsp[(1) - (1)].var)->eval)
                                                    (yyvsp[(1) - (1)].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[(1) - (1)].var) );
@@ -3629,7 +3649,7 @@ yyreduce:
   case 147:
 
 /* Line 1455 of yacc.c  */
-#line 588 "parser.y"
+#line 584 "parser.y"
     { if (!(yyvsp[(3) - (3)].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -3642,7 +3662,7 @@ yyreduce:
   case 148:
 
 /* Line 1455 of yacc.c  */
-#line 597 "parser.y"
+#line 593 "parser.y"
     { (yyval.var) = reg_const((yyvsp[(1) - (3)].var));
                                                  (yyval.var)->eval = (yyvsp[(3) - (3)].expr);
                                                   (yyval.var)->type = type_new_int(TYPE_BASIC_INT, 0);
@@ -3652,7 +3672,7 @@ yyreduce:
   case 149:
 
 /* Line 1455 of yacc.c  */
-#line 601 "parser.y"
+#line 597 "parser.y"
     { (yyval.var) = reg_const((yyvsp[(1) - (1)].var));
                                                   (yyval.var)->type = type_new_int(TYPE_BASIC_INT, 0);
                                                ;}
@@ -3661,336 +3681,336 @@ yyreduce:
   case 150:
 
 /* Line 1455 of yacc.c  */
-#line 606 "parser.y"
+#line 602 "parser.y"
     { (yyval.type) = type_new_enum((yyvsp[(2) - (5)].str), TRUE, (yyvsp[(4) - (5)].var_list)); ;}
     break;
 
   case 151:
 
 /* Line 1455 of yacc.c  */
-#line 609 "parser.y"
+#line 605 "parser.y"
     { (yyval.expr_list) = append_expr( NULL, (yyvsp[(1) - (1)].expr) ); ;}
     break;
 
   case 152:
 
 /* Line 1455 of yacc.c  */
-#line 610 "parser.y"
+#line 606 "parser.y"
     { (yyval.expr_list) = append_expr( (yyvsp[(1) - (3)].expr_list), (yyvsp[(3) - (3)].expr) ); ;}
     break;
 
   case 153:
 
 /* Line 1455 of yacc.c  */
-#line 623 "parser.y"
+#line 619 "parser.y"
     { (yyval.expr) = make_expr(EXPR_VOID); ;}
     break;
 
   case 155:
 
 /* Line 1455 of yacc.c  */
-#line 627 "parser.y"
+#line 623 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[(1) - (1)].num)); ;}
     break;
 
   case 156:
 
 /* Line 1455 of yacc.c  */
-#line 628 "parser.y"
+#line 624 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[(1) - (1)].num)); ;}
     break;
 
   case 157:
 
 /* Line 1455 of yacc.c  */
-#line 629 "parser.y"
+#line 625 "parser.y"
     { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[(1) - (1)].dbl)); ;}
     break;
 
   case 158:
 
 /* Line 1455 of yacc.c  */
-#line 630 "parser.y"
+#line 626 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;}
     break;
 
   case 159:
 
 /* Line 1455 of yacc.c  */
-#line 631 "parser.y"
+#line 627 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_NUM, 0); ;}
     break;
 
   case 160:
 
 /* Line 1455 of yacc.c  */
-#line 632 "parser.y"
+#line 628 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;}
     break;
 
   case 161:
 
 /* Line 1455 of yacc.c  */
-#line 633 "parser.y"
+#line 629 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 162:
 
 /* Line 1455 of yacc.c  */
-#line 634 "parser.y"
+#line 630 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 163:
 
 /* Line 1455 of yacc.c  */
-#line 635 "parser.y"
+#line 631 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 164:
 
 /* Line 1455 of yacc.c  */
-#line 636 "parser.y"
+#line 632 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 165:
 
 /* Line 1455 of yacc.c  */
-#line 637 "parser.y"
+#line 633 "parser.y"
     { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[(1) - (5)].expr), (yyvsp[(3) - (5)].expr), (yyvsp[(5) - (5)].expr)); ;}
     break;
 
   case 166:
 
 /* Line 1455 of yacc.c  */
-#line 638 "parser.y"
+#line 634 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 167:
 
 /* Line 1455 of yacc.c  */
-#line 639 "parser.y"
+#line 635 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 168:
 
 /* Line 1455 of yacc.c  */
-#line 640 "parser.y"
+#line 636 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 169:
 
 /* Line 1455 of yacc.c  */
-#line 641 "parser.y"
+#line 637 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 170:
 
 /* Line 1455 of yacc.c  */
-#line 642 "parser.y"
+#line 638 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 171:
 
 /* Line 1455 of yacc.c  */
-#line 643 "parser.y"
+#line 639 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 172:
 
 /* Line 1455 of yacc.c  */
-#line 644 "parser.y"
+#line 640 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 173:
 
 /* Line 1455 of yacc.c  */
-#line 645 "parser.y"
+#line 641 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 174:
 
 /* Line 1455 of yacc.c  */
-#line 646 "parser.y"
+#line 642 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 175:
 
 /* Line 1455 of yacc.c  */
-#line 647 "parser.y"
+#line 643 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 176:
 
 /* Line 1455 of yacc.c  */
-#line 648 "parser.y"
+#line 644 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 177:
 
 /* Line 1455 of yacc.c  */
-#line 649 "parser.y"
+#line 645 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 178:
 
 /* Line 1455 of yacc.c  */
-#line 650 "parser.y"
+#line 646 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 179:
 
 /* Line 1455 of yacc.c  */
-#line 651 "parser.y"
+#line 647 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 180:
 
 /* Line 1455 of yacc.c  */
-#line 652 "parser.y"
+#line 648 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 181:
 
 /* Line 1455 of yacc.c  */
-#line 653 "parser.y"
+#line 649 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 182:
 
 /* Line 1455 of yacc.c  */
-#line 654 "parser.y"
+#line 650 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 183:
 
 /* Line 1455 of yacc.c  */
-#line 655 "parser.y"
+#line 651 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 184:
 
 /* Line 1455 of yacc.c  */
-#line 656 "parser.y"
+#line 652 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 185:
 
 /* Line 1455 of yacc.c  */
-#line 657 "parser.y"
+#line 653 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 186:
 
 /* Line 1455 of yacc.c  */
-#line 658 "parser.y"
+#line 654 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 187:
 
 /* Line 1455 of yacc.c  */
-#line 659 "parser.y"
+#line 655 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 188:
 
 /* Line 1455 of yacc.c  */
-#line 660 "parser.y"
+#line 656 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 189:
 
 /* Line 1455 of yacc.c  */
-#line 661 "parser.y"
+#line 657 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 190:
 
 /* Line 1455 of yacc.c  */
-#line 662 "parser.y"
+#line 658 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[(1) - (3)].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[(3) - (3)].str))); ;}
     break;
 
   case 191:
 
 /* Line 1455 of yacc.c  */
-#line 663 "parser.y"
+#line 659 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[(1) - (3)].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[(3) - (3)].str))); ;}
     break;
 
   case 192:
 
 /* Line 1455 of yacc.c  */
-#line 665 "parser.y"
+#line 661 "parser.y"
     { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[(2) - (5)].declspec), (yyvsp[(3) - (5)].declarator), 0), (yyvsp[(5) - (5)].expr)); free((yyvsp[(2) - (5)].declspec)); free((yyvsp[(3) - (5)].declarator)); ;}
     break;
 
   case 193:
 
 /* Line 1455 of yacc.c  */
-#line 667 "parser.y"
+#line 663 "parser.y"
     { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[(3) - (5)].declspec), (yyvsp[(4) - (5)].declarator), 0), NULL); free((yyvsp[(3) - (5)].declspec)); free((yyvsp[(4) - (5)].declarator)); ;}
     break;
 
   case 194:
 
 /* Line 1455 of yacc.c  */
-#line 668 "parser.y"
+#line 664 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[(1) - (4)].expr), (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 195:
 
 /* Line 1455 of yacc.c  */
-#line 669 "parser.y"
+#line 665 "parser.y"
     { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
     break;
 
   case 196:
 
 /* Line 1455 of yacc.c  */
-#line 672 "parser.y"
+#line 668 "parser.y"
     { (yyval.expr_list) = append_expr( NULL, (yyvsp[(1) - (1)].expr) ); ;}
     break;
 
   case 197:
 
 /* Line 1455 of yacc.c  */
-#line 673 "parser.y"
+#line 669 "parser.y"
     { (yyval.expr_list) = append_expr( (yyvsp[(1) - (3)].expr_list), (yyvsp[(3) - (3)].expr) ); ;}
     break;
 
   case 198:
 
 /* Line 1455 of yacc.c  */
-#line 676 "parser.y"
+#line 672 "parser.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr);
                                                  if (!(yyval.expr)->is_const)
                                                      error_loc("expression is not an integer constant\n");
@@ -4000,7 +4020,7 @@ yyreduce:
   case 199:
 
 /* Line 1455 of yacc.c  */
-#line 682 "parser.y"
+#line 678 "parser.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr);
                                                  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
                                                      error_loc("expression is not constant\n");
@@ -4010,21 +4030,21 @@ yyreduce:
   case 200:
 
 /* Line 1455 of yacc.c  */
-#line 688 "parser.y"
+#line 684 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 201:
 
 /* Line 1455 of yacc.c  */
-#line 689 "parser.y"
+#line 685 "parser.y"
     { (yyval.var_list) = append_var_list((yyvsp[(1) - (2)].var_list), (yyvsp[(2) - (2)].var_list)); ;}
     break;
 
   case 202:
 
 /* Line 1455 of yacc.c  */
-#line 693 "parser.y"
+#line 689 "parser.y"
     { const char *first = LIST_ENTRY(list_head((yyvsp[(3) - (4)].declarator_list)), declarator_t, entry)->var->name;
                                                  check_field_attrs(first, (yyvsp[(1) - (4)].attr_list));
                                                  (yyval.var_list) = set_var_types((yyvsp[(1) - (4)].attr_list), (yyvsp[(2) - (4)].declspec), (yyvsp[(3) - (4)].declarator_list));
@@ -4034,7 +4054,7 @@ yyreduce:
   case 203:
 
 /* Line 1455 of yacc.c  */
-#line 697 "parser.y"
+#line 693 "parser.y"
     { var_t *v = make_var(NULL);
                                                  v->type = (yyvsp[(2) - (3)].type); v->attrs = (yyvsp[(1) - (3)].attr_list);
                                                  (yyval.var_list) = append_var(NULL, v);
@@ -4044,49 +4064,49 @@ yyreduce:
   case 204:
 
 /* Line 1455 of yacc.c  */
-#line 704 "parser.y"
+#line 700 "parser.y"
     { (yyval.var) = (yyvsp[(1) - (2)].var); ;}
     break;
 
   case 205:
 
 /* Line 1455 of yacc.c  */
-#line 705 "parser.y"
+#line 701 "parser.y"
     { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[(1) - (2)].attr_list); ;}
     break;
 
   case 206:
 
 /* Line 1455 of yacc.c  */
-#line 708 "parser.y"
+#line 704 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 207:
 
 /* Line 1455 of yacc.c  */
-#line 709 "parser.y"
+#line 705 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (2)].var_list), (yyvsp[(2) - (2)].var) ); ;}
     break;
 
   case 208:
 
 /* Line 1455 of yacc.c  */
-#line 713 "parser.y"
+#line 709 "parser.y"
     { (yyval.var) = (yyvsp[(1) - (2)].var); ;}
     break;
 
   case 209:
 
 /* Line 1455 of yacc.c  */
-#line 714 "parser.y"
+#line 710 "parser.y"
     { (yyval.var) = NULL; ;}
     break;
 
   case 210:
 
 /* Line 1455 of yacc.c  */
-#line 717 "parser.y"
+#line 713 "parser.y"
     { (yyval.var) = declare_var(check_field_attrs((yyvsp[(3) - (3)].declarator)->var->name, (yyvsp[(1) - (3)].attr_list)),
                                                                (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), FALSE);
                                                  free((yyvsp[(3) - (3)].declarator));
@@ -4096,19 +4116,18 @@ yyreduce:
   case 211:
 
 /* Line 1455 of yacc.c  */
-#line 724 "parser.y"
-    { var_t *v;
-                                                 v = declare_var(check_function_attrs((yyvsp[(3) - (3)].declarator)->var->name, (yyvsp[(1) - (3)].attr_list)),
-                                                              (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), FALSE);
-                                                 free((yyvsp[(3) - (3)].declarator));
-                                                 (yyval.func) = make_func(v);
+#line 719 "parser.y"
+    { (yyval.var) = (yyvsp[(1) - (1)].var);
+                                                 if (type_get_type((yyval.var)->type) != TYPE_FUNCTION)
+                                                   error_loc("only methods may be declared inside the methods section of a dispinterface\n");
+                                                 check_function_attrs((yyval.var)->name, (yyval.var)->attrs);
                                                ;}
     break;
 
   case 212:
 
 /* Line 1455 of yacc.c  */
-#line 734 "parser.y"
+#line 728 "parser.y"
     { (yyval.var) = declare_var((yyvsp[(1) - (3)].attr_list), (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), FALSE);
                                                  free((yyvsp[(3) - (3)].declarator));
                                                ;}
@@ -4117,7 +4136,7 @@ yyreduce:
   case 213:
 
 /* Line 1455 of yacc.c  */
-#line 737 "parser.y"
+#line 731 "parser.y"
     { (yyval.var) = declare_var(NULL, (yyvsp[(1) - (2)].declspec), (yyvsp[(2) - (2)].declarator), FALSE);
                                                  free((yyvsp[(2) - (2)].declarator));
                                                ;}
@@ -4126,182 +4145,182 @@ yyreduce:
   case 214:
 
 /* Line 1455 of yacc.c  */
-#line 742 "parser.y"
+#line 736 "parser.y"
     { (yyval.var) = NULL; ;}
     break;
 
   case 216:
 
 /* Line 1455 of yacc.c  */
-#line 746 "parser.y"
+#line 740 "parser.y"
     { (yyval.str) = NULL; ;}
     break;
 
   case 217:
 
 /* Line 1455 of yacc.c  */
-#line 747 "parser.y"
+#line 741 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 218:
 
 /* Line 1455 of yacc.c  */
-#line 748 "parser.y"
+#line 742 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
   case 219:
 
 /* Line 1455 of yacc.c  */
-#line 751 "parser.y"
+#line 745 "parser.y"
     { (yyval.var) = make_var((yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 220:
 
 /* Line 1455 of yacc.c  */
-#line 753 "parser.y"
+#line 747 "parser.y"
     { (yyval.var) = make_var((yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 221:
 
 /* Line 1455 of yacc.c  */
-#line 756 "parser.y"
+#line 750 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 222:
 
 /* Line 1455 of yacc.c  */
-#line 757 "parser.y"
+#line 751 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 224:
 
 /* Line 1455 of yacc.c  */
-#line 759 "parser.y"
+#line 753 "parser.y"
     { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[(2) - (2)].type)), -1); ;}
     break;
 
   case 225:
 
 /* Line 1455 of yacc.c  */
-#line 760 "parser.y"
+#line 754 "parser.y"
     { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[(2) - (2)].type)), 1); ;}
     break;
 
   case 226:
 
 /* Line 1455 of yacc.c  */
-#line 761 "parser.y"
+#line 755 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); ;}
     break;
 
   case 227:
 
 /* Line 1455 of yacc.c  */
-#line 762 "parser.y"
+#line 756 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 228:
 
 /* Line 1455 of yacc.c  */
-#line 763 "parser.y"
+#line 757 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 229:
 
 /* Line 1455 of yacc.c  */
-#line 764 "parser.y"
+#line 758 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 230:
 
 /* Line 1455 of yacc.c  */
-#line 765 "parser.y"
+#line 759 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 231:
 
 /* Line 1455 of yacc.c  */
-#line 766 "parser.y"
+#line 760 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 234:
 
 /* Line 1455 of yacc.c  */
-#line 773 "parser.y"
+#line 767 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); ;}
     break;
 
   case 235:
 
 /* Line 1455 of yacc.c  */
-#line 774 "parser.y"
+#line 768 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); ;}
     break;
 
   case 236:
 
 /* Line 1455 of yacc.c  */
-#line 775 "parser.y"
+#line 769 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); ;}
     break;
 
   case 237:
 
 /* Line 1455 of yacc.c  */
-#line 776 "parser.y"
+#line 770 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); ;}
     break;
 
   case 238:
 
 /* Line 1455 of yacc.c  */
-#line 777 "parser.y"
+#line 771 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); ;}
     break;
 
   case 239:
 
 /* Line 1455 of yacc.c  */
-#line 778 "parser.y"
+#line 772 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); ;}
     break;
 
   case 240:
 
 /* Line 1455 of yacc.c  */
-#line 779 "parser.y"
+#line 773 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); ;}
     break;
 
   case 241:
 
 /* Line 1455 of yacc.c  */
-#line 780 "parser.y"
+#line 774 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); ;}
     break;
 
   case 242:
 
 /* Line 1455 of yacc.c  */
-#line 783 "parser.y"
+#line 777 "parser.y"
     { (yyval.type) = type_new_coclass((yyvsp[(2) - (2)].str)); ;}
     break;
 
   case 243:
 
 /* Line 1455 of yacc.c  */
-#line 784 "parser.y"
+#line 778 "parser.y"
     { (yyval.type) = find_type((yyvsp[(2) - (2)].str), 0);
                                                  if (type_get_type_detect_alias((yyval.type)) != TYPE_COCLASS)
                                                    error_loc("%s was not declared a coclass at %s:%d\n",
@@ -4313,7 +4332,7 @@ yyreduce:
   case 244:
 
 /* Line 1455 of yacc.c  */
-#line 792 "parser.y"
+#line 786 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type);
                                                  check_def((yyval.type));
                                                  (yyval.type)->attrs = check_coclass_attrs((yyvsp[(2) - (2)].type)->name, (yyvsp[(1) - (2)].attr_list));
@@ -4323,49 +4342,49 @@ yyreduce:
   case 245:
 
 /* Line 1455 of yacc.c  */
-#line 799 "parser.y"
+#line 793 "parser.y"
     { (yyval.type) = type_coclass_define((yyvsp[(1) - (5)].type), (yyvsp[(3) - (5)].ifref_list)); ;}
     break;
 
   case 246:
 
 /* Line 1455 of yacc.c  */
-#line 802 "parser.y"
+#line 796 "parser.y"
     { (yyval.ifref_list) = NULL; ;}
     break;
 
   case 247:
 
 /* Line 1455 of yacc.c  */
-#line 803 "parser.y"
+#line 797 "parser.y"
     { (yyval.ifref_list) = append_ifref( (yyvsp[(1) - (2)].ifref_list), (yyvsp[(2) - (2)].ifref) ); ;}
     break;
 
   case 248:
 
 /* Line 1455 of yacc.c  */
-#line 807 "parser.y"
+#line 801 "parser.y"
     { (yyval.ifref) = make_ifref((yyvsp[(2) - (2)].type)); (yyval.ifref)->attrs = (yyvsp[(1) - (2)].attr_list); ;}
     break;
 
   case 249:
 
 /* Line 1455 of yacc.c  */
-#line 810 "parser.y"
+#line 804 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
   case 250:
 
 /* Line 1455 of yacc.c  */
-#line 811 "parser.y"
+#line 805 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
   case 251:
 
 /* Line 1455 of yacc.c  */
-#line 814 "parser.y"
+#line 808 "parser.y"
     { attr_t *attrs;
                                                  is_object_interface = TRUE;
                                                  (yyval.type) = (yyvsp[(2) - (2)].type);
@@ -4379,44 +4398,44 @@ yyreduce:
   case 252:
 
 /* Line 1455 of yacc.c  */
-#line 824 "parser.y"
+#line 818 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 253:
 
 /* Line 1455 of yacc.c  */
-#line 825 "parser.y"
+#line 819 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), (yyvsp[(2) - (3)].var) ); ;}
     break;
 
   case 254:
 
 /* Line 1455 of yacc.c  */
-#line 828 "parser.y"
-    { (yyval.stmt_list) = NULL; ;}
+#line 822 "parser.y"
+    { (yyval.var_list) = NULL; ;}
     break;
 
   case 255:
 
 /* Line 1455 of yacc.c  */
-#line 829 "parser.y"
-    { (yyval.stmt_list) = append_func( (yyvsp[(1) - (3)].stmt_list), (yyvsp[(2) - (3)].func) ); ;}
+#line 823 "parser.y"
+    { (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), (yyvsp[(2) - (3)].var) ); ;}
     break;
 
   case 256:
 
 /* Line 1455 of yacc.c  */
-#line 835 "parser.y"
+#line 829 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (5)].type);
-                                                 type_dispinterface_define((yyval.type), (yyvsp[(3) - (5)].var_list), (yyvsp[(4) - (5)].stmt_list));
+                                                 type_dispinterface_define((yyval.type), (yyvsp[(3) - (5)].var_list), (yyvsp[(4) - (5)].var_list));
                                                ;}
     break;
 
   case 257:
 
 /* Line 1455 of yacc.c  */
-#line 839 "parser.y"
+#line 833 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (5)].type);
                                                  type_dispinterface_define_from_iface((yyval.type), (yyvsp[(3) - (5)].type));
                                                ;}
@@ -4425,35 +4444,35 @@ yyreduce:
   case 258:
 
 /* Line 1455 of yacc.c  */
-#line 844 "parser.y"
+#line 838 "parser.y"
     { (yyval.type) = NULL; ;}
     break;
 
   case 259:
 
 /* Line 1455 of yacc.c  */
-#line 845 "parser.y"
+#line 839 "parser.y"
     { (yyval.type) = find_type_or_error2((yyvsp[(2) - (2)].str), 0); is_object_interface = 1; ;}
     break;
 
   case 260:
 
 /* Line 1455 of yacc.c  */
-#line 848 "parser.y"
+#line 842 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
   case 261:
 
 /* Line 1455 of yacc.c  */
-#line 849 "parser.y"
+#line 843 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
   case 262:
 
 /* Line 1455 of yacc.c  */
-#line 852 "parser.y"
+#line 846 "parser.y"
     { (yyval.ifinfo).interface = (yyvsp[(2) - (2)].type);
                                                  (yyval.ifinfo).old_pointer_default = pointer_default;
                                                  if (is_attr((yyvsp[(1) - (2)].attr_list), ATTR_POINTERDEFAULT))
@@ -4468,7 +4487,7 @@ yyreduce:
   case 263:
 
 /* Line 1455 of yacc.c  */
-#line 864 "parser.y"
+#line 858 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (6)].ifinfo).interface;
                                                  type_interface_define((yyval.type), (yyvsp[(2) - (6)].type), (yyvsp[(4) - (6)].stmt_list));
                                                  pointer_default = (yyvsp[(1) - (6)].ifinfo).old_pointer_default;
@@ -4478,7 +4497,7 @@ yyreduce:
   case 264:
 
 /* Line 1455 of yacc.c  */
-#line 872 "parser.y"
+#line 866 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (8)].ifinfo).interface;
                                                  type_interface_define((yyval.type), find_type_or_error2((yyvsp[(3) - (8)].str), 0), (yyvsp[(6) - (8)].stmt_list));
                                                  pointer_default = (yyvsp[(1) - (8)].ifinfo).old_pointer_default;
@@ -4488,42 +4507,42 @@ yyreduce:
   case 265:
 
 /* Line 1455 of yacc.c  */
-#line 876 "parser.y"
+#line 870 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); ;}
     break;
 
   case 266:
 
 /* Line 1455 of yacc.c  */
-#line 880 "parser.y"
+#line 874 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); ;}
     break;
 
   case 267:
 
 /* Line 1455 of yacc.c  */
-#line 881 "parser.y"
+#line 875 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); ;}
     break;
 
   case 268:
 
 /* Line 1455 of yacc.c  */
-#line 884 "parser.y"
+#line 878 "parser.y"
     { (yyval.type) = type_new_module((yyvsp[(2) - (2)].str)); ;}
     break;
 
   case 269:
 
 /* Line 1455 of yacc.c  */
-#line 885 "parser.y"
+#line 879 "parser.y"
     { (yyval.type) = type_new_module((yyvsp[(2) - (2)].str)); ;}
     break;
 
   case 270:
 
 /* Line 1455 of yacc.c  */
-#line 888 "parser.y"
+#line 882 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type);
                                                  (yyval.type)->attrs = check_module_attrs((yyvsp[(2) - (2)].type)->name, (yyvsp[(1) - (2)].attr_list));
                                                ;}
@@ -4532,7 +4551,7 @@ yyreduce:
   case 271:
 
 /* Line 1455 of yacc.c  */
-#line 894 "parser.y"
+#line 888 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (5)].type);
                                                   type_module_define((yyval.type), (yyvsp[(3) - (5)].stmt_list));
                                                ;}
@@ -4541,133 +4560,133 @@ yyreduce:
   case 272:
 
 /* Line 1455 of yacc.c  */
-#line 900 "parser.y"
+#line 894 "parser.y"
     { (yyval.stgclass) = STG_EXTERN; ;}
     break;
 
   case 273:
 
 /* Line 1455 of yacc.c  */
-#line 901 "parser.y"
+#line 895 "parser.y"
     { (yyval.stgclass) = STG_STATIC; ;}
     break;
 
   case 274:
 
 /* Line 1455 of yacc.c  */
-#line 902 "parser.y"
+#line 896 "parser.y"
     { (yyval.stgclass) = STG_REGISTER; ;}
     break;
 
   case 275:
 
 /* Line 1455 of yacc.c  */
-#line 906 "parser.y"
+#line 900 "parser.y"
     { (yyval.attr) = make_attr(ATTR_INLINE); ;}
     break;
 
   case 276:
 
 /* Line 1455 of yacc.c  */
-#line 910 "parser.y"
+#line 904 "parser.y"
     { (yyval.attr) = make_attr(ATTR_CONST); ;}
     break;
 
   case 277:
 
 /* Line 1455 of yacc.c  */
-#line 913 "parser.y"
+#line 907 "parser.y"
     { (yyval.attr_list) = NULL; ;}
     break;
 
   case 278:
 
 /* Line 1455 of yacc.c  */
-#line 914 "parser.y"
+#line 908 "parser.y"
     { (yyval.attr_list) = append_attr((yyvsp[(1) - (2)].attr_list), (yyvsp[(2) - (2)].attr)); ;}
     break;
 
   case 279:
 
 /* Line 1455 of yacc.c  */
-#line 917 "parser.y"
+#line 911 "parser.y"
     { (yyval.declspec) = make_decl_spec((yyvsp[(1) - (2)].type), (yyvsp[(2) - (2)].declspec), NULL, NULL, STG_NONE); ;}
     break;
 
   case 280:
 
 /* Line 1455 of yacc.c  */
-#line 919 "parser.y"
+#line 913 "parser.y"
     { (yyval.declspec) = make_decl_spec((yyvsp[(2) - (3)].type), (yyvsp[(1) - (3)].declspec), (yyvsp[(3) - (3)].declspec), NULL, STG_NONE); ;}
     break;
 
   case 281:
 
 /* Line 1455 of yacc.c  */
-#line 922 "parser.y"
+#line 916 "parser.y"
     { (yyval.declspec) = NULL; ;}
     break;
 
   case 283:
 
 /* Line 1455 of yacc.c  */
-#line 927 "parser.y"
+#line 921 "parser.y"
     { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[(2) - (2)].declspec), NULL, (yyvsp[(1) - (2)].attr), STG_NONE); ;}
     break;
 
   case 284:
 
 /* Line 1455 of yacc.c  */
-#line 928 "parser.y"
+#line 922 "parser.y"
     { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[(2) - (2)].declspec), NULL, (yyvsp[(1) - (2)].attr), STG_NONE); ;}
     break;
 
   case 285:
 
 /* Line 1455 of yacc.c  */
-#line 929 "parser.y"
+#line 923 "parser.y"
     { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[(2) - (2)].declspec), NULL, NULL, (yyvsp[(1) - (2)].stgclass)); ;}
     break;
 
   case 286:
 
 /* Line 1455 of yacc.c  */
-#line 934 "parser.y"
+#line 928 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
   case 287:
 
 /* Line 1455 of yacc.c  */
-#line 935 "parser.y"
+#line 929 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
   case 289:
 
 /* Line 1455 of yacc.c  */
-#line 940 "parser.y"
+#line 934 "parser.y"
     { (yyval.declarator) = make_declarator((yyvsp[(1) - (1)].var)); ;}
     break;
 
   case 290:
 
 /* Line 1455 of yacc.c  */
-#line 941 "parser.y"
+#line 935 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (3)].declarator); ;}
     break;
 
   case 291:
 
 /* Line 1455 of yacc.c  */
-#line 942 "parser.y"
+#line 936 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 292:
 
 /* Line 1455 of yacc.c  */
-#line 943 "parser.y"
+#line 937 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (4)].declarator);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(3) - (4)].var_list)));
                                                  (yyval.declarator)->type = NULL;
@@ -4677,63 +4696,63 @@ yyreduce:
   case 293:
 
 /* Line 1455 of yacc.c  */
-#line 952 "parser.y"
+#line 946 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
   case 294:
 
 /* Line 1455 of yacc.c  */
-#line 953 "parser.y"
+#line 947 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
   case 296:
 
 /* Line 1455 of yacc.c  */
-#line 960 "parser.y"
+#line 954 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
   case 297:
 
 /* Line 1455 of yacc.c  */
-#line 961 "parser.y"
+#line 955 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
   case 298:
 
 /* Line 1455 of yacc.c  */
-#line 965 "parser.y"
+#line 959 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); ;}
     break;
 
   case 300:
 
 /* Line 1455 of yacc.c  */
-#line 971 "parser.y"
+#line 965 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (3)].declarator); ;}
     break;
 
   case 301:
 
 /* Line 1455 of yacc.c  */
-#line 972 "parser.y"
+#line 966 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 302:
 
 /* Line 1455 of yacc.c  */
-#line 973 "parser.y"
+#line 967 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 303:
 
 /* Line 1455 of yacc.c  */
-#line 975 "parser.y"
+#line 969 "parser.y"
     { (yyval.declarator) = make_declarator(NULL);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(2) - (3)].var_list)));
                                                  (yyval.declarator)->type = NULL;
@@ -4743,7 +4762,7 @@ yyreduce:
   case 304:
 
 /* Line 1455 of yacc.c  */
-#line 980 "parser.y"
+#line 974 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (4)].declarator);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(3) - (4)].var_list)));
                                                  (yyval.declarator)->type = NULL;
@@ -4753,70 +4772,70 @@ yyreduce:
   case 305:
 
 /* Line 1455 of yacc.c  */
-#line 989 "parser.y"
+#line 983 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
   case 306:
 
 /* Line 1455 of yacc.c  */
-#line 990 "parser.y"
+#line 984 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
   case 308:
 
 /* Line 1455 of yacc.c  */
-#line 997 "parser.y"
+#line 991 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
   case 309:
 
 /* Line 1455 of yacc.c  */
-#line 998 "parser.y"
+#line 992 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
   case 310:
 
 /* Line 1455 of yacc.c  */
-#line 1002 "parser.y"
+#line 996 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); ;}
     break;
 
   case 312:
 
 /* Line 1455 of yacc.c  */
-#line 1010 "parser.y"
+#line 1004 "parser.y"
     { (yyval.declarator) = make_declarator((yyvsp[(1) - (1)].var)); ;}
     break;
 
   case 313:
 
 /* Line 1455 of yacc.c  */
-#line 1011 "parser.y"
+#line 1005 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (3)].declarator); ;}
     break;
 
   case 314:
 
 /* Line 1455 of yacc.c  */
-#line 1012 "parser.y"
+#line 1006 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
   case 315:
 
 /* Line 1455 of yacc.c  */
-#line 1013 "parser.y"
+#line 1007 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 316:
 
 /* Line 1455 of yacc.c  */
-#line 1015 "parser.y"
+#line 1009 "parser.y"
     { (yyval.declarator) = make_declarator(NULL);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(2) - (3)].var_list)));
                                                  (yyval.declarator)->type = NULL;
@@ -4826,7 +4845,7 @@ yyreduce:
   case 317:
 
 /* Line 1455 of yacc.c  */
-#line 1020 "parser.y"
+#line 1014 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (4)].declarator);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(3) - (4)].var_list)));
                                                  (yyval.declarator)->type = NULL;
@@ -4836,35 +4855,35 @@ yyreduce:
   case 318:
 
 /* Line 1455 of yacc.c  */
-#line 1027 "parser.y"
+#line 1021 "parser.y"
     { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[(1) - (1)].declarator) ); ;}
     break;
 
   case 319:
 
 /* Line 1455 of yacc.c  */
-#line 1028 "parser.y"
+#line 1022 "parser.y"
     { (yyval.declarator_list) = append_declarator( (yyvsp[(1) - (3)].declarator_list), (yyvsp[(3) - (3)].declarator) ); ;}
     break;
 
   case 320:
 
 /* Line 1455 of yacc.c  */
-#line 1031 "parser.y"
+#line 1025 "parser.y"
     { (yyval.expr) = NULL; ;}
     break;
 
   case 321:
 
 /* Line 1455 of yacc.c  */
-#line 1032 "parser.y"
+#line 1026 "parser.y"
     { (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
     break;
 
   case 322:
 
 /* Line 1455 of yacc.c  */
-#line 1035 "parser.y"
+#line 1029 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->bits = (yyvsp[(2) - (2)].expr);
                                                  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
                                                    error_loc("unnamed fields are not allowed\n");
@@ -4874,133 +4893,133 @@ yyreduce:
   case 323:
 
 /* Line 1455 of yacc.c  */
-#line 1042 "parser.y"
+#line 1036 "parser.y"
     { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[(1) - (1)].declarator) ); ;}
     break;
 
   case 324:
 
 /* Line 1455 of yacc.c  */
-#line 1044 "parser.y"
+#line 1038 "parser.y"
     { (yyval.declarator_list) = append_declarator( (yyvsp[(1) - (3)].declarator_list), (yyvsp[(3) - (3)].declarator) ); ;}
     break;
 
   case 325:
 
 /* Line 1455 of yacc.c  */
-#line 1048 "parser.y"
+#line 1042 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (1)].declarator); ;}
     break;
 
   case 326:
 
 /* Line 1455 of yacc.c  */
-#line 1049 "parser.y"
+#line 1043 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (3)].declarator); (yyvsp[(1) - (3)].declarator)->var->eval = (yyvsp[(3) - (3)].expr); ;}
     break;
 
   case 327:
 
 /* Line 1455 of yacc.c  */
-#line 1053 "parser.y"
+#line 1047 "parser.y"
     { (yyval.num) = RPC_FC_RP; ;}
     break;
 
   case 328:
 
 /* Line 1455 of yacc.c  */
-#line 1054 "parser.y"
+#line 1048 "parser.y"
     { (yyval.num) = RPC_FC_UP; ;}
     break;
 
   case 329:
 
 /* Line 1455 of yacc.c  */
-#line 1055 "parser.y"
+#line 1049 "parser.y"
     { (yyval.num) = RPC_FC_FP; ;}
     break;
 
   case 330:
 
 /* Line 1455 of yacc.c  */
-#line 1058 "parser.y"
+#line 1052 "parser.y"
     { (yyval.type) = type_new_struct((yyvsp[(2) - (5)].str), TRUE, (yyvsp[(4) - (5)].var_list)); ;}
     break;
 
   case 331:
 
 /* Line 1455 of yacc.c  */
-#line 1061 "parser.y"
+#line 1055 "parser.y"
     { (yyval.type) = type_new_void(); ;}
     break;
 
   case 332:
 
 /* Line 1455 of yacc.c  */
-#line 1062 "parser.y"
+#line 1056 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
   case 333:
 
 /* Line 1455 of yacc.c  */
-#line 1063 "parser.y"
+#line 1057 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
   case 334:
 
 /* Line 1455 of yacc.c  */
-#line 1064 "parser.y"
+#line 1058 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
   case 335:
 
 /* Line 1455 of yacc.c  */
-#line 1065 "parser.y"
+#line 1059 "parser.y"
     { (yyval.type) = type_new_enum((yyvsp[(2) - (2)].str), FALSE, NULL); ;}
     break;
 
   case 336:
 
 /* Line 1455 of yacc.c  */
-#line 1066 "parser.y"
+#line 1060 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
   case 337:
 
 /* Line 1455 of yacc.c  */
-#line 1067 "parser.y"
+#line 1061 "parser.y"
     { (yyval.type) = type_new_struct((yyvsp[(2) - (2)].str), FALSE, NULL); ;}
     break;
 
   case 338:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "parser.y"
+#line 1062 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
   case 339:
 
 /* Line 1455 of yacc.c  */
-#line 1069 "parser.y"
+#line 1063 "parser.y"
     { (yyval.type) = type_new_nonencapsulated_union((yyvsp[(2) - (2)].str), FALSE, NULL); ;}
     break;
 
   case 340:
 
 /* Line 1455 of yacc.c  */
-#line 1070 "parser.y"
+#line 1064 "parser.y"
     { (yyval.type) = make_safearray((yyvsp[(3) - (4)].type)); ;}
     break;
 
   case 341:
 
 /* Line 1455 of yacc.c  */
-#line 1074 "parser.y"
+#line 1068 "parser.y"
     { reg_typedefs((yyvsp[(3) - (4)].declspec), (yyvsp[(4) - (4)].declarator_list), check_typedef_attrs((yyvsp[(2) - (4)].attr_list)));
                                                  (yyval.statement) = make_statement_typedef((yyvsp[(4) - (4)].declarator_list));
                                                ;}
@@ -5009,35 +5028,35 @@ yyreduce:
   case 342:
 
 /* Line 1455 of yacc.c  */
-#line 1080 "parser.y"
+#line 1074 "parser.y"
     { (yyval.type) = type_new_nonencapsulated_union((yyvsp[(2) - (5)].str), TRUE, (yyvsp[(4) - (5)].var_list)); ;}
     break;
 
   case 343:
 
 /* Line 1455 of yacc.c  */
-#line 1083 "parser.y"
+#line 1077 "parser.y"
     { (yyval.type) = type_new_encapsulated_union((yyvsp[(2) - (10)].str), (yyvsp[(5) - (10)].var), (yyvsp[(7) - (10)].var), (yyvsp[(9) - (10)].var_list)); ;}
     break;
 
   case 344:
 
 /* Line 1455 of yacc.c  */
-#line 1087 "parser.y"
+#line 1081 "parser.y"
     { (yyval.num) = MAKEVERSION((yyvsp[(1) - (1)].num), 0); ;}
     break;
 
   case 345:
 
 /* Line 1455 of yacc.c  */
-#line 1088 "parser.y"
+#line 1082 "parser.y"
     { (yyval.num) = MAKEVERSION((yyvsp[(1) - (3)].num), (yyvsp[(3) - (3)].num)); ;}
     break;
 
 
 
 /* Line 1455 of yacc.c  */
-#line 5041 "parser.tab.c"
+#line 5052 "parser.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5249,7 +5268,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1091 "parser.y"
+#line 1085 "parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -5416,7 +5435,7 @@ static attr_t *make_attr(enum attr_type type)
   return a;
 }
 
-static attr_t *make_attrv(enum attr_type type, unsigned long val)
+static attr_t *make_attrv(enum attr_type type, unsigned int val)
 {
   attr_t *a = xmalloc(sizeof(attr_t));
   a->type = type;
@@ -5653,8 +5672,7 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl
       /* FIXME: should use a type_memsize that allows us to pass in a pointer size */
       if (0)
       {
-        unsigned int align = 0;
-        unsigned int size = type_memsize(v->type, &align);
+        unsigned int size = type_memsize(v->type);
 
         if (0xffffffffu / size < dim->cval)
           error_loc("%s: total array size is too large\n", v->name);
@@ -5676,8 +5694,9 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl
     {
       if (is_array(*ptype))
       {
-        if (type_array_get_conformance(*ptype)->is_const)
-          error_loc("%s: cannot specify size_is for a fixed sized array\n", v->name);
+        if (!type_array_get_conformance(*ptype) ||
+            type_array_get_conformance(*ptype)->type != EXPR_VOID)
+          error_loc("%s: cannot specify size_is for an already sized array\n", v->name);
         else
           *ptype = type_new_array((*ptype)->name,
                                   type_array_get_element(*ptype), FALSE,
@@ -5854,25 +5873,6 @@ static declarator_t *make_declarator(var_t *var)
   return d;
 }
 
-static func_list_t *append_func(func_list_t *list, func_t *func)
-{
-    if (!func) return list;
-    if (!list)
-    {
-        list = xmalloc( sizeof(*list) );
-        list_init( list );
-    }
-    list_add_tail( list, &func->entry );
-    return list;
-}
-
-static func_t *make_func(var_t *def)
-{
-  func_t *f = xmalloc(sizeof(func_t));
-  f->def = def;
-  return f;
-}
-
 static type_t *make_safearray(type_t *type)
 {
   return type_new_array(NULL, type_new_alias(type, "SAFEARRAY"), TRUE, 0,
@@ -6449,14 +6449,12 @@ static int is_allowed_conf_type(const type_t *type)
 
 static int is_ptr_guid_type(const type_t *type)
 {
-    unsigned int align = 0;
-
     /* first, make sure it is a pointer to something */
     if (!is_ptr(type)) return FALSE;
 
     /* second, make sure it is a pointer to something of size sizeof(GUID),
      * i.e. 16 bytes */
-    return (type_memsize(type_pointer_get_ref(type), &align) == 16);
+    return (type_memsize(type_pointer_get_ref(type)) == 16);
 }
 
 static void check_conformance_expr_list(const char *attr_name, const var_t *arg, const type_t *container_type, expr_list_t *expr_list)
@@ -6600,7 +6598,11 @@ static void check_field_common(const type_t *container_type,
         }
         case TGT_CTXT_HANDLE:
         case TGT_CTXT_HANDLE_POINTER:
-            /* FIXME */
+            if (type_get_type(container_type) != TYPE_FUNCTION)
+                error_loc_info(&arg->loc_info,
+                               "%s \'%s\' of %s \'%s\' cannot be a context handle\n",
+                               var_type, arg->name, container_type_name,
+                               container_name);
             break;
         case TGT_STRING:
         {
@@ -6684,10 +6686,11 @@ static void check_remoting_args(const var_t *func)
                 error_loc_info(&arg->loc_info, "out interface pointer \'%s\' of function \'%s\' is not a double pointer\n", arg->name, funcname);
                 break;
             case TGT_STRING:
-                if (!is_array(type))
-                {
-                    /* FIXME */
-                }
+                if (is_ptr(type) ||
+                    (is_array(type) &&
+                     (!type_array_has_conformance(type) ||
+                      type_array_get_conformance(type)->type == EXPR_VOID)))
+                    error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' cannot be an unsized string\n", arg->name, funcname);
                 break;
             case TGT_INVALID:
                 /* already error'd before we get here */
index 1266e12..eaf2d28 100644 (file)
@@ -201,7 +201,7 @@ typedef union YYSTYPE
 {
 
 /* Line 1676 of yacc.c  */
-#line 156 "parser.y"
+#line 154 "parser.y"
 
        attr_t *attr;
        attr_list_t *attr_list;
@@ -214,8 +214,6 @@ typedef union YYSTYPE
        var_list_t *var_list;
        declarator_t *declarator;
        declarator_list_t *declarator_list;
-       func_t *func;
-       func_list_t *func_list;
        statement_t *statement;
        statement_list_t *stmt_list;
        ifref_t *ifref;
@@ -233,7 +231,7 @@ typedef union YYSTYPE
 
 
 /* Line 1676 of yacc.c  */
-#line 237 "parser.tab.h"
+#line 235 "parser.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 8a23a82..db071a7 100644 (file)
@@ -97,7 +97,7 @@ static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
 static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);
 static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass);
 static attr_t *make_attr(enum attr_type type);
-static attr_t *make_attrv(enum attr_type type, unsigned long val);
+static attr_t *make_attrv(enum attr_type type, unsigned int val);
 static attr_t *make_attrp(enum attr_type type, void *val);
 static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
 static array_dims_t *append_array(array_dims_t *list, expr_t *expr);
@@ -108,8 +108,6 @@ static ifref_t *make_ifref(type_t *iface);
 static var_list_t *append_var_list(var_list_t *list, var_list_t *vars);
 static declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *p);
 static declarator_t *make_declarator(var_t *var);
-static func_list_t *append_func(func_list_t *list, func_t *func);
-static func_t *make_func(var_t *def);
 static type_t *make_safearray(type_t *type);
 static typelib_t *make_library(const char *name, const attr_list_t *attrs);
 static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type);
@@ -165,8 +163,6 @@ static statement_list_t *append_statement(statement_list_t *list, statement_t *s
        var_list_t *var_list;
        declarator_t *declarator;
        declarator_list_t *declarator_list;
-       func_t *func;
-       func_list_t *func_list;
        statement_t *statement;
        statement_list_t *stmt_list;
        ifref_t *ifref;
@@ -293,14 +289,14 @@ static statement_list_t *append_statement(statement_list_t *list, statement_t *s
 %type <ifref> coclass_int
 %type <ifref_list> coclass_ints
 %type <var> arg ne_union_field union_field s_field case enum declaration
-%type <var_list> m_args arg_list args
+%type <var> funcdef
+%type <var_list> m_args arg_list args dispint_meths
 %type <var_list> fields ne_union_fields cases enums enum_list dispint_props field
 %type <var> m_ident ident
 %type <declarator> declarator direct_declarator init_declarator struct_declarator
 %type <declarator> m_any_declarator any_declarator any_declarator_no_direct any_direct_declarator
 %type <declarator> m_abstract_declarator abstract_declarator abstract_declarator_no_direct abstract_direct_declarator
 %type <declarator_list> declarator_list struct_declarator_list
-%type <func> funcdef
 %type <type> coclass coclasshdr coclassdef
 %type <num> pointer_type version
 %type <str> libraryhdr callconv cppquote importlib import t_ident
@@ -308,7 +304,7 @@ static statement_list_t *append_statement(statement_list_t *list, statement_t *s
 %type <import> import_start
 %type <typelib> library_start librarydef
 %type <statement> statement typedef
-%type <stmt_list> gbl_statements imp_statements int_statements dispint_meths
+%type <stmt_list> gbl_statements imp_statements int_statements
 
 %left ','
 %right '?' ':'
@@ -720,12 +716,10 @@ s_field:  m_attributes decl_spec declarator       { $$ = declare_var(check_field_attrs
                                                }
        ;
 
-funcdef:
-         m_attributes decl_spec declarator     { var_t *v;
-                                                 v = declare_var(check_function_attrs($3->var->name, $1),
-                                                              $2, $3, FALSE);
-                                                 free($3);
-                                                 $$ = make_func(v);
+funcdef: declaration                           { $$ = $1;
+                                                 if (type_get_type($$->type) != TYPE_FUNCTION)
+                                                   error_loc("only methods may be declared inside the methods section of a dispinterface\n");
+                                                 check_function_attrs($$->name, $$->attrs);
                                                }
        ;
 
@@ -826,7 +820,7 @@ dispint_props: tPROPERTIES ':'                      { $$ = NULL; }
        ;
 
 dispint_meths: tMETHODS ':'                    { $$ = NULL; }
-       | dispint_meths funcdef ';'             { $$ = append_func( $1, $2 ); }
+       | dispint_meths funcdef ';'             { $$ = append_var( $1, $2 ); }
        ;
 
 dispinterfacedef: dispinterfacehdr '{'
@@ -1254,7 +1248,7 @@ static attr_t *make_attr(enum attr_type type)
   return a;
 }
 
-static attr_t *make_attrv(enum attr_type type, unsigned long val)
+static attr_t *make_attrv(enum attr_type type, unsigned int val)
 {
   attr_t *a = xmalloc(sizeof(attr_t));
   a->type = type;
@@ -1491,8 +1485,7 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl
       /* FIXME: should use a type_memsize that allows us to pass in a pointer size */
       if (0)
       {
-        unsigned int align = 0;
-        unsigned int size = type_memsize(v->type, &align);
+        unsigned int size = type_memsize(v->type);
 
         if (0xffffffffu / size < dim->cval)
           error_loc("%s: total array size is too large\n", v->name);
@@ -1514,8 +1507,9 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl
     {
       if (is_array(*ptype))
       {
-        if (type_array_get_conformance(*ptype)->is_const)
-          error_loc("%s: cannot specify size_is for a fixed sized array\n", v->name);
+        if (!type_array_get_conformance(*ptype) ||
+            type_array_get_conformance(*ptype)->type != EXPR_VOID)
+          error_loc("%s: cannot specify size_is for an already sized array\n", v->name);
         else
           *ptype = type_new_array((*ptype)->name,
                                   type_array_get_element(*ptype), FALSE,
@@ -1692,25 +1686,6 @@ static declarator_t *make_declarator(var_t *var)
   return d;
 }
 
-static func_list_t *append_func(func_list_t *list, func_t *func)
-{
-    if (!func) return list;
-    if (!list)
-    {
-        list = xmalloc( sizeof(*list) );
-        list_init( list );
-    }
-    list_add_tail( list, &func->entry );
-    return list;
-}
-
-static func_t *make_func(var_t *def)
-{
-  func_t *f = xmalloc(sizeof(func_t));
-  f->def = def;
-  return f;
-}
-
 static type_t *make_safearray(type_t *type)
 {
   return type_new_array(NULL, type_new_alias(type, "SAFEARRAY"), TRUE, 0,
@@ -2287,14 +2262,12 @@ static int is_allowed_conf_type(const type_t *type)
 
 static int is_ptr_guid_type(const type_t *type)
 {
-    unsigned int align = 0;
-
     /* first, make sure it is a pointer to something */
     if (!is_ptr(type)) return FALSE;
 
     /* second, make sure it is a pointer to something of size sizeof(GUID),
      * i.e. 16 bytes */
-    return (type_memsize(type_pointer_get_ref(type), &align) == 16);
+    return (type_memsize(type_pointer_get_ref(type)) == 16);
 }
 
 static void check_conformance_expr_list(const char *attr_name, const var_t *arg, const type_t *container_type, expr_list_t *expr_list)
@@ -2438,7 +2411,11 @@ static void check_field_common(const type_t *container_type,
         }
         case TGT_CTXT_HANDLE:
         case TGT_CTXT_HANDLE_POINTER:
-            /* FIXME */
+            if (type_get_type(container_type) != TYPE_FUNCTION)
+                error_loc_info(&arg->loc_info,
+                               "%s \'%s\' of %s \'%s\' cannot be a context handle\n",
+                               var_type, arg->name, container_type_name,
+                               container_name);
             break;
         case TGT_STRING:
         {
@@ -2522,10 +2499,11 @@ static void check_remoting_args(const var_t *func)
                 error_loc_info(&arg->loc_info, "out interface pointer \'%s\' of function \'%s\' is not a double pointer\n", arg->name, funcname);
                 break;
             case TGT_STRING:
-                if (!is_array(type))
-                {
-                    /* FIXME */
-                }
+                if (is_ptr(type) ||
+                    (is_array(type) &&
+                     (!type_array_has_conformance(type) ||
+                      type_array_get_conformance(type)->type == EXPR_VOID)))
+                    error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' cannot be an unsized string\n", arg->name, funcname);
                 break;
             case TGT_INVALID:
                 /* already error'd before we get here */
index 2bf33f6..b4a0328 100644 (file)
@@ -16,7 +16,6 @@
 #define yytext parser_text
 #define yywrap parser_wrap
 
-#line 20 "parser.yy.c"
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
@@ -583,6 +582,7 @@ char *yytext;
 #line 43 "parser.l"
 
 #include "config.h"
+#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -626,15 +626,15 @@ int import_stack_ptr = 0;
 
 /* converts an integer in string form to an unsigned long and prints an error
  * on overflow */
-static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
+static unsigned int xstrtoul(const char *nptr, char **endptr, int base)
 {
-    unsigned long l;
+    unsigned long val;
 
     errno = 0;
-    l = strtoul(nptr, endptr, base);
-    if (l == ULONG_MAX && errno == ERANGE)
+    val = strtoul(nptr, endptr, base);
+    if ((val == ULONG_MAX && errno == ERANGE) || ((unsigned int)val != val))
         error_loc("integer constant %s is too large\n", nptr);
-    return l;
+    return val;
 }
 
 UUID *parse_uuid(const char *u)
@@ -662,7 +662,7 @@ UUID *parse_uuid(const char *u)
  * The flexer starts here
  **************************************************************************
  */
-#line 666 "parser.yy.c"
+#line 666 "lex.parser_.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -816,9 +816,9 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
 
-#line 126 "parser.l"
+#line 127 "parser.l"
 
-#line 822 "parser.yy.c"
+#line 822 "lex.parser_.c"
 
        if ( yy_init )
                {
@@ -904,12 +904,12 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 127 "parser.l"
+#line 128 "parser.l"
 yy_push_state(PP_LINE);
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 128 "parser.l"
+#line 129 "parser.l"
 {
                             int lineno;
                             char *cptr, *fname;
@@ -932,12 +932,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 147 "parser.l"
+#line 148 "parser.l"
 yy_push_state(QUOTE); cbufidx = 0;
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 148 "parser.l"
+#line 149 "parser.l"
 {
                                yy_pop_state();
                                parser_lval.str = get_buffered_cstring();
@@ -946,12 +946,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 153 "parser.l"
-yy_push_state(WSTRQUOTE);
+#line 154 "parser.l"
+yy_push_state(WSTRQUOTE); cbufidx = 0;
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 154 "parser.l"
+#line 155 "parser.l"
 {
                                yy_pop_state();
                                parser_lval.str = get_buffered_cstring();
@@ -960,12 +960,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 159 "parser.l"
+#line 160 "parser.l"
 yy_push_state(SQUOTE); cbufidx = 0;
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 160 "parser.l"
+#line 161 "parser.l"
 {
                                yy_pop_state();
                                parser_lval.str = get_buffered_cstring();
@@ -973,45 +973,45 @@ YY_RULE_SETUP
                        }
        YY_BREAK
 case 9:
-#line 166 "parser.l"
+#line 167 "parser.l"
 case 10:
 YY_RULE_SETUP
-#line 166 "parser.l"
+#line 167 "parser.l"
 addcchar(yytext[1]);
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 167 "parser.l"
+#line 168 "parser.l"
 addcchar(yytext[1]);
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 168 "parser.l"
+#line 169 "parser.l"
 addcchar('\\'); addcchar(yytext[1]);
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 169 "parser.l"
+#line 170 "parser.l"
 addcchar(yytext[0]);
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 170 "parser.l"
+#line 171 "parser.l"
 yy_push_state(ATTR); return '[';
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 171 "parser.l"
+#line 172 "parser.l"
 yy_pop_state(); return ']';
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 172 "parser.l"
+#line 173 "parser.l"
 return attr_token(yytext);
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 173 "parser.l"
+#line 174 "parser.l"
 {
                                parser_lval.uuid = parse_uuid(yytext);
                                return aUUID;
@@ -1019,7 +1019,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 177 "parser.l"
+#line 178 "parser.l"
 {
                                parser_lval.num = xstrtoul(yytext, NULL, 0);
                                return aHEXNUM;
@@ -1027,7 +1027,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 181 "parser.l"
+#line 182 "parser.l"
 {
                                parser_lval.num = xstrtoul(yytext, NULL, 0);
                                return aNUM;
@@ -1035,7 +1035,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 185 "parser.l"
+#line 186 "parser.l"
 {
                                parser_lval.dbl = strtod(yytext, NULL);
                                return aDOUBLE;
@@ -1046,77 +1046,77 @@ case 21:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 189 "parser.l"
+#line 190 "parser.l"
 return tSAFEARRAY;
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 190 "parser.l"
+#line 191 "parser.l"
 return kw_token(yytext);
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 191 "parser.l"
+#line 192 "parser.l"
 line_number++;
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 192 "parser.l"
+#line 193 "parser.l"
 
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 193 "parser.l"
+#line 194 "parser.l"
 return SHL;
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 194 "parser.l"
+#line 195 "parser.l"
 return SHR;
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 195 "parser.l"
+#line 196 "parser.l"
 return MEMBERPTR;
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 196 "parser.l"
+#line 197 "parser.l"
 return EQUALITY;
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 197 "parser.l"
+#line 198 "parser.l"
 return INEQUALITY;
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 198 "parser.l"
+#line 199 "parser.l"
 return GREATEREQUAL;
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 199 "parser.l"
+#line 200 "parser.l"
 return LESSEQUAL;
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 200 "parser.l"
+#line 201 "parser.l"
 return LOGICALOR;
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 201 "parser.l"
+#line 202 "parser.l"
 return LOGICALAND;
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 202 "parser.l"
+#line 203 "parser.l"
 return ELLIPSIS;
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 203 "parser.l"
+#line 204 "parser.l"
 return yytext[0];
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
@@ -1125,7 +1125,7 @@ case YY_STATE_EOF(WSTRQUOTE):
 case YY_STATE_EOF(ATTR):
 case YY_STATE_EOF(PP_LINE):
 case YY_STATE_EOF(SQUOTE):
-#line 204 "parser.l"
+#line 205 "parser.l"
 {
                                if (import_stack_ptr)
                                        return aEOF;
@@ -1134,10 +1134,10 @@ case YY_STATE_EOF(SQUOTE):
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 209 "parser.l"
+#line 210 "parser.l"
 ECHO;
        YY_BREAK
-#line 1141 "parser.yy.c"
+#line 1141 "lex.parser_.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -2023,7 +2023,7 @@ int main()
        return 0;
        }
 #endif
-#line 209 "parser.l"
+#line 210 "parser.l"
 
 
 #ifndef parser_wrap
@@ -2260,10 +2260,10 @@ struct imports {
 int do_import(char *fname)
 {
        FILE *f;
-       char *path;
+       char *path, *name;
        struct imports *import;
        int ptr = import_stack_ptr;
-       int ret;
+       int ret, fd;
 
        import = first_import;
        while (import && strcmp(import->name, fname))
@@ -2278,7 +2278,7 @@ int do_import(char *fname)
         /* don't search for a file name with a path in the include directories,
          * for compatibility with MIDL */
         if (strchr( fname, '/' ) || strchr( fname, '\\' ))
-            path = strdup( fname );
+            path = xstrdup( fname );
         else if (!(path = wpp_find_include( fname, input_name )))
             error_loc("Unable to open include file %s\n", fname);
 
@@ -2289,7 +2289,16 @@ int do_import(char *fname)
         input_name = path;
         line_number = 1;
 
-        ret = wpp_parse_temp( path, NULL, &temp_name );
+        name = xstrdup( "widl.XXXXXX" );
+        if((fd = mkstemps( name, 0 )) == -1)
+            error("Could not generate a temp name from %s\n", name);
+
+        temp_name = name;
+        if (!(f = fdopen(fd, "wt")))
+            error("Could not open fd %s for writing\n", name);
+
+        ret = wpp_parse( path, f );
+        fclose( f );
         if (ret) exit(1);
 
        if((f = fopen(temp_name, "r")) == NULL)
index ca0faf1..8541c5a 100644 (file)
@@ -46,7 +46,6 @@
 /* value to add on to round size up to a multiple of alignment */
 #define ROUNDING(size, alignment) (((alignment) - 1) - (((size) + ((alignment) - 1)) & ((alignment) - 1)))
 
-static const var_t *current_func;
 static const type_t *current_structure;
 static const type_t *current_iface;
 
@@ -69,6 +68,7 @@ enum type_context
 
 static unsigned int field_memsize(const type_t *type, unsigned int *offset);
 static unsigned int fields_memsize(const var_list_t *fields, unsigned int *align);
+static unsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align);
 static unsigned int write_struct_tfs(FILE *file, type_t *type, const char *name, unsigned int *tfsoff);
 static int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *type,
                                 const char *name, int write_ptr, unsigned int *tfsoff);
@@ -124,6 +124,41 @@ static const char *string_of_type(unsigned char type)
     case RPC_FC_C_WSTRING: return "FC_C_WSTRING";
     case RPC_FC_CSTRING: return "FC_CSTRING";
     case RPC_FC_WSTRING: return "FC_WSTRING";
+    case RPC_FC_BYTE_COUNT_POINTER: return "FC_BYTE_COUNT_POINTER";
+    case RPC_FC_TRANSMIT_AS: return "FC_TRANSMIT_AS";
+    case RPC_FC_REPRESENT_AS: return "FC_REPRESENT_AS";
+    case RPC_FC_IP: return "FC_IP";
+    case RPC_FC_BIND_CONTEXT: return "FC_BIND_CONTEXT";
+    case RPC_FC_BIND_GENERIC: return "FC_BIND_GENERIC";
+    case RPC_FC_BIND_PRIMITIVE: return "FC_BIND_PRIMITIVE";
+    case RPC_FC_AUTO_HANDLE: return "FC_AUTO_HANDLE";
+    case RPC_FC_CALLBACK_HANDLE: return "FC_CALLBACK_HANDLE";
+    case RPC_FC_STRUCTPAD1: return "FC_STRUCTPAD1";
+    case RPC_FC_STRUCTPAD2: return "FC_STRUCTPAD2";
+    case RPC_FC_STRUCTPAD3: return "FC_STRUCTPAD3";
+    case RPC_FC_STRUCTPAD4: return "FC_STRUCTPAD4";
+    case RPC_FC_STRUCTPAD5: return "FC_STRUCTPAD5";
+    case RPC_FC_STRUCTPAD6: return "FC_STRUCTPAD6";
+    case RPC_FC_STRUCTPAD7: return "FC_STRUCTPAD7";
+    case RPC_FC_STRING_SIZED: return "FC_STRING_SIZED";
+    case RPC_FC_NO_REPEAT: return "FC_NO_REPEAT";
+    case RPC_FC_FIXED_REPEAT: return "FC_FIXED_REPEAT";
+    case RPC_FC_VARIABLE_REPEAT: return "FC_VARIABLE_REPEAT";
+    case RPC_FC_FIXED_OFFSET: return "FC_FIXED_OFFSET";
+    case RPC_FC_VARIABLE_OFFSET: return "FC_VARIABLE_OFFSET";
+    case RPC_FC_PP: return "FC_PP";
+    case RPC_FC_EMBEDDED_COMPLEX: return "FC_EMBEDDED_COMPLEX";
+    case RPC_FC_DEREFERENCE: return "FC_DEREFERENCE";
+    case RPC_FC_DIV_2: return "FC_DIV_2";
+    case RPC_FC_MULT_2: return "FC_MULT_2";
+    case RPC_FC_ADD_1: return "FC_ADD_1";
+    case RPC_FC_SUB_1: return "FC_SUB_1";
+    case RPC_FC_CALLBACK: return "FC_CALLBACK";
+    case RPC_FC_CONSTANT_IID: return "FC_CONSTANT_IID";
+    case RPC_FC_END: return "FC_END";
+    case RPC_FC_PAD: return "FC_PAD";
+    case RPC_FC_USER_MARSHAL: return "FC_USER_MARSHAL";
+    case RPC_FC_RANGE: return "FC_RANGE";
     case RPC_FC_INT3264: return "FC_INT3264";
     case RPC_FC_UINT3264: return "FC_UINT3264";
     default:
@@ -297,7 +332,7 @@ static int get_padding(const var_list_t *fields)
     {
         type_t *ft = f->type;
         unsigned int align = 0;
-        unsigned int size = type_memsize(ft, &align);
+        unsigned int size = type_memsize_and_alignment(ft, &align);
         align = clamp_align(align);
         if (align > salign) salign = align;
         offset = ROUND_SIZE(offset, align);
@@ -457,8 +492,7 @@ static unsigned char get_array_fc(const type_t *type)
 
     if (!size_is)
     {
-        unsigned int align = 0;
-        unsigned int size = type_memsize(elem_type, &align);
+        unsigned int size = type_memsize(elem_type);
         if (size * type_array_get_dim(type) > 0xffffuL)
             fc = RPC_FC_LGFARRAY;
         else
@@ -943,7 +977,6 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
     unsigned char operator_type = 0;
     unsigned char conftype = RPC_FC_NORMAL_CONFORMANCE;
     const char *conftype_string = "";
-    const char *operator_string = "no operators";
     const expr_t *subexpr;
 
     if (!expr)
@@ -952,31 +985,31 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
         return 4;
     }
 
-    if (!structure)
-    {
-        /* Top-level conformance calculations are done inline.  */
-        print_file (file, 2, "0x%x,\t/* Corr desc: parameter */\n",
-                    RPC_FC_TOP_LEVEL_CONFORMANCE);
-        print_file (file, 2, "0x0,\n");
-        print_file (file, 2, "NdrFcShort(0x0),\n");
-        return 4;
-    }
-
     if (expr->is_const)
     {
         if (expr->cval > UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX)
-            error("write_conf_or_var_desc: constant value %ld is greater than "
+            error("write_conf_or_var_desc: constant value %d is greater than "
                   "the maximum constant size of %d\n", expr->cval,
                   UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX);
 
-        print_file(file, 2, "0x%x, /* Corr desc: constant, val = %ld */\n",
+        print_file(file, 2, "0x%x, /* Corr desc: constant, val = %d */\n",
                    RPC_FC_CONSTANT_CONFORMANCE, expr->cval);
-        print_file(file, 2, "0x%lx,\n", expr->cval >> 16);
+        print_file(file, 2, "0x%x,\n", expr->cval >> 16);
         print_file(file, 2, "NdrFcShort(0x%hx),\n", (unsigned short)expr->cval);
 
         return 4;
     }
 
+    if (!structure)
+    {
+        /* Top-level conformance calculations are done inline.  */
+        print_file (file, 2, "0x%x,\t/* Corr desc: parameter */\n",
+                    RPC_FC_TOP_LEVEL_CONFORMANCE);
+        print_file (file, 2, "0x0,\n");
+        print_file (file, 2, "NdrFcShort(0x0),\n");
+        return 4;
+    }
+
     if (is_ptr(type) || (is_array(type) && type_array_is_decl_as_ptr(type)))
     {
         conftype = RPC_FC_POINTER_CONFORMANCE;
@@ -989,14 +1022,12 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
     case EXPR_PPTR:
         subexpr = subexpr->ref;
         operator_type = RPC_FC_DEREFERENCE;
-        operator_string = "FC_DEREFERENCE";
         break;
     case EXPR_DIV:
         if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2))
         {
             subexpr = subexpr->ref;
             operator_type = RPC_FC_DIV_2;
-            operator_string = "FC_DIV_2";
         }
         break;
     case EXPR_MUL:
@@ -1004,7 +1035,6 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
         {
             subexpr = subexpr->ref;
             operator_type = RPC_FC_MULT_2;
-            operator_string = "FC_MULT_2";
         }
         break;
     case EXPR_SUB:
@@ -1012,7 +1042,6 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
         {
             subexpr = subexpr->ref;
             operator_type = RPC_FC_SUB_1;
-            operator_string = "FC_SUB_1";
         }
         break;
     case EXPR_ADD:
@@ -1020,7 +1049,6 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
         {
             subexpr = subexpr->ref;
             operator_type = RPC_FC_ADD_1;
-            operator_string = "FC_ADD_1";
         }
         break;
     default:
@@ -1106,7 +1134,8 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
 
         print_file(file, 2, "0x%x, /* Corr desc: %s%s */\n",
                    conftype | param_type, conftype_string, string_of_type(param_type));
-        print_file(file, 2, "0x%x, /* %s */\n", operator_type, operator_string);
+        print_file(file, 2, "0x%x, /* %s */\n", operator_type,
+                   operator_type ? string_of_type(operator_type) : "no operators");
         print_file(file, 2, "NdrFcShort(0x%hx),\t/* offset = %d */\n",
                    offset, offset);
     }
@@ -1152,7 +1181,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
 static unsigned int field_memsize(const type_t *type, unsigned int *offset)
 {
     unsigned int align = 0;
-    unsigned int size = type_memsize( type, &align );
+    unsigned int size = type_memsize_and_alignment( type, &align );
 
     *offset = ROUND_SIZE( *offset, align );
     return size;
@@ -1168,7 +1197,7 @@ static unsigned int fields_memsize(const var_list_t *fields, unsigned int *align
     LIST_FOR_EACH_ENTRY( v, fields, const var_t, entry )
     {
         unsigned int falign = 0;
-        unsigned int fsize = type_memsize(v->type, &falign);
+        unsigned int fsize = type_memsize_and_alignment(v->type, &falign);
         if (*align < falign) *align = falign;
         falign = clamp_align(falign);
         size = ROUND_SIZE(size, falign);
@@ -1192,7 +1221,7 @@ static unsigned int union_memsize(const var_list_t *fields, unsigned int *pmaxa)
         /* we could have an empty default field with NULL type */
         if (v->type)
         {
-            size = type_memsize(v->type, &align);
+            size = type_memsize_and_alignment(v->type, &align);
             if (maxs < size) maxs = size;
             if (*pmaxa < align) *pmaxa = align;
         }
@@ -1201,7 +1230,7 @@ static unsigned int union_memsize(const var_list_t *fields, unsigned int *pmaxa)
     return maxs;
 }
 
-unsigned int type_memsize(const type_t *t, unsigned int *align)
+static unsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align)
 {
     unsigned int size = 0;
 
@@ -1278,12 +1307,12 @@ unsigned int type_memsize(const type_t *t, unsigned int *align)
         {
             if (is_conformant_array(t))
             {
-                type_memsize(type_array_get_element(t), align);
+                type_memsize_and_alignment(type_array_get_element(t), align);
                 size = 0;
             }
             else
                 size = type_array_get_dim(t) *
-                    type_memsize(type_array_get_element(t), align);
+                    type_memsize_and_alignment(type_array_get_element(t), align);
         }
         else /* declared as a pointer */
         {
@@ -1309,6 +1338,106 @@ unsigned int type_memsize(const type_t *t, unsigned int *align)
     return size;
 }
 
+unsigned int type_memsize(const type_t *t)
+{
+    unsigned int align = 0;
+    return type_memsize_and_alignment( t, &align );
+}
+
+static unsigned int type_buffer_alignment(const type_t *t)
+{
+    const var_list_t *fields;
+    const var_t *var;
+    unsigned int max = 0, align;
+
+    switch (type_get_type(t))
+    {
+    case TYPE_BASIC:
+        switch (get_basic_fc(t))
+        {
+        case RPC_FC_BYTE:
+        case RPC_FC_CHAR:
+        case RPC_FC_USMALL:
+        case RPC_FC_SMALL:
+            return 1;
+        case RPC_FC_WCHAR:
+        case RPC_FC_USHORT:
+        case RPC_FC_SHORT:
+            return 2;
+        case RPC_FC_ULONG:
+        case RPC_FC_LONG:
+        case RPC_FC_ERROR_STATUS_T:
+        case RPC_FC_FLOAT:
+        case RPC_FC_INT3264:
+        case RPC_FC_UINT3264:
+            return 4;
+        case RPC_FC_HYPER:
+        case RPC_FC_DOUBLE:
+            return 8;
+        default:
+            error("type_buffer_alignment: Unknown type 0x%x\n", get_basic_fc(t));
+        }
+        break;
+    case TYPE_ENUM:
+        switch (get_enum_fc(t))
+        {
+        case RPC_FC_ENUM16:
+            return 2;
+        case RPC_FC_ENUM32:
+            return 4;
+        default:
+            error("type_buffer_alignment: Unknown enum type\n");
+        }
+        break;
+    case TYPE_STRUCT:
+        if (!(fields = type_struct_get_fields(t))) break;
+        LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )
+        {
+            if (!var->type) continue;
+            align = type_buffer_alignment( var->type );
+            if (max < align) max = align;
+        }
+        break;
+    case TYPE_ENCAPSULATED_UNION:
+        if (!(fields = type_encapsulated_union_get_fields(t))) break;
+        LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )
+        {
+            if (!var->type) continue;
+            align = type_buffer_alignment( var->type );
+            if (max < align) max = align;
+        }
+        break;
+    case TYPE_UNION:
+        if (!(fields = type_union_get_cases(t))) break;
+        LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )
+        {
+            if (!var->type) continue;
+            align = type_buffer_alignment( var->type );
+            if (max < align) max = align;
+        }
+        break;
+    case TYPE_ARRAY:
+        if (!type_array_is_decl_as_ptr(t))
+            return type_buffer_alignment( type_array_get_element(t) );
+        /* else fall through */
+    case TYPE_POINTER:
+        return 4;
+    case TYPE_INTERFACE:
+    case TYPE_ALIAS:
+    case TYPE_VOID:
+    case TYPE_COCLASS:
+    case TYPE_MODULE:
+    case TYPE_FUNCTION:
+    case TYPE_BITFIELD:
+        /* these types should not be encountered here due to language
+         * restrictions (interface, void, coclass, module), logical
+         * restrictions (alias - due to type_get_type call above) or
+         * checking restrictions (function, bitfield). */
+        assert(0);
+    }
+    return max;
+}
+
 int is_full_pointer_function(const var_t *func)
 {
     const var_t *var;
@@ -1476,11 +1605,11 @@ static int user_type_has_variable_size(const type_t *t)
 static void write_user_tfs(FILE *file, type_t *type, unsigned int *tfsoff)
 {
     unsigned int start, absoff, flags;
-    unsigned int align = 0, ualign = 0;
     const char *name = NULL;
     type_t *utype = get_user_type(type, &name);
-    unsigned int usize = type_memsize(utype, &ualign);
-    unsigned int size = type_memsize(type, &align);
+    unsigned int usize = type_memsize(utype);
+    unsigned int ualign = type_buffer_alignment(utype);
+    unsigned int size = type_memsize(type);
     unsigned short funoff = user_type_offset(name);
     short reloff;
 
@@ -1644,7 +1773,6 @@ static int write_pointer_description_offsets(
     unsigned int *typestring_offset)
 {
     int written = 0;
-    unsigned int align;
 
     if ((is_ptr(type) && type_get_type(type_pointer_get_ref(type)) != TYPE_INTERFACE) ||
         (is_array(type) && type_array_is_decl_as_ptr(type)))
@@ -1661,8 +1789,7 @@ static int write_pointer_description_offsets(
             print_file(file, 2, "NdrFcShort(0x%hx),\t/* Memory offset = %d */\n", *offset_in_memory, *offset_in_memory);
             print_file(file, 2, "NdrFcShort(0x%hx),\t/* Buffer offset = %d */\n", *offset_in_buffer, *offset_in_buffer);
 
-            align = 0;
-            memsize = type_memsize(type, &align);
+            memsize = type_memsize(type);
             *offset_in_memory += memsize;
             /* increment these separately as in the case of conformant (varying)
              * structures these start at different values */
@@ -1711,8 +1838,8 @@ static int write_pointer_description_offsets(
             if (offset_in_memory && offset_in_buffer)
             {
                 unsigned int padding;
-                align = 0;
-                type_memsize(v->type, &align);
+                unsigned int align = 0;
+                type_memsize_and_alignment(v->type, &align);
                 padding = ROUNDING(*offset_in_memory, align);
                 *offset_in_memory += padding;
                 *offset_in_buffer += padding;
@@ -1726,9 +1853,7 @@ static int write_pointer_description_offsets(
     {
         if (offset_in_memory && offset_in_buffer)
         {
-            unsigned int memsize;
-            align = 0;
-            memsize = type_memsize(type, &align);
+            unsigned int memsize = type_memsize(type);
             *offset_in_memory += memsize;
             /* increment these separately as in the case of conformant (varying)
              * structures these start at different values */
@@ -1745,7 +1870,6 @@ static int write_no_repeat_pointer_descriptions(
     unsigned int *typestring_offset)
 {
     int written = 0;
-    unsigned int align;
 
     if (is_ptr(type) ||
         (is_conformant_array(type) && type_array_is_decl_as_ptr(type)))
@@ -1766,8 +1890,8 @@ static int write_no_repeat_pointer_descriptions(
             if (offset_in_memory && offset_in_buffer)
             {
                 unsigned int padding;
-                align = 0;
-                type_memsize(v->type, &align);
+                unsigned int align = 0;
+                type_memsize_and_alignment(v->type, &align);
                 padding = ROUNDING(*offset_in_memory, align);
                 *offset_in_memory += padding;
                 *offset_in_buffer += padding;
@@ -1779,9 +1903,7 @@ static int write_no_repeat_pointer_descriptions(
     }
     else
     {
-        unsigned int memsize;
-        align = 0;
-        memsize = type_memsize(type, &align);
+        unsigned int memsize = type_memsize(type);
         *offset_in_memory += memsize;
         /* increment these separately as in the case of conformant (varying)
          * structures these start at different values */
@@ -1798,7 +1920,6 @@ static int write_fixed_array_pointer_descriptions(
     unsigned int *offset_in_memory, unsigned int *offset_in_buffer,
     unsigned int *typestring_offset)
 {
-    unsigned int align;
     int pointer_count = 0;
 
     if (type_get_type(type) == TYPE_ARRAY &&
@@ -1815,8 +1936,7 @@ static int write_fixed_array_pointer_descriptions(
             unsigned int offset_of_array_pointer_mem = 0;
             unsigned int offset_of_array_pointer_buf = 0;
 
-            align = 0;
-            increment_size = type_memsize(type_array_get_element(type), &align);
+            increment_size = type_memsize(type_array_get_element(type));
 
             print_file(file, 2, "0x%02x, /* FC_FIXED_REPEAT */\n", RPC_FC_FIXED_REPEAT);
             print_file(file, 2, "0x%02x, /* FC_PAD */\n", RPC_FC_PAD);
@@ -1839,8 +1959,8 @@ static int write_fixed_array_pointer_descriptions(
             if (offset_in_memory && offset_in_buffer)
             {
                 unsigned int padding;
-                align = 0;
-                type_memsize(v->type, &align);
+                unsigned int align = 0;
+                type_memsize_and_alignment(v->type, &align);
                 padding = ROUNDING(*offset_in_memory, align);
                 *offset_in_memory += padding;
                 *offset_in_buffer += padding;
@@ -1855,8 +1975,7 @@ static int write_fixed_array_pointer_descriptions(
         if (offset_in_memory && offset_in_buffer)
         {
             unsigned int memsize;
-            align = 0;
-            memsize = type_memsize(type, &align);
+            memsize = type_memsize(type);
             *offset_in_memory += memsize;
             /* increment these separately as in the case of conformant (varying)
              * structures these start at different values */
@@ -1873,7 +1992,6 @@ static int write_conformant_array_pointer_descriptions(
     FILE *file, const attr_list_t *attrs, type_t *type,
     unsigned int offset_in_memory, unsigned int *typestring_offset)
 {
-    unsigned int align;
     int pointer_count = 0;
 
     if (is_conformant_array(type) && !type_array_has_variance(type))
@@ -1889,8 +2007,7 @@ static int write_conformant_array_pointer_descriptions(
             unsigned int offset_of_array_pointer_mem = offset_in_memory;
             unsigned int offset_of_array_pointer_buf = offset_in_memory;
 
-            align = 0;
-            increment_size = type_memsize(type_array_get_element(type), &align);
+            increment_size = type_memsize(type_array_get_element(type));
 
             if (increment_size > USHRT_MAX)
                 error("array size of %u bytes is too large\n", increment_size);
@@ -1919,7 +2036,6 @@ static int write_varying_array_pointer_descriptions(
     unsigned int *offset_in_memory, unsigned int *offset_in_buffer,
     unsigned int *typestring_offset)
 {
-    unsigned int align;
     int pointer_count = 0;
 
     if (is_array(type) && type_array_has_variance(type))
@@ -1933,8 +2049,7 @@ static int write_varying_array_pointer_descriptions(
         {
             unsigned int increment_size;
 
-            align = 0;
-            increment_size = type_memsize(type_array_get_element(type), &align);
+            increment_size = type_memsize(type_array_get_element(type));
 
             if (increment_size > USHRT_MAX)
                 error("array size of %u bytes is too large\n", increment_size);
@@ -1958,7 +2073,7 @@ static int write_varying_array_pointer_descriptions(
         {
             if (offset_in_memory && offset_in_buffer)
             {
-                unsigned int padding;
+                unsigned int align = 0, padding;
 
                 if (is_array(v->type) && type_array_has_variance(v->type))
                 {
@@ -1967,8 +2082,7 @@ static int write_varying_array_pointer_descriptions(
                     *offset_in_buffer += 8;
                 }
 
-                align = 0;
-                type_memsize(v->type, &align);
+                type_memsize_and_alignment(v->type, &align);
                 padding = ROUNDING(*offset_in_memory, align);
                 *offset_in_memory += padding;
                 *offset_in_buffer += padding;
@@ -1982,9 +2096,7 @@ static int write_varying_array_pointer_descriptions(
     {
         if (offset_in_memory && offset_in_buffer)
         {
-            unsigned int memsize;
-            align = 0;
-            memsize = type_memsize(type, &align);
+            unsigned int memsize = type_memsize(type);
             *offset_in_memory += memsize;
             /* increment these separately as in the case of conformant (varying)
              * structures these start at different values */
@@ -2028,12 +2140,9 @@ static void write_pointer_description(FILE *file, type_t *type,
     else if (type_get_type(type) == TYPE_STRUCT &&
              get_struct_fc(type) == RPC_FC_CPSTRUCT)
     {
-        unsigned int align = 0;
         type_t *carray = find_array_or_string_in_struct(type)->type;
-        write_conformant_array_pointer_descriptions(
-            file, NULL, carray,
-            type_memsize(type, &align),
-            typestring_offset);
+        write_conformant_array_pointer_descriptions( file, NULL, carray,
+                                                     type_memsize(type), typestring_offset);
     }
 
     /* pass 4: search for pointers in varying arrays */
@@ -2119,8 +2228,6 @@ static unsigned int write_string_tfs(FILE *file, const attr_list_t *attrs,
     }
     else if (is_conformant_array(type))
     {
-        unsigned int align = 0;
-
         if (rtype == RPC_FC_WCHAR)
             WRITE_FCTYPE(file, FC_C_WSTRING, *typestring_offset);
         else
@@ -2131,7 +2238,7 @@ static unsigned int write_string_tfs(FILE *file, const attr_list_t *attrs,
         *typestring_offset += write_conf_or_var_desc(
             file, current_structure,
             (!type_array_is_decl_as_ptr(type) && current_structure
-             ? type_memsize(current_structure, &align)
+             ? type_memsize(current_structure)
              : 0),
             type, type_array_get_conformance(type));
 
@@ -2155,14 +2262,14 @@ static unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t
 {
     const expr_t *length_is = type_array_get_variance(type);
     const expr_t *size_is = type_array_get_conformance(type);
-    unsigned int align = 0;
+    unsigned int align;
     unsigned int size;
     unsigned int start_offset;
     unsigned char fc;
     int pointer_type = get_attrv(attrs, ATTR_POINTERTYPE);
     unsigned int baseoff
         = !type_array_is_decl_as_ptr(type) && current_structure
-        ? type_memsize(current_structure, &align)
+        ? type_memsize(current_structure)
         : 0;
 
     if (!pointer_type)
@@ -2170,8 +2277,8 @@ static unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t
 
     write_embedded_types(file, attrs, type_array_get_element(type), name, FALSE, typestring_offset);
 
-    align = 0;
-    size = type_memsize((is_conformant_array(type) ? type_array_get_element(type) : type), &align);
+    size = type_memsize(is_conformant_array(type) ? type_array_get_element(type) : type);
+    align = type_buffer_alignment(is_conformant_array(type) ? type_array_get_element(type) : type);
     fc = get_array_fc(type);
 
     start_offset = *typestring_offset;
@@ -2202,8 +2309,7 @@ static unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t
 
         if (fc == RPC_FC_SMVARRAY || fc == RPC_FC_LGVARRAY)
         {
-            unsigned int elalign = 0;
-            unsigned int elsize = type_memsize(type_array_get_element(type), &elalign);
+            unsigned int elsize = type_memsize(type_array_get_element(type));
             unsigned int dim = type_array_get_dim(type);
 
             if (fc == RPC_FC_LGVARRAY)
@@ -2294,7 +2400,7 @@ static void write_struct_members(FILE *file, const type_t *type,
     {
         type_t *ft = field->type;
         unsigned int align = 0;
-        unsigned int size = type_memsize(ft, &align);
+        unsigned int size = type_memsize_and_alignment(ft, &align);
         align = clamp_align(align);
         if (salign < align) salign = align;
 
@@ -2346,8 +2452,7 @@ static unsigned int write_struct_tfs(FILE *file, type_t *type,
     unsigned int total_size;
     const var_t *array;
     unsigned int start_offset;
-    unsigned int array_offset;
-    unsigned int align = 0;
+    unsigned int align;
     unsigned int corroff;
     var_t *f;
     unsigned char fc = get_struct_fc(type);
@@ -2356,7 +2461,8 @@ static unsigned int write_struct_tfs(FILE *file, type_t *type,
     guard_rec(type);
     current_structure = type;
 
-    total_size = type_memsize(type, &align);
+    total_size = type_memsize(type);
+    align = type_buffer_alignment(type);
     if (total_size > USHRT_MAX)
         error("structure size for %s exceeds %d bytes by %d bytes\n",
               name, USHRT_MAX, total_size - USHRT_MAX);
@@ -2366,10 +2472,12 @@ static unsigned int write_struct_tfs(FILE *file, type_t *type,
 
     array = find_array_or_string_in_struct(type);
     if (array && !processed(array->type))
-        array_offset
-            = is_string_type(array->attrs, array->type)
-            ? write_string_tfs(file, array->attrs, array->type, FALSE, array->name, tfsoff)
-            : write_array_tfs(file, array->attrs, array->type, array->name, tfsoff);
+    {
+        if(is_string_type(array->attrs, array->type))
+            write_string_tfs(file, array->attrs, array->type, FALSE, array->name, tfsoff);
+        else
+            write_array_tfs(file, array->attrs, array->type, array->name, tfsoff);
+    }
 
     corroff = *tfsoff;
     write_descriptors(file, type, tfsoff);
@@ -2501,7 +2609,6 @@ static void write_branch_type(FILE *file, const type_t *t, unsigned int *tfsoff)
 
 static unsigned int write_union_tfs(FILE *file, type_t *type, unsigned int *tfsoff)
 {
-    unsigned int align;
     unsigned int start_offset;
     unsigned int size;
     var_list_t *fields;
@@ -2512,8 +2619,7 @@ static unsigned int write_union_tfs(FILE *file, type_t *type, unsigned int *tfso
 
     guard_rec(type);
 
-    align = 0;
-    size = type_memsize(type, &align);
+    size = type_memsize(type);
 
     fields = type_union_get_cases(type);
 
@@ -2626,7 +2732,7 @@ static unsigned int write_union_tfs(FILE *file, type_t *type, unsigned int *tfso
             /* MIDL doesn't check for duplicate cases, even though that seems
                like a reasonable thing to do, it just dumps them to the TFS
                like we're going to do here.  */
-            print_file(file, 2, "NdrFcLong(0x%lx),\t/* %ld */\n", c->cval, c->cval);
+            print_file(file, 2, "NdrFcLong(0x%x),\t/* %d */\n", c->cval, c->cval);
             *tfsoff += 4;
             write_branch_type(file, ft, tfsoff);
         }
@@ -2764,8 +2870,8 @@ static unsigned int write_range_tfs(FILE *file, const attr_list_t *attrs,
     print_file(file, 0, "/* %u */\n", *typeformat_offset);
     print_file(file, 2, "0x%x,\t/* FC_RANGE */\n", RPC_FC_RANGE);
     print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc));
-    print_file(file, 2, "NdrFcLong(0x%lx),\t/* %lu */\n", range_min->cval, range_min->cval);
-    print_file(file, 2, "NdrFcLong(0x%lx),\t/* %lu */\n", range_max->cval, range_max->cval);
+    print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", range_min->cval, range_min->cval);
+    print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", range_max->cval, range_max->cval);
     *typeformat_offset += 10;
 
     return start_offset;
@@ -2916,7 +3022,6 @@ static unsigned int process_tfs_stmts(FILE *file, const statement_list_t *stmts,
                                   file);
                 }
 
-                current_func = func;
                 if (type_get_function_args(func->type))
                     LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )
                         update_tfsoff(
@@ -3069,9 +3174,10 @@ static unsigned int get_required_buffer_size_type(
         break;
 
     case TGT_ARRAY:
-        /* FIXME: depends on pointer type */
-        return type_array_get_dim(type) *
-            get_required_buffer_size_type(type_array_get_element(type), name, NULL, FALSE, alignment);
+        if (get_pointer_fc(type, attrs, toplevel_param) == RPC_FC_RP)
+            return type_array_get_dim(type) *
+                get_required_buffer_size_type(type_array_get_element(type), name,
+                                              NULL, FALSE, alignment);
 
     default:
         break;
@@ -3174,7 +3280,6 @@ void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix,
                           const char *varname)
 {
     type_t *type = var->type;
-    unsigned int size;
     unsigned int alignment = 0;
 
     /* no work to do for other phases, buffer sizing is done elsewhere */
@@ -3212,14 +3317,12 @@ void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix,
         case RPC_FC_CHAR:
         case RPC_FC_SMALL:
         case RPC_FC_USMALL:
-            size = 1;
             alignment = 1;
             break;
 
         case RPC_FC_WCHAR:
         case RPC_FC_USHORT:
         case RPC_FC_SHORT:
-            size = 2;
             alignment = 2;
             break;
 
@@ -3230,13 +3333,11 @@ void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix,
         /* pointer_size must be 4 if we got here in these two cases */
         case RPC_FC_INT3264:
         case RPC_FC_UINT3264:
-            size = 4;
             alignment = 4;
             break;
 
         case RPC_FC_HYPER:
         case RPC_FC_DOUBLE:
-            size = 8;
             alignment = 8;
             break;
 
@@ -3248,7 +3349,6 @@ void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix,
         default:
             error("print_phase_basetype: Unsupported type: %s (0x%02x, ptr_level: 0)\n",
                   var->name, get_basic_fc(ref));
-            size = 0;
         }
 
         if (phase == PHASE_MARSHAL && alignment > 1)
@@ -3304,7 +3404,8 @@ expr_t *get_size_is_expr(const type_t *t, const char *name)
     expr_t *x = NULL;
 
     for ( ; is_array(t); t = type_array_get_element(t))
-        if (type_array_has_conformance(t))
+        if (type_array_has_conformance(t) &&
+            type_array_get_conformance(t)->type != EXPR_VOID)
         {
             if (!x)
                 x = type_array_get_conformance(t);
@@ -3329,7 +3430,8 @@ static void write_parameter_conf_or_var_exprs(FILE *file, int indent, const char
         case TGT_ARRAY:
             if (is_conformance_needed_for_phase(phase))
             {
-                if (type_array_has_conformance(type))
+                if (type_array_has_conformance(type) &&
+                    type_array_get_conformance(type)->type != EXPR_VOID)
                 {
                     print_file(file, indent, "__frame->_StubMsg.MaxCount = (ULONG_PTR)");
                     write_expr(file, type_array_get_conformance(type), 1, 1, NULL, NULL, local_var_prefix);
@@ -3573,9 +3675,9 @@ static void write_remoting_arg(FILE *file, int indent, const var_t *func, const
 
             print_file(file, indent, "if ((%s%s < (", local_var_prefix, var->name);
             write_type_decl(file, var->type, NULL);
-            fprintf(file, ")0x%lx) || (%s%s > (", range_min->cval, local_var_prefix, var->name);
+            fprintf(file, ")0x%x) || (%s%s > (", range_min->cval, local_var_prefix, var->name);
             write_type_decl(file, var->type, NULL);
-            fprintf(file, ")0x%lx))\n", range_max->cval);
+            fprintf(file, ")0x%x))\n", range_max->cval);
             print_file(file, indent, "{\n");
             print_file(file, indent+1, "RpcRaiseException(RPC_S_INVALID_BOUND);\n");
             print_file(file, indent, "}\n");
@@ -3899,33 +4001,36 @@ void assign_stub_out_args( FILE *file, int indent, const var_t *func, const char
         {
             print_file(file, indent, "%s%s", local_var_prefix, var->name);
 
-            if (is_context_handle(var->type))
+            switch (typegen_detect_type(var->type, var->attrs, TDT_IGNORE_STRINGS))
             {
+            case TGT_CTXT_HANDLE_POINTER:
                 fprintf(file, " = NdrContextHandleInitialize(\n");
                 print_file(file, indent + 1, "&__frame->_StubMsg,\n");
                 print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n",
                            var->type->typestring_offset);
-            }
-            else if (is_array(var->type) &&
-                     type_array_has_conformance(var->type))
-            {
-                unsigned int size, align = 0;
-                type_t *type = var->type;
-
-                fprintf(file, " = NdrAllocate(&__frame->_StubMsg, ");
-                for ( ;
-                     is_array(type) && type_array_has_conformance(type);
-                     type = type_array_get_element(type))
+                break;
+            case TGT_ARRAY:
+                if (type_array_has_conformance(var->type))
                 {
-                    write_expr(file, type_array_get_conformance(type), TRUE,
-                               TRUE, NULL, NULL, local_var_prefix);
-                    fprintf(file, " * ");
+                    unsigned int size;
+                    type_t *type = var->type;
+
+                    fprintf(file, " = NdrAllocate(&__frame->_StubMsg, ");
+                    for ( ;
+                         is_array(type) && type_array_has_conformance(type);
+                         type = type_array_get_element(type))
+                    {
+                        write_expr(file, type_array_get_conformance(type), TRUE,
+                                   TRUE, NULL, NULL, local_var_prefix);
+                        fprintf(file, " * ");
+                    }
+                    size = type_memsize(type);
+                    fprintf(file, "%u);\n", size);
                 }
-                size = type_memsize(type, &align);
-                fprintf(file, "%u);\n", size);
-            }
-            else
-            {
+                else
+                    fprintf(file, " = &%s_W%u;\n", local_var_prefix, i++);
+                break;
+            case TGT_POINTER:
                 fprintf(file, " = &%s_W%u;\n", local_var_prefix, i);
                 switch (typegen_detect_type(type_pointer_get_ref(var->type), var->attrs, TDT_IGNORE_STRINGS))
                 {
@@ -3948,6 +4053,9 @@ void assign_stub_out_args( FILE *file, int indent, const var_t *func, const char
                     break;
                 }
                 i++;
+                break;
+            default:
+                break;
             }
 
             sep = 1;
index 242b40d..57a914a 100644 (file)
@@ -80,7 +80,7 @@ void write_expr_eval_routine_list(FILE *file, const char *iface);
 void write_user_quad_list(FILE *file);
 void write_endpoints( FILE *f, const char *prefix, const str_list_t *list );
 void write_exceptions( FILE *file );
-unsigned int type_memsize(const type_t *t, unsigned int *align);
+unsigned int type_memsize(const type_t *t);
 int decl_indirect(const type_t *t);
 void write_parameters_init(FILE *file, int indent, const var_t *func, const char *local_var_prefix);
 void print(FILE *file, int indent, const char *format, va_list ap);
index ce099c8..9c24f15 100644 (file)
@@ -35,7 +35,8 @@
 #define NONAMELESSUNION
 #define NONAMELESSSTRUCT
 
-#include <host/typedefs.h>
+#include "windef.h"
+#include "winbase.h"
 
 #include "widl.h"
 #include "utils.h"
index 01c2c64..79b86b9 100644 (file)
@@ -302,7 +302,7 @@ typedef struct {
  *
  */
 
-#include <host/pshpack1.h>
+#include "pshpack1.h"
 
 typedef struct {
 /*00*/ DWORD SLTG_magic;       /* 0x47544c53  == "SLTG" */
@@ -599,7 +599,7 @@ WORD offset from start of block to SAFEARRAY
 WORD typeofarray
 */
 
-#include <host/poppack.h>
+#include "poppack.h"
 
 /*---------------------------END--------------------------------------------*/
 #endif
index a60e757..a9e71be 100644 (file)
@@ -386,7 +386,7 @@ void type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stm
     compute_method_indexes(iface);
 }
 
-void type_dispinterface_define(type_t *iface, var_list_t *props, func_list_t *methods)
+void type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods)
 {
     iface->details.iface = xmalloc(sizeof(*iface->details.iface));
     iface->details.iface->disp_props = props;
index 591406b..8b19739 100644 (file)
@@ -41,7 +41,7 @@ type_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t
 type_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *union_field, var_list_t *cases);
 type_t *type_new_bitfield(type_t *field_type, const expr_t *bits);
 void type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stmts);
-void type_dispinterface_define(type_t *iface, var_list_t *props, func_list_t *methods);
+void type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods);
 void type_dispinterface_define_from_iface(type_t *dispiface, type_t *iface);
 void type_module_define(type_t *module, statement_list_t *stmts);
 type_t *type_coclass_define(type_t *coclass, ifref_list_t *ifaces);
index 8c76c24..cc25201 100644 (file)
@@ -248,6 +248,7 @@ static void set_target( const char *target )
         { "i586",    SYS_WIN32 },
         { "i686",    SYS_WIN32 },
         { "i786",    SYS_WIN32 },
+        { "amd64",   SYS_WIN64 },
         { "x86_64",  SYS_WIN64 },
         { "sparc",   SYS_WIN32 },
         { "alpha",   SYS_WIN32 },
@@ -701,7 +702,22 @@ int main(int argc,char *argv[])
 
     if (!preprocess_only)
     {
-        ret = wpp_parse_temp( input_name, header_name, &temp_name );
+        FILE *output;
+        int fd;
+        char *name = xmalloc( strlen(header_name) + 8 );
+
+        strcpy( name, header_name );
+        strcat( name, ".XXXXXX" );
+
+        if ((fd = mkstemps( name, 0 )) == -1)
+            error("Could not generate a temp name from %s\n", name);
+
+        temp_name = name;
+        if (!(output = fdopen(fd, "wt")))
+            error("Could not open fd %s for writing\n", name);
+
+        ret = wpp_parse( input_name, output );
+        fclose( output );
     }
     else
     {
index 6874d2a..7917508 100644 (file)
 #ifndef __WIDL_WIDLTYPES_H
 #define __WIDL_WIDLTYPES_H
 
-#define S_OK           0
-#define S_FALSE        1
-#define E_OUTOFMEMORY  ((HRESULT)0x8007000EL)
-#define TYPE_E_IOERROR ((HRESULT)0x80028CA2L)
-
-#define max(a, b) ((a) > (b) ? a : b)
-
 #include <stdarg.h>
 #include <assert.h>
 #include "guiddef.h"
@@ -39,9 +32,7 @@
 typedef GUID UUID;
 #endif
 
-#ifndef TRUE
 #define TRUE 1
-#endif
 #define FALSE 0
 
 typedef struct _loc_info_t loc_info_t;
@@ -50,7 +41,6 @@ typedef struct _expr_t expr_t;
 typedef struct _type_t type_t;
 typedef struct _var_t var_t;
 typedef struct _declarator_t declarator_t;
-typedef struct _func_t func_t;
 typedef struct _ifref_t ifref_t;
 typedef struct _typelib_entry_t typelib_entry_t;
 typedef struct _importlib_t importlib_t;
@@ -63,7 +53,6 @@ typedef struct _statement_t statement_t;
 
 typedef struct list attr_list_t;
 typedef struct list str_list_t;
-typedef struct list func_list_t;
 typedef struct list expr_list_t;
 typedef struct list var_list_t;
 typedef struct list declarator_list_t;
@@ -266,7 +255,7 @@ struct str_list_entry_t
 struct _attr_t {
   enum attr_type type;
   union {
-    unsigned long ival;
+    unsigned int ival;
     void *pval;
   } u;
   /* parser-internal */
@@ -277,7 +266,7 @@ struct _expr_t {
   enum expr_type type;
   const expr_t *ref;
   union {
-    long lval;
+    int lval;
     double dval;
     const char *sval;
     const expr_t *ext;
@@ -285,7 +274,7 @@ struct _expr_t {
   } u;
   const expr_t *ext2;
   int is_const;
-  long cval;
+  int cval;
   /* parser-internal */
   struct list entry;
 };
@@ -310,7 +299,7 @@ struct func_details
 struct iface_details
 {
   statement_list_t *stmts;
-  func_list_t *disp_methods;
+  var_list_t *disp_methods;
   var_list_t *disp_props;
   struct _type_t *inherit;
 };
@@ -318,7 +307,6 @@ struct iface_details
 struct module_details
 {
   statement_list_t *stmts;
-  func_list_t *funcs;
 };
 
 struct array_details
@@ -427,13 +415,6 @@ struct _declarator_t {
   struct list entry;
 };
 
-struct _func_t {
-  var_t *def;
-
-  /* parser-internal */
-  struct list entry;
-};
-
 struct _ifref_t {
   type_t *iface;
   attr_list_t *attrs;
index 703b583..1ac34d0 100644 (file)
 #define NONAMELESSUNION
 #define NONAMELESSSTRUCT
 
-#include <host/typedefs.h>
-#include <host/nls.h>
+#include "winerror.h"
+#include "windef.h"
+#include "winbase.h"
+#include "winnls.h"
 
 #include "widl.h"
 #include "typelib.h"
@@ -1155,7 +1157,7 @@ static int encode_var(
     return 0;
 }
 
-static unsigned long get_ulong_val(unsigned long val, int vt)
+static unsigned int get_ulong_val(unsigned int val, int vt)
 {
     switch(vt) {
     case VT_I2:
@@ -1186,7 +1188,7 @@ static void write_value(msft_typelib_t* typelib, int *out, int vt, const void *v
     case VT_HRESULT:
     case VT_PTR:
       {
-        const unsigned long lv = get_ulong_val(*(const unsigned long*)value, vt);
+        const unsigned int lv = get_ulong_val(*(const unsigned int *)value, vt);
         if((lv & 0x3ffffff) == lv) {
             *out = 0x80000000;
             *out |= vt << 26;
@@ -1224,7 +1226,7 @@ static void write_value(msft_typelib_t* typelib, int *out, int vt, const void *v
 }
 
 static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
-                            int vt, void *value, int *offset)
+                            int vt, int value, int *offset)
 {
     MSFT_GuidEntry guidentry;
     int guidoffset;
@@ -1238,7 +1240,7 @@ static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
     guidentry.next_hash = -1;
 
     guidoffset = ctl2_alloc_guid(typelib, &guidentry);
-    write_value(typelib, &data_out, vt, value);
+    write_value(typelib, &data_out, vt, &value);
 
     custoffset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATAGUID, 12, 0);
 
@@ -1482,7 +1484,7 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
                 }
                 else
                 {
-                  chat("default value %ld\n", expr->cval);
+                  chat("default value %d\n", expr->cval);
                   write_value(typeinfo->typelib, defaultdata, vt, &expr->cval);
                 }
                 break;
@@ -1948,7 +1950,7 @@ static void add_dispatch(msft_typelib_t *typelib)
 static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface)
 {
     int idx = 0;
-    const func_t *func;
+    var_t *func;
     var_t *var;
     msft_typeinfo_t *msft_typeinfo;
 
@@ -1968,7 +1970,7 @@ static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinte
 
     /* count the no of methods, as the variable indices come after the funcs */
     if (dispinterface->details.iface->disp_methods)
-        LIST_FOR_EACH_ENTRY( func, dispinterface->details.iface->disp_methods, const func_t, entry )
+        LIST_FOR_EACH_ENTRY( func, dispinterface->details.iface->disp_methods, var_t, entry )
             idx++;
 
     if (type_dispiface_get_props(dispinterface))
@@ -1978,8 +1980,8 @@ static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinte
     if (type_dispiface_get_methods(dispinterface))
     {
         idx = 0;
-        LIST_FOR_EACH_ENTRY( func, type_dispiface_get_methods(dispinterface), const func_t, entry )
-            if(add_func_desc(msft_typeinfo, func->def, idx) == S_OK)
+        LIST_FOR_EACH_ENTRY( func, type_dispiface_get_methods(dispinterface), var_t, entry )
+            if(add_func_desc(msft_typeinfo, func, idx) == S_OK)
                 idx++;
     }
 }
@@ -2597,8 +2599,8 @@ int create_msft_typelib(typelib_t *typelib)
        and midl's version number */
     time_override = getenv( "WIDL_TIME_OVERRIDE");
     cur_time = time_override ? atol( time_override) : time(NULL);
-    set_custdata(msft, &midl_time_guid, VT_UI4, &cur_time, &msft->typelib_header.CustomDataOffset);
-    set_custdata(msft, &midl_version_guid, VT_UI4, &version, &msft->typelib_header.CustomDataOffset);
+    set_custdata(msft, &midl_time_guid, VT_UI4, cur_time, &msft->typelib_header.CustomDataOffset);
+    set_custdata(msft, &midl_version_guid, VT_UI4, version, &msft->typelib_header.CustomDataOffset);
 
     if (typelib->stmts)
         LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry )