]> git.draconx.ca Git - gob-dx.git/blobdiff - src/parse.c
Release 2.0.12
[gob-dx.git] / src / parse.c
index 762e14c4b3010cabfc31573d7c10b460cb106833..0146efb007d2356c55f7ecd3190e8914e42676a2 100644 (file)
@@ -187,6 +187,7 @@ static GList *error_vals = NULL;
 
 static char *chunk_size = NULL;
 static char *bonobo_object_class = NULL;
+static int glade_xml = FALSE;
 static GList *interfaces = NULL;
 static GList *typestack = NULL;
 static GList *funcargs = NULL;
@@ -202,6 +203,7 @@ static int destructor_line = 0;
 static gboolean destructor_simple = TRUE;
 static char *initializer = NULL;
 static int initializer_line = 0;
+static int glade_widget = FALSE;
 
 static char *onerror = NULL;
 static char *defreturn = NULL;
@@ -267,6 +269,7 @@ push_variable (char *name, int scope, int line_no, char *postfix)
        var = node_new (VARIABLE_NODE,
                        "scope", scope,
                        "vtype:steal", type,
+                       "glade_widget", glade_widget,
                        "id:steal", name,
                        "line_no", line_no,
                        "destructor_unref", destructor_unref,
@@ -275,8 +278,10 @@ push_variable (char *name, int scope, int line_no, char *postfix)
                        "destructor_simple", destructor_simple,
                        "initializer:steal", initializer,
                        "initializer_line", initializer_line,
+                       "initializer_simple", TRUE,
                        NULL);
        class_nodes = g_list_append(class_nodes, var);
+       glade_widget = FALSE;
 }
 
 static void
@@ -603,6 +608,41 @@ get_prop_enum_flag_cast (Property *prop)
        return ret;
 }
 
+static void
+add_construct_glade (char * file, char * root, char * domain)
+{
+       Node *var;
+       Type * type;
+       GList * flags = NULL;
+       char * set;
+       
+       type = (Type *)node_new (TYPE_NODE,
+                                "name", "GladeXML",
+                                "pointer", "*",
+                                NULL);
+       initializer = g_strdup_printf("\t{\n"
+                                     "\tGtkWidget * root;\n"
+                                     "\to->_priv->_glade_xml = glade_xml_new(%s, %s, %s);\n"
+                                     "\troot = glade_xml_get_widget(o->_priv->_glade_xml, %s);\n"
+                                     "\tgtk_widget_show(root);\n"
+                                     "\tgtk_container_add(GTK_CONTAINER(o), root);\n"
+                                     "\tglade_xml_signal_autoconnect_full(o->_priv->_glade_xml, (GladeXMLConnectFunc)___glade_xml_connect_foreach, (gpointer)o);\n"
+                                     "}\n", file, root, domain ? domain : "NULL", root);
+       
+       var = node_new (VARIABLE_NODE,
+                       "scope", PRIVATE_SCOPE,
+                       "vtype:steal", type,
+                       "glade_widget", FALSE,
+                       "id:steal", "_glade_xml",
+                       "destructor_unref", FALSE,
+                       "destructor", "g_object_unref", 
+                       "destructor_simple", TRUE,
+                       "initializer", initializer,
+                       "initializer_simple", FALSE,
+                       NULL);
+       class_nodes = g_list_prepend(class_nodes, var);
+}
+
 static void
 property_link_and_export (Node *node)
 {
@@ -780,7 +820,7 @@ ensure_property (void)
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 628 "parse.y"
+#line 668 "parse.y"
 typedef union YYSTYPE {
        char *id;
        GString *cbuf;
@@ -789,7 +829,7 @@ typedef union YYSTYPE {
        int sigtype;
 } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 793 "parse.c"
+#line 833 "parse.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -801,7 +841,7 @@ typedef union YYSTYPE {
 
 
 /* Line 214 of yacc.c.  */
-#line 805 "parse.c"
+#line 845 "parse.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -907,16 +947,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  23
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   572
+#define YYLAST   595
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  66
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  53
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  189
+#define YYNRULES  194
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  398
+#define YYNSTATES  412
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -968,23 +1008,24 @@ static const unsigned short yyprhs[] =
 {
        0,     0,     3,     7,    10,    13,    15,    17,    19,    21,
       23,    25,    27,    30,    33,    36,    39,    41,    43,    45,
-      47,    52,    56,    62,    63,    69,    75,    81,    84,    86,
-      88,    91,    95,    97,    99,   101,   103,   105,   107,   109,
-     111,   114,   118,   121,   125,   128,   131,   133,   135,   136,
-     142,   149,   162,   172,   179,   183,   184,   196,   205,   211,
-     215,   216,   220,   222,   224,   229,   231,   233,   237,   241,
-     245,   249,   253,   257,   261,   265,   269,   273,   277,   281,
-     285,   289,   293,   297,   301,   303,   309,   311,   315,   316,
-     320,   322,   325,   327,   329,   331,   334,   337,   340,   344,
-     348,   351,   354,   357,   359,   362,   364,   367,   369,   371,
-     373,   375,   377,   379,   381,   383,   385,   387,   389,   391,
-     393,   396,   399,   403,   406,   408,   412,   416,   419,   421,
-     426,   430,   432,   435,   437,   448,   460,   470,   480,   489,
-     501,   510,   516,   519,   524,   525,   527,   530,   532,   534,
-     537,   540,   544,   549,   554,   556,   560,   562,   566,   568,
-     571,   575,   582,   590,   593,   595,   597,   600,   603,   607,
-     611,   615,   619,   627,   636,   640,   642,   646,   648,   656,
-     665,   669,   671,   679,   688,   692,   694,   696,   699,   701
+      47,    52,    56,    62,    63,    69,    75,    81,    88,    96,
+     103,   111,   114,   116,   118,   121,   125,   127,   129,   131,
+     133,   135,   137,   139,   141,   144,   148,   151,   155,   158,
+     161,   163,   165,   167,   168,   174,   181,   194,   204,   211,
+     215,   216,   228,   237,   243,   247,   248,   252,   254,   256,
+     261,   263,   265,   269,   273,   277,   281,   285,   289,   293,
+     297,   301,   305,   309,   313,   317,   321,   325,   329,   333,
+     335,   341,   343,   347,   348,   352,   354,   357,   359,   361,
+     363,   366,   369,   372,   376,   380,   383,   386,   389,   391,
+     394,   396,   399,   401,   403,   405,   407,   409,   411,   413,
+     415,   417,   419,   421,   423,   425,   428,   431,   435,   438,
+     440,   444,   448,   451,   453,   458,   462,   464,   467,   469,
+     480,   492,   502,   512,   521,   533,   542,   548,   551,   556,
+     557,   559,   562,   564,   566,   569,   572,   576,   581,   586,
+     588,   592,   594,   598,   600,   603,   607,   614,   622,   625,
+     627,   629,   632,   635,   639,   643,   647,   651,   659,   668,
+     672,   674,   678,   680,   688,   697,   701,   703,   711,   720,
+     724,   726,   728,   731,   733
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -998,93 +1039,97 @@ static const yysigned_char yyrhs[] =
       54,    -1,    71,    53,    54,    -1,     3,    21,     4,    21,
       72,    -1,    -1,    55,    19,    19,    56,    72,    -1,    55,
       19,    21,    56,    72,    -1,    55,    19,    20,    56,    72,
+      -1,    55,    19,    30,    30,    56,    72,    -1,    55,    19,
+      30,    30,    30,    56,    72,    -1,    55,    19,    19,    30,
+      56,    72,    -1,    55,    19,    19,    30,    30,    56,    72,
       -1,    73,    74,    -1,    74,    -1,   102,    -1,    19,   102,
       -1,    19,    21,   102,    -1,    79,    -1,    80,    -1,    82,
       -1,    57,    -1,    31,    -1,    32,    -1,    33,    -1,    34,
       -1,    19,    19,    -1,    19,    53,    24,    -1,    58,   118,
       -1,    58,    53,    24,    -1,    76,    77,    -1,    77,    76,
-      -1,    77,    -1,    76,    -1,    -1,    75,    91,    19,    78,
-      57,    -1,    75,    91,    19,    22,    78,    57,    -1,    36,
-      89,    88,    19,    81,    19,    53,    24,    19,    53,    24,
-      57,    -1,    36,    89,    88,    19,    81,    19,    53,    24,
-      57,    -1,    36,    89,    88,    19,    81,    19,    -1,    55,
-      19,    56,    -1,    -1,    35,    19,    19,    83,    19,    53,
-      24,    19,    53,    24,    57,    -1,    35,    19,    19,    83,
-      19,    53,    24,    57,    -1,    35,    19,    19,    83,    57,
-      -1,    55,    84,    56,    -1,    -1,    84,    59,    87,    -1,
-      87,    -1,    30,    -1,    19,    55,    30,    56,    -1,   118,
-      -1,    85,    -1,    40,    58,    85,    -1,    41,    58,    85,
-      -1,    42,    58,   118,    -1,    43,    58,   118,    -1,    44,
-      58,    86,    -1,    46,    58,    90,    -1,    47,    58,    91,
-      -1,    48,    58,    21,    -1,    48,    58,    19,    -1,    49,
-      58,    21,    -1,    49,    58,    19,    -1,    50,    58,    21,
-      -1,    50,    58,    19,    -1,    51,    58,    21,    -1,    51,
-      58,    19,    -1,    52,    58,    21,    -1,    52,    58,    19,
-      -1,    19,    -1,    19,    55,    19,    91,    56,    -1,    19,
-      -1,    55,    90,    56,    -1,    -1,    19,    60,    90,    -1,
-      19,    -1,    92,    96,    -1,    92,    -1,    93,    -1,    19,
-      -1,     5,    19,    -1,    19,     5,    -1,    95,    19,    -1,
-       5,    95,    19,    -1,    95,    19,     5,    -1,    94,    93,
-      -1,    21,    93,    -1,     5,    93,    -1,    21,    -1,    21,
-       5,    -1,    94,    -1,    94,     5,    -1,     6,    -1,    18,
-      -1,    14,    -1,    15,    -1,    13,    -1,    16,    -1,    17,
-      -1,    11,    -1,    12,    -1,     7,    -1,     8,    -1,     9,
-      -1,    61,    -1,    61,     5,    -1,    61,    96,    -1,    61,
-       5,    96,    -1,    19,    99,    -1,    99,    -1,    75,    19,
-      99,    -1,    19,    75,    99,    -1,    75,    99,    -1,    97,
-      -1,    19,    55,   100,    56,    -1,   100,    59,    19,    -1,
-      19,    -1,    53,    24,    -1,    57,    -1,    38,    89,    98,
-      91,    19,    55,   105,    56,   103,   101,    -1,    75,    38,
-      89,    97,    91,    19,    55,   105,    56,   103,   101,    -1,
-      37,    75,    91,    19,    55,   105,    56,   103,   101,    -1,
-      75,    37,    91,    19,    55,   105,    56,   103,   101,    -1,
-      37,    91,    19,    55,   105,    56,   103,   101,    -1,    39,
-      55,    21,    56,    91,    19,    55,   105,    56,   103,   101,
-      -1,    75,    91,    19,    55,   105,    56,   103,   101,    -1,
-      19,    55,    19,    56,   101,    -1,    19,   104,    -1,    19,
-     104,    19,   104,    -1,    -1,   118,    -1,    53,    24,    -1,
-       6,    -1,    19,    -1,    19,     5,    -1,     5,    19,    -1,
-      19,    59,   106,    -1,    19,     5,    59,   106,    -1,     5,
-      19,    59,   106,    -1,   106,    -1,   107,    59,    10,    -1,
-     107,    -1,   107,    59,   108,    -1,   108,    -1,    91,    19,
-      -1,    91,    19,    22,    -1,    91,    19,    55,    19,   109,
-      56,    -1,    91,    19,    22,    55,    19,   109,    56,    -1,
-     109,   110,    -1,   110,    -1,    19,    -1,    62,   118,    -1,
-      63,   118,    -1,    62,    58,   118,    -1,    63,    58,   118,
-      -1,    58,    58,   118,    -1,    64,    58,   118,    -1,     9,
-      19,    53,   112,    54,    21,    57,    -1,     9,    19,    53,
-     112,    59,    54,    21,    57,    -1,   112,    59,   113,    -1,
-     113,    -1,    19,    58,   118,    -1,    19,    -1,    46,    19,
-      53,   115,    54,    21,    57,    -1,    46,    19,    53,   115,
-      59,    54,    21,    57,    -1,   115,    59,    19,    -1,    19,
-      -1,    45,    19,    53,   117,    54,    21,    57,    -1,    45,
-      19,    53,   117,    59,    54,    21,    57,    -1,   117,    59,
-      19,    -1,    19,    -1,    20,    -1,    65,    20,    -1,    23,
-      -1,    19,    -1
+      -1,    77,    -1,    76,    -1,    19,    -1,    -1,    75,    91,
+      19,    78,    57,    -1,    75,    91,    19,    22,    78,    57,
+      -1,    36,    89,    88,    19,    81,    19,    53,    24,    19,
+      53,    24,    57,    -1,    36,    89,    88,    19,    81,    19,
+      53,    24,    57,    -1,    36,    89,    88,    19,    81,    19,
+      -1,    55,    19,    56,    -1,    -1,    35,    19,    19,    83,
+      19,    53,    24,    19,    53,    24,    57,    -1,    35,    19,
+      19,    83,    19,    53,    24,    57,    -1,    35,    19,    19,
+      83,    57,    -1,    55,    84,    56,    -1,    -1,    84,    59,
+      87,    -1,    87,    -1,    30,    -1,    19,    55,    30,    56,
+      -1,   118,    -1,    85,    -1,    40,    58,    85,    -1,    41,
+      58,    85,    -1,    42,    58,   118,    -1,    43,    58,   118,
+      -1,    44,    58,    86,    -1,    46,    58,    90,    -1,    47,
+      58,    91,    -1,    48,    58,    21,    -1,    48,    58,    19,
+      -1,    49,    58,    21,    -1,    49,    58,    19,    -1,    50,
+      58,    21,    -1,    50,    58,    19,    -1,    51,    58,    21,
+      -1,    51,    58,    19,    -1,    52,    58,    21,    -1,    52,
+      58,    19,    -1,    19,    -1,    19,    55,    19,    91,    56,
+      -1,    19,    -1,    55,    90,    56,    -1,    -1,    19,    60,
+      90,    -1,    19,    -1,    92,    96,    -1,    92,    -1,    93,
+      -1,    19,    -1,     5,    19,    -1,    19,     5,    -1,    95,
+      19,    -1,     5,    95,    19,    -1,    95,    19,     5,    -1,
+      94,    93,    -1,    21,    93,    -1,     5,    93,    -1,    21,
+      -1,    21,     5,    -1,    94,    -1,    94,     5,    -1,     6,
+      -1,    18,    -1,    14,    -1,    15,    -1,    13,    -1,    16,
+      -1,    17,    -1,    11,    -1,    12,    -1,     7,    -1,     8,
+      -1,     9,    -1,    61,    -1,    61,     5,    -1,    61,    96,
+      -1,    61,     5,    96,    -1,    19,    99,    -1,    99,    -1,
+      75,    19,    99,    -1,    19,    75,    99,    -1,    75,    99,
+      -1,    97,    -1,    19,    55,   100,    56,    -1,   100,    59,
+      19,    -1,    19,    -1,    53,    24,    -1,    57,    -1,    38,
+      89,    98,    91,    19,    55,   105,    56,   103,   101,    -1,
+      75,    38,    89,    97,    91,    19,    55,   105,    56,   103,
+     101,    -1,    37,    75,    91,    19,    55,   105,    56,   103,
+     101,    -1,    75,    37,    91,    19,    55,   105,    56,   103,
+     101,    -1,    37,    91,    19,    55,   105,    56,   103,   101,
+      -1,    39,    55,    21,    56,    91,    19,    55,   105,    56,
+     103,   101,    -1,    75,    91,    19,    55,   105,    56,   103,
+     101,    -1,    19,    55,    19,    56,   101,    -1,    19,   104,
+      -1,    19,   104,    19,   104,    -1,    -1,   118,    -1,    53,
+      24,    -1,     6,    -1,    19,    -1,    19,     5,    -1,     5,
+      19,    -1,    19,    59,   106,    -1,    19,     5,    59,   106,
+      -1,     5,    19,    59,   106,    -1,   106,    -1,   107,    59,
+      10,    -1,   107,    -1,   107,    59,   108,    -1,   108,    -1,
+      91,    19,    -1,    91,    19,    22,    -1,    91,    19,    55,
+      19,   109,    56,    -1,    91,    19,    22,    55,    19,   109,
+      56,    -1,   109,   110,    -1,   110,    -1,    19,    -1,    62,
+     118,    -1,    63,   118,    -1,    62,    58,   118,    -1,    63,
+      58,   118,    -1,    58,    58,   118,    -1,    64,    58,   118,
+      -1,     9,    19,    53,   112,    54,    21,    57,    -1,     9,
+      19,    53,   112,    59,    54,    21,    57,    -1,   112,    59,
+     113,    -1,   113,    -1,    19,    58,   118,    -1,    19,    -1,
+      46,    19,    53,   115,    54,    21,    57,    -1,    46,    19,
+      53,   115,    59,    54,    21,    57,    -1,   115,    59,    19,
+      -1,    19,    -1,    45,    19,    53,   117,    54,    21,    57,
+      -1,    45,    19,    53,   117,    59,    54,    21,    57,    -1,
+     117,    59,    19,    -1,    19,    -1,    20,    -1,    65,    20,
+      -1,    23,    -1,    19,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   649,   649,   650,   651,   652,   655,   664,   673,   682,
-     691,   700,   711,   712,   713,   714,   715,   716,   717,   718,
-     721,   726,   733,   747,   748,   760,   769,   783,   784,   787,
-     788,   797,   809,   810,   811,   812,   815,   816,   817,   818,
-     821,   841,   865,   869,   877,   878,   879,   880,   881,   887,
-     890,   895,   963,  1017,  1106,  1114,  1119,  1167,  1203,  1219,
-    1220,  1223,  1224,  1227,  1228,  1240,  1241,  1244,  1250,  1256,
-    1262,  1268,  1274,  1280,  1287,  1293,  1299,  1305,  1311,  1317,
-    1323,  1329,  1335,  1341,  1347,  1372,  1381,  1387,  1388,  1391,
-    1394,  1400,  1407,  1416,  1419,  1422,  1426,  1430,  1434,  1439,
-    1447,  1451,  1456,  1460,  1463,  1467,  1470,  1475,  1476,  1477,
-    1478,  1479,  1480,  1481,  1482,  1483,  1486,  1487,  1488,  1491,
-    1492,  1493,  1497,  1504,  1516,  1522,  1534,  1546,  1549,  1555,
-    1560,  1563,  1568,  1569,  1573,  1589,  1605,  1621,  1637,  1648,
-    1654,  1664,  1687,  1698,  1717,  1723,  1724,  1730,  1731,  1742,
-    1753,  1764,  1774,  1784,  1794,  1797,  1798,  1801,  1802,  1805,
-    1808,  1811,  1819,  1829,  1830,  1833,  1850,  1857,  1864,  1871,
-    1878,  1885,  1894,  1903,  1914,  1915,  1918,  1938,  1948,  1957,
-    1968,  1971,  1976,  1985,  1996,  1999,  2005,  2006,  2010,  2011
+       0,   689,   689,   690,   691,   692,   695,   704,   713,   722,
+     731,   740,   751,   752,   753,   754,   755,   756,   757,   758,
+     761,   766,   773,   789,   790,   802,   811,   823,   832,   841,
+     850,   861,   862,   865,   866,   875,   887,   888,   889,   890,
+     893,   894,   895,   896,   899,   919,   943,   947,   955,   956,
+     957,   958,   959,   967,   973,   976,   981,  1049,  1103,  1192,
+    1200,  1205,  1253,  1289,  1305,  1306,  1309,  1310,  1313,  1314,
+    1326,  1327,  1330,  1336,  1342,  1348,  1354,  1360,  1366,  1373,
+    1379,  1385,  1391,  1397,  1403,  1409,  1415,  1421,  1427,  1433,
+    1458,  1467,  1473,  1474,  1477,  1480,  1486,  1493,  1502,  1505,
+    1508,  1512,  1516,  1520,  1525,  1533,  1537,  1542,  1546,  1549,
+    1553,  1556,  1561,  1562,  1563,  1564,  1565,  1566,  1567,  1568,
+    1569,  1572,  1573,  1574,  1577,  1578,  1579,  1583,  1590,  1602,
+    1608,  1620,  1632,  1635,  1641,  1646,  1649,  1654,  1655,  1659,
+    1675,  1691,  1707,  1723,  1734,  1740,  1750,  1773,  1784,  1803,
+    1809,  1810,  1816,  1817,  1828,  1839,  1850,  1860,  1870,  1880,
+    1883,  1884,  1887,  1888,  1891,  1894,  1897,  1905,  1915,  1916,
+    1919,  1936,  1943,  1950,  1957,  1964,  1971,  1980,  1989,  2000,
+    2001,  2004,  2024,  2034,  2043,  2054,  2057,  2062,  2071,  2082,
+    2085,  2091,  2092,  2096,  2097
 };
 #endif
 
@@ -1135,23 +1180,24 @@ static const unsigned char yyr1[] =
 {
        0,    66,    67,    67,    67,    67,    68,    68,    68,    68,
       68,    68,    69,    69,    69,    69,    69,    69,    69,    69,
-      70,    70,    71,    72,    72,    72,    72,    73,    73,    74,
-      74,    74,    74,    74,    74,    74,    75,    75,    75,    75,
-      76,    76,    77,    77,    78,    78,    78,    78,    78,    79,
-      79,    80,    80,    80,    81,    81,    82,    82,    82,    83,
-      83,    84,    84,    85,    85,    86,    86,    87,    87,    87,
+      70,    70,    71,    72,    72,    72,    72,    72,    72,    72,
+      72,    73,    73,    74,    74,    74,    74,    74,    74,    74,
+      75,    75,    75,    75,    76,    76,    77,    77,    78,    78,
+      78,    78,    78,    78,    79,    79,    80,    80,    80,    81,
+      81,    82,    82,    82,    83,    83,    84,    84,    85,    85,
+      86,    86,    87,    87,    87,    87,    87,    87,    87,    87,
       87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
-      87,    87,    87,    87,    87,    88,    88,    89,    89,    90,
-      90,    91,    91,    92,    92,    92,    92,    92,    92,    92,
-      93,    93,    93,    93,    93,    93,    93,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    95,    95,    95,    96,
-      96,    96,    96,    97,    97,    98,    98,    98,    98,    99,
-     100,   100,   101,   101,   102,   102,   102,   102,   102,   102,
-     102,   102,   103,   103,   103,   104,   104,   105,   105,   105,
-     105,   105,   105,   105,   105,   106,   106,   107,   107,   108,
-     108,   108,   108,   109,   109,   110,   110,   110,   110,   110,
-     110,   110,   111,   111,   112,   112,   113,   113,   114,   114,
-     115,   115,   116,   116,   117,   117,   118,   118,   118,   118
+      88,    88,    89,    89,    90,    90,    91,    91,    92,    92,
+      92,    92,    92,    92,    92,    93,    93,    93,    93,    93,
+      93,    93,    94,    94,    94,    94,    94,    94,    94,    94,
+      94,    95,    95,    95,    96,    96,    96,    96,    97,    97,
+      98,    98,    98,    98,    99,   100,   100,   101,   101,   102,
+     102,   102,   102,   102,   102,   102,   102,   103,   103,   103,
+     104,   104,   105,   105,   105,   105,   105,   105,   105,   105,
+     106,   106,   107,   107,   108,   108,   108,   108,   109,   109,
+     110,   110,   110,   110,   110,   110,   110,   111,   111,   112,
+     112,   113,   113,   114,   114,   115,   115,   116,   116,   117,
+     117,   118,   118,   118,   118
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1159,23 +1205,24 @@ static const unsigned char yyr2[] =
 {
        0,     2,     3,     2,     2,     1,     1,     1,     1,     1,
        1,     1,     2,     2,     2,     2,     1,     1,     1,     1,
-       4,     3,     5,     0,     5,     5,     5,     2,     1,     1,
-       2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     3,     2,     3,     2,     2,     1,     1,     0,     5,
-       6,    12,     9,     6,     3,     0,    11,     8,     5,     3,
-       0,     3,     1,     1,     4,     1,     1,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     5,     1,     3,     0,     3,
-       1,     2,     1,     1,     1,     2,     2,     2,     3,     3,
-       2,     2,     2,     1,     2,     1,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     2,     3,     2,     1,     3,     3,     2,     1,     4,
-       3,     1,     2,     1,    10,    11,     9,     9,     8,    11,
-       8,     5,     2,     4,     0,     1,     2,     1,     1,     2,
-       2,     3,     4,     4,     1,     3,     1,     3,     1,     2,
-       3,     6,     7,     2,     1,     1,     2,     2,     3,     3,
-       3,     3,     7,     8,     3,     1,     3,     1,     7,     8,
-       3,     1,     7,     8,     3,     1,     1,     2,     1,     1
+       4,     3,     5,     0,     5,     5,     5,     6,     7,     6,
+       7,     2,     1,     1,     2,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     3,     2,     3,     2,     2,
+       1,     1,     1,     0,     5,     6,    12,     9,     6,     3,
+       0,    11,     8,     5,     3,     0,     3,     1,     1,     4,
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+       5,     1,     3,     0,     3,     1,     2,     1,     1,     1,
+       2,     2,     2,     3,     3,     2,     2,     2,     1,     2,
+       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     2,     3,     2,     1,
+       3,     3,     2,     1,     4,     3,     1,     2,     1,    10,
+      11,     9,     9,     8,    11,     8,     5,     2,     4,     0,
+       1,     2,     1,     1,     2,     2,     3,     4,     4,     1,
+       3,     1,     3,     1,     2,     3,     6,     7,     2,     1,
+       1,     2,     2,     3,     3,     3,     3,     7,     8,     3,
+       1,     3,     1,     7,     8,     3,     1,     7,     8,     3,
+       1,     1,     2,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1186,241 +1233,249 @@ static const unsigned char yydefact[] =
        0,     0,     0,     6,     8,     9,     7,    10,    11,     0,
        0,     0,    16,     0,     5,     0,    17,    18,    19,     0,
        0,     0,     0,     1,    12,     4,    13,    14,    15,     3,
-       0,     0,     0,     0,     0,     2,     0,    36,    37,    38,
-      39,     0,    88,     0,    88,     0,    21,    35,     0,    28,
-       0,    32,    33,    34,    29,    23,   177,     0,   175,   185,
-       0,   181,     0,     0,     0,     0,     0,    30,     0,     0,
-       0,     0,   107,   116,   117,   118,   114,   115,   111,   109,
-     110,   112,   113,   108,    94,   103,     0,     0,    92,    93,
-     105,     0,     0,     0,    20,    27,     0,    88,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,    60,    90,     0,    86,     0,     0,    95,   102,     0,
-      96,   104,   101,     0,     0,   119,    91,   106,   100,    97,
-       0,     0,   128,     0,   124,     0,     0,     0,    48,     0,
-     189,   186,   188,     0,   176,     0,     0,   174,     0,   184,
-       0,     0,   180,     0,     0,     0,     0,     0,     0,    87,
-       0,    55,    98,     0,     0,   120,   121,    99,     0,     0,
-       0,   123,     0,   127,     0,     0,     0,     0,     0,     0,
-      48,     0,     0,    47,    46,     0,     0,     0,     0,   187,
-     172,     0,   182,     0,   178,     0,     0,   133,   141,    84,
+       0,     0,     0,     0,     0,     2,     0,    40,    41,    42,
+      43,     0,    93,     0,    93,     0,    21,    39,     0,    32,
+       0,    36,    37,    38,    33,    23,   182,     0,   180,   190,
+       0,   186,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,   112,   121,   122,   123,   119,   120,   116,   114,
+     115,   117,   118,   113,    99,   108,     0,     0,    97,    98,
+     110,     0,     0,     0,    20,    31,     0,    93,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,     0,    35,     0,
+       0,    65,    95,     0,    91,     0,     0,   100,   107,     0,
+     101,   109,   106,     0,     0,   124,    96,   111,   105,   102,
+       0,     0,   133,     0,   129,     0,     0,     0,    53,     0,
+     194,   191,   193,     0,   181,     0,     0,   179,     0,   189,
+       0,     0,   185,     0,     0,     0,     0,     0,     0,    92,
+       0,    60,   103,     0,     0,   125,   126,   104,     0,     0,
+       0,   128,     0,   132,     0,     0,     0,     0,     0,    52,
+      53,     0,     0,    51,    50,     0,     0,     0,     0,     0,
+     192,   177,     0,   187,     0,   183,     0,     0,   138,   146,
+      89,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    67,     0,    63,    94,     0,     0,
+       0,     0,     0,   112,    99,     0,     0,   159,   161,   163,
+     127,   136,     0,   131,   130,     0,     0,     0,     0,    44,
+       0,     0,     0,     0,    46,    48,     0,    49,    54,     0,
+      23,    23,    23,     0,   178,   188,   184,   137,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    62,     0,    58,    89,     0,     0,     0,
-       0,     0,   107,    94,     0,     0,   154,   156,   158,   122,
-     131,     0,   126,   125,     0,     0,     0,     0,    40,     0,
-       0,     0,     0,    42,    44,    45,    49,    23,    23,    23,
-     173,   183,   179,   132,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    59,     0,     0,     0,
-       0,    53,     0,    95,    96,     0,   159,   144,     0,   129,
-       0,     0,     0,     0,     0,    41,    50,   144,    43,    24,
-      26,    25,     0,    63,    67,    68,    69,    70,   189,    66,
-      71,    65,    72,    73,    75,    74,    77,    76,    79,    78,
-      81,    80,    83,    82,    61,     0,    85,    54,     0,   144,
-       0,     0,   151,   160,     0,     0,     0,   155,   157,   130,
-       0,     0,   144,     0,     0,     0,     0,    57,     0,     0,
-     153,   152,     0,     0,     0,   142,   145,   138,   144,     0,
-       0,     0,   140,     0,     0,     0,    52,   136,     0,   165,
-       0,     0,     0,     0,     0,   164,   146,     0,     0,   144,
-     137,   144,    64,     0,     0,     0,     0,     0,   166,     0,
-     167,     0,   161,   163,   143,   134,     0,     0,    56,     0,
-     162,   170,   168,   169,   171,   139,   135,    51
+      64,     0,     0,     0,     0,    58,     0,   100,   101,     0,
+     164,   149,     0,   134,     0,     0,     0,     0,     0,    45,
+      55,   149,    47,     0,    23,    24,    26,    25,     0,    23,
+       0,    68,    72,    73,    74,    75,   194,    71,    76,    70,
+      77,    78,    80,    79,    82,    81,    84,    83,    86,    85,
+      88,    87,    66,     0,    90,    59,     0,   149,     0,     0,
+     156,   165,     0,     0,     0,   160,   162,   135,     0,     0,
+     149,     0,     0,    23,    29,    23,    27,     0,     0,    62,
+       0,     0,   158,   157,     0,     0,     0,   147,   150,   143,
+     149,     0,     0,     0,   145,    30,    28,     0,     0,     0,
+      57,   141,     0,   170,     0,     0,     0,     0,     0,   169,
+     151,     0,     0,   149,   142,   149,    69,     0,     0,     0,
+       0,     0,   171,     0,   172,     0,   166,   168,   148,   139,
+       0,     0,    61,     0,   167,   175,   173,   174,   176,   144,
+     140,    56
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short yydefgoto[] =
 {
       -1,    11,    12,    13,    14,    15,   100,    48,    49,    50,
-     183,   184,   185,    51,    52,   219,    53,   157,   212,   294,
-     300,   213,   115,    70,   113,   224,    88,    89,    90,    91,
-     126,   132,   133,   134,   231,   198,    54,   326,   345,   225,
-     226,   227,   228,   364,   365,    16,    57,    58,    17,    62,
-      18,    60,   346
+     183,   184,   185,    51,    52,   220,    53,   157,   213,   302,
+     308,   214,   115,    70,   113,   225,    88,    89,    90,    91,
+     126,   132,   133,   134,   232,   199,    54,   334,   357,   226,
+     227,   228,   229,   378,   379,    16,    57,    58,    17,    62,
+      18,    60,   358
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -317
+#define YYPACT_NINF -326
 static const short yypact[] =
 {
-     137,     4,    45,  -317,  -317,  -317,  -317,  -317,  -317,    99,
-     106,   134,  -317,   137,   170,    98,  -317,  -317,  -317,   156,
-     124,   125,   157,  -317,  -317,   170,  -317,  -317,  -317,   170,
-     154,   181,   209,   214,   222,   170,   215,  -317,  -317,  -317,
-    -317,   225,   196,   310,   196,   204,  -317,  -317,   188,  -317,
-     276,  -317,  -317,  -317,  -317,   217,   216,   113,  -317,  -317,
-     117,  -317,   146,   241,   301,   267,   276,  -317,   284,   292,
-     293,   357,  -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,
-    -317,  -317,  -317,  -317,   325,   425,   374,   317,   299,  -317,
-     439,   318,   231,   346,  -317,  -317,   374,   196,   358,   365,
-    -317,    74,   373,    76,   380,    84,   390,    90,  -317,   362,
-     409,   377,   375,   378,   392,   414,   453,  -317,  -317,   429,
-    -317,   453,  -317,   430,   406,     2,  -317,   453,  -317,   457,
-     224,   444,  -317,   374,  -317,   416,   454,   456,   126,   149,
-    -317,  -317,  -317,   458,  -317,   419,   459,  -317,   420,  -317,
-     460,   422,  -317,   461,    70,   428,   258,    21,   292,  -317,
-     465,   431,  -317,   432,   391,   299,  -317,  -317,   433,   466,
-     470,  -317,    -6,  -317,   471,   374,   436,    -6,   374,    26,
-       0,   391,     7,   434,   474,   437,   440,   441,   442,  -317,
-    -317,   438,  -317,   443,  -317,   445,   475,  -317,  -317,  -317,
-     446,   447,   448,   449,   450,   451,   452,   455,   462,   463,
-     464,   467,    91,  -317,   473,  -317,  -317,   374,   482,   484,
-     391,   408,   468,     6,   492,   472,  -317,   476,  -317,  -317,
-    -317,   147,  -317,  -317,   477,   493,   391,   495,  -317,   491,
-     479,   478,   494,  -317,  -317,  -317,  -317,   217,   217,   217,
-    -317,  -317,  -317,  -317,     1,     1,    74,    74,     9,   292,
-     374,   218,   219,   247,   248,   252,  -317,   258,   499,   481,
-     483,   480,   485,   153,   158,   374,    94,   497,   340,  -317,
-     498,   391,   487,   488,   490,  -317,  -317,   497,  -317,  -317,
-    -317,  -317,   496,  -317,  -317,  -317,  -317,  -317,   496,  -317,
-    -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317,
-    -317,  -317,  -317,  -317,  -317,    47,  -317,  -317,   503,   497,
-     374,   374,  -317,   500,   510,    27,    70,  -317,  -317,  -317,
-     501,   391,   497,   391,    70,   489,   505,  -317,    54,    70,
-    -317,  -317,   511,    57,   507,   519,  -317,  -317,   497,   504,
-      70,   506,  -317,   508,   516,   512,  -317,  -317,    57,  -317,
-     509,    64,    66,   513,    50,  -317,  -317,    27,    70,   497,
-    -317,   497,  -317,   486,   522,    79,    74,    74,  -317,    74,
-    -317,    74,  -317,  -317,  -317,  -317,    70,    70,  -317,   502,
-    -317,  -317,  -317,  -317,  -317,  -317,  -317,  -317
+     166,    18,    73,  -326,  -326,  -326,  -326,  -326,  -326,   115,
+     116,   147,  -326,   166,   210,   121,  -326,  -326,  -326,   148,
+     127,   128,   135,  -326,  -326,   210,  -326,  -326,  -326,   210,
+     167,   175,   178,   204,   225,   210,   226,  -326,  -326,  -326,
+    -326,   230,   195,   330,   195,   199,  -326,  -326,   194,  -326,
+     296,  -326,  -326,  -326,  -326,   206,   209,   -32,  -326,  -326,
+     -18,  -326,   156,   217,   321,   261,   296,  -326,   268,   272,
+     274,   377,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
+    -326,  -326,  -326,  -326,   290,   445,   394,   277,   237,  -326,
+     459,   280,   151,   279,  -326,  -326,   394,   195,   297,   304,
+    -326,    99,   310,    31,   311,    83,   329,    89,  -326,   300,
+     338,   325,   327,   341,   349,   395,   473,  -326,  -326,   402,
+    -326,   473,  -326,   412,   383,     5,  -326,   473,  -326,   443,
+     251,   433,  -326,   394,  -326,   397,   435,   436,    12,   188,
+    -326,  -326,  -326,   447,  -326,   424,   448,  -326,   425,  -326,
+     462,   438,  -326,   471,   163,   413,   278,    11,   272,  -326,
+     474,   441,  -326,   442,   411,   237,  -326,  -326,   444,   479,
+     481,  -326,     1,  -326,   482,   394,   449,     1,   394,    76,
+      19,   411,     9,   450,   483,   446,    84,   451,   453,   475,
+    -326,  -326,   454,  -326,   455,  -326,   456,   486,  -326,  -326,
+    -326,   457,   458,   460,   461,   463,   464,   465,   466,   467,
+     468,   469,   470,   -10,  -326,   476,  -326,  -326,   394,   487,
+     495,   411,   428,   477,    13,   498,   478,  -326,   472,  -326,
+    -326,  -326,    51,  -326,  -326,   480,   501,   411,   511,  -326,
+     508,   484,   488,   512,  -326,  -326,    76,  -326,  -326,    85,
+     206,   206,   206,    90,  -326,  -326,  -326,  -326,    98,    98,
+      99,    99,    60,   272,   394,   168,   252,   257,   258,   267,
+    -326,   278,   513,   489,   490,   485,   491,   158,   184,   394,
+      66,   520,   360,  -326,   521,   411,   493,   494,   496,  -326,
+    -326,   520,  -326,   497,   206,  -326,  -326,  -326,   499,   206,
+     502,  -326,  -326,  -326,  -326,  -326,   502,  -326,  -326,  -326,
+    -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,  -326,
+    -326,  -326,  -326,    14,  -326,  -326,   518,   520,   394,   394,
+    -326,   503,   524,    74,   163,  -326,  -326,  -326,   500,   411,
+     520,   411,   163,   206,  -326,   206,  -326,   519,   506,  -326,
+      29,   163,  -326,  -326,   533,   104,   530,   541,  -326,  -326,
+     520,   505,   163,   507,  -326,  -326,  -326,   509,   538,   514,
+    -326,  -326,   104,  -326,   510,    80,    93,   515,    68,  -326,
+    -326,    74,   163,   520,  -326,   520,  -326,   517,   540,    86,
+      99,    99,  -326,    99,  -326,    99,  -326,  -326,  -326,  -326,
+     163,   163,  -326,   522,  -326,  -326,  -326,  -326,  -326,  -326,
+    -326,  -326
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-    -317,  -317,     8,    82,   534,  -317,   -17,  -317,   515,   -31,
-     364,   366,   370,  -317,  -317,  -317,  -317,  -317,  -317,   -54,
-    -317,   285,  -317,   -29,  -154,   -42,  -317,   -68,  -317,   -62,
-    -109,   417,  -317,   -95,  -317,  -316,   -22,  -281,   186,  -179,
-    -220,  -317,   278,   203,  -247,    97,  -317,   469,   145,  -317,
-     200,  -317,  -101
+    -326,  -326,   142,   227,   553,  -326,  -239,  -326,   523,   -29,
+     385,   387,   392,  -326,  -326,  -326,  -326,  -326,  -326,     7,
+    -326,   305,  -326,   -19,  -152,   -42,  -326,   -69,  -326,   -68,
+    -106,   440,  -326,   -88,  -326,  -325,   -13,  -287,   197,  -176,
+    -264,  -326,   293,   208,  -136,   143,  -326,   492,   144,  -326,
+     233,  -326,  -101
 };
 
 /* 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 -151
+#define YYTABLE_NINF -156
 static const short yytable[] =
 {
-     144,    87,   241,   118,   216,    66,   334,   165,    98,   119,
-     347,   274,    86,   168,    67,    92,   166,   122,   352,   179,
-     292,    24,   128,   357,   110,    19,   140,   141,   298,   141,
-     142,   293,   142,    66,   370,   171,   173,    24,   339,   293,
-     214,   272,   108,    24,   123,   238,   140,   141,   118,   169,
-     142,   350,   385,   118,   136,   322,   229,   283,   182,   118,
-     242,   131,  -148,   125,    20,   275,   336,   368,   137,   359,
-     395,   396,   143,   355,   143,   232,   359,   233,   215,   239,
-     344,   243,   171,   140,   141,   140,   141,   142,   386,   142,
-     387,   174,   143,   140,   141,    56,    29,   142,   359,   170,
-     340,   341,   330,   149,   337,   302,   382,    35,   360,   152,
-      26,   356,   361,   362,   363,   360,   323,   383,    21,   361,
-     362,   363,   377,   196,   379,    22,    26,   197,   383,   143,
-     146,   143,    26,   235,    23,   390,   237,   360,   150,   143,
-       1,   361,   362,   363,   153,   179,     2,   266,   180,   324,
-     267,    30,   349,   118,   351,   296,   297,   301,    27,   119,
-      31,     3,     4,     5,     6,     7,     8,   102,   186,   187,
-     188,   104,   103,    36,    27,   269,   105,    32,    33,     2,
-      27,   181,     9,    10,   182,    37,    38,    39,    40,    41,
+     144,    87,   118,   119,   342,   242,   217,    66,    98,   359,
+     165,   295,   296,   297,    86,   330,   122,   364,   278,   166,
+     168,   128,   102,    67,   110,    92,   371,   103,   140,   141,
+     215,   179,   142,   348,   180,    66,   104,   384,   179,    19,
+     351,   105,   171,   173,   123,   276,   270,   118,   369,   271,
+      56,   108,   118,   362,   136,   344,   169,   399,   118,   230,
+     346,   287,   243,   131,   352,   353,   125,   181,   216,  -153,
+     182,   349,   279,   382,   143,   409,   410,   182,   137,   306,
+     141,   244,   233,   142,   234,   146,   370,   373,   331,   171,
+     301,   174,    20,   140,   141,   239,   400,   142,   401,   140,
+     141,   170,   149,   142,   365,   373,   366,   283,   152,   338,
+     284,   310,   140,   141,   249,   293,   142,   300,   140,   141,
+     298,   332,   142,   373,   396,   143,   374,   356,   301,   240,
+     375,   376,   377,   236,    21,    22,   238,   150,   391,   143,
+     250,   294,   404,   153,   374,   143,   299,    23,   375,   376,
+     377,   393,    31,   118,   119,    24,    26,    27,   143,   304,
+     305,   309,   374,   361,   143,   363,   375,   376,   377,     1,
+     130,    24,    26,    27,    30,     2,   273,    24,    26,    27,
+      32,    33,    37,    38,    39,    40,    36,   312,    34,   313,
+       3,     4,     5,     6,     7,     8,    55,    56,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,   186,   187,   188,
+     106,     9,    10,    36,  -155,   107,   197,   328,   189,     2,
+     198,    46,   311,    59,    47,    37,    38,    39,    40,    41,
       42,    43,    44,    45,     3,     4,     5,     6,     7,     8,
-     106,   295,    55,   279,   299,   107,   280,    36,    46,  -150,
-      34,    47,   320,    28,  -149,     9,    10,   321,   303,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    56,    28,
-     289,   290,   291,    59,    63,    28,    64,   304,   306,   305,
-     307,    61,    94,   168,    68,    47,    37,    38,    39,    40,
-     130,    69,    43,    44,    45,    37,    38,    39,    40,    93,
-     378,   380,    37,    38,    39,    40,   308,   310,   309,   311,
-      65,   312,    99,   313,   101,   391,   392,   199,   393,   169,
-     394,    71,    72,    73,    74,    75,   109,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    65,    85,   200,   201,
-     202,   203,   204,   111,   205,   206,   207,   208,   209,   210,
-     211,   112,   114,    96,    97,    71,    72,    73,    74,    75,
+    -154,    29,   397,   329,    61,    63,    28,    64,    94,    68,
+      69,    47,    35,   397,    93,     9,    10,    37,    38,    39,
+      40,    99,    28,    43,    44,    45,   303,   101,    28,   307,
+     168,   314,    65,   315,   392,   394,   316,   318,   317,   319,
+     109,    65,    37,    38,    39,    40,   320,   111,   321,   405,
+     406,   112,   407,   114,   408,   120,   124,   200,   125,   129,
+     135,    71,    72,    73,    74,    75,   169,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,   138,    85,   201,   202,
+     203,   204,   205,   139,   206,   207,   208,   209,   210,   211,
+     212,   145,   148,    96,    97,    71,    72,    73,    74,    75,
       63,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-     120,    85,    37,    38,    39,    40,   124,   129,    43,    44,
+     151,    85,    37,    38,    39,    40,   154,   155,    43,    44,
       45,    37,    38,    39,    40,    71,    72,    73,    74,    75,
-     327,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-     125,    85,   116,    72,    73,    74,    75,   135,    76,    77,
-      78,    79,    80,    81,    82,    83,   117,   138,    85,    71,
-      72,    73,    74,    75,   139,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,   145,    85,   221,   222,    73,    74,
-      75,   148,    76,    77,    78,    79,    80,    81,    82,    83,
-     223,   151,    85,   116,    72,    73,    74,    75,   154,    76,
-      77,    78,    79,    80,    81,    82,    83,   273,   155,    85,
-     121,    72,   156,   161,   159,   158,    76,    77,    78,    79,
-      80,    81,    82,    83,   127,    72,    85,   160,   162,   163,
+     335,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+     156,    85,   116,    72,    73,    74,    75,   158,    76,    77,
+      78,    79,    80,    81,    82,    83,   117,   159,    85,    71,
+      72,    73,    74,    75,   160,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,   161,    85,   222,   223,    73,    74,
+      75,   162,    76,    77,    78,    79,    80,    81,    82,    83,
+     224,   163,    85,   116,    72,    73,    74,    75,   164,    76,
+      77,    78,    79,    80,    81,    82,    83,   277,   167,    85,
+     121,    72,   172,   175,   176,   177,    76,    77,    78,    79,
+      80,    81,    82,    83,   127,    72,    85,   190,   181,   192,
       76,    77,    78,    79,    80,    81,    82,    83,   116,    72,
-      85,   164,   167,   172,    76,    77,    78,    79,    80,    81,
-      82,    83,   175,   176,    85,   177,   190,   192,   189,   194,
-     191,   193,   195,   181,   217,   230,   218,   220,   169,   168,
-     234,   236,   182,   179,   246,   250,   247,   248,   249,   253,
-     251,   270,   252,   271,   254,   255,   256,   257,   258,   259,
-     260,   276,   282,   261,   284,   285,   325,   329,   288,   353,
-     262,   263,   264,   315,  -147,   265,   268,   338,   277,   343,
-     358,   366,   281,   318,   287,   278,   286,   316,   367,   317,
-     373,   319,   331,   388,   332,   333,   389,    25,   245,   244,
-     240,   335,   314,   384,   178,   342,   328,   348,   354,   397,
-     369,   375,   371,    95,   372,   374,     0,   376,     0,     0,
-       0,   381,   147
+      85,   191,   193,   194,    76,    77,    78,    79,    80,    81,
+      82,    83,   196,   218,    85,   195,   219,   221,   231,   169,
+     168,   235,   246,   248,   237,   253,   274,   251,   182,   252,
+     257,   254,   255,   256,   275,   258,   259,   280,   260,   261,
+     286,   262,   263,   264,   265,   266,   267,   268,   269,   272,
+     288,   282,   289,  -152,   281,   285,   292,   323,   326,   333,
+     337,   290,   350,   355,   291,   324,   325,   327,   339,   367,
+     340,   341,   372,   343,   380,   345,   360,   347,   354,   368,
+     381,   383,   387,   385,   403,   386,    25,   388,   390,   247,
+     245,    95,   241,   395,   402,   336,   322,   178,   398,   411,
+     389,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   147
 };
 
 static const short yycheck[] =
 {
-     101,    43,   181,    71,   158,    36,   287,     5,    50,    71,
-     326,     5,    43,    19,    36,    44,   125,    85,   334,    19,
-      19,    13,    90,   339,    66,    21,    19,    20,    19,    20,
-      23,    30,    23,    64,   350,   130,   131,    29,   319,    30,
-      19,   220,    64,    35,    86,    19,    19,    20,   116,    55,
-      23,   332,   368,   121,    96,   275,   165,   236,    58,   127,
-      53,    92,    56,    61,    19,    59,    19,   348,    97,    19,
-     386,   387,    65,    19,    65,   170,    19,   172,    57,    53,
-      53,   182,   177,    19,    20,    19,    20,    23,   369,    23,
-     371,   133,    65,    19,    20,    19,    14,    23,    19,   130,
-     320,   321,   281,    19,    57,   259,    56,    25,    58,    19,
-      13,    57,    62,    63,    64,    58,    22,   364,    19,    62,
-      63,    64,    58,    53,    58,    19,    29,    57,   375,    65,
-      54,    65,    35,   175,     0,    56,   178,    58,    54,    65,
-       3,    62,    63,    64,    54,    19,     9,    56,    22,    55,
-      59,    53,   331,   221,   333,   256,   257,   258,    13,   221,
-       4,    24,    25,    26,    27,    28,    29,    54,    19,    20,
-      21,    54,    59,    19,    29,   217,    59,    53,    53,     9,
-      35,    55,    45,    46,    58,    31,    32,    33,    34,    35,
+     101,    43,    71,    71,   291,   181,   158,    36,    50,   334,
+       5,   250,   251,   252,    43,   279,    85,   342,     5,   125,
+      19,    90,    54,    36,    66,    44,   351,    59,    19,    20,
+      19,    19,    23,    19,    22,    64,    54,   362,    19,    21,
+     327,    59,   130,   131,    86,   221,    56,   116,    19,    59,
+      19,    64,   121,   340,    96,   294,    55,   382,   127,   165,
+     299,   237,    53,    92,   328,   329,    61,    55,    57,    56,
+      58,    57,    59,   360,    65,   400,   401,    58,    97,    19,
+      20,   182,   170,    23,   172,    54,    57,    19,    22,   177,
+      30,   133,    19,    19,    20,    19,   383,    23,   385,    19,
+      20,   130,    19,    23,   343,    19,   345,    56,    19,   285,
+      59,   263,    19,    20,    30,    30,    23,    19,    19,    20,
+      30,    55,    23,    19,    56,    65,    58,    53,    30,    53,
+      62,    63,    64,   175,    19,    19,   178,    54,    58,    65,
+      56,    56,    56,    54,    58,    65,    56,     0,    62,    63,
+      64,    58,     4,   222,   222,    13,    13,    13,    65,   260,
+     261,   262,    58,   339,    65,   341,    62,    63,    64,     3,
+      19,    29,    29,    29,    53,     9,   218,    35,    35,    35,
+      53,    53,    31,    32,    33,    34,    19,    19,    53,    21,
+      24,    25,    26,    27,    28,    29,    21,    19,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    19,    20,    21,
+      54,    45,    46,    19,    56,    59,    53,    59,    30,     9,
+      57,    54,   264,    19,    57,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    24,    25,    26,    27,    28,    29,
-      54,   255,    21,    56,   258,    59,    59,    19,    54,    56,
-      53,    57,    59,    13,    56,    45,    46,    59,   260,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    19,    29,
-     247,   248,   249,    19,    19,    35,    21,    19,    19,    21,
-      21,    19,    54,    19,    19,    57,    31,    32,    33,    34,
-      19,    55,    37,    38,    39,    31,    32,    33,    34,    55,
-     361,   362,    31,    32,    33,    34,    19,    19,    21,    21,
-      55,    19,    55,    21,    58,   376,   377,    19,   379,    55,
-     381,     5,     6,     7,     8,     9,    19,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    55,    21,    40,    41,
+      56,    14,   378,    59,    19,    19,    13,    21,    54,    19,
+      55,    57,    25,   389,    55,    45,    46,    31,    32,    33,
+      34,    55,    29,    37,    38,    39,   259,    58,    35,   262,
+      19,    19,    55,    21,   375,   376,    19,    19,    21,    21,
+      19,    55,    31,    32,    33,    34,    19,    19,    21,   390,
+     391,    19,   393,    19,   395,     5,    19,    19,    61,    19,
+      21,     5,     6,     7,     8,     9,    55,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    19,    21,    40,    41,
       42,    43,    44,    19,    46,    47,    48,    49,    50,    51,
-      52,    19,    19,    37,    38,     5,     6,     7,     8,     9,
+      52,    21,    21,    37,    38,     5,     6,     7,     8,     9,
       19,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-       5,    21,    31,    32,    33,    34,    19,    19,    37,    38,
+      21,    21,    31,    32,    33,    34,    56,    19,    37,    38,
       39,    31,    32,    33,    34,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      61,    21,     5,     6,     7,     8,     9,    21,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    19,    21,     5,
-       6,     7,     8,     9,    19,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    21,    21,     5,     6,     7,     8,
-       9,    21,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    21,    21,     5,     6,     7,     8,     9,    56,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    19,    21,
-       5,     6,    55,    19,    56,    60,    11,    12,    13,    14,
-      15,    16,    17,    18,     5,     6,    21,    55,    19,    19,
+      55,    21,     5,     6,     7,     8,     9,    60,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    56,    21,     5,
+       6,     7,     8,     9,    55,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    19,    21,     5,     6,     7,     8,
+       9,    19,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    19,    21,     5,     6,     7,     8,     9,    55,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     5,    21,
+       5,     6,    19,    56,    19,    19,    11,    12,    13,    14,
+      15,    16,    17,    18,     5,     6,    21,    20,    55,    21,
       11,    12,    13,    14,    15,    16,    17,    18,     5,     6,
-      21,    55,     5,    19,    11,    12,    13,    14,    15,    16,
-      17,    18,    56,    19,    21,    19,    57,    57,    20,    57,
-      21,    21,    21,    55,    19,    19,    55,    55,    55,    19,
-      19,    55,    58,    19,    57,    57,    56,    56,    56,    24,
-      57,    19,    57,    19,    58,    58,    58,    58,    58,    58,
-      58,    19,    19,    58,    19,    24,    19,    19,    24,    30,
-      58,    58,    58,    24,    56,    58,    53,    24,    56,    19,
-      19,    24,    55,    53,    56,    59,    57,    56,    19,    56,
-      24,    56,    55,    57,    56,    55,    24,    13,   184,   183,
-     180,    55,   267,   367,   137,    55,   278,    56,    53,    57,
-      56,   358,    56,    48,    56,    53,    -1,    58,    -1,    -1,
-      -1,    58,   103
+      21,    57,    57,    21,    11,    12,    13,    14,    15,    16,
+      17,    18,    21,    19,    21,    57,    55,    55,    19,    55,
+      19,    19,    19,    57,    55,    30,    19,    56,    58,    56,
+      24,    57,    57,    57,    19,    58,    58,    19,    58,    58,
+      19,    58,    58,    58,    58,    58,    58,    58,    58,    53,
+      19,    59,    24,    56,    56,    55,    24,    24,    53,    19,
+      19,    57,    24,    19,    56,    56,    56,    56,    55,    30,
+      56,    55,    19,    56,    24,    56,    56,    55,    55,    53,
+      19,    56,    24,    56,    24,    56,    13,    53,    58,   184,
+     183,    48,   180,    58,    57,   282,   271,   137,   381,    57,
+     372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   103
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1445,28 +1500,30 @@ static const unsigned char yystos[] =
       54,    21,    19,    54,    56,    19,    55,    83,    60,    56,
       55,    19,    19,    19,    55,     5,    96,     5,    19,    55,
       75,    99,    19,    99,    91,    56,    19,    19,    97,    19,
-      22,    55,    58,    76,    77,    78,    19,    20,    21,    20,
-      57,    21,    57,    21,    57,    21,    53,    57,   101,    19,
-      40,    41,    42,    43,    44,    46,    47,    48,    49,    50,
-      51,    52,    84,    87,    19,    57,    90,    19,    55,    81,
-      55,     5,     6,    19,    91,   105,   106,   107,   108,    96,
-      19,   100,    99,    99,    19,    91,    55,    91,    19,    53,
-      78,   105,    53,   118,    77,    76,    57,    56,    56,    56,
-      57,    57,    57,    24,    58,    58,    58,    58,    58,    58,
-      58,    58,    58,    58,    58,    58,    56,    59,    53,    91,
-      19,    19,   105,    19,     5,    59,    19,    56,    59,    56,
-      59,    55,    19,   105,    19,    24,    57,    56,    24,    72,
-      72,    72,    19,    30,    85,    85,   118,   118,    19,    85,
-      86,   118,    90,    91,    19,    21,    19,    21,    19,    21,
-      19,    21,    19,    21,    87,    24,    56,    56,    53,    56,
-      59,    59,   106,    22,    55,    19,   103,    10,   108,    19,
-     105,    55,    56,    55,   103,    55,    19,    57,    24,   103,
-     106,   106,    55,    19,    53,   104,   118,   101,    56,   105,
-     103,   105,   101,    30,    53,    19,    57,   101,    19,    19,
-      58,    62,    63,    64,   109,   110,    24,    19,   103,    56,
-     101,    56,    56,    24,    53,   109,    58,    58,   118,    58,
-     118,    58,    56,   110,   104,   101,   103,   103,    57,    24,
-      56,   118,   118,   118,   118,   101,   101,    57
+      22,    55,    58,    76,    77,    78,    19,    20,    21,    30,
+      20,    57,    21,    57,    21,    57,    21,    53,    57,   101,
+      19,    40,    41,    42,    43,    44,    46,    47,    48,    49,
+      50,    51,    52,    84,    87,    19,    57,    90,    19,    55,
+      81,    55,     5,     6,    19,    91,   105,   106,   107,   108,
+      96,    19,   100,    99,    99,    19,    91,    55,    91,    19,
+      53,    78,   105,    53,   118,    77,    19,    76,    57,    30,
+      56,    56,    56,    30,    57,    57,    57,    24,    58,    58,
+      58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
+      56,    59,    53,    91,    19,    19,   105,    19,     5,    59,
+      19,    56,    59,    56,    59,    55,    19,   105,    19,    24,
+      57,    56,    24,    30,    56,    72,    72,    72,    30,    56,
+      19,    30,    85,    85,   118,   118,    19,    85,    86,   118,
+      90,    91,    19,    21,    19,    21,    19,    21,    19,    21,
+      19,    21,    87,    24,    56,    56,    53,    56,    59,    59,
+     106,    22,    55,    19,   103,    10,   108,    19,   105,    55,
+      56,    55,   103,    56,    72,    56,    72,    55,    19,    57,
+      24,   103,   106,   106,    55,    19,    53,   104,   118,   101,
+      56,   105,   103,   105,   101,    72,    72,    30,    53,    19,
+      57,   101,    19,    19,    58,    62,    63,    64,   109,   110,
+      24,    19,   103,    56,   101,    56,    56,    24,    53,   109,
+      58,    58,   118,    58,   118,    58,    56,   110,   104,   101,
+     103,   103,    57,    24,    56,   118,   118,   118,   118,   101,
+     101,    57
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -2077,27 +2134,27 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 649 "parse.y"
+#line 689 "parse.y"
     { ; }
     break;
 
   case 3:
-#line 650 "parse.y"
+#line 690 "parse.y"
     { ; }
     break;
 
   case 4:
-#line 651 "parse.y"
+#line 691 "parse.y"
     { ; }
     break;
 
   case 5:
-#line 652 "parse.y"
+#line 692 "parse.y"
     { ; }
     break;
 
   case 6:
-#line 655 "parse.y"
+#line 695 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", C_CCODE,
@@ -2110,7 +2167,7 @@ yyreduce:
     break;
 
   case 7:
-#line 664 "parse.y"
+#line 704 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", H_CCODE,
@@ -2123,7 +2180,7 @@ yyreduce:
     break;
 
   case 8:
-#line 673 "parse.y"
+#line 713 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", HT_CCODE,
@@ -2136,7 +2193,7 @@ yyreduce:
     break;
 
   case 9:
-#line 682 "parse.y"
+#line 722 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", PH_CCODE,
@@ -2149,7 +2206,7 @@ yyreduce:
     break;
 
   case 10:
-#line 691 "parse.y"
+#line 731 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", A_CCODE,
@@ -2162,7 +2219,7 @@ yyreduce:
     break;
 
   case 11:
-#line 700 "parse.y"
+#line 740 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", AT_CCODE,
@@ -2175,47 +2232,47 @@ yyreduce:
     break;
 
   case 12:
-#line 711 "parse.y"
+#line 751 "parse.y"
     { ; }
     break;
 
   case 13:
-#line 712 "parse.y"
+#line 752 "parse.y"
     { ; }
     break;
 
   case 14:
-#line 713 "parse.y"
+#line 753 "parse.y"
     { ; }
     break;
 
   case 15:
-#line 714 "parse.y"
+#line 754 "parse.y"
     { ; }
     break;
 
   case 16:
-#line 715 "parse.y"
+#line 755 "parse.y"
     { ; }
     break;
 
   case 17:
-#line 716 "parse.y"
+#line 756 "parse.y"
     { ; }
     break;
 
   case 18:
-#line 717 "parse.y"
+#line 757 "parse.y"
     { ; }
     break;
 
   case 19:
-#line 718 "parse.y"
+#line 758 "parse.y"
     { ; }
     break;
 
   case 20:
-#line 721 "parse.y"
+#line 761 "parse.y"
     {
                        ((Class *)class)->nodes = class_nodes;
                        class_nodes = NULL;
@@ -2224,7 +2281,7 @@ yyreduce:
     break;
 
   case 21:
-#line 726 "parse.y"
+#line 766 "parse.y"
     {
                        ((Class *)class)->nodes = NULL;
                        class_nodes = NULL;
@@ -2233,23 +2290,25 @@ yyreduce:
     break;
 
   case 22:
-#line 733 "parse.y"
+#line 773 "parse.y"
     {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", yyvsp[-3].id,
                                          "ptype:steal", yyvsp[-1].id,
                                          "bonobo_object_class:steal", bonobo_object_class,
+                                         "glade_xml", glade_xml,
                                          "interfaces:steal", interfaces,
                                          "chunk_size:steal", chunk_size,
                                          NULL);
                        bonobo_object_class = NULL;
+                       glade_xml = FALSE;
                        chunk_size = NULL;
                        interfaces = NULL;
                                                }
     break;
 
   case 24:
-#line 748 "parse.y"
+#line 790 "parse.y"
     {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2265,7 +2324,7 @@ yyreduce:
     break;
 
   case 25:
-#line 760 "parse.y"
+#line 802 "parse.y"
     {
                        if (strcmp (yyvsp[-3].id, "interface") == 0) {
                                interfaces = g_list_append (interfaces,
@@ -2278,7 +2337,7 @@ yyreduce:
     break;
 
   case 26:
-#line 769 "parse.y"
+#line 811 "parse.y"
     {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2294,22 +2353,74 @@ yyreduce:
     break;
 
   case 27:
-#line 783 "parse.y"
-    { ; }
+#line 823 "parse.y"
+    {
+                       if (strcmp (yyvsp[-4].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-3].id, yyvsp[-2].id, NULL);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
     break;
 
   case 28:
-#line 784 "parse.y"
-    { ; }
+#line 832 "parse.y"
+    {
+                       if (strcmp (yyvsp[-5].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-4].id, yyvsp[-3].id, yyvsp[-2].id);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
     break;
 
   case 29:
-#line 787 "parse.y"
-    { ; }
+#line 841 "parse.y"
+    {
+                       if (strcmp (yyvsp[-4].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-3].id, yyvsp[-2].id, NULL);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
     break;
 
   case 30:
-#line 788 "parse.y"
+#line 850 "parse.y"
+    {
+                       if (strcmp (yyvsp[-5].id, "GladeXML") == 0) {
+                               glade_xml = TRUE;
+                               add_construct_glade(yyvsp[-4].id, yyvsp[-3].id, yyvsp[-2].id);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
+    break;
+
+  case 31:
+#line 861 "parse.y"
+    { ; }
+    break;
+
+  case 32:
+#line 862 "parse.y"
+    { ; }
+    break;
+
+  case 33:
+#line 865 "parse.y"
+    { ; }
+    break;
+
+  case 34:
+#line 866 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "BonoboObject") != 0) {
                                g_free (yyvsp[-1].id);
@@ -2321,8 +2432,8 @@ yyreduce:
                                                }
     break;
 
-  case 31:
-#line 797 "parse.y"
+  case 35:
+#line 875 "parse.y"
     {
                        if (strcmp (yyvsp[-2].id, "interface") != 0) {
                                g_free (yyvsp[-2].id);
@@ -2337,48 +2448,48 @@ yyreduce:
                                                }
     break;
 
-  case 32:
-#line 809 "parse.y"
+  case 36:
+#line 887 "parse.y"
     { ; }
     break;
 
-  case 33:
-#line 810 "parse.y"
+  case 37:
+#line 888 "parse.y"
     { ; }
     break;
 
-  case 34:
-#line 811 "parse.y"
+  case 38:
+#line 889 "parse.y"
     { ; }
     break;
 
-  case 35:
-#line 812 "parse.y"
+  case 39:
+#line 890 "parse.y"
     { ; }
     break;
 
-  case 36:
-#line 815 "parse.y"
+  case 40:
+#line 893 "parse.y"
     { the_scope = PUBLIC_SCOPE; }
     break;
 
-  case 37:
-#line 816 "parse.y"
+  case 41:
+#line 894 "parse.y"
     { the_scope = PRIVATE_SCOPE; }
     break;
 
-  case 38:
-#line 817 "parse.y"
+  case 42:
+#line 895 "parse.y"
     { the_scope = PROTECTED_SCOPE; }
     break;
 
-  case 39:
-#line 818 "parse.y"
+  case 43:
+#line 896 "parse.y"
     { the_scope = CLASS_SCOPE; }
     break;
 
-  case 40:
-#line 821 "parse.y"
+  case 44:
+#line 899 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "destroywith") == 0) {
                                g_free (yyvsp[-1].id);
@@ -2401,8 +2512,8 @@ yyreduce:
                                }
     break;
 
-  case 41:
-#line 841 "parse.y"
+  case 45:
+#line 919 "parse.y"
     {
                        if (strcmp (yyvsp[-2].id, "destroy") == 0) {
                                g_free(yyvsp[-2].id);
@@ -2427,16 +2538,16 @@ yyreduce:
                                        }
     break;
 
-  case 42:
-#line 865 "parse.y"
+  case 46:
+#line 943 "parse.y"
     {
                        initializer = yyvsp[0].id;
                        initializer_line = ccode_line;
                                }
     break;
 
-  case 43:
-#line 869 "parse.y"
+  case 47:
+#line 947 "parse.y"
     {
                        initializer = (yyvsp[0].cbuf)->str;
                        initializer_line = ccode_line;
@@ -2444,50 +2555,62 @@ yyreduce:
                                }
     break;
 
-  case 44:
-#line 877 "parse.y"
+  case 48:
+#line 955 "parse.y"
     { ; }
     break;
 
-  case 45:
-#line 878 "parse.y"
+  case 49:
+#line 956 "parse.y"
     { ; }
     break;
 
-  case 46:
-#line 879 "parse.y"
+  case 50:
+#line 957 "parse.y"
     { destructor = NULL; }
     break;
 
-  case 47:
-#line 880 "parse.y"
+  case 51:
+#line 958 "parse.y"
     { initializer = NULL; }
     break;
 
-  case 48:
-#line 881 "parse.y"
+  case 52:
+#line 959 "parse.y"
+    {
+                       if (strcmp (yyvsp[0].id, "GladeXML") == 0) {
+                               glade_widget = TRUE;
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+                                       }
+    break;
+
+  case 53:
+#line 967 "parse.y"
     {
                        destructor = NULL;
                        initializer = NULL;
                                        }
     break;
 
-  case 49:
-#line 887 "parse.y"
+  case 54:
+#line 973 "parse.y"
     {
                        push_variable(yyvsp[-2].id, the_scope,yyvsp[-4].line, NULL);
                                                }
     break;
 
-  case 50:
-#line 890 "parse.y"
+  case 55:
+#line 976 "parse.y"
     {
                        push_variable(yyvsp[-3].id, the_scope, yyvsp[-5].line, yyvsp[-2].id);
                                                }
     break;
 
-  case 51:
-#line 895 "parse.y"
+  case 56:
+#line 981 "parse.y"
     {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-6].id,"get")==0 &&
@@ -2558,8 +2681,8 @@ yyreduce:
                                                }
     break;
 
-  case 52:
-#line 963 "parse.y"
+  case 57:
+#line 1049 "parse.y"
     {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-3].id, "get") == 0) {
@@ -2616,8 +2739,8 @@ yyreduce:
                                                }
     break;
 
-  case 53:
-#line 1017 "parse.y"
+  case 58:
+#line 1103 "parse.y"
     {
                        Node *node;
                        char *get, *set = NULL;
@@ -2707,8 +2830,8 @@ yyreduce:
                                                }
     break;
 
-  case 54:
-#line 1106 "parse.y"
+  case 59:
+#line 1192 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2719,15 +2842,15 @@ yyreduce:
                                                }
     break;
 
-  case 55:
-#line 1114 "parse.y"
+  case 60:
+#line 1200 "parse.y"
     {
                        yyval.id = NULL;
                                                }
     break;
 
-  case 56:
-#line 1119 "parse.y"
+  case 61:
+#line 1205 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2778,8 +2901,8 @@ yyreduce:
                }
     break;
 
-  case 57:
-#line 1167 "parse.y"
+  case 62:
+#line 1253 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2818,8 +2941,8 @@ yyreduce:
                }
     break;
 
-  case 58:
-#line 1203 "parse.y"
+  case 63:
+#line 1289 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2836,33 +2959,33 @@ yyreduce:
                }
     break;
 
-  case 59:
-#line 1219 "parse.y"
+  case 64:
+#line 1305 "parse.y"
     { ; }
     break;
 
-  case 60:
-#line 1220 "parse.y"
+  case 65:
+#line 1306 "parse.y"
     { ; }
     break;
 
-  case 61:
-#line 1223 "parse.y"
+  case 66:
+#line 1309 "parse.y"
     { ; }
     break;
 
-  case 62:
-#line 1224 "parse.y"
+  case 67:
+#line 1310 "parse.y"
     { ; }
     break;
 
-  case 63:
-#line 1227 "parse.y"
+  case 68:
+#line 1313 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 64:
-#line 1228 "parse.y"
+  case 69:
+#line 1314 "parse.y"
     {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2875,18 +2998,18 @@ yyreduce:
                }
     break;
 
-  case 65:
-#line 1240 "parse.y"
+  case 70:
+#line 1326 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 66:
-#line 1241 "parse.y"
+  case 71:
+#line 1327 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 67:
-#line 1244 "parse.y"
+  case 72:
+#line 1330 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2895,8 +3018,8 @@ yyreduce:
                  }
     break;
 
-  case 68:
-#line 1250 "parse.y"
+  case 73:
+#line 1336 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2905,8 +3028,8 @@ yyreduce:
                  }
     break;
 
-  case 69:
-#line 1256 "parse.y"
+  case 74:
+#line 1342 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2915,8 +3038,8 @@ yyreduce:
                  }
     break;
 
-  case 70:
-#line 1262 "parse.y"
+  case 75:
+#line 1348 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2925,8 +3048,8 @@ yyreduce:
                  }
     break;
 
-  case 71:
-#line 1268 "parse.y"
+  case 76:
+#line 1354 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2935,8 +3058,8 @@ yyreduce:
                  }
     break;
 
-  case 72:
-#line 1274 "parse.y"
+  case 77:
+#line 1360 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2945,8 +3068,8 @@ yyreduce:
                  }
     break;
 
-  case 73:
-#line 1280 "parse.y"
+  case 78:
+#line 1366 "parse.y"
     {
                Type *type = pop_type ();
                ensure_property ();
@@ -2956,8 +3079,8 @@ yyreduce:
                  }
     break;
 
-  case 74:
-#line 1287 "parse.y"
+  case 79:
+#line 1373 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2966,8 +3089,8 @@ yyreduce:
                  }
     break;
 
-  case 75:
-#line 1293 "parse.y"
+  case 80:
+#line 1379 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2976,8 +3099,8 @@ yyreduce:
                  }
     break;
 
-  case 76:
-#line 1299 "parse.y"
+  case 81:
+#line 1385 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2986,8 +3109,8 @@ yyreduce:
                  }
     break;
 
-  case 77:
-#line 1305 "parse.y"
+  case 82:
+#line 1391 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2996,8 +3119,8 @@ yyreduce:
                  }
     break;
 
-  case 78:
-#line 1311 "parse.y"
+  case 83:
+#line 1397 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3006,8 +3129,8 @@ yyreduce:
                  }
     break;
 
-  case 79:
-#line 1317 "parse.y"
+  case 84:
+#line 1403 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3016,8 +3139,8 @@ yyreduce:
                  }
     break;
 
-  case 80:
-#line 1323 "parse.y"
+  case 85:
+#line 1409 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3026,8 +3149,8 @@ yyreduce:
                  }
     break;
 
-  case 81:
-#line 1329 "parse.y"
+  case 86:
+#line 1415 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3036,8 +3159,8 @@ yyreduce:
                  }
     break;
 
-  case 82:
-#line 1335 "parse.y"
+  case 87:
+#line 1421 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3046,8 +3169,8 @@ yyreduce:
                  }
     break;
 
-  case 83:
-#line 1341 "parse.y"
+  case 88:
+#line 1427 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3056,8 +3179,8 @@ yyreduce:
                  }
     break;
 
-  case 84:
-#line 1347 "parse.y"
+  case 89:
+#line 1433 "parse.y"
     {
                ensure_property ();
                if (strcmp (yyvsp[0].id, "override") == 0) {
@@ -3083,8 +3206,8 @@ yyreduce:
                  }
     break;
 
-  case 85:
-#line 1372 "parse.y"
+  case 90:
+#line 1458 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -3096,40 +3219,40 @@ yyreduce:
                                                }
     break;
 
-  case 86:
-#line 1381 "parse.y"
+  case 91:
+#line 1467 "parse.y"
     {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
                                                }
     break;
 
-  case 87:
-#line 1387 "parse.y"
+  case 92:
+#line 1473 "parse.y"
     { yyval.list = yyvsp[-1].list; }
     break;
 
-  case 88:
-#line 1388 "parse.y"
+  case 93:
+#line 1474 "parse.y"
     { yyval.list = NULL; }
     break;
 
-  case 89:
-#line 1391 "parse.y"
+  case 94:
+#line 1477 "parse.y"
     {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                }
     break;
 
-  case 90:
-#line 1394 "parse.y"
+  case 95:
+#line 1480 "parse.y"
     {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                }
     break;
 
-  case 91:
-#line 1400 "parse.y"
+  case 96:
+#line 1486 "parse.y"
     {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -3139,8 +3262,8 @@ yyreduce:
                                                        }
     break;
 
-  case 92:
-#line 1407 "parse.y"
+  case 97:
+#line 1493 "parse.y"
     {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -3149,46 +3272,46 @@ yyreduce:
                                                        }
     break;
 
-  case 93:
-#line 1416 "parse.y"
+  case 98:
+#line 1502 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
-  case 94:
-#line 1419 "parse.y"
+  case 99:
+#line 1505 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
-  case 95:
-#line 1422 "parse.y"
+  case 100:
+#line 1508 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 96:
-#line 1426 "parse.y"
+  case 101:
+#line 1512 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 
-  case 97:
-#line 1430 "parse.y"
+  case 102:
+#line 1516 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 98:
-#line 1434 "parse.y"
+  case 103:
+#line 1520 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
@@ -3196,8 +3319,8 @@ yyreduce:
                                                        }
     break;
 
-  case 99:
-#line 1439 "parse.y"
+  case 104:
+#line 1525 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
@@ -3205,16 +3328,16 @@ yyreduce:
                                                        }
     break;
 
-  case 100:
-#line 1447 "parse.y"
+  case 105:
+#line 1533 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 101:
-#line 1451 "parse.y"
+  case 106:
+#line 1537 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[-1].id);
@@ -3222,131 +3345,131 @@ yyreduce:
                                                        }
     break;
 
-  case 102:
-#line 1456 "parse.y"
+  case 107:
+#line 1542 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 
-  case 103:
-#line 1460 "parse.y"
+  case 108:
+#line 1546 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
-  case 104:
-#line 1463 "parse.y"
+  case 109:
+#line 1549 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 
-  case 105:
-#line 1467 "parse.y"
+  case 110:
+#line 1553 "parse.y"
     {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        }
     break;
 
-  case 106:
-#line 1470 "parse.y"
+  case 111:
+#line 1556 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        }
     break;
 
-  case 107:
-#line 1475 "parse.y"
+  case 112:
+#line 1561 "parse.y"
     { yyval.id = "void"; }
     break;
 
-  case 108:
-#line 1476 "parse.y"
+  case 113:
+#line 1562 "parse.y"
     { yyval.id = "char"; }
     break;
 
-  case 109:
-#line 1477 "parse.y"
+  case 114:
+#line 1563 "parse.y"
     { yyval.id = "short"; }
     break;
 
-  case 110:
-#line 1478 "parse.y"
+  case 115:
+#line 1564 "parse.y"
     { yyval.id = "int"; }
     break;
 
-  case 111:
-#line 1479 "parse.y"
+  case 116:
+#line 1565 "parse.y"
     { yyval.id = "long"; }
     break;
 
-  case 112:
-#line 1480 "parse.y"
+  case 117:
+#line 1566 "parse.y"
     { yyval.id = "float"; }
     break;
 
-  case 113:
-#line 1481 "parse.y"
+  case 118:
+#line 1567 "parse.y"
     { yyval.id = "double"; }
     break;
 
-  case 114:
-#line 1482 "parse.y"
+  case 119:
+#line 1568 "parse.y"
     { yyval.id = "signed"; }
     break;
 
-  case 115:
-#line 1483 "parse.y"
+  case 120:
+#line 1569 "parse.y"
     { yyval.id = "unsigned"; }
     break;
 
-  case 116:
-#line 1486 "parse.y"
+  case 121:
+#line 1572 "parse.y"
     { yyval.id = "struct"; }
     break;
 
-  case 117:
-#line 1487 "parse.y"
+  case 122:
+#line 1573 "parse.y"
     { yyval.id = "union"; }
     break;
 
-  case 118:
-#line 1488 "parse.y"
+  case 123:
+#line 1574 "parse.y"
     { yyval.id = "enum"; }
     break;
 
-  case 119:
-#line 1491 "parse.y"
+  case 124:
+#line 1577 "parse.y"
     { yyval.id = g_strdup("*"); }
     break;
 
-  case 120:
-#line 1492 "parse.y"
+  case 125:
+#line 1578 "parse.y"
     { yyval.id = g_strdup("* const"); }
     break;
 
-  case 121:
-#line 1493 "parse.y"
+  case 126:
+#line 1579 "parse.y"
     {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 
-  case 122:
-#line 1497 "parse.y"
+  case 127:
+#line 1583 "parse.y"
     {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 
-  case 123:
-#line 1504 "parse.y"
+  case 128:
+#line 1590 "parse.y"
     {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3361,15 +3484,15 @@ yyreduce:
                                        }
     break;
 
-  case 124:
-#line 1516 "parse.y"
+  case 129:
+#line 1602 "parse.y"
     {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 
-  case 125:
-#line 1522 "parse.y"
+  case 130:
+#line 1608 "parse.y"
     {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3384,8 +3507,8 @@ yyreduce:
                                        }
     break;
 
-  case 126:
-#line 1534 "parse.y"
+  case 131:
+#line 1620 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3400,54 +3523,54 @@ yyreduce:
                                        }
     break;
 
-  case 127:
-#line 1546 "parse.y"
+  case 132:
+#line 1632 "parse.y"
     {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 
-  case 128:
-#line 1549 "parse.y"
+  case 133:
+#line 1635 "parse.y"
     {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
                                        }
     break;
 
-  case 129:
-#line 1555 "parse.y"
+  case 134:
+#line 1641 "parse.y"
     {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                }
     break;
 
-  case 130:
-#line 1560 "parse.y"
+  case 135:
+#line 1646 "parse.y"
     {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                }
     break;
 
-  case 131:
-#line 1563 "parse.y"
+  case 136:
+#line 1649 "parse.y"
     { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        }
     break;
 
-  case 132:
-#line 1568 "parse.y"
+  case 137:
+#line 1654 "parse.y"
     { yyval.cbuf = yyvsp[0].cbuf; }
     break;
 
-  case 133:
-#line 1569 "parse.y"
+  case 138:
+#line 1655 "parse.y"
     { yyval.cbuf = NULL; }
     break;
 
-  case 134:
-#line 1573 "parse.y"
+  case 139:
+#line 1659 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3466,8 +3589,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 135:
-#line 1589 "parse.y"
+  case 140:
+#line 1675 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3486,8 +3609,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 136:
-#line 1605 "parse.y"
+  case 141:
+#line 1691 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3506,8 +3629,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 137:
-#line 1621 "parse.y"
+  case 142:
+#line 1707 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3526,8 +3649,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 138:
-#line 1637 "parse.y"
+  case 143:
+#line 1723 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3541,8 +3664,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 139:
-#line 1648 "parse.y"
+  case 144:
+#line 1734 "parse.y"
     {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -3551,8 +3674,8 @@ yyreduce:
                                                                        }
     break;
 
-  case 140:
-#line 1654 "parse.y"
+  case 145:
+#line 1740 "parse.y"
     {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -3565,8 +3688,8 @@ yyreduce:
                                                                }
     break;
 
-  case 141:
-#line 1664 "parse.y"
+  case 146:
+#line 1750 "parse.y"
     {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -3590,8 +3713,8 @@ yyreduce:
                                                }
     break;
 
-  case 142:
-#line 1687 "parse.y"
+  case 147:
+#line 1773 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3605,8 +3728,8 @@ yyreduce:
                                        }
     break;
 
-  case 143:
-#line 1698 "parse.y"
+  case 148:
+#line 1784 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3628,34 +3751,34 @@ yyreduce:
                                                }
     break;
 
-  case 144:
-#line 1717 "parse.y"
+  case 149:
+#line 1803 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
                                        }
     break;
 
-  case 145:
-#line 1723 "parse.y"
+  case 150:
+#line 1809 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 146:
-#line 1724 "parse.y"
+  case 151:
+#line 1810 "parse.y"
     {
                        yyval.id = (yyvsp[0].cbuf)->str;
                        g_string_free(yyvsp[0].cbuf, FALSE);
                                        }
     break;
 
-  case 147:
-#line 1730 "parse.y"
+  case 152:
+#line 1816 "parse.y"
     { vararg = FALSE; has_self = FALSE; }
     break;
 
-  case 148:
-#line 1731 "parse.y"
+  case 153:
+#line 1817 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3669,8 +3792,8 @@ yyreduce:
                                                }
     break;
 
-  case 149:
-#line 1742 "parse.y"
+  case 154:
+#line 1828 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3684,8 +3807,8 @@ yyreduce:
                                                }
     break;
 
-  case 150:
-#line 1753 "parse.y"
+  case 155:
+#line 1839 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3699,8 +3822,8 @@ yyreduce:
                                                }
     break;
 
-  case 151:
-#line 1764 "parse.y"
+  case 156:
+#line 1850 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3713,8 +3836,8 @@ yyreduce:
                                        }
     break;
 
-  case 152:
-#line 1774 "parse.y"
+  case 157:
+#line 1860 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -3727,8 +3850,8 @@ yyreduce:
                                        }
     break;
 
-  case 153:
-#line 1784 "parse.y"
+  case 158:
+#line 1870 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3741,47 +3864,47 @@ yyreduce:
                                        }
     break;
 
-  case 154:
-#line 1794 "parse.y"
+  case 159:
+#line 1880 "parse.y"
     { has_self = FALSE; }
     break;
 
-  case 155:
-#line 1797 "parse.y"
+  case 160:
+#line 1883 "parse.y"
     { vararg = TRUE; }
     break;
 
-  case 156:
-#line 1798 "parse.y"
+  case 161:
+#line 1884 "parse.y"
     { vararg = FALSE; }
     break;
 
-  case 157:
-#line 1801 "parse.y"
+  case 162:
+#line 1887 "parse.y"
     { ; }
     break;
 
-  case 158:
-#line 1802 "parse.y"
+  case 163:
+#line 1888 "parse.y"
     { ; }
     break;
 
-  case 159:
-#line 1805 "parse.y"
+  case 164:
+#line 1891 "parse.y"
     {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                }
     break;
 
-  case 160:
-#line 1808 "parse.y"
+  case 165:
+#line 1894 "parse.y"
     {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                }
     break;
 
-  case 161:
-#line 1811 "parse.y"
+  case 166:
+#line 1897 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3792,8 +3915,8 @@ yyreduce:
                                                                }
     break;
 
-  case 162:
-#line 1819 "parse.y"
+  case 167:
+#line 1905 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3804,18 +3927,18 @@ yyreduce:
                                                                }
     break;
 
-  case 163:
-#line 1829 "parse.y"
+  case 168:
+#line 1915 "parse.y"
     { ; }
     break;
 
-  case 164:
-#line 1830 "parse.y"
+  case 169:
+#line 1916 "parse.y"
     { ; }
     break;
 
-  case 165:
-#line 1833 "parse.y"
+  case 170:
+#line 1919 "parse.y"
     {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3835,8 +3958,8 @@ yyreduce:
                                        }
     break;
 
-  case 166:
-#line 1850 "parse.y"
+  case 171:
+#line 1936 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3846,8 +3969,8 @@ yyreduce:
                                        }
     break;
 
-  case 167:
-#line 1857 "parse.y"
+  case 172:
+#line 1943 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3857,8 +3980,8 @@ yyreduce:
                                        }
     break;
 
-  case 168:
-#line 1864 "parse.y"
+  case 173:
+#line 1950 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3868,8 +3991,8 @@ yyreduce:
                                        }
     break;
 
-  case 169:
-#line 1871 "parse.y"
+  case 174:
+#line 1957 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3879,8 +4002,8 @@ yyreduce:
                                        }
     break;
 
-  case 170:
-#line 1878 "parse.y"
+  case 175:
+#line 1964 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3890,8 +4013,8 @@ yyreduce:
                                        }
     break;
 
-  case 171:
-#line 1885 "parse.y"
+  case 176:
+#line 1971 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3901,8 +4024,8 @@ yyreduce:
                                        }
     break;
 
-  case 172:
-#line 1894 "parse.y"
+  case 177:
+#line 1980 "parse.y"
     {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3914,8 +4037,8 @@ yyreduce:
                        }
     break;
 
-  case 173:
-#line 1903 "parse.y"
+  case 178:
+#line 1989 "parse.y"
     {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3927,18 +4050,18 @@ yyreduce:
                        }
     break;
 
-  case 174:
-#line 1914 "parse.y"
+  case 179:
+#line 2000 "parse.y"
     {;}
     break;
 
-  case 175:
-#line 1915 "parse.y"
+  case 180:
+#line 2001 "parse.y"
     {;}
     break;
 
-  case 176:
-#line 1918 "parse.y"
+  case 181:
+#line 2004 "parse.y"
     {
                        Node *node;
                        char *num = yyvsp[0].id;
@@ -3961,8 +4084,8 @@ yyreduce:
                        }
     break;
 
-  case 177:
-#line 1938 "parse.y"
+  case 182:
+#line 2024 "parse.y"
     {
                        Node *node;
 
@@ -3973,8 +4096,8 @@ yyreduce:
        }
     break;
 
-  case 178:
-#line 1948 "parse.y"
+  case 183:
+#line 2034 "parse.y"
     {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3986,8 +4109,8 @@ yyreduce:
                        }
     break;
 
-  case 179:
-#line 1957 "parse.y"
+  case 184:
+#line 2043 "parse.y"
     {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3999,22 +4122,22 @@ yyreduce:
                        }
     break;
 
-  case 180:
-#line 1968 "parse.y"
+  case 185:
+#line 2054 "parse.y"
     {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 
-  case 181:
-#line 1971 "parse.y"
+  case 186:
+#line 2057 "parse.y"
     {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 
-  case 182:
-#line 1976 "parse.y"
+  case 187:
+#line 2062 "parse.y"
     {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -4026,8 +4149,8 @@ yyreduce:
                        }
     break;
 
-  case 183:
-#line 1985 "parse.y"
+  case 188:
+#line 2071 "parse.y"
     {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -4039,40 +4162,40 @@ yyreduce:
                        }
     break;
 
-  case 184:
-#line 1996 "parse.y"
+  case 189:
+#line 2082 "parse.y"
     {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 
-  case 185:
-#line 1999 "parse.y"
+  case 190:
+#line 2085 "parse.y"
     {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 
-  case 186:
-#line 2005 "parse.y"
+  case 191:
+#line 2091 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 187:
-#line 2006 "parse.y"
+  case 192:
+#line 2092 "parse.y"
     {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
                                        }
     break;
 
-  case 188:
-#line 2010 "parse.y"
+  case 193:
+#line 2096 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
-  case 189:
-#line 2011 "parse.y"
+  case 194:
+#line 2097 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
@@ -4080,7 +4203,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 4084 "parse.c"
+#line 4207 "parse.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4305,6 +4428,6 @@ yyreturn:
 }
 
 
-#line 2014 "parse.y"
+#line 2100 "parse.y"