Sync to Wine-0.9.58
authorEric Kohl <eric.kohl@reactos.org>
Sun, 21 Sep 2008 21:18:42 +0000 (21:18 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 21 Sep 2008 21:18:42 +0000 (21:18 +0000)
- Rob Shearman <rob@codeweavers.com> Thu, 14 Feb 2008
widl: Remove unused headers.

- Rob Shearman <rob@codeweavers.com> Thu, 14 Feb 2008
widl: Guard the inclusion of unistd.h.

- Rob Shearman <rob@codeweavers.com> Tue, 19 Feb 2008
Add the nounistd option to all lex source files.

- Alexandre Julliard <julliard@winehq.org> Tue, 19 Feb 2008
Avoid the nounistd option that doesn't exist on older flex, define YY_NO_UNISTD_H...

- Dan Hipschman <dsh@linux.ucla.edu> Thu, 21 Feb 2008
widl: Allow is_string_type to work for typedef'd types.

- Gerald Pfeifer <gerald@pfeifer.com> Fri, 22 Feb 2008
widl: Include <unistd.h> for prototype of unlink().

- Dan Hipschman <dsh@linux.ucla.edu> Wed, 19 Mar 2008
widl: Ignore libraries in imported IDL files.

- Dan Hipschman <dsh@linux.ucla.edu> Thu, 20 Mar 2008
widl: Make structures with FC_ENUM16 fields complex.

svn path=/trunk/; revision=36394

14 files changed:
reactos/media/doc/README.WINE
reactos/tools/widl/client.c
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.y
reactos/tools/widl/parser.yy.c
reactos/tools/widl/proxy.c
reactos/tools/widl/server.c
reactos/tools/widl/typegen.c
reactos/tools/widl/typelib.c
reactos/tools/widl/widl.c
reactos/tools/widl/write_msft.c

index 45535be..693a923 100644 (file)
@@ -26,7 +26,7 @@ reactos/tools/wpp                 # Synced to Wine-0_9_5
 reactos/tools/winebuild           # Synced to Wine-20071217
 reactos/tools/wmc                 # Synced to Wine-20071201
 reactos/tools/wrc                 # Synced to Wine-0_9_53
-reactos/tools/widl                # Synced to Wine-0_9_55
+reactos/tools/widl                # Synced to Wine-0_9_58
 
 The following libraries are shared with Wine.
 
index 2eaa43c..7747f11 100644 (file)
  
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
 #include <string.h>
-#include <assert.h>
 #include <ctype.h>
-#include <signal.h>
 
 #include "widl.h"
 #include "utils.h"
index 0f697b8..0a28fd9 100644 (file)
@@ -27,9 +27,7 @@
 # include <unistd.h>
 #endif
 #include <string.h>
-#include <assert.h>
 #include <ctype.h>
-#include <signal.h>
 
 #include "widl.h"
 #include "utils.h"
index 41784a0..656d4b2 100644 (file)
@@ -78,7 +78,8 @@ static inline int last_array(const type_t *type)
 
 static inline int is_string_type(const attr_list_t *attrs, const type_t *type)
 {
-    return is_attr(attrs, ATTR_STRING) && (last_ptr(type) || last_array(type));
+    return ((is_attr(attrs, ATTR_STRING) || is_attr(type->attrs, ATTR_STRING))
+            && (last_ptr(type) || last_array(type)));
 }
 
 static inline int is_context_handle(const type_t *type)
index 2497a5e..94eec0d 100644 (file)
@@ -44,8 +44,11 @@ double       [0-9]+\.[0-9]+([eE][+-]?[0-9]+)*
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>
+
 #ifdef HAVE_UNISTD_H
-# include <unistd.h>
+#include <unistd.h>
+#else
+#define YY_NO_UNISTD_H
 #endif
 
 #include "widl.h"
index 9cf10d2..1810611 100644 (file)
@@ -683,14 +683,14 @@ union yyalloc
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1019
+#define YYLAST   992
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  156
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  76
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  272
+#define YYNRULES  273
 /* YYNRULES -- Number of states. */
 #define YYNSTATES  500
 
@@ -753,32 +753,32 @@ static const unsigned short int yyprhs[] =
 {
        0,     0,     3,     5,     6,     9,    12,    16,    19,    22,
       25,    28,    29,    32,    35,    39,    42,    45,    48,    51,
-      52,    56,    59,    61,    64,    66,    69,    72,    74,    77,
-      80,    83,    88,    92,    96,   101,   104,   108,   112,   113,
-     115,   117,   119,   123,   125,   130,   134,   141,   147,   148,
-     152,   156,   158,   162,   167,   168,   170,   174,   176,   180,
-     185,   187,   191,   192,   194,   196,   198,   200,   202,   207,
-     212,   214,   216,   218,   220,   222,   224,   229,   234,   236,
-     238,   243,   245,   250,   255,   260,   262,   264,   269,   274,
-     279,   284,   289,   291,   296,   298,   303,   305,   311,   313,
-     315,   320,   322,   324,   326,   328,   330,   332,   334,   336,
-     338,   343,   345,   347,   349,   351,   358,   360,   362,   364,
-     366,   371,   373,   375,   377,   382,   387,   392,   397,   399,
-     401,   406,   411,   413,   415,   417,   418,   420,   421,   424,
-     429,   433,   439,   440,   443,   445,   447,   451,   455,   457,
-     463,   465,   469,   470,   472,   474,   476,   478,   480,   482,
-     484,   490,   494,   498,   502,   506,   510,   514,   518,   522,
-     525,   528,   531,   534,   539,   544,   548,   550,   554,   556,
-     561,   562,   565,   568,   572,   575,   577,   582,   590,   591,
-     593,   594,   596,   598,   600,   602,   604,   606,   608,   611,
-     614,   616,   618,   620,   622,   624,   626,   628,   629,   631,
-     633,   636,   638,   641,   644,   646,   648,   651,   654,   657,
-     662,   663,   666,   669,   672,   675,   678,   681,   685,   688,
-     692,   698,   704,   705,   708,   711,   714,   717,   723,   731,
-     733,   736,   739,   742,   745,   748,   753,   756,   759,   761,
-     763,   767,   769,   773,   775,   777,   779,   785,   787,   789,
-     791,   794,   796,   799,   801,   804,   806,   809,   814,   819,
-     825,   836,   838
+      54,    55,    59,    62,    64,    67,    69,    72,    75,    77,
+      80,    83,    86,    91,    95,    99,   104,   107,   111,   115,
+     116,   118,   120,   122,   126,   128,   133,   137,   144,   150,
+     151,   155,   159,   161,   165,   170,   171,   173,   177,   179,
+     183,   188,   190,   194,   195,   197,   199,   201,   203,   205,
+     210,   215,   217,   219,   221,   223,   225,   227,   232,   237,
+     239,   241,   246,   248,   253,   258,   263,   265,   267,   272,
+     277,   282,   287,   292,   294,   299,   301,   306,   308,   314,
+     316,   318,   323,   325,   327,   329,   331,   333,   335,   337,
+     339,   341,   346,   348,   350,   352,   354,   361,   363,   365,
+     367,   369,   374,   376,   378,   380,   385,   390,   395,   400,
+     402,   404,   409,   414,   416,   418,   420,   421,   423,   424,
+     427,   432,   436,   442,   443,   446,   448,   450,   454,   458,
+     460,   466,   468,   472,   473,   475,   477,   479,   481,   483,
+     485,   487,   493,   497,   501,   505,   509,   513,   517,   521,
+     525,   528,   531,   534,   537,   542,   547,   551,   553,   557,
+     559,   564,   565,   568,   571,   575,   578,   580,   585,   593,
+     594,   596,   597,   599,   601,   603,   605,   607,   609,   611,
+     614,   617,   619,   621,   623,   625,   627,   629,   631,   632,
+     634,   636,   639,   641,   644,   647,   649,   651,   654,   657,
+     660,   665,   666,   669,   672,   675,   678,   681,   684,   688,
+     691,   695,   701,   707,   708,   711,   714,   717,   720,   726,
+     734,   736,   739,   742,   745,   748,   751,   756,   759,   762,
+     764,   766,   770,   772,   776,   778,   780,   782,   788,   790,
+     792,   794,   797,   799,   802,   804,   807,   809,   812,   817,
+     822,   828,   839,   841
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -789,119 +789,119 @@ static const short int yyrhs[] =
      222,    -1,   158,   168,    -1,   158,   161,    -1,    -1,   159,
      219,    -1,   159,   218,    -1,   159,   205,   147,    -1,   159,
      207,    -1,   159,   222,    -1,   159,   161,    -1,   159,   165,
-      -1,    -1,   160,   198,   147,    -1,   160,   161,    -1,   147,
-      -1,   184,   147,    -1,   162,    -1,   188,   147,    -1,   194,
-     147,    -1,   164,    -1,   227,   147,    -1,   229,   147,    -1,
-     230,   147,    -1,    37,   148,     8,   149,    -1,    69,     8,
-     147,    -1,   163,   159,    10,    -1,    70,   148,     8,   149,
-      -1,    79,     3,    -1,   176,   166,   150,    -1,   167,   159,
-     151,    -1,    -1,   171,    -1,   130,    -1,   172,    -1,   171,
-     133,   172,    -1,   170,    -1,   176,   228,   224,   173,    -1,
-     228,   224,   173,    -1,   176,   228,   224,   148,   169,   149,
-      -1,   228,   224,   148,   169,   149,    -1,    -1,   152,   174,
-     153,    -1,   152,   140,   153,    -1,   190,    -1,   174,   133,
-     191,    -1,   174,   153,   152,   191,    -1,    -1,   176,    -1,
-     152,   177,   153,    -1,   179,    -1,   177,   133,   179,    -1,
-     177,   153,   152,   179,    -1,     8,    -1,   178,   133,     8,
-      -1,    -1,    13,    -1,    15,    -1,    16,    -1,    18,    -1,
-      19,    -1,    24,   148,   201,   149,    -1,    26,   148,   192,
-     149,    -1,    33,    -1,    34,    -1,    35,    -1,    36,    -1,
-      38,    -1,    39,    -1,    40,   148,   193,   149,    -1,    40,
-     148,     8,   149,    -1,    41,    -1,    42,    -1,    44,   148,
-       8,   149,    -1,    46,    -1,    47,   148,   178,   149,    -1,
-      48,   148,     8,   149,    -1,    48,   148,   193,   149,    -1,
-      51,    -1,    55,    -1,    57,   148,   193,   149,    -1,    58,
-     148,     8,   149,    -1,    59,   148,     8,   149,    -1,    60,
-     148,   193,   149,    -1,    61,   148,     8,   149,    -1,    62,
-      -1,    64,   148,   193,   149,    -1,    65,    -1,    66,   148,
-     191,   149,    -1,    67,    -1,    68,   148,    56,     3,   149,
-      -1,    71,    -1,    73,    -1,    78,   148,   189,   149,    -1,
-      80,    -1,    84,    -1,    85,    -1,    86,    -1,    87,    -1,
-      88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,   148,
-     226,   149,    -1,    94,    -1,    95,    -1,    96,    -1,    98,
-      -1,    99,   148,   193,   133,   193,   149,    -1,   100,    -1,
-     102,    -1,   103,    -1,   104,    -1,   109,   148,   189,   149,
-      -1,   112,    -1,   114,    -1,   115,    -1,   118,   148,   191,
-     149,    -1,   119,   148,   228,   149,    -1,   120,   148,   228,
-     149,    -1,   126,   148,   180,   149,    -1,   127,    -1,   128,
-      -1,   129,   148,   231,   149,    -1,   132,   148,   228,   149,
-      -1,   226,    -1,     9,    -1,     8,    -1,    -1,   113,    -1,
-      -1,   182,   183,    -1,    26,   191,   135,   196,    -1,    38,
-     135,   196,    -1,    32,   228,   201,   154,   193,    -1,    -1,
-     186,   133,    -1,   186,    -1,   187,    -1,   186,   133,   187,
-      -1,   201,   154,   193,    -1,   201,    -1,    49,   200,   150,
-     185,   151,    -1,   190,    -1,   189,   133,   190,    -1,    -1,
-     191,    -1,     5,    -1,     6,    -1,     7,    -1,    53,    -1,
-     121,    -1,     3,    -1,   191,   134,   191,   135,   191,    -1,
-     191,   136,   191,    -1,   191,   137,   191,    -1,   191,   139,
-     191,    -1,   191,   138,   191,    -1,   191,   140,   191,    -1,
-     191,   141,   191,    -1,   191,    11,   191,    -1,   191,    12,
-     191,    -1,   142,   191,    -1,   138,   191,    -1,   137,   191,
-      -1,   140,   191,    -1,   148,   228,   149,   191,    -1,   110,
-     148,   228,   149,    -1,   148,   191,   149,    -1,   193,    -1,
-     192,   133,   193,    -1,   191,    -1,    52,    32,   228,   201,
-      -1,    -1,   195,   196,    -1,   197,   147,    -1,   175,   230,
-     147,    -1,   176,   147,    -1,   147,    -1,   175,   228,   224,
-     173,    -1,   175,   228,   181,   224,   148,   169,   149,    -1,
-      -1,   201,    -1,    -1,     3,    -1,     4,    -1,     3,    -1,
-       4,    -1,    22,    -1,   131,    -1,   204,    -1,   107,   204,
-      -1,   125,   204,    -1,   125,    -1,    54,    -1,   108,    -1,
-      45,    -1,    20,    -1,    50,    -1,    56,    -1,    -1,    74,
-      -1,    74,    -1,   106,   203,    -1,   111,    -1,    81,   203,
-      -1,    63,   203,    -1,    75,    -1,    28,    -1,    29,     3,
-      -1,    29,     4,    -1,   176,   205,    -1,   206,   150,   208,
-     151,    -1,    -1,   208,   209,    -1,   175,   219,    -1,    43,
-       3,    -1,    43,     4,    -1,   176,   210,    -1,    93,   135,
-      -1,   212,   197,   147,    -1,    82,   135,    -1,   213,   198,
-     147,    -1,   211,   150,   212,   213,   151,    -1,   211,   150,
-     216,   147,   151,    -1,    -1,   135,     4,    -1,    76,     3,
-      -1,    76,     4,    -1,   176,   216,    -1,   217,   215,   150,
-     160,   151,    -1,   217,   135,     3,   150,   164,   160,   151,
-      -1,   214,    -1,   216,   147,    -1,   210,   147,    -1,    83,
-       3,    -1,    83,     4,    -1,   176,   220,    -1,   221,   150,
-     160,   151,    -1,   140,   224,    -1,    32,   223,    -1,   201,
-      -1,   223,    -1,   148,   224,   149,    -1,   224,    -1,   225,
-     133,   224,    -1,   101,    -1,   124,    -1,    97,    -1,   116,
-     200,   150,   195,   151,    -1,   130,    -1,     4,    -1,   202,
-      -1,    32,   228,    -1,   188,    -1,    49,     3,    -1,   227,
-      -1,   116,     3,    -1,   230,    -1,   123,     3,    -1,   105,
-     148,   228,   149,    -1,   122,   175,   228,   225,    -1,   123,
-     200,   150,   195,   151,    -1,   123,   200,   117,   148,   197,
-     149,   199,   150,   182,   151,    -1,     5,    -1,     5,   155,
-       5,    -1
+      -1,   159,   168,    -1,    -1,   160,   198,   147,    -1,   160,
+     161,    -1,   147,    -1,   184,   147,    -1,   162,    -1,   188,
+     147,    -1,   194,   147,    -1,   164,    -1,   227,   147,    -1,
+     229,   147,    -1,   230,   147,    -1,    37,   148,     8,   149,
+      -1,    69,     8,   147,    -1,   163,   159,    10,    -1,    70,
+     148,     8,   149,    -1,    79,     3,    -1,   176,   166,   150,
+      -1,   167,   159,   151,    -1,    -1,   171,    -1,   130,    -1,
+     172,    -1,   171,   133,   172,    -1,   170,    -1,   176,   228,
+     224,   173,    -1,   228,   224,   173,    -1,   176,   228,   224,
+     148,   169,   149,    -1,   228,   224,   148,   169,   149,    -1,
+      -1,   152,   174,   153,    -1,   152,   140,   153,    -1,   190,
+      -1,   174,   133,   191,    -1,   174,   153,   152,   191,    -1,
+      -1,   176,    -1,   152,   177,   153,    -1,   179,    -1,   177,
+     133,   179,    -1,   177,   153,   152,   179,    -1,     8,    -1,
+     178,   133,     8,    -1,    -1,    13,    -1,    15,    -1,    16,
+      -1,    18,    -1,    19,    -1,    24,   148,   201,   149,    -1,
+      26,   148,   192,   149,    -1,    33,    -1,    34,    -1,    35,
+      -1,    36,    -1,    38,    -1,    39,    -1,    40,   148,   193,
+     149,    -1,    40,   148,     8,   149,    -1,    41,    -1,    42,
+      -1,    44,   148,     8,   149,    -1,    46,    -1,    47,   148,
+     178,   149,    -1,    48,   148,     8,   149,    -1,    48,   148,
+     193,   149,    -1,    51,    -1,    55,    -1,    57,   148,   193,
+     149,    -1,    58,   148,     8,   149,    -1,    59,   148,     8,
+     149,    -1,    60,   148,   193,   149,    -1,    61,   148,     8,
+     149,    -1,    62,    -1,    64,   148,   193,   149,    -1,    65,
+      -1,    66,   148,   191,   149,    -1,    67,    -1,    68,   148,
+      56,     3,   149,    -1,    71,    -1,    73,    -1,    78,   148,
+     189,   149,    -1,    80,    -1,    84,    -1,    85,    -1,    86,
+      -1,    87,    -1,    88,    -1,    89,    -1,    90,    -1,    91,
+      -1,    92,   148,   226,   149,    -1,    94,    -1,    95,    -1,
+      96,    -1,    98,    -1,    99,   148,   193,   133,   193,   149,
+      -1,   100,    -1,   102,    -1,   103,    -1,   104,    -1,   109,
+     148,   189,   149,    -1,   112,    -1,   114,    -1,   115,    -1,
+     118,   148,   191,   149,    -1,   119,   148,   228,   149,    -1,
+     120,   148,   228,   149,    -1,   126,   148,   180,   149,    -1,
+     127,    -1,   128,    -1,   129,   148,   231,   149,    -1,   132,
+     148,   228,   149,    -1,   226,    -1,     9,    -1,     8,    -1,
+      -1,   113,    -1,    -1,   182,   183,    -1,    26,   191,   135,
+     196,    -1,    38,   135,   196,    -1,    32,   228,   201,   154,
+     193,    -1,    -1,   186,   133,    -1,   186,    -1,   187,    -1,
+     186,   133,   187,    -1,   201,   154,   193,    -1,   201,    -1,
+      49,   200,   150,   185,   151,    -1,   190,    -1,   189,   133,
+     190,    -1,    -1,   191,    -1,     5,    -1,     6,    -1,     7,
+      -1,    53,    -1,   121,    -1,     3,    -1,   191,   134,   191,
+     135,   191,    -1,   191,   136,   191,    -1,   191,   137,   191,
+      -1,   191,   139,   191,    -1,   191,   138,   191,    -1,   191,
+     140,   191,    -1,   191,   141,   191,    -1,   191,    11,   191,
+      -1,   191,    12,   191,    -1,   142,   191,    -1,   138,   191,
+      -1,   137,   191,    -1,   140,   191,    -1,   148,   228,   149,
+     191,    -1,   110,   148,   228,   149,    -1,   148,   191,   149,
+      -1,   193,    -1,   192,   133,   193,    -1,   191,    -1,    52,
+      32,   228,   201,    -1,    -1,   195,   196,    -1,   197,   147,
+      -1,   175,   230,   147,    -1,   176,   147,    -1,   147,    -1,
+     175,   228,   224,   173,    -1,   175,   228,   181,   224,   148,
+     169,   149,    -1,    -1,   201,    -1,    -1,     3,    -1,     4,
+      -1,     3,    -1,     4,    -1,    22,    -1,   131,    -1,   204,
+      -1,   107,   204,    -1,   125,   204,    -1,   125,    -1,    54,
+      -1,   108,    -1,    45,    -1,    20,    -1,    50,    -1,    56,
+      -1,    -1,    74,    -1,    74,    -1,   106,   203,    -1,   111,
+      -1,    81,   203,    -1,    63,   203,    -1,    75,    -1,    28,
+      -1,    29,     3,    -1,    29,     4,    -1,   176,   205,    -1,
+     206,   150,   208,   151,    -1,    -1,   208,   209,    -1,   175,
+     219,    -1,    43,     3,    -1,    43,     4,    -1,   176,   210,
+      -1,    93,   135,    -1,   212,   197,   147,    -1,    82,   135,
+      -1,   213,   198,   147,    -1,   211,   150,   212,   213,   151,
+      -1,   211,   150,   216,   147,   151,    -1,    -1,   135,     4,
+      -1,    76,     3,    -1,    76,     4,    -1,   176,   216,    -1,
+     217,   215,   150,   160,   151,    -1,   217,   135,     3,   150,
+     164,   160,   151,    -1,   214,    -1,   216,   147,    -1,   210,
+     147,    -1,    83,     3,    -1,    83,     4,    -1,   176,   220,
+      -1,   221,   150,   160,   151,    -1,   140,   224,    -1,    32,
+     223,    -1,   201,    -1,   223,    -1,   148,   224,   149,    -1,
+     224,    -1,   225,   133,   224,    -1,   101,    -1,   124,    -1,
+      97,    -1,   116,   200,   150,   195,   151,    -1,   130,    -1,
+       4,    -1,   202,    -1,    32,   228,    -1,   188,    -1,    49,
+       3,    -1,   227,    -1,   116,     3,    -1,   230,    -1,   123,
+       3,    -1,   105,   148,   228,   149,    -1,   122,   175,   228,
+     225,    -1,   123,   200,   150,   195,   151,    -1,   123,   200,
+     117,   148,   197,   149,   199,   150,   182,   151,    -1,     5,
+      -1,     5,   155,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
        0,   286,   286,   295,   296,   297,   298,   302,   307,   308,
-     309,   312,   313,   314,   315,   316,   320,   321,   322,   325,
-     326,   327,   330,   331,   332,   333,   338,   339,   340,   345,
-     346,   353,   355,   358,   361,   364,   366,   371,   374,   375,
-     378,   381,   382,   383,   387,   392,   396,   402,   409,   410,
-     411,   414,   415,   416,   419,   420,   424,   430,   431,   432,
-     435,   436,   439,   440,   441,   442,   443,   444,   445,   446,
+     309,   312,   313,   314,   315,   316,   320,   321,   322,   323,
+     326,   327,   328,   331,   332,   333,   334,   339,   340,   341,
+     346,   347,   354,   356,   359,   362,   365,   367,   372,   375,
+     376,   379,   382,   383,   384,   388,   393,   397,   403,   410,
+     411,   412,   415,   416,   417,   420,   421,   425,   431,   432,
+     433,   436,   437,   440,   441,   442,   443,   444,   445,   446,
      447,   448,   449,   450,   451,   452,   453,   454,   455,   456,
      457,   458,   459,   460,   461,   462,   463,   464,   465,   466,
      467,   468,   469,   470,   471,   472,   473,   474,   475,   476,
      477,   478,   479,   480,   481,   482,   483,   484,   485,   486,
-     487,   488,   489,   490,   491,   492,   495,   496,   497,   498,
+     487,   488,   489,   490,   491,   492,   493,   496,   497,   498,
      499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
-     509,   510,   511,   515,   516,   521,   522,   525,   526,   529,
-     533,   539,   545,   546,   547,   550,   554,   563,   567,   572,
-     581,   582,   595,   596,   599,   600,   601,   602,   603,   604,
+     509,   510,   511,   512,   516,   517,   522,   523,   526,   527,
+     530,   534,   540,   546,   547,   548,   551,   555,   564,   568,
+     573,   582,   583,   596,   597,   600,   601,   602,   603,   604,
      605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
-     615,   616,   617,   618,   619,   620,   623,   624,   627,   633,
-     638,   639,   642,   643,   644,   645,   648,   656,   668,   669,
-     672,   673,   674,   677,   679,   682,   683,   684,   685,   686,
-     702,   703,   704,   705,   706,   707,   708,   711,   712,   715,
-     716,   717,   718,   719,   720,   721,   724,   725,   731,   740,
-     746,   747,   751,   754,   755,   758,   770,   771,   774,   775,
-     778,   787,   796,   797,   800,   801,   804,   815,   827,   838,
-     842,   843,   846,   847,   850,   855,   861,   862,   865,   866,
-     867,   871,   872,   876,   877,   878,   881,   892,   893,   894,
-     895,   896,   897,   898,   899,   900,   901,   902,   905,   910,
-     915,   932,   933
+     615,   616,   617,   618,   619,   620,   621,   624,   625,   628,
+     634,   639,   640,   643,   644,   645,   646,   649,   657,   669,
+     670,   673,   674,   675,   678,   680,   683,   684,   685,   686,
+     687,   703,   704,   705,   706,   707,   708,   709,   712,   713,
+     716,   717,   718,   719,   720,   721,   722,   725,   726,   732,
+     741,   747,   748,   752,   755,   756,   759,   771,   772,   775,
+     776,   779,   788,   797,   798,   801,   802,   805,   816,   828,
+     839,   843,   844,   847,   848,   851,   856,   862,   863,   866,
+     867,   868,   872,   873,   877,   878,   879,   882,   893,   894,
+     895,   896,   897,   898,   899,   900,   901,   902,   903,   906,
+     911,   916,   933,   934
 };
 #endif
 
@@ -983,66 +983,66 @@ static const unsigned short int yytoknum[] =
 static const unsigned char yyr1[] =
 {
        0,   156,   157,   158,   158,   158,   158,   158,   158,   158,
-     158,   159,   159,   159,   159,   159,   159,   159,   159,   160,
-     160,   160,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   169,
-     170,   171,   171,   171,   172,   172,   172,   172,   173,   173,
-     173,   174,   174,   174,   175,   175,   176,   177,   177,   177,
-     178,   178,   179,   179,   179,   179,   179,   179,   179,   179,
+     158,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     160,   160,   160,   161,   161,   161,   161,   161,   161,   161,
+     161,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     169,   170,   171,   171,   171,   172,   172,   172,   172,   173,
+     173,   173,   174,   174,   174,   175,   175,   176,   177,   177,
+     177,   178,   178,   179,   179,   179,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
-     179,   179,   179,   180,   180,   181,   181,   182,   182,   183,
-     183,   184,   185,   185,   185,   186,   186,   187,   187,   188,
-     189,   189,   190,   190,   191,   191,   191,   191,   191,   191,
+     179,   179,   179,   179,   180,   180,   181,   181,   182,   182,
+     183,   183,   184,   185,   185,   185,   186,   186,   187,   187,
+     188,   189,   189,   190,   190,   191,   191,   191,   191,   191,
      191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
-     191,   191,   191,   191,   191,   191,   192,   192,   193,   194,
-     195,   195,   196,   196,   196,   196,   197,   198,   199,   199,
-     200,   200,   200,   201,   201,   202,   202,   202,   202,   202,
-     202,   202,   202,   202,   202,   202,   202,   203,   203,   204,
-     204,   204,   204,   204,   204,   204,   205,   205,   206,   207,
-     208,   208,   209,   210,   210,   211,   212,   212,   213,   213,
-     214,   214,   215,   215,   216,   216,   217,   218,   218,   218,
-     219,   219,   220,   220,   221,   222,   223,   223,   224,   224,
-     224,   225,   225,   226,   226,   226,   227,   228,   228,   228,
-     228,   228,   228,   228,   228,   228,   228,   228,   229,   230,
-     230,   231,   231
+     191,   191,   191,   191,   191,   191,   191,   192,   192,   193,
+     194,   195,   195,   196,   196,   196,   196,   197,   198,   199,
+     199,   200,   200,   200,   201,   201,   202,   202,   202,   202,
+     202,   202,   202,   202,   202,   202,   202,   202,   203,   203,
+     204,   204,   204,   204,   204,   204,   204,   205,   205,   206,
+     207,   208,   208,   209,   210,   210,   211,   212,   212,   213,
+     213,   214,   214,   215,   215,   216,   216,   217,   218,   218,
+     218,   219,   219,   220,   220,   221,   222,   223,   223,   224,
+     224,   224,   225,   225,   226,   226,   226,   227,   228,   228,
+     228,   228,   228,   228,   228,   228,   228,   228,   228,   229,
+     230,   230,   231,   231
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
        0,     2,     1,     0,     2,     2,     3,     2,     2,     2,
-       2,     0,     2,     2,     3,     2,     2,     2,     2,     0,
-       3,     2,     1,     2,     1,     2,     2,     1,     2,     2,
-       2,     4,     3,     3,     4,     2,     3,     3,     0,     1,
-       1,     1,     3,     1,     4,     3,     6,     5,     0,     3,
-       3,     1,     3,     4,     0,     1,     3,     1,     3,     4,
-       1,     3,     0,     1,     1,     1,     1,     1,     4,     4,
-       1,     1,     1,     1,     1,     1,     4,     4,     1,     1,
-       4,     1,     4,     4,     4,     1,     1,     4,     4,     4,
-       4,     4,     1,     4,     1,     4,     1,     5,     1,     1,
-       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     1,     1,     1,     6,     1,     1,     1,     1,
-       4,     1,     1,     1,     4,     4,     4,     4,     1,     1,
-       4,     4,     1,     1,     1,     0,     1,     0,     2,     4,
-       3,     5,     0,     2,     1,     1,     3,     3,     1,     5,
-       1,     3,     0,     1,     1,     1,     1,     1,     1,     1,
-       5,     3,     3,     3,     3,     3,     3,     3,     3,     2,
-       2,     2,     2,     4,     4,     3,     1,     3,     1,     4,
-       0,     2,     2,     3,     2,     1,     4,     7,     0,     1,
-       0,     1,     1,     1,     1,     1,     1,     1,     2,     2,
-       1,     1,     1,     1,     1,     1,     1,     0,     1,     1,
-       2,     1,     2,     2,     1,     1,     2,     2,     2,     4,
-       0,     2,     2,     2,     2,     2,     2,     3,     2,     3,
-       5,     5,     0,     2,     2,     2,     2,     5,     7,     1,
-       2,     2,     2,     2,     2,     4,     2,     2,     1,     1,
-       3,     1,     3,     1,     1,     1,     5,     1,     1,     1,
-       2,     1,     2,     1,     2,     1,     2,     4,     4,     5,
-      10,     1,     3
+       2,     0,     2,     2,     3,     2,     2,     2,     2,     2,
+       0,     3,     2,     1,     2,     1,     2,     2,     1,     2,
+       2,     2,     4,     3,     3,     4,     2,     3,     3,     0,
+       1,     1,     1,     3,     1,     4,     3,     6,     5,     0,
+       3,     3,     1,     3,     4,     0,     1,     3,     1,     3,
+       4,     1,     3,     0,     1,     1,     1,     1,     1,     4,
+       4,     1,     1,     1,     1,     1,     1,     4,     4,     1,
+       1,     4,     1,     4,     4,     4,     1,     1,     4,     4,
+       4,     4,     4,     1,     4,     1,     4,     1,     5,     1,
+       1,     4,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     4,     1,     1,     1,     1,     6,     1,     1,     1,
+       1,     4,     1,     1,     1,     4,     4,     4,     4,     1,
+       1,     4,     4,     1,     1,     1,     0,     1,     0,     2,
+       4,     3,     5,     0,     2,     1,     1,     3,     3,     1,
+       5,     1,     3,     0,     1,     1,     1,     1,     1,     1,
+       1,     5,     3,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     2,     2,     4,     4,     3,     1,     3,     1,
+       4,     0,     2,     2,     3,     2,     1,     4,     7,     0,
+       1,     0,     1,     1,     1,     1,     1,     1,     1,     2,
+       2,     1,     1,     1,     1,     1,     1,     1,     0,     1,
+       1,     2,     1,     2,     2,     1,     1,     2,     2,     2,
+       4,     0,     2,     2,     2,     2,     2,     2,     3,     2,
+       3,     5,     5,     0,     2,     2,     2,     2,     5,     7,
+       1,     2,     2,     2,     2,     2,     4,     2,     2,     1,
+       1,     3,     1,     3,     1,     1,     1,     5,     1,     1,
+       1,     2,     1,     2,     1,     2,     1,     2,     4,     4,
+       5,    10,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1050,66 +1050,66 @@ static const unsigned char yyr2[] =
    means the default is an error.  */
 static const unsigned short int yydefact[] =
 {
-       3,     0,     2,     1,     0,     0,     0,     0,   190,     0,
-       0,     0,   190,    54,   190,    22,    62,    10,    24,    11,
-      27,    11,     9,     0,     0,     0,     0,     0,     0,     7,
-       0,     0,   239,     0,   232,     5,     4,     0,     8,     0,
-       0,     0,   216,   217,   258,   204,   195,   215,     0,   203,
-     190,   205,   201,   206,   207,   209,   214,   207,     0,   207,
-       0,   202,   211,   190,   190,   200,   257,   196,   261,   259,
-     197,   263,     0,   265,     0,   223,   224,   191,   192,     0,
-       0,     0,   234,   235,     0,     0,    55,     0,    63,    64,
-      65,    66,    67,     0,     0,    70,    71,    72,    73,    74,
-      75,     0,    78,    79,     0,    81,     0,     0,    85,    86,
-       0,     0,     0,     0,     0,    92,     0,    94,     0,    96,
-       0,    98,    99,     0,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,     0,   111,   112,   113,   255,   114,     0,
-     116,   253,   117,   118,   119,     0,   121,   122,   123,     0,
-       0,     0,   254,     0,   128,   129,     0,     0,     0,    57,
-     132,     0,     0,     0,     0,     0,   218,   225,   236,   244,
-      23,    25,    26,     6,   220,   241,     0,   240,     0,     0,
-      19,    28,    29,    30,   260,   262,   208,   213,   212,     0,
-     210,   198,   264,   266,   199,   193,   194,     0,     0,   142,
-       0,    32,   180,     0,     0,   180,     0,     0,     0,     0,
+       3,     0,     2,     1,     0,     0,     0,     0,   191,     0,
+       0,     0,   191,    55,   191,    23,    63,    10,    25,    11,
+      28,    11,     9,     0,     0,     0,     0,     0,     0,     7,
+       0,     0,   240,     0,   233,     5,     4,     0,     8,     0,
+       0,     0,   217,   218,   259,   205,   196,   216,     0,   204,
+     191,   206,   202,   207,   208,   210,   215,   208,     0,   208,
+       0,   203,   212,   191,   191,   201,   258,   197,   262,   260,
+     198,   264,     0,   266,     0,   224,   225,   192,   193,     0,
+       0,     0,   235,   236,     0,     0,    56,     0,    64,    65,
+      66,    67,    68,     0,     0,    71,    72,    73,    74,    75,
+      76,     0,    79,    80,     0,    82,     0,     0,    86,    87,
+       0,     0,     0,     0,     0,    93,     0,    95,     0,    97,
+       0,    99,   100,     0,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,     0,   112,   113,   114,   256,   115,     0,
+     117,   254,   118,   119,   120,     0,   122,   123,   124,     0,
+       0,     0,   255,     0,   129,   130,     0,     0,     0,    58,
+     133,     0,     0,     0,     0,     0,   219,   226,   237,   245,
+      24,    26,    27,     6,   221,   242,     0,   241,     0,     0,
+      20,    29,    30,    31,   261,   263,   209,   214,   213,     0,
+     211,   199,   265,   267,   200,   194,   195,     0,     0,   143,
+       0,    33,   181,     0,     0,   181,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     152,     0,     0,   152,     0,     0,     0,     0,     0,     0,
-      62,    56,    33,     0,    17,    18,     0,     0,    15,    13,
-      12,    16,    37,    35,   242,   243,    36,    54,     0,    54,
-       0,     0,   233,    19,    54,     0,     0,    31,     0,   144,
-     145,   148,   179,    54,     0,     0,     0,   248,   249,   251,
-     268,    54,    54,     0,   159,   154,   155,   156,   157,     0,
-     158,     0,     0,     0,     0,     0,   178,     0,   176,     0,
-       0,     0,    60,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   150,   153,     0,     0,     0,
-       0,     0,     0,   134,   133,     0,   271,     0,     0,    58,
-      62,     0,    14,   219,     0,   221,   226,     0,     0,     0,
-      54,     0,     0,    54,   245,    21,     0,     0,   267,   141,
-     149,   143,     0,   185,   256,     0,    55,   181,     0,   247,
-     246,     0,     0,     0,   269,    68,     0,   171,   170,   172,
-     169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    69,    77,    76,    80,     0,    82,    83,
-      84,    87,    88,    89,    90,    91,    93,    95,     0,   152,
-     100,   110,     0,   120,   124,   125,   126,   127,     0,   130,
-     131,    59,     0,   222,   228,     0,   227,   230,     0,   231,
-      19,   237,   135,    20,   146,   147,   265,   184,   182,   250,
-     252,   188,     0,   175,     0,   167,   168,     0,   161,   162,
-     164,   163,   165,   166,   177,    61,    97,   151,     0,   272,
-      34,    48,   229,    54,   136,     0,   183,     0,   189,   174,
-     173,     0,   115,   152,   186,   238,     0,   137,   160,     0,
-       0,    51,    38,     0,    50,     0,    49,   257,     0,    43,
-      39,    41,     0,     0,     0,     0,   270,   138,    52,     0,
-     187,     0,     0,    48,     0,    54,    53,    42,    48,    38,
-      45,    54,   140,    38,    44,     0,   139,     0,    47,    46
+     153,     0,     0,   153,     0,     0,     0,     0,     0,     0,
+      63,    57,    34,     0,    17,    18,    19,     0,    15,    13,
+      12,    16,    38,    36,   243,   244,    37,    55,     0,    55,
+       0,     0,   234,    20,    55,     0,     0,    32,     0,   145,
+     146,   149,   180,    55,     0,     0,     0,   249,   250,   252,
+     269,    55,    55,     0,   160,   155,   156,   157,   158,     0,
+     159,     0,     0,     0,     0,     0,   179,     0,   177,     0,
+       0,     0,    61,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   151,   154,     0,     0,     0,
+       0,     0,     0,   135,   134,     0,   272,     0,     0,    59,
+      63,     0,    14,   220,     0,   222,   227,     0,     0,     0,
+      55,     0,     0,    55,   246,    22,     0,     0,   268,   142,
+     150,   144,     0,   186,   257,     0,    56,   182,     0,   248,
+     247,     0,     0,     0,   270,    69,     0,   172,   171,   173,
+     170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    70,    78,    77,    81,     0,    83,    84,
+      85,    88,    89,    90,    91,    92,    94,    96,     0,   153,
+     101,   111,     0,   121,   125,   126,   127,   128,     0,   131,
+     132,    60,     0,   223,   229,     0,   228,   231,     0,   232,
+      20,   238,   136,    21,   147,   148,   266,   185,   183,   251,
+     253,   189,     0,   176,     0,   168,   169,     0,   162,   163,
+     165,   164,   166,   167,   178,    62,    98,   152,     0,   273,
+      35,    49,   230,    55,   137,     0,   184,     0,   190,   175,
+     174,     0,   116,   153,   187,   239,     0,   138,   161,     0,
+       0,    52,    39,     0,    51,     0,    50,   258,     0,    44,
+      40,    42,     0,     0,     0,     0,   271,   139,    53,     0,
+     188,     0,     0,    49,     0,    55,    54,    43,    49,    39,
+      46,    55,   141,    39,    45,     0,   140,     0,    48,    47
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short int yydefgoto[] =
 {
       -1,     1,     2,   161,   254,   335,    18,    19,    20,   235,
-     165,    21,    22,   468,   469,   470,   471,   454,   460,   336,
+     165,    21,   236,   468,   469,   470,   471,   454,   460,   336,
       86,   158,   293,   159,   315,   445,   463,   477,    24,   258,
      259,   260,    68,   304,   305,   286,   287,   288,    26,   263,
-     347,   348,   337,   447,    79,   267,    69,   187,    70,   166,
+     347,   348,   337,   447,    79,   267,    69,   187,    70,   237,
       28,   238,   247,   325,    30,    31,   249,   330,    32,   179,
       33,    34,   239,   240,   169,    37,   241,   268,   269,   270,
      160,    71,   473,    40,    73,   317
@@ -1117,289 +1117,285 @@ static const short int yydefgoto[] =
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -446
+#define YYPACT_NINF -422
 static const short int yypact[] =
 {
-    -446,    35,   724,  -446,    46,   664,  -106,   102,   146,    85,
-      84,   186,   146,   -18,   146,  -446,   887,  -446,  -446,  -446,
-    -446,  -446,  -446,    40,     0,    22,    25,    44,   -10,  -446,
-      54,    37,  -446,    80,    58,  -446,  -446,    82,  -446,    92,
-      94,    97,  -446,  -446,  -446,  -446,  -446,  -446,   664,  -446,
-     200,  -446,  -446,  -446,    77,  -446,  -446,    77,   104,    77,
-     205,  -446,  -446,   202,   214,   205,  -446,  -446,  -446,  -446,
-    -446,  -446,   227,  -446,   248,  -446,  -446,  -446,  -446,   110,
-     664,   118,  -446,  -446,   117,   664,  -446,   -96,  -446,  -446,
-    -446,  -446,  -446,   121,   129,  -446,  -446,  -446,  -446,  -446,
-    -446,   136,  -446,  -446,   154,  -446,   156,   157,  -446,  -446,
-     158,   159,   160,   162,   164,  -446,   166,  -446,   167,  -446,
-     170,  -446,  -446,   174,  -446,  -446,  -446,  -446,  -446,  -446,
-    -446,  -446,  -446,   175,  -446,  -446,  -446,  -446,  -446,   177,
-    -446,  -446,  -446,  -446,  -446,   179,  -446,  -446,  -446,   181,
-     185,   191,  -446,   192,  -446,  -446,   194,   195,   -95,  -446,
-    -446,    72,   674,   344,   231,   198,  -446,  -446,  -446,  -446,
-    -446,  -446,  -446,  -446,  -446,  -446,   -42,  -446,   270,   199,
-    -446,  -446,  -446,  -446,  -446,   204,  -446,  -446,  -446,   664,
-    -446,  -446,   204,   -93,  -446,  -446,  -446,   196,   208,   227,
-     227,  -446,  -446,    13,   210,  -446,   227,   314,   243,   351,
-     352,   292,   314,   353,   355,   314,   357,   314,   314,   310,
-     314,   -71,   314,   314,   314,   664,   664,   267,   363,   664,
-     887,   217,  -446,   222,  -446,  -446,    31,   224,  -446,  -446,
-    -446,  -446,  -446,  -446,  -446,  -446,  -446,   131,   237,   -63,
-     226,   225,  -446,  -446,   663,   228,   314,  -446,   223,   249,
-    -446,   230,  -446,   -72,    -7,    13,    13,  -446,  -446,  -446,
-     257,   -18,   -25,   244,  -446,  -446,  -446,  -446,  -446,   246,
-    -446,   314,   314,   314,   314,   511,   367,   -85,  -446,   247,
-     250,   251,  -446,   -61,   252,   254,   256,   258,   259,   260,
-     261,   265,   282,   373,   -56,  -446,   367,   266,   262,   -46,
-     474,   268,   277,  -446,  -446,   278,   273,   287,   288,  -446,
-     887,   390,  -446,  -446,   -14,  -446,  -446,   303,   664,   295,
-     137,   294,   370,   697,  -446,  -446,   664,   300,  -446,  -446,
-    -446,   227,   314,  -446,  -446,   664,   308,  -446,   311,  -446,
-    -446,   301,    13,   318,  -446,  -446,   664,  -446,  -446,  -446,
-    -446,   524,   320,   314,   314,   314,   314,   314,   314,   314,
-     314,   314,   314,  -446,  -446,  -446,  -446,   449,  -446,  -446,
-    -446,  -446,  -446,  -446,  -446,  -446,  -446,  -446,   323,   314,
-    -446,  -446,   314,  -446,  -446,  -446,  -446,  -446,   454,  -446,
-    -446,  -446,   324,  -446,  -446,    13,  -446,  -446,   327,  -446,
-    -446,  -446,   365,  -446,  -446,  -446,   333,  -446,  -446,  -446,
-    -446,   227,   332,  -446,   314,  -446,  -446,    73,    59,    16,
-      -3,    -3,   279,   279,  -446,  -446,  -446,  -446,   339,  -446,
-    -446,   338,  -446,   785,  -446,    13,  -446,   342,  -446,  -446,
-    -446,   314,  -446,   458,  -446,  -446,   345,  -446,   367,   105,
-     -86,  -446,   281,    -6,  -446,   314,   346,   -31,   348,  -446,
-     361,  -446,   664,    13,   314,   364,  -446,  -446,   367,   314,
-    -446,   421,    13,   -20,   542,   -84,   367,  -446,   -17,   281,
-    -446,   -84,  -446,   281,  -446,   360,  -446,   371,  -446,  -446
+    -422,    32,   758,  -422,   122,   675,  -101,   139,   194,    41,
+      67,   196,   194,   -43,   194,  -422,   860,  -422,  -422,  -422,
+    -422,  -422,  -422,    34,   -35,   -13,    -7,    11,   -18,  -422,
+      80,    22,  -422,    98,    39,  -422,  -422,    51,  -422,   100,
+     109,   111,  -422,  -422,  -422,  -422,  -422,  -422,   675,  -422,
+     200,  -422,  -422,  -422,   117,  -422,  -422,   117,   112,   117,
+      27,  -422,  -422,   202,   213,    27,  -422,  -422,  -422,  -422,
+    -422,  -422,   215,  -422,   257,  -422,  -422,  -422,  -422,   118,
+     675,   120,  -422,  -422,   119,   675,  -422,   -94,  -422,  -422,
+    -422,  -422,  -422,   125,   126,  -422,  -422,  -422,  -422,  -422,
+    -422,   127,  -422,  -422,   128,  -422,   129,   131,  -422,  -422,
+     132,   134,   135,   136,   138,  -422,   140,  -422,   141,  -422,
+     142,  -422,  -422,   143,  -422,  -422,  -422,  -422,  -422,  -422,
+    -422,  -422,  -422,   154,  -422,  -422,  -422,  -422,  -422,   156,
+    -422,  -422,  -422,  -422,  -422,   157,  -422,  -422,  -422,   158,
+     159,   160,  -422,   162,  -422,  -422,   163,   164,   -95,  -422,
+    -422,   594,   708,   311,   227,   165,  -422,  -422,  -422,  -422,
+    -422,  -422,  -422,  -422,  -422,  -422,   -42,  -422,   229,   166,
+    -422,  -422,  -422,  -422,  -422,   168,  -422,  -422,  -422,   675,
+    -422,  -422,   168,   -93,  -422,  -422,  -422,   169,   173,   215,
+     215,  -422,  -422,    46,   177,  -422,   215,   314,   243,   319,
+     321,   292,   314,   325,   331,   314,   332,   314,   314,   286,
+     314,   -58,   314,   314,   314,   675,   675,   233,   338,   675,
+     860,   195,  -422,   201,  -422,  -422,  -422,   203,  -422,  -422,
+    -422,  -422,  -422,  -422,  -422,  -422,  -422,    84,   219,   -52,
+     210,   198,  -422,  -422,   358,   209,   314,  -422,   208,   228,
+    -422,   206,  -422,   -36,   -22,    46,    46,  -422,  -422,  -422,
+     230,   -43,   -24,   216,  -422,  -422,  -422,  -422,  -422,   218,
+    -422,   314,   314,   314,   314,   511,    10,   -80,  -422,   220,
+     221,   222,  -422,   -62,   223,   224,   225,   226,   235,   244,
+     245,   247,   282,   365,   -61,  -422,    10,   249,   246,   -28,
+     537,   250,   251,  -422,  -422,   252,   248,   256,   259,  -422,
+     860,   368,  -422,  -422,   -14,  -422,  -422,   242,   675,   231,
+      92,   258,   313,   695,  -422,  -422,   675,   267,  -422,  -422,
+    -422,   215,   314,  -422,  -422,   675,   268,  -422,   270,  -422,
+    -422,   277,    46,   279,  -422,  -422,   675,  -422,  -422,  -422,
+    -422,   551,   287,   314,   314,   314,   314,   314,   314,   314,
+     314,   314,   314,  -422,  -422,  -422,  -422,   429,  -422,  -422,
+    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   289,   314,
+    -422,  -422,   314,  -422,  -422,  -422,  -422,  -422,   434,  -422,
+    -422,  -422,   293,  -422,  -422,    46,  -422,  -422,   298,  -422,
+    -422,  -422,   334,  -422,  -422,  -422,   303,  -422,  -422,  -422,
+    -422,   215,   306,  -422,   314,  -422,  -422,    74,    16,    49,
+      30,    30,   241,   241,  -422,  -422,  -422,  -422,   308,  -422,
+    -422,   307,  -422,   716,  -422,    46,  -422,   317,  -422,  -422,
+    -422,   314,  -422,   458,  -422,  -422,   310,  -422,    10,    86,
+     -88,  -422,   281,    42,  -422,   314,   320,   -27,   324,  -422,
+     336,  -422,   675,    46,   314,   343,  -422,  -422,    10,   314,
+    -422,   421,    46,   -17,   474,  -112,    10,  -422,   -11,   281,
+    -422,  -112,  -422,   281,  -422,   339,  -422,   341,  -422,  -422
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short int yypgoto[] =
 {
-    -446,  -446,  -446,   479,  -235,     9,  -446,  -446,   178,  -446,
-    -446,  -446,  -446,  -350,  -446,  -446,    32,  -410,  -446,    -9,
-      -2,  -446,  -446,  -207,  -446,  -446,  -446,  -446,  -446,  -446,
-    -446,   171,     3,   296,  -367,  -187,  -446,  -156,  -446,   316,
-    -445,  -206,   193,  -446,    27,   -70,  -446,    87,    60,    12,
-    -446,   520,  -446,  -446,   -13,  -446,  -446,  -446,  -446,  -446,
-      -8,  -446,   522,     4,  -446,  -446,   523,   274,  -253,  -446,
-     309,     5,    -4,  -446,     1,  -446
+    -422,  -422,  -422,   471,  -237,     7,  -422,  -422,   161,  -422,
+    -422,  -422,   492,  -369,  -422,  -422,    17,  -409,  -422,    -9,
+      -2,  -422,  -422,  -213,  -422,  -422,  -422,  -422,  -422,  -422,
+    -422,   167,     3,   274,  -370,  -187,  -422,  -197,  -422,   294,
+    -421,  -223,   170,  -422,    40,   -70,  -422,    25,    54,    44,
+    -422,   499,  -422,  -422,   480,  -422,  -422,  -422,  -422,  -422,
+     -15,  -422,   502,     4,  -422,  -422,   504,   255,  -253,  -422,
+     291,     5,    -4,  -422,     1,  -422
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -192
+#define YYTABLE_NINF -193
 static const short int yytable[] =
 {
-      23,    72,   197,    41,    85,    25,    36,    39,   363,   364,
-     167,    17,   350,   351,    27,   168,   195,   196,   333,   327,
-     474,   204,   437,   319,  -191,   264,   137,   363,   364,     7,
-     141,   302,   475,   306,    11,     3,   306,   310,   230,    84,
-     492,    87,    74,   329,   184,   264,   496,   465,   372,    42,
-      43,   248,   290,   152,   205,   295,   296,  -191,   231,   299,
-       4,   301,    11,   343,   373,   353,   308,   466,    16,     4,
-     363,   364,   377,   490,     7,   343,   200,   389,   494,   344,
-      16,   203,   232,     7,   363,   364,   461,   389,   378,    16,
-      84,    87,    81,   390,   357,   358,   359,   360,   361,   420,
-     339,     4,   -40,   393,     5,    75,    76,    11,   274,     6,
-     275,   276,   277,   401,   164,     7,    11,    80,   -40,   163,
-     191,     8,   343,   164,     9,   194,   354,    16,   489,   261,
-     262,   493,   453,   265,    16,   453,   273,   370,   371,   495,
-     174,    10,   233,   497,   188,   476,   190,   170,    11,    77,
-      78,   186,   441,   265,   368,   369,   370,   371,   278,   236,
-     236,   266,    41,    41,    25,    25,    39,    39,   250,   171,
-     234,   234,   172,   237,   237,   443,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   255,   415,   176,    12,    82,
-      83,   173,   456,   178,    13,    14,   367,   368,   369,   370,
-     371,   175,   306,   185,    78,   192,    78,   365,   451,   366,
-     367,   368,   369,   370,   371,   279,   434,   193,    78,    15,
-     483,   311,   312,   167,    16,   318,   280,   177,   168,   488,
-     195,   196,   180,    47,   244,   245,   438,   450,   324,   181,
-     328,   182,   281,   282,   183,   283,   274,   284,   275,   276,
-     277,   289,   189,   285,   345,    41,   198,    25,   464,    39,
-     199,   346,   328,   345,   458,   201,   306,   202,    54,   206,
-     346,   261,   359,   251,   252,   313,   314,   207,   478,    55,
-      56,   362,   323,    16,   208,    44,    57,   484,   407,    16,
-     363,   364,   486,   363,   364,   274,   278,   275,   276,   277,
-     294,    45,   209,    46,   210,   211,   212,   213,   214,    47,
-     215,    59,   216,    48,   217,   218,    62,   274,   219,   275,
-     276,   277,   220,   221,   405,   222,    49,   223,   403,   224,
-      50,    51,   412,   225,    41,    52,    25,    53,    39,   226,
-     227,   405,   228,   229,    54,   278,   416,   243,   246,   253,
-     256,   448,   422,   279,  -191,    55,    56,   257,   271,   291,
-     292,   297,    57,   298,   280,   300,   303,   278,   316,   320,
-     321,   322,   326,   331,   340,   332,   388,   338,   363,   364,
-     281,   282,   341,   283,   342,   284,    58,    59,    60,    61,
-     352,   285,    62,   355,   356,   392,   374,    63,   402,   375,
-     376,   379,   279,   380,    64,   381,    65,   382,   383,   384,
-     385,   467,    67,   280,   386,   391,   365,   395,   366,   367,
-     368,   369,   370,   371,   279,    44,   396,   397,   398,   281,
-     282,   387,   283,    16,   284,   280,   399,   400,   404,    10,
-     285,    45,   406,    46,    41,   409,    25,   413,    39,    47,
-     419,   281,   282,    48,   283,   417,   284,   435,   418,   439,
-     472,   274,   285,   275,   276,   277,    49,   421,   482,   424,
-      50,    51,   436,   440,   442,    52,   345,    53,   444,   472,
-     446,   449,   345,   346,    54,   363,   364,   472,   452,   346,
-     453,   472,   457,   462,   481,    55,    56,   480,   479,   485,
-     162,   365,    57,   366,   367,   368,   369,   370,   371,   498,
-     410,   278,   414,   487,   274,    44,   275,   276,   277,   309,
-     499,   272,    29,   408,    35,    38,    58,    59,    60,    61,
-     307,    45,    62,    46,     0,   363,   364,    63,   349,    47,
-       0,     0,     0,    48,    64,     0,    65,     0,     0,     0,
-       0,    66,    67,   363,   364,     0,    49,     0,     0,     0,
-      50,    51,     0,     0,   278,    52,     0,    53,   279,     0,
+      23,    72,   197,    41,    85,    25,    36,    39,   168,    17,
+     264,   290,   350,   351,   295,   296,   333,   319,   299,   437,
+     301,   363,   364,   204,  -192,   308,   329,   363,   364,     7,
+     327,   302,     3,   306,    11,   343,   306,   310,   230,   137,
+      16,   363,   364,   141,   184,   465,    27,    74,   353,   195,
+     196,   248,    84,   372,    87,    47,   205,  -192,   231,   339,
+     363,   364,    11,     4,   492,   466,   152,   166,   474,   373,
+     496,   377,   389,    80,   490,    81,   200,     7,   264,   494,
+     475,   203,   188,   461,   190,   363,   364,   378,   390,   274,
+      54,   275,   276,   277,   357,   358,   359,   360,   361,   420,
+      16,    55,    56,    84,    87,   389,   -41,   401,    57,    16,
+      11,   343,   170,   163,   191,   344,    16,   164,   265,   194,
+     495,   393,   -41,   343,   497,    42,    43,   354,    16,   261,
+     262,   489,   174,    59,   171,   453,   273,   493,    62,   278,
+     172,   453,    75,    76,   365,   415,   366,   367,   368,   369,
+     370,   371,   441,   367,   368,   369,   370,   371,   173,    23,
+      23,   250,    41,    41,    25,    25,    39,    39,   234,   234,
+     370,   371,   176,   443,   178,   434,   425,   426,   427,   428,
+     429,   430,   431,   432,   433,   255,   265,   368,   369,   370,
+     371,   186,   456,   476,   266,   438,   279,    77,    78,    82,
+      83,   180,   306,   185,    78,   192,    78,   280,   365,   451,
+     366,   367,   368,   369,   370,   371,   193,    78,   195,   196,
+     483,   311,   312,   281,   282,   318,   283,   175,   284,   488,
+     244,   245,   251,   252,   285,   323,    16,   450,   324,   464,
+     328,   313,   314,   407,    16,   177,   274,   181,   275,   276,
+     277,   289,   363,   364,   345,    41,   182,    25,   183,    39,
+     189,   346,   328,   345,   458,   198,   306,   201,   199,   202,
+     346,   261,   359,   206,   207,   208,   209,   210,   478,   211,
+     212,   362,   213,   214,   215,    44,   216,   484,   217,   218,
+     219,   220,   486,   363,   364,   274,   278,   275,   276,   277,
+     294,    45,   221,    46,   222,   223,   224,   225,   226,    47,
+     227,   228,   229,    48,   243,   246,   253,   274,  -192,   275,
+     276,   277,   257,   256,   405,   271,    49,   291,   403,   292,
+      50,    51,   412,   297,    41,    52,    25,    53,    39,   298,
+     300,   405,   303,   316,    54,   278,   416,   320,   332,   321,
+     322,   448,   422,   279,   326,    55,    56,   331,   338,   340,
+     342,   341,    57,   352,   280,   355,   356,   278,   388,   374,
+     375,   376,   379,   380,   381,   382,   402,   404,   406,   392,
+     281,   282,    10,   283,   383,   284,    58,    59,    60,    61,
+       5,   285,    62,   384,   385,     6,   386,    63,   391,   395,
+     396,   397,   279,   398,    64,   399,    65,     8,   400,   409,
+       9,   467,    67,   280,   413,   417,   365,   418,   366,   367,
+     368,   369,   370,   371,   279,    44,   419,    10,   421,   281,
+     282,   387,   283,    16,   284,   280,   424,   435,   436,   439,
+     285,    45,   440,    46,    41,   442,    25,   444,    39,    47,
+     446,   281,   282,    48,   283,   449,   284,   452,   462,   453,
+     472,   274,   285,   275,   276,   277,    49,   457,   482,   481,
+      50,    51,   479,   480,    12,    52,   345,    53,   485,   472,
+      13,    14,   345,   346,    54,   363,   364,   472,   498,   346,
+     499,   472,   162,   410,    22,    55,    56,   309,   487,   272,
+     408,    29,    57,   167,    35,    15,    38,     0,   414,   334,
+      16,   278,   307,     0,   274,    44,   275,   276,   277,   349,
+       0,     0,     0,     0,     0,     0,    58,    59,    60,    61,
+       0,    45,    62,    46,     0,     0,     0,    63,     0,    47,
+       0,     0,     0,    48,    64,     0,    65,     0,   363,   364,
+       0,    66,    67,     0,     0,     0,    49,     0,     0,     0,
+      50,    51,   363,   364,   278,    52,     0,    53,   279,     0,
        0,     0,     0,    16,    54,     0,     0,     0,     0,   280,
        0,     0,     0,     0,     0,    55,    56,     0,     0,     0,
        0,     0,    57,     0,     0,   281,   282,     0,   459,     0,
-     284,     0,     0,     0,     0,     0,   285,     0,   365,     0,
+     284,     0,     0,     0,   232,     0,   285,     0,   365,   491,
      366,   367,   368,   369,   370,   371,    58,    59,    60,    61,
-       0,   279,    62,   394,     0,     0,     0,    63,     0,     0,
-       0,     0,   280,     0,    64,     0,    65,     0,     0,     0,
-       0,    66,    67,     0,     0,     0,     0,     0,   281,   282,
-       0,   283,     0,   284,     0,     0,     0,     0,   365,   285,
-     366,   367,   368,   369,   370,   371,     0,     0,    44,     0,
-       0,     0,     0,   423,     0,     0,   365,   491,   366,   367,
-     368,   369,   370,   371,    45,     0,    46,     0,     0,     0,
-       0,     0,    47,     0,     0,     5,    48,     0,     0,     0,
-       6,     0,     0,     4,     0,     0,     5,     0,     0,    49,
-       0,     6,     8,    50,    51,     9,     0,     7,    52,     0,
-      53,     0,     0,     8,     0,     0,     9,    54,     0,     5,
-       0,     0,    10,     0,     6,     0,     0,     0,    55,    56,
-       0,     0,     0,    10,   233,    57,     8,     0,     0,     9,
-      11,     0,     0,     4,     0,     0,     5,     0,     0,     0,
-       0,     6,     0,     0,     0,     0,    10,     7,     0,    58,
-      59,    60,    61,     8,     0,    62,     9,     0,     0,    12,
-      63,     0,     0,     0,     0,    13,    14,    64,     0,    65,
-      12,     0,     0,    10,    66,    67,    13,    14,     0,     0,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      15,     0,     0,    12,   334,    16,     0,     5,     0,    13,
-      14,    15,     6,     0,     0,   242,    16,     0,     0,     0,
-       0,     0,     0,     0,     8,     0,     0,     9,     0,     0,
-      12,     0,     0,     0,    15,     0,    13,    14,   411,    16,
-       0,     0,     0,     0,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    15,     0,     0,     0,     0,    16,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      88,    12,    89,    90,     0,    91,    92,    13,    14,     0,
-       0,    93,     0,    94,     0,     0,     0,     0,     0,     0,
-      95,    96,    97,    98,     0,    99,   100,   101,   102,   103,
-       0,   104,    15,   105,   106,   107,   455,    16,   108,     0,
-       0,     0,   109,     0,   110,   111,   112,   113,   114,   115,
-       0,   116,   117,   118,   119,   120,     0,     0,   121,     0,
-     122,     0,     0,     0,     0,   123,     0,   124,     0,     0,
-       0,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-       0,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,     0,     0,     0,     0,   145,     0,     0,   146,
-       0,   147,   148,     0,     0,   149,   150,   151,     0,     0,
-       0,   152,     0,   153,   154,   155,   156,     0,     0,   157
+       0,   279,    62,     4,     0,     0,     5,    63,     0,     0,
+       0,     6,   280,     0,    64,     0,    65,     7,     0,     0,
+       0,    66,    67,     8,     0,     0,     9,     0,   281,   282,
+       0,   283,     0,   284,     0,     0,     0,     0,     0,   285,
+       0,     0,     0,    10,   233,     0,     0,     0,     0,     0,
+      11,   365,     0,   366,   367,   368,   369,   370,   371,    44,
+       0,     0,     0,     0,     0,   365,   394,   366,   367,   368,
+     369,   370,   371,     0,     0,    45,     0,    46,     0,     0,
+     423,     0,     0,    47,     0,     0,     0,    48,     0,     0,
+      12,     0,     0,     0,     0,     0,    13,    14,     0,     0,
+      49,     0,     0,     0,    50,    51,     0,     5,     0,    52,
+       0,    53,     6,     0,     0,     0,     0,     4,    54,     0,
+       5,    15,     0,     0,     8,     6,    16,     9,     5,    55,
+      56,     7,     0,     6,     0,     0,    57,     8,     0,     0,
+       9,     0,     0,     0,    10,     8,     0,     0,     9,     0,
+       0,     0,     0,     0,     0,     0,     0,    10,   233,     0,
+      58,    59,    60,    61,    11,    10,    62,     4,     0,     0,
+       5,    63,     0,     0,     0,     6,     0,     0,    64,     0,
+      65,     7,     0,     0,     0,    66,    67,     8,     0,     0,
+       9,    12,     0,     0,     0,     0,     0,    13,    14,     0,
+       0,     0,     0,     0,    12,     0,     0,    10,     0,     0,
+      13,    14,    12,     0,    11,     0,     0,     0,    13,    14,
+       0,     0,    15,     0,     0,     0,   411,    16,     0,     0,
+       0,     0,     0,     0,     0,    15,     0,     0,     0,   242,
+      16,     0,     0,    15,     0,     0,     0,   455,    16,     0,
+       0,     0,     0,    88,    12,    89,    90,     0,    91,    92,
+      13,    14,     0,     0,    93,     0,    94,     0,     0,     0,
+       0,     0,     0,    95,    96,    97,    98,     0,    99,   100,
+     101,   102,   103,     0,   104,    15,   105,   106,   107,     0,
+      16,   108,     0,     0,     0,   109,     0,   110,   111,   112,
+     113,   114,   115,     0,   116,   117,   118,   119,   120,     0,
+       0,   121,     0,   122,     0,     0,     0,     0,   123,     0,
+     124,     0,     0,     0,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,     0,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,     0,     0,     0,     0,   145,
+       0,     0,   146,     0,   147,   148,     0,     0,   149,   150,
+     151,     0,     0,     0,   152,     0,   153,   154,   155,   156,
+       0,     0,   157
 };
 
 static const short int yycheck[] =
 {
-       2,     5,    72,     2,    13,     2,     2,     2,    11,    12,
-      23,     2,   265,   266,     2,    23,     3,     4,   253,    82,
-      26,   117,   389,   230,   117,    32,    97,    11,    12,    43,
-     101,   218,    38,   220,    76,     0,   223,   224,   133,    12,
-     485,    14,   148,   249,    48,    32,   491,   133,   133,     3,
-       4,    93,   208,   124,   150,   211,   212,   150,   153,   215,
-      29,   217,    76,   147,   149,   271,   222,   153,   152,    29,
-      11,    12,   133,   483,    43,   147,    80,   133,   488,   151,
-     152,    85,    10,    43,    11,    12,   453,   133,   149,   152,
-      63,    64,     8,   149,   281,   282,   283,   284,   285,   352,
-     256,    29,   133,   149,    32,     3,     4,    76,     3,    37,
-       5,     6,     7,   320,    83,    43,    76,    32,   149,    79,
-      60,    49,   147,    83,    52,    65,   151,   152,   148,   199,
-     200,   148,   152,   140,   152,   152,   206,   140,   141,   489,
-     150,    69,    70,   493,    57,   151,    59,   147,    76,     3,
-       4,    74,   405,   140,   138,   139,   140,   141,    53,   161,
-     162,   148,   161,   162,   161,   162,   161,   162,   176,   147,
-     161,   162,   147,   161,   162,   410,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   189,   342,   150,   116,     3,
-       4,   147,   445,   135,   122,   123,   137,   138,   139,   140,
-     141,   147,   389,     3,     4,     3,     4,   134,   135,   136,
-     137,   138,   139,   140,   141,   110,   372,     3,     4,   147,
-     473,   225,   226,   236,   152,   229,   121,   147,   236,   482,
-       3,     4,   150,    28,     3,     4,   392,   424,   247,   147,
-     249,   147,   137,   138,   147,   140,     3,   142,     5,     6,
-       7,     8,   148,   148,   263,   254,     8,   254,   153,   254,
-     150,   263,   271,   272,   451,   147,   453,   150,    63,   148,
-     272,   341,   459,     3,     4,     8,     9,   148,   465,    74,
-      75,   285,   151,   152,   148,     4,    81,   474,   151,   152,
-      11,    12,   479,    11,    12,     3,    53,     5,     6,     7,
+       2,     5,    72,     2,    13,     2,     2,     2,    23,     2,
+      32,   208,   265,   266,   211,   212,   253,   230,   215,   389,
+     217,    11,    12,   117,   117,   222,   249,    11,    12,    43,
+      82,   218,     0,   220,    76,   147,   223,   224,   133,    97,
+     152,    11,    12,   101,    48,   133,     2,   148,   271,     3,
+       4,    93,    12,   133,    14,    28,   150,   150,   153,   256,
+      11,    12,    76,    29,   485,   153,   124,    23,    26,   149,
+     491,   133,   133,    32,   483,     8,    80,    43,    32,   488,
+      38,    85,    57,   453,    59,    11,    12,   149,   149,     3,
+      63,     5,     6,     7,   281,   282,   283,   284,   285,   352,
+     152,    74,    75,    63,    64,   133,   133,   320,    81,   152,
+      76,   147,   147,    79,    60,   151,   152,    83,   140,    65,
+     489,   149,   149,   147,   493,     3,     4,   151,   152,   199,
+     200,   148,   150,   106,   147,   152,   206,   148,   111,    53,
+     147,   152,     3,     4,   134,   342,   136,   137,   138,   139,
+     140,   141,   405,   137,   138,   139,   140,   141,   147,   161,
+     162,   176,   161,   162,   161,   162,   161,   162,   161,   162,
+     140,   141,   150,   410,   135,   372,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   189,   140,   138,   139,   140,
+     141,    74,   445,   151,   148,   392,   110,     3,     4,     3,
+       4,   150,   389,     3,     4,     3,     4,   121,   134,   135,
+     136,   137,   138,   139,   140,   141,     3,     4,     3,     4,
+     473,   225,   226,   137,   138,   229,   140,   147,   142,   482,
+       3,     4,     3,     4,   148,   151,   152,   424,   247,   153,
+     249,     8,     9,   151,   152,   147,     3,   147,     5,     6,
+       7,     8,    11,    12,   263,   254,   147,   254,   147,   254,
+     148,   263,   271,   272,   451,     8,   453,   147,   150,   150,
+     272,   341,   459,   148,   148,   148,   148,   148,   465,   148,
+     148,   285,   148,   148,   148,     4,   148,   474,   148,   148,
+     148,   148,   479,    11,    12,     3,    53,     5,     6,     7,
        8,    20,   148,    22,   148,   148,   148,   148,   148,    28,
-     148,   106,   148,    32,   148,   148,   111,     3,   148,     5,
-       6,     7,   148,   148,   328,   148,    45,   148,   324,   148,
-      49,    50,   336,   148,   333,    54,   333,    56,   333,   148,
-     148,   345,   148,   148,    63,    53,   345,     3,   150,   150,
-     154,   421,   356,   110,   150,    74,    75,   149,   148,     8,
-       8,     8,    81,     8,   121,     8,    56,    53,     5,   152,
-     148,   147,   135,   147,   151,   150,     3,   149,    11,    12,
-     137,   138,   133,   140,   154,   142,   105,   106,   107,   108,
-     133,   148,   111,   149,   148,   133,   149,   116,     8,   149,
-     149,   149,   110,   149,   123,   149,   125,   149,   149,   149,
-     149,   130,   131,   121,   149,   149,   134,   149,   136,   137,
-     138,   139,   140,   141,   110,     4,   149,   149,   155,   137,
-     138,   149,   140,   152,   142,   121,   149,   149,   135,    69,
-     148,    20,   147,    22,   443,   151,   443,   147,   443,    28,
-     149,   137,   138,    32,   140,   147,   142,     8,   147,     5,
-     462,     3,   148,     5,     6,     7,    45,   149,   472,   149,
-      49,    50,   149,   149,   147,    54,   485,    56,   113,   481,
-     147,   149,   491,   485,    63,    11,    12,   489,   149,   491,
-     152,   493,   150,   148,   133,    74,    75,   149,   152,   135,
-      21,   134,    81,   136,   137,   138,   139,   140,   141,   149,
-     332,    53,   341,   481,     3,     4,     5,     6,     7,   223,
-     149,   205,     2,   330,     2,     2,   105,   106,   107,   108,
-     221,    20,   111,    22,    -1,    11,    12,   116,   264,    28,
-      -1,    -1,    -1,    32,   123,    -1,   125,    -1,    -1,    -1,
-      -1,   130,   131,    11,    12,    -1,    45,    -1,    -1,    -1,
-      49,    50,    -1,    -1,    53,    54,    -1,    56,   110,    -1,
+     148,   148,   148,    32,     3,   150,   150,     3,   150,     5,
+       6,     7,   149,   154,   328,   148,    45,     8,   324,     8,
+      49,    50,   336,     8,   333,    54,   333,    56,   333,     8,
+       8,   345,    56,     5,    63,    53,   345,   152,   150,   148,
+     147,   421,   356,   110,   135,    74,    75,   147,   149,   151,
+     154,   133,    81,   133,   121,   149,   148,    53,     3,   149,
+     149,   149,   149,   149,   149,   149,     8,   135,   147,   133,
+     137,   138,    69,   140,   149,   142,   105,   106,   107,   108,
+      32,   148,   111,   149,   149,    37,   149,   116,   149,   149,
+     149,   149,   110,   155,   123,   149,   125,    49,   149,   151,
+      52,   130,   131,   121,   147,   147,   134,   147,   136,   137,
+     138,   139,   140,   141,   110,     4,   149,    69,   149,   137,
+     138,   149,   140,   152,   142,   121,   149,     8,   149,     5,
+     148,    20,   149,    22,   443,   147,   443,   113,   443,    28,
+     147,   137,   138,    32,   140,   149,   142,   149,   148,   152,
+     462,     3,   148,     5,     6,     7,    45,   150,   472,   133,
+      49,    50,   152,   149,   116,    54,   485,    56,   135,   481,
+     122,   123,   491,   485,    63,    11,    12,   489,   149,   491,
+     149,   493,    21,   332,     2,    74,    75,   223,   481,   205,
+     330,     2,    81,    23,     2,   147,     2,    -1,   341,   151,
+     152,    53,   221,    -1,     3,     4,     5,     6,     7,   264,
+      -1,    -1,    -1,    -1,    -1,    -1,   105,   106,   107,   108,
+      -1,    20,   111,    22,    -1,    -1,    -1,   116,    -1,    28,
+      -1,    -1,    -1,    32,   123,    -1,   125,    -1,    11,    12,
+      -1,   130,   131,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      49,    50,    11,    12,    53,    54,    -1,    56,   110,    -1,
       -1,    -1,    -1,   152,    63,    -1,    -1,    -1,    -1,   121,
       -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,
       -1,    -1,    81,    -1,    -1,   137,   138,    -1,   140,    -1,
-     142,    -1,    -1,    -1,    -1,    -1,   148,    -1,   134,    -1,
+     142,    -1,    -1,    -1,    10,    -1,   148,    -1,   134,   135,
      136,   137,   138,   139,   140,   141,   105,   106,   107,   108,
-      -1,   110,   111,   149,    -1,    -1,    -1,   116,    -1,    -1,
-      -1,    -1,   121,    -1,   123,    -1,   125,    -1,    -1,    -1,
-      -1,   130,   131,    -1,    -1,    -1,    -1,    -1,   137,   138,
-      -1,   140,    -1,   142,    -1,    -1,    -1,    -1,   134,   148,
-     136,   137,   138,   139,   140,   141,    -1,    -1,     4,    -1,
-      -1,    -1,    -1,   149,    -1,    -1,   134,   135,   136,   137,
-     138,   139,   140,   141,    20,    -1,    22,    -1,    -1,    -1,
-      -1,    -1,    28,    -1,    -1,    32,    32,    -1,    -1,    -1,
-      37,    -1,    -1,    29,    -1,    -1,    32,    -1,    -1,    45,
-      -1,    37,    49,    49,    50,    52,    -1,    43,    54,    -1,
-      56,    -1,    -1,    49,    -1,    -1,    52,    63,    -1,    32,
-      -1,    -1,    69,    -1,    37,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    69,    70,    81,    49,    -1,    -1,    52,
-      76,    -1,    -1,    29,    -1,    -1,    32,    -1,    -1,    -1,
-      -1,    37,    -1,    -1,    -1,    -1,    69,    43,    -1,   105,
-     106,   107,   108,    49,    -1,   111,    52,    -1,    -1,   116,
-     116,    -1,    -1,    -1,    -1,   122,   123,   123,    -1,   125,
-     116,    -1,    -1,    69,   130,   131,   122,   123,    -1,    -1,
-      76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     147,    -1,    -1,   116,   151,   152,    -1,    32,    -1,   122,
-     123,   147,    37,    -1,    -1,   151,   152,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    -1,    -1,    52,    -1,    -1,
-     116,    -1,    -1,    -1,   147,    -1,   122,   123,   151,   152,
-      -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   147,    -1,    -1,    -1,    -1,   152,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      13,   116,    15,    16,    -1,    18,    19,   122,   123,    -1,
-      -1,    24,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,
-      33,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
-      -1,    44,   147,    46,    47,    48,   151,   152,    51,    -1,
-      -1,    -1,    55,    -1,    57,    58,    59,    60,    61,    62,
-      -1,    64,    65,    66,    67,    68,    -1,    -1,    71,    -1,
-      73,    -1,    -1,    -1,    -1,    78,    -1,    80,    -1,    -1,
-      -1,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      -1,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,    -1,    -1,    -1,    -1,   109,    -1,    -1,   112,
-      -1,   114,   115,    -1,    -1,   118,   119,   120,    -1,    -1,
-      -1,   124,    -1,   126,   127,   128,   129,    -1,    -1,   132
+      -1,   110,   111,    29,    -1,    -1,    32,   116,    -1,    -1,
+      -1,    37,   121,    -1,   123,    -1,   125,    43,    -1,    -1,
+      -1,   130,   131,    49,    -1,    -1,    52,    -1,   137,   138,
+      -1,   140,    -1,   142,    -1,    -1,    -1,    -1,    -1,   148,
+      -1,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      76,   134,    -1,   136,   137,   138,   139,   140,   141,     4,
+      -1,    -1,    -1,    -1,    -1,   134,   149,   136,   137,   138,
+     139,   140,   141,    -1,    -1,    20,    -1,    22,    -1,    -1,
+     149,    -1,    -1,    28,    -1,    -1,    -1,    32,    -1,    -1,
+     116,    -1,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,
+      45,    -1,    -1,    -1,    49,    50,    -1,    32,    -1,    54,
+      -1,    56,    37,    -1,    -1,    -1,    -1,    29,    63,    -1,
+      32,   147,    -1,    -1,    49,    37,   152,    52,    32,    74,
+      75,    43,    -1,    37,    -1,    -1,    81,    49,    -1,    -1,
+      52,    -1,    -1,    -1,    69,    49,    -1,    -1,    52,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,
+     105,   106,   107,   108,    76,    69,   111,    29,    -1,    -1,
+      32,   116,    -1,    -1,    -1,    37,    -1,    -1,   123,    -1,
+     125,    43,    -1,    -1,    -1,   130,   131,    49,    -1,    -1,
+      52,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,    -1,
+      -1,    -1,    -1,    -1,   116,    -1,    -1,    69,    -1,    -1,
+     122,   123,   116,    -1,    76,    -1,    -1,    -1,   122,   123,
+      -1,    -1,   147,    -1,    -1,    -1,   151,   152,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   147,    -1,    -1,    -1,   151,
+     152,    -1,    -1,   147,    -1,    -1,    -1,   151,   152,    -1,
+      -1,    -1,    -1,    13,   116,    15,    16,    -1,    18,    19,
+     122,   123,    -1,    -1,    24,    -1,    26,    -1,    -1,    -1,
+      -1,    -1,    -1,    33,    34,    35,    36,    -1,    38,    39,
+      40,    41,    42,    -1,    44,   147,    46,    47,    48,    -1,
+     152,    51,    -1,    -1,    -1,    55,    -1,    57,    58,    59,
+      60,    61,    62,    -1,    64,    65,    66,    67,    68,    -1,
+      -1,    71,    -1,    73,    -1,    -1,    -1,    -1,    78,    -1,
+      80,    -1,    -1,    -1,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    -1,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,    -1,    -1,    -1,    -1,   109,
+      -1,    -1,   112,    -1,   114,   115,    -1,    -1,   118,   119,
+     120,    -1,    -1,    -1,   124,    -1,   126,   127,   128,   129,
+      -1,    -1,   132
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1429,7 +1425,7 @@ static const unsigned char yystos[] =
      228,   147,   150,   228,   117,   150,   148,   148,   148,   148,
      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-     133,   153,    10,    70,   161,   165,   176,   205,   207,   218,
+     133,   153,    10,    70,   161,   165,   168,   205,   207,   218,
      219,   222,   151,     3,     3,     4,   150,   208,    93,   212,
      216,     3,     4,   150,   160,   228,   154,   149,   185,   186,
      187,   201,   201,   195,    32,   140,   148,   201,   223,   224,
@@ -2226,37 +2222,42 @@ yyreduce:
     break;
 
   case 19:
-#line 325 "parser.y"
-    { (yyval.func_list) = NULL; ;}
+#line 323 "parser.y"
+    {;}
     break;
 
   case 20:
 #line 326 "parser.y"
-    { (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;}
+    { (yyval.func_list) = NULL; ;}
     break;
 
   case 21:
 #line 327 "parser.y"
-    { (yyval.func_list) = (yyvsp[-1].func_list); ;}
+    { (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;}
     break;
 
   case 22:
-#line 330 "parser.y"
-    {;}
+#line 328 "parser.y"
+    { (yyval.func_list) = (yyvsp[-1].func_list); ;}
     break;
 
   case 23:
 #line 331 "parser.y"
-    { if (!parse_only && do_header) { write_constdef((yyvsp[-1].var)); } ;}
+    {;}
     break;
 
   case 24:
 #line 332 "parser.y"
-    {;}
+    { if (!parse_only && do_header) { write_constdef((yyvsp[-1].var)); } ;}
     break;
 
   case 25:
 #line 333 "parser.y"
+    {;}
+    break;
+
+  case 26:
+#line 334 "parser.y"
     { if (!parse_only && do_header) {
                                                    write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL);
                                                    fprintf(header, ";\n\n");
@@ -2264,18 +2265,18 @@ yyreduce:
                                                ;}
     break;
 
-  case 26:
-#line 338 "parser.y"
-    { if (!parse_only && do_header) { write_externdef((yyvsp[-1].var)); } ;}
-    break;
-
   case 27:
 #line 339 "parser.y"
-    {;}
+    { if (!parse_only && do_header) { write_externdef((yyvsp[-1].var)); } ;}
     break;
 
   case 28:
 #line 340 "parser.y"
+    {;}
+    break;
+
+  case 29:
+#line 341 "parser.y"
     { if (!parse_only && do_header) {
                                                    write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL);
                                                    fprintf(header, ";\n\n");
@@ -2283,13 +2284,13 @@ yyreduce:
                                                ;}
     break;
 
-  case 29:
-#line 345 "parser.y"
+  case 30:
+#line 346 "parser.y"
     {;}
     break;
 
-  case 30:
-#line 346 "parser.y"
+  case 31:
+#line 347 "parser.y"
     { if (!parse_only && do_header) {
                                                    write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL);
                                                    fprintf(header, ";\n\n");
@@ -2297,67 +2298,67 @@ yyreduce:
                                                ;}
     break;
 
-  case 31:
-#line 353 "parser.y"
+  case 32:
+#line 354 "parser.y"
     { if (!parse_only && do_header) fprintf(header, "%s\n", (yyvsp[-1].str)); ;}
     break;
 
-  case 32:
-#line 355 "parser.y"
+  case 33:
+#line 356 "parser.y"
     { assert(yychar == YYEMPTY);
                                                  if (!do_import((yyvsp[-1].str))) yychar = aEOF; ;}
     break;
 
-  case 33:
-#line 358 "parser.y"
+  case 34:
+#line 359 "parser.y"
     {;}
     break;
 
-  case 34:
-#line 361 "parser.y"
+  case 35:
+#line 362 "parser.y"
     { if(!parse_only) add_importlib((yyvsp[-1].str)); ;}
     break;
 
-  case 35:
-#line 364 "parser.y"
+  case 36:
+#line 365 "parser.y"
     { (yyval.str) = (yyvsp[0].str); ;}
     break;
 
-  case 36:
-#line 366 "parser.y"
-    { start_typelib((yyvsp[-1].str), (yyvsp[-2].attr_list));
+  case 37:
+#line 367 "parser.y"
+    { if (!parse_only) start_typelib((yyvsp[-1].str), (yyvsp[-2].attr_list));
                                                  if (!parse_only && do_header) write_library((yyvsp[-1].str), (yyvsp[-2].attr_list));
                                                  if (!parse_only && do_idfile) write_libid((yyvsp[-1].str), (yyvsp[-2].attr_list));
                                                ;}
     break;
 
-  case 37:
-#line 371 "parser.y"
-    { end_typelib(); ;}
-    break;
-
   case 38:
-#line 374 "parser.y"
-    { (yyval.var_list) = NULL; ;}
+#line 372 "parser.y"
+    { if (!parse_only) end_typelib(); ;}
     break;
 
-  case 40:
-#line 378 "parser.y"
+  case 39:
+#line 375 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 41:
-#line 381 "parser.y"
-    { check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); ;}
+#line 379 "parser.y"
+    { (yyval.var_list) = NULL; ;}
     break;
 
   case 42:
 #line 382 "parser.y"
+    { check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); ;}
+    break;
+
+  case 43:
+#line 383 "parser.y"
     { check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var)); ;}
     break;
 
-  case 44:
-#line 387 "parser.y"
+  case 45:
+#line 388 "parser.y"
     { (yyval.var) = (yyvsp[-1].pident)->var;
                                                  (yyval.var)->attrs = (yyvsp[-3].attr_list);
                                                  set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident)->ptr_level, (yyvsp[0].array_dims), TRUE);
@@ -2365,16 +2366,16 @@ yyreduce:
                                                ;}
     break;
 
-  case 45:
-#line 392 "parser.y"
+  case 46:
+#line 393 "parser.y"
     { (yyval.var) = (yyvsp[-1].pident)->var;
                                                  set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident)->ptr_level, (yyvsp[0].array_dims), TRUE);
                                                  free((yyvsp[-1].pident));
                                                ;}
     break;
 
-  case 46:
-#line 396 "parser.y"
+  case 47:
+#line 397 "parser.y"
     { (yyval.var) = (yyvsp[-3].pident)->var;
                                                  (yyval.var)->attrs = (yyvsp[-5].attr_list);
                                                  set_type((yyval.var), (yyvsp[-4].type), (yyvsp[-3].pident)->ptr_level - 1, NULL, TRUE);
@@ -2383,8 +2384,8 @@ yyreduce:
                                                ;}
     break;
 
-  case 47:
-#line 402 "parser.y"
+  case 48:
+#line 403 "parser.y"
     { (yyval.var) = (yyvsp[-3].pident)->var;
                                                  set_type((yyval.var), (yyvsp[-4].type), (yyvsp[-3].pident)->ptr_level - 1, NULL, TRUE);
                                                  free((yyvsp[-3].pident));
@@ -2392,492 +2393,492 @@ yyreduce:
                                                ;}
     break;
 
-  case 48:
-#line 409 "parser.y"
-    { (yyval.array_dims) = NULL; ;}
-    break;
-
   case 49:
 #line 410 "parser.y"
-    { (yyval.array_dims) = (yyvsp[-1].array_dims); ;}
+    { (yyval.array_dims) = NULL; ;}
     break;
 
   case 50:
 #line 411 "parser.y"
-    { (yyval.array_dims) = append_array( NULL, make_expr(EXPR_VOID) ); ;}
+    { (yyval.array_dims) = (yyvsp[-1].array_dims); ;}
     break;
 
   case 51:
-#line 414 "parser.y"
-    { (yyval.array_dims) = append_array( NULL, (yyvsp[0].expr) ); ;}
+#line 412 "parser.y"
+    { (yyval.array_dims) = append_array( NULL, make_expr(EXPR_VOID) ); ;}
     break;
 
   case 52:
 #line 415 "parser.y"
-    { (yyval.array_dims) = append_array( (yyvsp[-2].array_dims), (yyvsp[0].expr) ); ;}
+    { (yyval.array_dims) = append_array( NULL, (yyvsp[0].expr) ); ;}
     break;
 
   case 53:
 #line 416 "parser.y"
-    { (yyval.array_dims) = append_array( (yyvsp[-3].array_dims), (yyvsp[0].expr) ); ;}
+    { (yyval.array_dims) = append_array( (yyvsp[-2].array_dims), (yyvsp[0].expr) ); ;}
     break;
 
   case 54:
-#line 419 "parser.y"
+#line 417 "parser.y"
+    { (yyval.array_dims) = append_array( (yyvsp[-3].array_dims), (yyvsp[0].expr) ); ;}
+    break;
+
+  case 55:
+#line 420 "parser.y"
     { (yyval.attr_list) = NULL; ;}
     break;
 
-  case 56:
-#line 424 "parser.y"
+  case 57:
+#line 425 "parser.y"
     { (yyval.attr_list) = (yyvsp[-1].attr_list);
                                                  if (!(yyval.attr_list))
                                                    error_loc("empty attribute lists unsupported\n");
                                                ;}
     break;
 
-  case 57:
-#line 430 "parser.y"
-    { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); ;}
-    break;
-
   case 58:
 #line 431 "parser.y"
-    { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); ;}
+    { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); ;}
     break;
 
   case 59:
 #line 432 "parser.y"
-    { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); ;}
+    { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); ;}
     break;
 
   case 60:
-#line 435 "parser.y"
-    { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); ;}
+#line 433 "parser.y"
+    { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); ;}
     break;
 
   case 61:
 #line 436 "parser.y"
-    { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); ;}
+    { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); ;}
     break;
 
   case 62:
-#line 439 "parser.y"
-    { (yyval.attr) = NULL; ;}
+#line 437 "parser.y"
+    { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); ;}
     break;
 
   case 63:
 #line 440 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); ;}
+    { (yyval.attr) = NULL; ;}
     break;
 
   case 64:
 #line 441 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_APPOBJECT); ;}
+    { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); ;}
     break;
 
   case 65:
 #line 442 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_ASYNC); ;}
+    { (yyval.attr) = make_attr(ATTR_APPOBJECT); ;}
     break;
 
   case 66:
 #line 443 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); ;}
+    { (yyval.attr) = make_attr(ATTR_ASYNC); ;}
     break;
 
   case 67:
 #line 444 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_BINDABLE); ;}
+    { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); ;}
     break;
 
   case 68:
 #line 445 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); ;}
+    { (yyval.attr) = make_attr(ATTR_BINDABLE); ;}
     break;
 
   case 69:
 #line 446 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); ;}
+    { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); ;}
     break;
 
   case 70:
 #line 447 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
+    { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); ;}
     break;
 
   case 71:
 #line 448 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
+    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
     break;
 
   case 72:
 #line 449 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
+    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
     break;
 
   case 73:
 #line 450 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
+    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
     break;
 
   case 74:
 #line 451 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
+    { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
     break;
 
   case 75:
 #line 452 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
+    { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
     break;
 
   case 76:
 #line 453 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_EXPR, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
     break;
 
   case 77:
 #line 454 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_STRING, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_EXPR, (yyvsp[-1].expr)); ;}
     break;
 
   case 78:
 #line 455 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
+    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_STRING, (yyvsp[-1].str)); ;}
     break;
 
   case 79:
 #line 456 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
+    { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
     break;
 
   case 80:
 #line 457 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
     break;
 
   case 81:
 #line 458 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DUAL); ;}
+    { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); ;}
     break;
 
   case 82:
 #line 459 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); ;}
+    { (yyval.attr) = make_attr(ATTR_DUAL); ;}
     break;
 
   case 83:
 #line 460 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ENTRY_STRING, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); ;}
     break;
 
   case 84:
 #line 461 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ENTRY_ORDINAL, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attrp(ATTR_ENTRY_STRING, (yyvsp[-1].str)); ;}
     break;
 
   case 85:
 #line 462 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
+    { (yyval.attr) = make_attrp(ATTR_ENTRY_ORDINAL, (yyvsp[-1].expr)); ;}
     break;
 
   case 86:
 #line 463 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
+    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
     break;
 
   case 87:
 #line 464 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
     break;
 
   case 88:
 #line 465 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); ;}
     break;
 
   case 89:
 #line 466 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); ;}
     break;
 
   case 90:
 #line 467 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); ;}
     break;
 
   case 91:
 #line 468 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); ;}
     break;
 
   case 92:
 #line 469 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
+    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); ;}
     break;
 
   case 93:
 #line 470 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
     break;
 
   case 94:
 #line 471 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
+    { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); ;}
     break;
 
   case 95:
 #line 472 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
     break;
 
   case 96:
 #line 473 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
+    { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); ;}
     break;
 
   case 97:
 #line 474 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].str)); ;}
+    { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
     break;
 
   case 98:
 #line 475 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_IN); ;}
+    { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].str)); ;}
     break;
 
   case 99:
 #line 476 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
+    { (yyval.attr) = make_attr(ATTR_IN); ;}
     break;
 
   case 100:
 #line 477 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); ;}
+    { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
     break;
 
   case 101:
 #line 478 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
+    { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); ;}
     break;
 
   case 102:
 #line 479 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
+    { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
     break;
 
   case 103:
 #line 480 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
+    { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
     break;
 
   case 104:
 #line 481 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
+    { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
     break;
 
   case 105:
 #line 482 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
+    { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
     break;
 
   case 106:
 #line 483 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_ODL); ;}
+    { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
     break;
 
   case 107:
 #line 484 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
+    { (yyval.attr) = make_attr(ATTR_ODL); ;}
     break;
 
   case 108:
 #line 485 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
+    { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
     break;
 
   case 109:
 #line 486 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OUT); ;}
+    { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
     break;
 
   case 110:
 #line 487 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); ;}
+    { (yyval.attr) = make_attr(ATTR_OUT); ;}
     break;
 
   case 111:
 #line 488 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
+    { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); ;}
     break;
 
   case 112:
 #line 489 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
+    { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
     break;
 
   case 113:
 #line 490 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
+    { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
     break;
 
   case 114:
 #line 491 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
+    { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
     break;
 
   case 115:
 #line 492 "parser.y"
-    { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
-                                                     list = append_expr( list, (yyvsp[-1].expr) );
-                                                     (yyval.attr) = make_attrp(ATTR_RANGE, list); ;}
+    { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
     break;
 
   case 116:
-#line 495 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_READONLY); ;}
+#line 493 "parser.y"
+    { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
+                                                     list = append_expr( list, (yyvsp[-1].expr) );
+                                                     (yyval.attr) = make_attrp(ATTR_RANGE, list); ;}
     break;
 
   case 117:
 #line 496 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); ;}
+    { (yyval.attr) = make_attr(ATTR_READONLY); ;}
     break;
 
   case 118:
 #line 497 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_RESTRICTED); ;}
+    { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); ;}
     break;
 
   case 119:
 #line 498 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_RETVAL); ;}
+    { (yyval.attr) = make_attr(ATTR_RESTRICTED); ;}
     break;
 
   case 120:
 #line 499 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); ;}
+    { (yyval.attr) = make_attr(ATTR_RETVAL); ;}
     break;
 
   case 121:
 #line 500 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_SOURCE); ;}
+    { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); ;}
     break;
 
   case 122:
 #line 501 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); ;}
+    { (yyval.attr) = make_attr(ATTR_SOURCE); ;}
     break;
 
   case 123:
 #line 502 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_STRING); ;}
+    { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); ;}
     break;
 
   case 124:
 #line 503 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); ;}
+    { (yyval.attr) = make_attr(ATTR_STRING); ;}
     break;
 
   case 125:
 #line 504 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); ;}
+    { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); ;}
     break;
 
   case 126:
 #line 505 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); ;}
+    { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); ;}
     break;
 
   case 127:
 #line 506 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); ;}
+    { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); ;}
     break;
 
   case 128:
 #line 507 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_V1ENUM); ;}
+    { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); ;}
     break;
 
   case 129:
 #line 508 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_VARARG); ;}
+    { (yyval.attr) = make_attr(ATTR_V1ENUM); ;}
     break;
 
   case 130:
 #line 509 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); ;}
+    { (yyval.attr) = make_attr(ATTR_VARARG); ;}
     break;
 
   case 131:
 #line 510 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); ;}
+    { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); ;}
     break;
 
   case 132:
 #line 511 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); ;}
+    break;
+
+  case 133:
+#line 512 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); ;}
     break;
 
-  case 134:
-#line 516 "parser.y"
+  case 135:
+#line 517 "parser.y"
     { if (!is_valid_uuid((yyvsp[0].str)))
                                                    error_loc("invalid UUID: %s\n", (yyvsp[0].str));
                                                  (yyval.uuid) = parse_uuid((yyvsp[0].str)); ;}
     break;
 
-  case 137:
-#line 525 "parser.y"
+  case 138:
+#line 526 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 138:
-#line 526 "parser.y"
+  case 139:
+#line 527 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;}
     break;
 
-  case 139:
-#line 529 "parser.y"
+  case 140:
+#line 530 "parser.y"
     { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
                                                  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
                                                  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
                                                ;}
     break;
 
-  case 140:
-#line 533 "parser.y"
+  case 141:
+#line 534 "parser.y"
     { attr_t *a = make_attr(ATTR_DEFAULT);
                                                  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
                                                  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
                                                ;}
     break;
 
-  case 141:
-#line 539 "parser.y"
+  case 142:
+#line 540 "parser.y"
     { (yyval.var) = reg_const((yyvsp[-2].var));
                                                  set_type((yyval.var), (yyvsp[-3].type), 0, NULL, FALSE);
                                                  (yyval.var)->eval = (yyvsp[0].expr);
                                                ;}
     break;
 
-  case 142:
-#line 545 "parser.y"
+  case 143:
+#line 546 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 143:
-#line 546 "parser.y"
+  case 144:
+#line 547 "parser.y"
     { (yyval.var_list) = (yyvsp[-1].var_list); ;}
     break;
 
-  case 145:
-#line 550 "parser.y"
+  case 146:
+#line 551 "parser.y"
     { if (!(yyvsp[0].var)->eval)
                                                    (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
                                                ;}
     break;
 
-  case 146:
-#line 554 "parser.y"
+  case 147:
+#line 555 "parser.y"
     { if (!(yyvsp[0].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -2887,23 +2888,23 @@ yyreduce:
                                                ;}
     break;
 
-  case 147:
-#line 563 "parser.y"
+  case 148:
+#line 564 "parser.y"
     { (yyval.var) = reg_const((yyvsp[-2].var));
                                                  (yyval.var)->eval = (yyvsp[0].expr);
                                                   (yyval.var)->type = make_int(0);
                                                ;}
     break;
 
-  case 148:
-#line 567 "parser.y"
+  case 149:
+#line 568 "parser.y"
     { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->type = make_int(0);
                                                ;}
     break;
 
-  case 149:
-#line 572 "parser.y"
+  case 150:
+#line 573 "parser.y"
     { (yyval.type) = get_typev(RPC_FC_ENUM16, (yyvsp[-3].var), tsENUM);
                                                  (yyval.type)->kind = TKIND_ENUM;
                                                  (yyval.type)->fields = (yyvsp[-1].var_list);
@@ -2913,188 +2914,188 @@ yyreduce:
                                                ;}
     break;
 
-  case 150:
-#line 581 "parser.y"
-    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
-    break;
-
   case 151:
 #line 582 "parser.y"
-    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
+    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
     break;
 
   case 152:
-#line 595 "parser.y"
-    { (yyval.expr) = make_expr(EXPR_VOID); ;}
+#line 583 "parser.y"
+    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
     break;
 
-  case 154:
-#line 599 "parser.y"
-    { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); ;}
+  case 153:
+#line 596 "parser.y"
+    { (yyval.expr) = make_expr(EXPR_VOID); ;}
     break;
 
   case 155:
 #line 600 "parser.y"
-    { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); ;}
+    { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); ;}
     break;
 
   case 156:
 #line 601 "parser.y"
-    { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); ;}
+    { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); ;}
     break;
 
   case 157:
 #line 602 "parser.y"
-    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;}
+    { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); ;}
     break;
 
   case 158:
 #line 603 "parser.y"
-    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;}
+    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;}
     break;
 
   case 159:
 #line 604 "parser.y"
-    { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); ;}
+    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;}
     break;
 
   case 160:
 #line 605 "parser.y"
-    { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); ;}
     break;
 
   case 161:
 #line 606 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 162:
 #line 607 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 163:
 #line 608 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 164:
 #line 609 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 165:
 #line 610 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 166:
 #line 611 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 167:
 #line 612 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 168:
 #line 613 "parser.y"
-    { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 169:
 #line 614 "parser.y"
-    { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
     break;
 
   case 170:
 #line 615 "parser.y"
-    { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); ;}
     break;
 
   case 171:
 #line 616 "parser.y"
-    { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); ;}
     break;
 
   case 172:
 #line 617 "parser.y"
-    { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); ;}
     break;
 
   case 173:
 #line 618 "parser.y"
-    { (yyval.expr) = make_exprt(EXPR_CAST, (yyvsp[-2].type), (yyvsp[0].expr)); ;}
+    { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); ;}
     break;
 
   case 174:
 #line 619 "parser.y"
-    { (yyval.expr) = make_exprt(EXPR_SIZEOF, (yyvsp[-1].type), NULL); ;}
+    { (yyval.expr) = make_exprt(EXPR_CAST, (yyvsp[-2].type), (yyvsp[0].expr)); ;}
     break;
 
   case 175:
 #line 620 "parser.y"
-    { (yyval.expr) = (yyvsp[-1].expr); ;}
+    { (yyval.expr) = make_exprt(EXPR_SIZEOF, (yyvsp[-1].type), NULL); ;}
     break;
 
   case 176:
-#line 623 "parser.y"
-    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
+#line 621 "parser.y"
+    { (yyval.expr) = (yyvsp[-1].expr); ;}
     break;
 
   case 177:
 #line 624 "parser.y"
-    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
+    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
     break;
 
   case 178:
-#line 627 "parser.y"
+#line 625 "parser.y"
+    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
+    break;
+
+  case 179:
+#line 628 "parser.y"
     { (yyval.expr) = (yyvsp[0].expr);
                                                  if (!(yyval.expr)->is_const)
                                                      error_loc("expression is not constant\n");
                                                ;}
     break;
 
-  case 179:
-#line 633 "parser.y"
+  case 180:
+#line 634 "parser.y"
     { (yyval.var) = (yyvsp[0].var);
                                                  set_type((yyval.var), (yyvsp[-1].type), 0, NULL, FALSE);
                                                ;}
     break;
 
-  case 180:
-#line 638 "parser.y"
-    { (yyval.var_list) = NULL; ;}
-    break;
-
   case 181:
 #line 639 "parser.y"
-    { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;}
+    { (yyval.var_list) = NULL; ;}
     break;
 
   case 182:
-#line 642 "parser.y"
-    { (yyval.var) = (yyvsp[-1].var); ;}
+#line 640 "parser.y"
+    { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;}
     break;
 
   case 183:
 #line 643 "parser.y"
-    { (yyval.var) = make_var(NULL); (yyval.var)->type = (yyvsp[-1].type); (yyval.var)->attrs = (yyvsp[-2].attr_list); ;}
+    { (yyval.var) = (yyvsp[-1].var); ;}
     break;
 
   case 184:
 #line 644 "parser.y"
-    { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); ;}
+    { (yyval.var) = make_var(NULL); (yyval.var)->type = (yyvsp[-1].type); (yyval.var)->attrs = (yyvsp[-2].attr_list); ;}
     break;
 
   case 185:
 #line 645 "parser.y"
-    { (yyval.var) = NULL; ;}
+    { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); ;}
     break;
 
   case 186:
-#line 648 "parser.y"
+#line 646 "parser.y"
+    { (yyval.var) = NULL; ;}
+    break;
+
+  case 187:
+#line 649 "parser.y"
     { (yyval.var) = (yyvsp[-1].pident)->var;
                                                  (yyval.var)->attrs = (yyvsp[-3].attr_list);
                                                  set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident)->ptr_level, (yyvsp[0].array_dims), FALSE);
@@ -3102,8 +3103,8 @@ yyreduce:
                                                ;}
     break;
 
-  case 187:
-#line 657 "parser.y"
+  case 188:
+#line 658 "parser.y"
     { var_t *v = (yyvsp[-3].pident)->var;
                                                  v->attrs = (yyvsp[-6].attr_list);
                                                  set_type(v, (yyvsp[-5].type), (yyvsp[-3].pident)->ptr_level, NULL, FALSE);
@@ -3115,19 +3116,14 @@ yyreduce:
                                                ;}
     break;
 
-  case 188:
-#line 668 "parser.y"
-    { (yyval.var) = NULL; ;}
-    break;
-
-  case 190:
-#line 672 "parser.y"
+  case 189:
+#line 669 "parser.y"
     { (yyval.var) = NULL; ;}
     break;
 
   case 191:
 #line 673 "parser.y"
-    { (yyval.var) = make_var((yyvsp[0].str)); ;}
+    { (yyval.var) = NULL; ;}
     break;
 
   case 192:
@@ -3136,18 +3132,18 @@ yyreduce:
     break;
 
   case 193:
-#line 677 "parser.y"
+#line 675 "parser.y"
     { (yyval.var) = make_var((yyvsp[0].str)); ;}
     break;
 
   case 194:
-#line 679 "parser.y"
+#line 678 "parser.y"
     { (yyval.var) = make_var((yyvsp[0].str)); ;}
     break;
 
   case 195:
-#line 682 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+#line 680 "parser.y"
+    { (yyval.var) = make_var((yyvsp[0].str)); ;}
     break;
 
   case 196:
@@ -3155,13 +3151,18 @@ yyreduce:
     { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
-  case 198:
-#line 685 "parser.y"
-    { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = 1; ;}
+  case 197:
+#line 684 "parser.y"
+    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
   case 199:
 #line 686 "parser.y"
+    { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = 1; ;}
+    break;
+
+  case 200:
+#line 687 "parser.y"
     { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = -1;
                                                  switch ((yyval.type)->type) {
                                                  case RPC_FC_CHAR:  break;
@@ -3180,24 +3181,19 @@ yyreduce:
                                                ;}
     break;
 
-  case 200:
-#line 702 "parser.y"
-    { (yyval.type) = make_int(-1); ;}
-    break;
-
   case 201:
 #line 703 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+    { (yyval.type) = make_int(-1); ;}
     break;
 
   case 202:
 #line 704 "parser.y"
-    { (yyval.type) = duptype(find_type("float", 0), 1); ;}
+    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
   case 203:
 #line 705 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+    { (yyval.type) = duptype(find_type("float", 0), 1); ;}
     break;
 
   case 204:
@@ -3215,24 +3211,24 @@ yyreduce:
     { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
-  case 209:
-#line 715 "parser.y"
+  case 207:
+#line 709 "parser.y"
     { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
   case 210:
 #line 716 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
   case 211:
 #line 717 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+    { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
     break;
 
   case 212:
 #line 718 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
   case 213:
@@ -3242,7 +3238,7 @@ yyreduce:
 
   case 214:
 #line 720 "parser.y"
-    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+    { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
     break;
 
   case 215:
@@ -3251,20 +3247,25 @@ yyreduce:
     break;
 
   case 216:
-#line 724 "parser.y"
-    { (yyval.type) = make_class((yyvsp[0].str)); ;}
+#line 722 "parser.y"
+    { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
     break;
 
   case 217:
 #line 725 "parser.y"
+    { (yyval.type) = make_class((yyvsp[0].str)); ;}
+    break;
+
+  case 218:
+#line 726 "parser.y"
     { (yyval.type) = find_type((yyvsp[0].str), 0);
                                                  if ((yyval.type)->defined) error_loc("multiple definition error\n");
                                                  if ((yyval.type)->kind != TKIND_COCLASS) error_loc("%s was not declared a coclass\n", (yyvsp[0].str));
                                                ;}
     break;
 
-  case 218:
-#line 731 "parser.y"
+  case 219:
+#line 732 "parser.y"
     { (yyval.type) = (yyvsp[0].type);
                                                  (yyval.type)->attrs = (yyvsp[-1].attr_list);
                                                  if (!parse_only && do_header)
@@ -3274,32 +3275,27 @@ yyreduce:
                                                ;}
     break;
 
-  case 219:
-#line 740 "parser.y"
+  case 220:
+#line 741 "parser.y"
     { (yyval.type) = (yyvsp[-3].type);
                                                  (yyval.type)->ifaces = (yyvsp[-1].ifref_list);
                                                  (yyval.type)->defined = TRUE;
                                                ;}
     break;
 
-  case 220:
-#line 746 "parser.y"
-    { (yyval.ifref_list) = NULL; ;}
-    break;
-
   case 221:
 #line 747 "parser.y"
-    { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); ;}
+    { (yyval.ifref_list) = NULL; ;}
     break;
 
   case 222:
-#line 751 "parser.y"
-    { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); ;}
+#line 748 "parser.y"
+    { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); ;}
     break;
 
   case 223:
-#line 754 "parser.y"
-    { (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;}
+#line 752 "parser.y"
+    { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); ;}
     break;
 
   case 224:
@@ -3308,7 +3304,12 @@ yyreduce:
     break;
 
   case 225:
-#line 758 "parser.y"
+#line 756 "parser.y"
+    { (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;}
+    break;
+
+  case 226:
+#line 759 "parser.y"
     { attr_t *attrs;
                                                  (yyval.type) = (yyvsp[0].type);
                                                  if ((yyval.type)->defined) error_loc("multiple definition error\n");
@@ -3321,28 +3322,28 @@ yyreduce:
                                                ;}
     break;
 
-  case 226:
-#line 770 "parser.y"
-    { (yyval.var_list) = NULL; ;}
-    break;
-
   case 227:
 #line 771 "parser.y"
-    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); ;}
+    { (yyval.var_list) = NULL; ;}
     break;
 
   case 228:
-#line 774 "parser.y"
-    { (yyval.func_list) = NULL; ;}
+#line 772 "parser.y"
+    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); ;}
     break;
 
   case 229:
 #line 775 "parser.y"
-    { (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;}
+    { (yyval.func_list) = NULL; ;}
     break;
 
   case 230:
-#line 781 "parser.y"
+#line 776 "parser.y"
+    { (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;}
+    break;
+
+  case 231:
+#line 782 "parser.y"
     { (yyval.type) = (yyvsp[-4].type);
                                                  (yyval.type)->fields = (yyvsp[-2].var_list);
                                                  (yyval.type)->funcs = (yyvsp[-1].func_list);
@@ -3351,8 +3352,8 @@ yyreduce:
                                                ;}
     break;
 
-  case 231:
-#line 788 "parser.y"
+  case 232:
+#line 789 "parser.y"
     { (yyval.type) = (yyvsp[-4].type);
                                                  (yyval.type)->fields = (yyvsp[-2].type)->fields;
                                                  (yyval.type)->funcs = (yyvsp[-2].type)->funcs;
@@ -3361,19 +3362,14 @@ yyreduce:
                                                ;}
     break;
 
-  case 232:
-#line 796 "parser.y"
-    { (yyval.type) = NULL; ;}
-    break;
-
   case 233:
 #line 797 "parser.y"
-    { (yyval.type) = find_type2((yyvsp[0].str), 0); ;}
+    { (yyval.type) = NULL; ;}
     break;
 
   case 234:
-#line 800 "parser.y"
-    { (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;}
+#line 798 "parser.y"
+    { (yyval.type) = find_type2((yyvsp[0].str), 0); ;}
     break;
 
   case 235:
@@ -3382,7 +3378,12 @@ yyreduce:
     break;
 
   case 236:
-#line 804 "parser.y"
+#line 802 "parser.y"
+    { (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;}
+    break;
+
+  case 237:
+#line 805 "parser.y"
     { (yyval.ifinfo).interface = (yyvsp[0].type);
                                                  (yyval.ifinfo).old_pointer_default = pointer_default;
                                                  if (is_attr((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT))
@@ -3394,8 +3395,8 @@ yyreduce:
                                                ;}
     break;
 
-  case 237:
-#line 816 "parser.y"
+  case 238:
+#line 817 "parser.y"
     { (yyval.type) = (yyvsp[-4].ifinfo).interface;
                                                  (yyval.type)->ref = (yyvsp[-3].type);
                                                  (yyval.type)->funcs = (yyvsp[-1].func_list);
@@ -3407,8 +3408,8 @@ yyreduce:
                                                ;}
     break;
 
-  case 238:
-#line 828 "parser.y"
+  case 239:
+#line 829 "parser.y"
     { (yyval.type) = (yyvsp[-6].ifinfo).interface;
                                                  (yyval.type)->ref = find_type2((yyvsp[-4].str), 0);
                                                  if (!(yyval.type)->ref) error_loc("base class '%s' not found in import\n", (yyvsp[-4].str));
@@ -3421,14 +3422,9 @@ yyreduce:
                                                ;}
     break;
 
-  case 239:
-#line 838 "parser.y"
-    { (yyval.type) = (yyvsp[0].type); ;}
-    break;
-
   case 240:
-#line 842 "parser.y"
-    { (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;}
+#line 839 "parser.y"
+    { (yyval.type) = (yyvsp[0].type); ;}
     break;
 
   case 241:
@@ -3437,8 +3433,8 @@ yyreduce:
     break;
 
   case 242:
-#line 846 "parser.y"
-    { (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;}
+#line 844 "parser.y"
+    { (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;}
     break;
 
   case 243:
@@ -3447,67 +3443,72 @@ yyreduce:
     break;
 
   case 244:
-#line 850 "parser.y"
+#line 848 "parser.y"
+    { (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;}
+    break;
+
+  case 245:
+#line 851 "parser.y"
     { (yyval.type) = (yyvsp[0].type);
                                                  (yyval.type)->attrs = (yyvsp[-1].attr_list);
                                                ;}
     break;
 
-  case 245:
-#line 855 "parser.y"
+  case 246:
+#line 856 "parser.y"
     { (yyval.type) = (yyvsp[-3].type);
                                                  (yyval.type)->funcs = (yyvsp[-1].func_list);
                                                  /* FIXME: if (!parse_only && do_header) write_module($$); */
                                                ;}
     break;
 
-  case 246:
-#line 861 "parser.y"
-    { (yyval.pident) = (yyvsp[0].pident); (yyval.pident)->ptr_level++; ;}
-    break;
-
   case 247:
 #line 862 "parser.y"
-    { (yyval.pident) = (yyvsp[0].pident); /* FIXME */ ;}
+    { (yyval.pident) = (yyvsp[0].pident); (yyval.pident)->ptr_level++; ;}
     break;
 
   case 248:
-#line 865 "parser.y"
-    { (yyval.pident) = make_pident((yyvsp[0].var)); ;}
+#line 863 "parser.y"
+    { (yyval.pident) = (yyvsp[0].pident); /* FIXME */ ;}
     break;
 
-  case 250:
-#line 867 "parser.y"
-    { (yyval.pident) = (yyvsp[-1].pident); ;}
+  case 249:
+#line 866 "parser.y"
+    { (yyval.pident) = make_pident((yyvsp[0].var)); ;}
     break;
 
   case 251:
-#line 871 "parser.y"
-    { (yyval.pident_list) = append_pident( NULL, (yyvsp[0].pident) ); ;}
+#line 868 "parser.y"
+    { (yyval.pident) = (yyvsp[-1].pident); ;}
     break;
 
   case 252:
 #line 872 "parser.y"
-    { (yyval.pident_list) = append_pident( (yyvsp[-2].pident_list), (yyvsp[0].pident) ); ;}
+    { (yyval.pident_list) = append_pident( NULL, (yyvsp[0].pident) ); ;}
     break;
 
   case 253:
-#line 876 "parser.y"
-    { (yyval.num) = RPC_FC_RP; ;}
+#line 873 "parser.y"
+    { (yyval.pident_list) = append_pident( (yyvsp[-2].pident_list), (yyvsp[0].pident) ); ;}
     break;
 
   case 254:
 #line 877 "parser.y"
-    { (yyval.num) = RPC_FC_UP; ;}
+    { (yyval.num) = RPC_FC_RP; ;}
     break;
 
   case 255:
 #line 878 "parser.y"
-    { (yyval.num) = RPC_FC_FP; ;}
+    { (yyval.num) = RPC_FC_UP; ;}
     break;
 
   case 256:
-#line 881 "parser.y"
+#line 879 "parser.y"
+    { (yyval.num) = RPC_FC_FP; ;}
+    break;
+
+  case 257:
+#line 882 "parser.y"
     { (yyval.type) = get_typev(RPC_FC_STRUCT, (yyvsp[-3].var), tsSTRUCT);
                                                   /* overwrite RPC_FC_STRUCT with a more exact type */
                                                  (yyval.type)->type = get_struct_type( (yyvsp[-1].var_list) );
@@ -3519,70 +3520,70 @@ yyreduce:
                                                 ;}
     break;
 
-  case 257:
-#line 892 "parser.y"
-    { (yyval.type) = duptype(find_type("void", 0), 1); ;}
-    break;
-
   case 258:
 #line 893 "parser.y"
-    { (yyval.type) = find_type((yyvsp[0].str), 0); ;}
+    { (yyval.type) = duptype(find_type("void", 0), 1); ;}
     break;
 
   case 259:
 #line 894 "parser.y"
-    { (yyval.type) = (yyvsp[0].type); ;}
+    { (yyval.type) = find_type((yyvsp[0].str), 0); ;}
     break;
 
   case 260:
 #line 895 "parser.y"
-    { (yyval.type) = duptype((yyvsp[0].type), 1); (yyval.type)->is_const = TRUE; ;}
+    { (yyval.type) = (yyvsp[0].type); ;}
     break;
 
   case 261:
 #line 896 "parser.y"
-    { (yyval.type) = (yyvsp[0].type); ;}
+    { (yyval.type) = duptype((yyvsp[0].type), 1); (yyval.type)->is_const = TRUE; ;}
     break;
 
   case 262:
 #line 897 "parser.y"
-    { (yyval.type) = find_type2((yyvsp[0].str), tsENUM); ;}
+    { (yyval.type) = (yyvsp[0].type); ;}
     break;
 
   case 263:
 #line 898 "parser.y"
-    { (yyval.type) = (yyvsp[0].type); ;}
+    { (yyval.type) = find_type2((yyvsp[0].str), tsENUM); ;}
     break;
 
   case 264:
 #line 899 "parser.y"
-    { (yyval.type) = get_type(RPC_FC_STRUCT, (yyvsp[0].str), tsSTRUCT); ;}
+    { (yyval.type) = (yyvsp[0].type); ;}
     break;
 
   case 265:
 #line 900 "parser.y"
-    { (yyval.type) = (yyvsp[0].type); ;}
+    { (yyval.type) = get_type(RPC_FC_STRUCT, (yyvsp[0].str), tsSTRUCT); ;}
     break;
 
   case 266:
 #line 901 "parser.y"
-    { (yyval.type) = find_type2((yyvsp[0].str), tsUNION); ;}
+    { (yyval.type) = (yyvsp[0].type); ;}
     break;
 
   case 267:
 #line 902 "parser.y"
-    { (yyval.type) = make_safearray((yyvsp[-1].type)); ;}
+    { (yyval.type) = find_type2((yyvsp[0].str), tsUNION); ;}
     break;
 
   case 268:
-#line 905 "parser.y"
+#line 903 "parser.y"
+    { (yyval.type) = make_safearray((yyvsp[-1].type)); ;}
+    break;
+
+  case 269:
+#line 906 "parser.y"
     { reg_typedefs((yyvsp[-1].type), (yyvsp[0].pident_list), (yyvsp[-2].attr_list));
                                                  process_typedefs((yyvsp[0].pident_list));
                                                ;}
     break;
 
-  case 269:
-#line 910 "parser.y"
+  case 270:
+#line 911 "parser.y"
     { (yyval.type) = get_typev(RPC_FC_NON_ENCAPSULATED_UNION, (yyvsp[-3].var), tsUNION);
                                                  (yyval.type)->kind = TKIND_UNION;
                                                  (yyval.type)->fields = (yyvsp[-1].var_list);
@@ -3590,8 +3591,8 @@ yyreduce:
                                                ;}
     break;
 
-  case 270:
-#line 917 "parser.y"
+  case 271:
+#line 918 "parser.y"
     { var_t *u = (yyvsp[-3].var);
                                                  (yyval.type) = get_typev(RPC_FC_ENCAPSULATED_UNION, (yyvsp[-8].var), tsUNION);
                                                  (yyval.type)->kind = TKIND_UNION;
@@ -3606,13 +3607,13 @@ yyreduce:
                                                ;}
     break;
 
-  case 271:
-#line 932 "parser.y"
+  case 272:
+#line 933 "parser.y"
     { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); ;}
     break;
 
-  case 272:
-#line 933 "parser.y"
+  case 273:
+#line 934 "parser.y"
     { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); ;}
     break;
 
@@ -3621,7 +3622,7 @@ yyreduce:
     }
 
 /* Line 1126 of yacc.c.  */
-#line 3625 "parser.tab.c"
+#line 3626 "parser.tab.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3889,7 +3890,7 @@ yyreturn:
 }
 
 
-#line 936 "parser.y"
+#line 937 "parser.y"
 
 
 static void decl_builtin(const char *name, unsigned char type)
@@ -4812,7 +4813,6 @@ static int get_struct_type(var_list_t *fields)
     case RPC_FC_FLOAT:
     case RPC_FC_DOUBLE:
     case RPC_FC_STRUCT:
-    case RPC_FC_ENUM16:
     case RPC_FC_ENUM32:
       break;
 
@@ -4863,6 +4863,7 @@ static int get_struct_type(var_list_t *fields)
     case RPC_FC_ENCAPSULATED_UNION:
     case RPC_FC_NON_ENCAPSULATED_UNION:
     case RPC_FC_BOGUS_STRUCT:
+    case RPC_FC_ENUM16:
       return RPC_FC_BOGUS_STRUCT;
     }
   }
index 499ae15..3a89723 100644 (file)
@@ -320,6 +320,7 @@ imp_statements:                                     {}
        | imp_statements moduledef              { if (!parse_only) add_typelib_entry($2); }
        | imp_statements statement              {}
        | imp_statements importlib              {}
+       | imp_statements librarydef             {}
        ;
 
 int_statements:                                        { $$ = NULL; }
@@ -363,12 +364,12 @@ importlib: tIMPORTLIB '(' aSTRING ')'             { if(!parse_only) add_importlib($3); }
 
 libraryhdr: tLIBRARY aIDENTIFIER               { $$ = $2; }
        ;
-library_start: attributes libraryhdr '{'       { start_typelib($2, $1);
+library_start: attributes libraryhdr '{'       { if (!parse_only) start_typelib($2, $1);
                                                  if (!parse_only && do_header) write_library($2, $1);
                                                  if (!parse_only && do_idfile) write_libid($2, $1);
                                                }
        ;
-librarydef: library_start imp_statements '}'   { end_typelib(); }
+librarydef: library_start imp_statements '}'   { if (!parse_only) end_typelib(); }
        ;
 
 m_args:                                                { $$ = NULL; }
@@ -1855,7 +1856,6 @@ static int get_struct_type(var_list_t *fields)
     case RPC_FC_FLOAT:
     case RPC_FC_DOUBLE:
     case RPC_FC_STRUCT:
-    case RPC_FC_ENUM16:
     case RPC_FC_ENUM32:
       break;
 
@@ -1906,6 +1906,7 @@ static int get_struct_type(var_list_t *fields)
     case RPC_FC_ENCAPSULATED_UNION:
     case RPC_FC_NON_ENCAPSULATED_UNION:
     case RPC_FC_BOGUS_STRUCT:
+    case RPC_FC_ENUM16:
       return RPC_FC_BOGUS_STRUCT;
     }
   }
index f8c9b2c..79e59c4 100644 (file)
@@ -524,8 +524,11 @@ char *yytext;
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>
+
 #ifdef HAVE_UNISTD_H
-# include <unistd.h>
+#include <unistd.h>
+#else
+#define YY_NO_UNISTD_H
 #endif
 
 #include "widl.h"
@@ -583,7 +586,7 @@ UUID *parse_uuid(const char *u)
  * The flexer starts here
  **************************************************************************
  */
-#line 587 "parser.yy.c"
+#line 590 "parser.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -737,9 +740,9 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
 
-#line 108 "parser.l"
+#line 111 "parser.l"
 
-#line 743 "parser.yy.c"
+#line 746 "parser.yy.c"
 
        if ( yy_init )
                {
@@ -825,12 +828,12 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 109 "parser.l"
+#line 112 "parser.l"
 yy_push_state(PP_LINE);
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 110 "parser.l"
+#line 113 "parser.l"
 {
                             int lineno;
                             char *cptr, *fname;
@@ -853,12 +856,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 129 "parser.l"
+#line 132 "parser.l"
 yy_push_state(QUOTE); cbufidx = 0;
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 130 "parser.l"
+#line 133 "parser.l"
 {
                                yy_pop_state();
                                parser_lval.str = get_buffered_cstring();
@@ -866,40 +869,40 @@ YY_RULE_SETUP
                        }
        YY_BREAK
 case 5:
-#line 136 "parser.l"
+#line 139 "parser.l"
 case 6:
 YY_RULE_SETUP
-#line 136 "parser.l"
+#line 139 "parser.l"
 addcchar(yytext[1]);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 137 "parser.l"
+#line 140 "parser.l"
 addcchar('\\'); addcchar(yytext[1]);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 138 "parser.l"
+#line 141 "parser.l"
 addcchar(yytext[0]);
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 139 "parser.l"
+#line 142 "parser.l"
 yy_push_state(ATTR); return '[';
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 140 "parser.l"
+#line 143 "parser.l"
 yy_pop_state(); return ']';
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 141 "parser.l"
+#line 144 "parser.l"
 return attr_token(yytext);
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 142 "parser.l"
+#line 145 "parser.l"
 {
                                parser_lval.uuid = parse_uuid(yytext);
                                return aUUID;
@@ -907,7 +910,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 146 "parser.l"
+#line 149 "parser.l"
 {
                                parser_lval.num = strtoul(yytext, NULL, 0);
                                return aHEXNUM;
@@ -915,7 +918,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 150 "parser.l"
+#line 153 "parser.l"
 {
                                parser_lval.num = strtoul(yytext, NULL, 0);
                                return aNUM;
@@ -923,7 +926,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 154 "parser.l"
+#line 157 "parser.l"
 {
                                parser_lval.dbl = strtod(yytext, NULL);
                                return aDOUBLE;
@@ -934,44 +937,44 @@ case 16:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 158 "parser.l"
+#line 161 "parser.l"
 return tSAFEARRAY;
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 159 "parser.l"
+#line 162 "parser.l"
 return kw_token(yytext);
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 160 "parser.l"
+#line 163 "parser.l"
 line_number++;
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 161 "parser.l"
+#line 164 "parser.l"
 
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 162 "parser.l"
+#line 165 "parser.l"
 return SHL;
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 163 "parser.l"
+#line 166 "parser.l"
 return SHR;
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 164 "parser.l"
+#line 167 "parser.l"
 return yytext[0];
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(QUOTE):
 case YY_STATE_EOF(ATTR):
 case YY_STATE_EOF(PP_LINE):
-#line 165 "parser.l"
+#line 168 "parser.l"
 {
                                if (import_stack_ptr) {
                                        pop_import();
@@ -982,10 +985,10 @@ case YY_STATE_EOF(PP_LINE):
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 172 "parser.l"
+#line 175 "parser.l"
 ECHO;
        YY_BREAK
-#line 989 "parser.yy.c"
+#line 992 "parser.yy.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -1871,7 +1874,7 @@ int main()
        return 0;
        }
 #endif
-#line 172 "parser.l"
+#line 175 "parser.l"
 
 
 #ifndef parser_wrap
index 07384e5..7222c7d 100644 (file)
@@ -28,9 +28,7 @@
 # include <unistd.h>
 #endif
 #include <string.h>
-#include <assert.h>
 #include <ctype.h>
-#include <signal.h>
 
 #include "widl.h"
 #include "utils.h"
index c866550..e636650 100644 (file)
@@ -27,9 +27,7 @@
 # include <unistd.h>
 #endif
 #include <string.h>
-#include <assert.h>
 #include <ctype.h>
-#include <signal.h>
 
 #include "widl.h"
 #include "utils.h"
index 41dd22f..ae23f94 100644 (file)
@@ -30,7 +30,6 @@
 #include <string.h>
 #include <assert.h>
 #include <ctype.h>
-#include <signal.h>
 #include <limits.h>
 
 #include "widl.h"
@@ -2356,6 +2355,13 @@ static size_t process_tfs(FILE *file, const ifref_list_t *ifaces, type_pred_t pr
             {
                 if (is_local(func->def->attrs)) continue;
 
+                if (!is_void(func->def->type))
+                    update_tfsoff(func->def->type,
+                                  write_typeformatstring_var(
+                                      file, 2, NULL, func->def->type,
+                                      func->def, &typeformat_offset),
+                                  file);
+
                 current_func = func;
                 if (func->args)
                     LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
@@ -2822,7 +2828,7 @@ static void write_remoting_arg(FILE *file, int indent, const func_t *func,
                 fprintf(file, ";\n");
             }
 
-            if ((phase == PHASE_FREE) || (pointer_type == RPC_FC_UP))
+            if (phase == PHASE_FREE || pass == PASS_RETURN || pointer_type == RPC_FC_UP)
                 print_phase_function(file, indent, "Pointer", phase, var,
                                      start_offset - (type->size_is ? 4 : 2));
             else
index 25cd6e7..43d16ec 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <unistd.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
 #include <string.h>
-#include <assert.h>
 #include <ctype.h>
-#include <signal.h>
 
 #define NONAMELESSUNION
 #define NONAMELESSSTRUCT
index 00762f4..a6bca99 100644 (file)
@@ -147,13 +147,13 @@ enum {
 static const char short_options[] =
     "cC:d:D:EhH:I:NpP:sS:tT:uU:VW";
 static const struct option long_options[] = {
-    { "dlldata", required_argument, 0, DLLDATA_OPTION },
-    { "dlldata-only", no_argument, 0, DLLDATA_ONLY_OPTION },
-    { "local-stubs", required_argument, 0, LOCAL_STUBS_OPTION },
-    { "oldnames", no_argument, 0, OLDNAMES_OPTION },
-    { "prefix-all", required_argument, 0, PREFIX_ALL_OPTION },
-    { "prefix-client", required_argument, 0, PREFIX_CLIENT_OPTION },
-    { "prefix-server", required_argument, 0, PREFIX_SERVER_OPTION },
+    { "dlldata", 1, 0, DLLDATA_OPTION },
+    { "dlldata-only", 0, 0, DLLDATA_ONLY_OPTION },
+    { "local-stubs", 1, 0, LOCAL_STUBS_OPTION },
+    { "oldnames", 0, 0, OLDNAMES_OPTION },
+    { "prefix-all", 1, 0, PREFIX_ALL_OPTION },
+    { "prefix-client", 1, 0, PREFIX_CLIENT_OPTION },
+    { "prefix-server", 1, 0, PREFIX_SERVER_OPTION },
     { 0, 0, 0, 0 }
 };
 
index f9bea1f..9c906fe 100644 (file)
@@ -1450,7 +1450,6 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, const func_t *func, int
       i = 0;
       LIST_FOR_EACH_ENTRY( arg, func->args, var_t, entry )
       {
-        const attr_t *attr;
         int paramflags = 0;
         int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) + i * 3;
         int *defaultdata = num_defaults ? typedata + 6 + extra_attr + i : NULL;