]> git.draconx.ca Git - gob-dx.git/blobdiff - src/parse.c
Release 2.0.8
[gob-dx.git] / src / parse.c
index 85d2b225954d59af96a2b3de1a098a0c20ce3eb6..79e576115ed3fe0cd2c868839cb522c0376e7a26 100644 (file)
@@ -537,7 +537,7 @@ property_link_and_export (Node *node)
                        if (prop->extra_gtktype != NULL) {
                                cast = remove_sep (prop->extra_gtktype);
                        } else {
-                               cast = "void";
+                               cast = g_strdup ("void");
                        }
                        set = g_strdup_printf("{ GObject *___old = (GObject *)%s->%s; "
                                              "%s->%s = (%s *)g_value_dup_object (VAL); "
@@ -553,6 +553,8 @@ property_link_and_export (Node *node)
                                               root, prop->name);
                        g_free (cast);
                } else if (strcmp (prop->gtktype, "BOXED") == 0) {
+                       char *type = make_me_type (prop->extra_gtktype,
+                                                  "G_TYPE_BOXED");
                        if (prop->extra_gtktype == NULL) {
                                error_print (GOB_ERROR, prop->line_no,
                                             _("Property linking requested for BOXED, but "
@@ -567,12 +569,13 @@ property_link_and_export (Node *node)
                                              "} "
                                              "}",
                                              root, prop->name,
-                                             prop->extra_gtktype,
+                                             type,
                                              root, prop->name,
-                                             prop->extra_gtktype,
+                                             type,
                                              root, prop->name);
                        get = g_strdup_printf("g_value_set_boxed (VAL, %s->%s);",
                                              root, prop->name);
+                       g_free (type);
                } else {
                        char *set_func;
                        char *get_func;
@@ -648,7 +651,7 @@ ensure_property (void)
 }
 
 
-#line 616 "parse.y"
+#line 619 "parse.y"
 #ifndef YYSTYPE
 typedef union {
        char *id;
@@ -812,25 +815,25 @@ static const short yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
 static const short yyrline[] =
 {
-       0,   637,   638,   639,   640,   643,   652,   661,   670,   679,
-     688,   699,   700,   701,   702,   703,   704,   705,   706,   709,
-     714,   721,   735,   736,   748,   757,   771,   772,   775,   776,
-     785,   797,   798,   799,   800,   803,   804,   805,   806,   809,
-     829,   853,   857,   865,   866,   867,   868,   869,   875,   878,
-     883,   951,  1005,  1093,  1101,  1106,  1154,  1190,  1206,  1207,
-    1210,  1211,  1214,  1215,  1227,  1228,  1231,  1237,  1243,  1249,
-    1255,  1261,  1267,  1274,  1280,  1286,  1292,  1298,  1304,  1310,
-    1316,  1322,  1328,  1334,  1354,  1363,  1369,  1370,  1373,  1376,
-    1382,  1389,  1398,  1401,  1404,  1408,  1412,  1416,  1421,  1429,
-    1433,  1438,  1442,  1445,  1449,  1452,  1457,  1458,  1459,  1460,
-    1461,  1462,  1463,  1464,  1465,  1468,  1469,  1470,  1473,  1474,
-    1475,  1479,  1486,  1498,  1504,  1516,  1528,  1531,  1537,  1542,
-    1545,  1550,  1551,  1555,  1571,  1587,  1603,  1619,  1630,  1636,
-    1646,  1669,  1680,  1699,  1705,  1706,  1712,  1713,  1724,  1735,
-    1746,  1756,  1766,  1776,  1779,  1780,  1783,  1784,  1787,  1790,
-    1793,  1801,  1811,  1812,  1815,  1832,  1839,  1846,  1853,  1860,
-    1867,  1876,  1885,  1896,  1897,  1900,  1920,  1930,  1939,  1950,
-    1953,  1958,  1967,  1978,  1981,  1987,  1988,  1992,  1993
+       0,   640,   641,   642,   643,   646,   655,   664,   673,   682,
+     691,   702,   703,   704,   705,   706,   707,   708,   709,   712,
+     717,   724,   738,   739,   751,   760,   774,   775,   778,   779,
+     788,   800,   801,   802,   803,   806,   807,   808,   809,   812,
+     832,   856,   860,   868,   869,   870,   871,   872,   878,   881,
+     886,   954,  1008,  1097,  1105,  1110,  1158,  1194,  1210,  1211,
+    1214,  1215,  1218,  1219,  1231,  1232,  1235,  1241,  1247,  1253,
+    1259,  1265,  1271,  1278,  1284,  1290,  1296,  1302,  1308,  1314,
+    1320,  1326,  1332,  1338,  1358,  1367,  1373,  1374,  1377,  1380,
+    1386,  1393,  1402,  1405,  1408,  1412,  1416,  1420,  1425,  1433,
+    1437,  1442,  1446,  1449,  1453,  1456,  1461,  1462,  1463,  1464,
+    1465,  1466,  1467,  1468,  1469,  1472,  1473,  1474,  1477,  1478,
+    1479,  1483,  1490,  1502,  1508,  1520,  1532,  1535,  1541,  1546,
+    1549,  1554,  1555,  1559,  1575,  1591,  1607,  1623,  1634,  1640,
+    1650,  1673,  1684,  1703,  1709,  1710,  1716,  1717,  1728,  1739,
+    1750,  1760,  1770,  1780,  1783,  1784,  1787,  1788,  1791,  1794,
+    1797,  1805,  1815,  1816,  1819,  1836,  1843,  1850,  1857,  1864,
+    1871,  1880,  1889,  1900,  1901,  1904,  1924,  1934,  1943,  1954,
+    1957,  1962,  1971,  1982,  1985,  1991,  1992,  1996,  1997
 };
 #endif
 
@@ -1862,23 +1865,23 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 637 "parse.y"
+#line 640 "parse.y"
 { ; }
     break;
 case 2:
-#line 638 "parse.y"
+#line 641 "parse.y"
 { ; }
     break;
 case 3:
-#line 639 "parse.y"
+#line 642 "parse.y"
 { ; }
     break;
 case 4:
-#line 640 "parse.y"
+#line 643 "parse.y"
 { ; }
     break;
 case 5:
-#line 643 "parse.y"
+#line 646 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", C_CCODE,
@@ -1890,7 +1893,7 @@ case 5:
                                        }
     break;
 case 6:
-#line 652 "parse.y"
+#line 655 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", H_CCODE,
@@ -1902,7 +1905,7 @@ case 6:
                                        }
     break;
 case 7:
-#line 661 "parse.y"
+#line 664 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", HT_CCODE,
@@ -1914,7 +1917,7 @@ case 7:
                                        }
     break;
 case 8:
-#line 670 "parse.y"
+#line 673 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", PH_CCODE,
@@ -1926,7 +1929,7 @@ case 8:
                                        }
     break;
 case 9:
-#line 679 "parse.y"
+#line 682 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", A_CCODE,
@@ -1938,7 +1941,7 @@ case 9:
                                        }
     break;
 case 10:
-#line 688 "parse.y"
+#line 691 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", AT_CCODE,
@@ -1950,39 +1953,39 @@ case 10:
                                        }
     break;
 case 11:
-#line 699 "parse.y"
+#line 702 "parse.y"
 { ; }
     break;
 case 12:
-#line 700 "parse.y"
+#line 703 "parse.y"
 { ; }
     break;
 case 13:
-#line 701 "parse.y"
+#line 704 "parse.y"
 { ; }
     break;
 case 14:
-#line 702 "parse.y"
+#line 705 "parse.y"
 { ; }
     break;
 case 15:
-#line 703 "parse.y"
+#line 706 "parse.y"
 { ; }
     break;
 case 16:
-#line 704 "parse.y"
+#line 707 "parse.y"
 { ; }
     break;
 case 17:
-#line 705 "parse.y"
+#line 708 "parse.y"
 { ; }
     break;
 case 18:
-#line 706 "parse.y"
+#line 709 "parse.y"
 { ; }
     break;
 case 19:
-#line 709 "parse.y"
+#line 712 "parse.y"
 {
                        ((Class *)class)->nodes = class_nodes;
                        class_nodes = NULL;
@@ -1990,7 +1993,7 @@ case 19:
                                                }
     break;
 case 20:
-#line 714 "parse.y"
+#line 717 "parse.y"
 {
                        ((Class *)class)->nodes = NULL;
                        class_nodes = NULL;
@@ -1998,7 +2001,7 @@ case 20:
                                                }
     break;
 case 21:
-#line 721 "parse.y"
+#line 724 "parse.y"
 {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", yyvsp[-3].id,
@@ -2013,7 +2016,7 @@ case 21:
                                                }
     break;
 case 23:
-#line 736 "parse.y"
+#line 739 "parse.y"
 {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2028,7 +2031,7 @@ case 23:
                }
     break;
 case 24:
-#line 748 "parse.y"
+#line 751 "parse.y"
 {
                        if (strcmp (yyvsp[-3].id, "interface") == 0) {
                                interfaces = g_list_append (interfaces,
@@ -2040,7 +2043,7 @@ case 24:
                }
     break;
 case 25:
-#line 757 "parse.y"
+#line 760 "parse.y"
 {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2055,19 +2058,19 @@ case 25:
                }
     break;
 case 26:
-#line 771 "parse.y"
+#line 774 "parse.y"
 { ; }
     break;
 case 27:
-#line 772 "parse.y"
+#line 775 "parse.y"
 { ; }
     break;
 case 28:
-#line 775 "parse.y"
+#line 778 "parse.y"
 { ; }
     break;
 case 29:
-#line 776 "parse.y"
+#line 779 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "BonoboObject") != 0) {
                                g_free (yyvsp[-1].id);
@@ -2079,7 +2082,7 @@ case 29:
                                                }
     break;
 case 30:
-#line 785 "parse.y"
+#line 788 "parse.y"
 {
                        if (strcmp (yyvsp[-2].id, "interface") != 0) {
                                g_free (yyvsp[-2].id);
@@ -2094,39 +2097,39 @@ case 30:
                                                }
     break;
 case 31:
-#line 797 "parse.y"
+#line 800 "parse.y"
 { ; }
     break;
 case 32:
-#line 798 "parse.y"
+#line 801 "parse.y"
 { ; }
     break;
 case 33:
-#line 799 "parse.y"
+#line 802 "parse.y"
 { ; }
     break;
 case 34:
-#line 800 "parse.y"
+#line 803 "parse.y"
 { ; }
     break;
 case 35:
-#line 803 "parse.y"
+#line 806 "parse.y"
 { the_scope = PUBLIC_SCOPE; }
     break;
 case 36:
-#line 804 "parse.y"
+#line 807 "parse.y"
 { the_scope = PRIVATE_SCOPE; }
     break;
 case 37:
-#line 805 "parse.y"
+#line 808 "parse.y"
 { the_scope = PROTECTED_SCOPE; }
     break;
 case 38:
-#line 806 "parse.y"
+#line 809 "parse.y"
 { the_scope = CLASS_SCOPE; }
     break;
 case 39:
-#line 809 "parse.y"
+#line 812 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "destroywith") == 0) {
                                g_free (yyvsp[-1].id);
@@ -2149,7 +2152,7 @@ case 39:
                                }
     break;
 case 40:
-#line 829 "parse.y"
+#line 832 "parse.y"
 {
                        if (strcmp (yyvsp[-2].id, "destroy") == 0) {
                                g_free(yyvsp[-2].id);
@@ -2174,14 +2177,14 @@ case 40:
                                        }
     break;
 case 41:
-#line 853 "parse.y"
+#line 856 "parse.y"
 {
                        initializer = yyvsp[0].id;
                        initializer_line = ccode_line;
                                }
     break;
 case 42:
-#line 857 "parse.y"
+#line 860 "parse.y"
 {
                        initializer = (yyvsp[0].cbuf)->str;
                        initializer_line = ccode_line;
@@ -2189,42 +2192,42 @@ case 42:
                                }
     break;
 case 43:
-#line 865 "parse.y"
+#line 868 "parse.y"
 { ; }
     break;
 case 44:
-#line 866 "parse.y"
+#line 869 "parse.y"
 { ; }
     break;
 case 45:
-#line 867 "parse.y"
+#line 870 "parse.y"
 { destructor = NULL; }
     break;
 case 46:
-#line 868 "parse.y"
+#line 871 "parse.y"
 { initializer = NULL; }
     break;
 case 47:
-#line 869 "parse.y"
+#line 872 "parse.y"
 {
                        destructor = NULL;
                        initializer = NULL;
                                        }
     break;
 case 48:
-#line 875 "parse.y"
+#line 878 "parse.y"
 {
                        push_variable(yyvsp[-2].id, the_scope,yyvsp[-4].line, NULL);
                                                }
     break;
 case 49:
-#line 878 "parse.y"
+#line 881 "parse.y"
 {
                        push_variable(yyvsp[-3].id, the_scope, yyvsp[-5].line, yyvsp[-2].id);
                                                }
     break;
 case 50:
-#line 883 "parse.y"
+#line 886 "parse.y"
 {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-6].id,"get")==0 &&
@@ -2295,7 +2298,7 @@ case 50:
                                                }
     break;
 case 51:
-#line 951 "parse.y"
+#line 954 "parse.y"
 {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-3].id, "get") == 0) {
@@ -2352,13 +2355,13 @@ case 51:
                                                }
     break;
 case 52:
-#line 1005 "parse.y"
+#line 1008 "parse.y"
 {
                        Node *node;
                        char *get, *set = NULL;
                        Variable *var;
                        Type *type;
-                       char *root;
+                       const char *root;
                        
                        if(strcmp(yyvsp[0].id, "link")!=0 &&
                           strcmp(yyvsp[0].id, "stringlink")!=0 && 
@@ -2375,15 +2378,16 @@ case 52:
                        type = pop_type();
 
                        var = find_var_or_die(yyvsp[-2].id, yyvsp[-5].line);
-                       if(var->scope == PRIVATE_SCOPE)
+                       if(var->scope == PRIVATE_SCOPE) {
                                root = "self->_priv";
-                       else if(var->scope == CLASS_SCOPE) {
+                       else if(var->scope == CLASS_SCOPE) {
                                root = "SELF_GET_CLASS(self)";
                                if(no_self_alias)
                                        error_print(GOB_ERROR, yyvsp[-5].line,
                                                    _("Self aliases needed when autolinking to a classwide member"));
-                       } else
+                       } else {
                                root = "self";
+                       }
 
                        if(strcmp(yyvsp[0].id, "link")==0) {
                                set = g_strdup_printf("%s->%s = ARG;",
@@ -2441,7 +2445,7 @@ case 52:
                                                }
     break;
 case 53:
-#line 1093 "parse.y"
+#line 1097 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2452,13 +2456,13 @@ case 53:
                                                }
     break;
 case 54:
-#line 1101 "parse.y"
+#line 1105 "parse.y"
 {
                        yyval.id = NULL;
                                                }
     break;
 case 55:
-#line 1106 "parse.y"
+#line 1110 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2509,7 +2513,7 @@ case 55:
                }
     break;
 case 56:
-#line 1154 "parse.y"
+#line 1158 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2548,7 +2552,7 @@ case 56:
                }
     break;
 case 57:
-#line 1190 "parse.y"
+#line 1194 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2565,27 +2569,27 @@ case 57:
                }
     break;
 case 58:
-#line 1206 "parse.y"
+#line 1210 "parse.y"
 { ; }
     break;
 case 59:
-#line 1207 "parse.y"
+#line 1211 "parse.y"
 { ; }
     break;
 case 60:
-#line 1210 "parse.y"
+#line 1214 "parse.y"
 { ; }
     break;
 case 61:
-#line 1211 "parse.y"
+#line 1215 "parse.y"
 { ; }
     break;
 case 62:
-#line 1214 "parse.y"
+#line 1218 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 63:
-#line 1215 "parse.y"
+#line 1219 "parse.y"
 {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2598,15 +2602,15 @@ case 63:
                }
     break;
 case 64:
-#line 1227 "parse.y"
+#line 1231 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 65:
-#line 1228 "parse.y"
+#line 1232 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 66:
-#line 1231 "parse.y"
+#line 1235 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2615,7 +2619,7 @@ case 66:
                  }
     break;
 case 67:
-#line 1237 "parse.y"
+#line 1241 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2624,7 +2628,7 @@ case 67:
                  }
     break;
 case 68:
-#line 1243 "parse.y"
+#line 1247 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2633,7 +2637,7 @@ case 68:
                  }
     break;
 case 69:
-#line 1249 "parse.y"
+#line 1253 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2642,7 +2646,7 @@ case 69:
                  }
     break;
 case 70:
-#line 1255 "parse.y"
+#line 1259 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2651,7 +2655,7 @@ case 70:
                  }
     break;
 case 71:
-#line 1261 "parse.y"
+#line 1265 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2660,7 +2664,7 @@ case 71:
                  }
     break;
 case 72:
-#line 1267 "parse.y"
+#line 1271 "parse.y"
 {
                Type *type = pop_type ();
                ensure_property ();
@@ -2670,7 +2674,7 @@ case 72:
                  }
     break;
 case 73:
-#line 1274 "parse.y"
+#line 1278 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2679,7 +2683,7 @@ case 73:
                  }
     break;
 case 74:
-#line 1280 "parse.y"
+#line 1284 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2688,7 +2692,7 @@ case 74:
                  }
     break;
 case 75:
-#line 1286 "parse.y"
+#line 1290 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2697,7 +2701,7 @@ case 75:
                  }
     break;
 case 76:
-#line 1292 "parse.y"
+#line 1296 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2706,7 +2710,7 @@ case 76:
                  }
     break;
 case 77:
-#line 1298 "parse.y"
+#line 1302 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2715,7 +2719,7 @@ case 77:
                  }
     break;
 case 78:
-#line 1304 "parse.y"
+#line 1308 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2724,7 +2728,7 @@ case 78:
                  }
     break;
 case 79:
-#line 1310 "parse.y"
+#line 1314 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2733,7 +2737,7 @@ case 79:
                  }
     break;
 case 80:
-#line 1316 "parse.y"
+#line 1320 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2742,7 +2746,7 @@ case 80:
                  }
     break;
 case 81:
-#line 1322 "parse.y"
+#line 1326 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2751,7 +2755,7 @@ case 81:
                  }
     break;
 case 82:
-#line 1328 "parse.y"
+#line 1332 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2760,7 +2764,7 @@ case 82:
                  }
     break;
 case 83:
-#line 1334 "parse.y"
+#line 1338 "parse.y"
 {
                ensure_property ();
                if (strcmp (yyvsp[0].id, "link") == 0) {
@@ -2781,7 +2785,7 @@ case 83:
                  }
     break;
 case 84:
-#line 1354 "parse.y"
+#line 1358 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -2793,34 +2797,34 @@ case 84:
                                                }
     break;
 case 85:
-#line 1363 "parse.y"
+#line 1367 "parse.y"
 {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
                                                }
     break;
 case 86:
-#line 1369 "parse.y"
+#line 1373 "parse.y"
 { yyval.list = yyvsp[-1].list; }
     break;
 case 87:
-#line 1370 "parse.y"
+#line 1374 "parse.y"
 { yyval.list = NULL; }
     break;
 case 88:
-#line 1373 "parse.y"
+#line 1377 "parse.y"
 {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                }
     break;
 case 89:
-#line 1376 "parse.y"
+#line 1380 "parse.y"
 {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                }
     break;
 case 90:
-#line 1382 "parse.y"
+#line 1386 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -2830,7 +2834,7 @@ case 90:
                                                        }
     break;
 case 91:
-#line 1389 "parse.y"
+#line 1393 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -2839,40 +2843,40 @@ case 91:
                                                        }
     break;
 case 92:
-#line 1398 "parse.y"
+#line 1402 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 case 93:
-#line 1401 "parse.y"
+#line 1405 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 case 94:
-#line 1404 "parse.y"
+#line 1408 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 case 95:
-#line 1408 "parse.y"
+#line 1412 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 case 96:
-#line 1412 "parse.y"
+#line 1416 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 case 97:
-#line 1416 "parse.y"
+#line 1420 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
@@ -2880,7 +2884,7 @@ case 97:
                                                        }
     break;
 case 98:
-#line 1421 "parse.y"
+#line 1425 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
@@ -2888,14 +2892,14 @@ case 98:
                                                        }
     break;
 case 99:
-#line 1429 "parse.y"
+#line 1433 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 case 100:
-#line 1433 "parse.y"
+#line 1437 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[-1].id);
@@ -2903,109 +2907,109 @@ case 100:
                                                        }
     break;
 case 101:
-#line 1438 "parse.y"
+#line 1442 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 case 102:
-#line 1442 "parse.y"
+#line 1446 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 case 103:
-#line 1445 "parse.y"
+#line 1449 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 case 104:
-#line 1449 "parse.y"
+#line 1453 "parse.y"
 {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        }
     break;
 case 105:
-#line 1452 "parse.y"
+#line 1456 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        }
     break;
 case 106:
-#line 1457 "parse.y"
+#line 1461 "parse.y"
 { yyval.id = "void"; }
     break;
 case 107:
-#line 1458 "parse.y"
+#line 1462 "parse.y"
 { yyval.id = "char"; }
     break;
 case 108:
-#line 1459 "parse.y"
+#line 1463 "parse.y"
 { yyval.id = "short"; }
     break;
 case 109:
-#line 1460 "parse.y"
+#line 1464 "parse.y"
 { yyval.id = "int"; }
     break;
 case 110:
-#line 1461 "parse.y"
+#line 1465 "parse.y"
 { yyval.id = "long"; }
     break;
 case 111:
-#line 1462 "parse.y"
+#line 1466 "parse.y"
 { yyval.id = "float"; }
     break;
 case 112:
-#line 1463 "parse.y"
+#line 1467 "parse.y"
 { yyval.id = "double"; }
     break;
 case 113:
-#line 1464 "parse.y"
+#line 1468 "parse.y"
 { yyval.id = "signed"; }
     break;
 case 114:
-#line 1465 "parse.y"
+#line 1469 "parse.y"
 { yyval.id = "unsigned"; }
     break;
 case 115:
-#line 1468 "parse.y"
+#line 1472 "parse.y"
 { yyval.id = "struct"; }
     break;
 case 116:
-#line 1469 "parse.y"
+#line 1473 "parse.y"
 { yyval.id = "union"; }
     break;
 case 117:
-#line 1470 "parse.y"
+#line 1474 "parse.y"
 { yyval.id = "enum"; }
     break;
 case 118:
-#line 1473 "parse.y"
+#line 1477 "parse.y"
 { yyval.id = g_strdup("*"); }
     break;
 case 119:
-#line 1474 "parse.y"
+#line 1478 "parse.y"
 { yyval.id = g_strdup("* const"); }
     break;
 case 120:
-#line 1475 "parse.y"
+#line 1479 "parse.y"
 {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 case 121:
-#line 1479 "parse.y"
+#line 1483 "parse.y"
 {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 case 122:
-#line 1486 "parse.y"
+#line 1490 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3020,13 +3024,13 @@ case 122:
                                        }
     break;
 case 123:
-#line 1498 "parse.y"
+#line 1502 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 case 124:
-#line 1504 "parse.y"
+#line 1508 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3041,7 +3045,7 @@ case 124:
                                        }
     break;
 case 125:
-#line 1516 "parse.y"
+#line 1520 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3056,46 +3060,46 @@ case 125:
                                        }
     break;
 case 126:
-#line 1528 "parse.y"
+#line 1532 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 case 127:
-#line 1531 "parse.y"
+#line 1535 "parse.y"
 {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
                                        }
     break;
 case 128:
-#line 1537 "parse.y"
+#line 1541 "parse.y"
 {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                }
     break;
 case 129:
-#line 1542 "parse.y"
+#line 1546 "parse.y"
 {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                }
     break;
 case 130:
-#line 1545 "parse.y"
+#line 1549 "parse.y"
 { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        }
     break;
 case 131:
-#line 1550 "parse.y"
+#line 1554 "parse.y"
 { yyval.cbuf = yyvsp[0].cbuf; }
     break;
 case 132:
-#line 1551 "parse.y"
+#line 1555 "parse.y"
 { yyval.cbuf = NULL; }
     break;
 case 133:
-#line 1555 "parse.y"
+#line 1559 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3114,7 +3118,7 @@ case 133:
                                                                        }
     break;
 case 134:
-#line 1571 "parse.y"
+#line 1575 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3133,7 +3137,7 @@ case 134:
                                                                        }
     break;
 case 135:
-#line 1587 "parse.y"
+#line 1591 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3152,7 +3156,7 @@ case 135:
                                                                        }
     break;
 case 136:
-#line 1603 "parse.y"
+#line 1607 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3171,7 +3175,7 @@ case 136:
                                                                        }
     break;
 case 137:
-#line 1619 "parse.y"
+#line 1623 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3185,7 +3189,7 @@ case 137:
                                                                        }
     break;
 case 138:
-#line 1630 "parse.y"
+#line 1634 "parse.y"
 {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -3194,7 +3198,7 @@ case 138:
                                                                        }
     break;
 case 139:
-#line 1636 "parse.y"
+#line 1640 "parse.y"
 {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -3207,7 +3211,7 @@ case 139:
                                                                }
     break;
 case 140:
-#line 1646 "parse.y"
+#line 1650 "parse.y"
 {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -3231,7 +3235,7 @@ case 140:
                                                }
     break;
 case 141:
-#line 1669 "parse.y"
+#line 1673 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3245,7 +3249,7 @@ case 141:
                                        }
     break;
 case 142:
-#line 1680 "parse.y"
+#line 1684 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3267,29 +3271,29 @@ case 142:
                                                }
     break;
 case 143:
-#line 1699 "parse.y"
+#line 1703 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
                                        }
     break;
 case 144:
-#line 1705 "parse.y"
+#line 1709 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 145:
-#line 1706 "parse.y"
+#line 1710 "parse.y"
 {
-                       yyval.id = (yyvsp[1].cbuf)->str;
-                       g_string_free(yyvsp[1].cbuf, FALSE);
+                       yyval.id = (yyvsp[0].cbuf)->str;
+                       g_string_free(yyvsp[0].cbuf, FALSE);
                                        }
     break;
 case 146:
-#line 1712 "parse.y"
+#line 1716 "parse.y"
 { vararg = FALSE; has_self = FALSE; }
     break;
 case 147:
-#line 1713 "parse.y"
+#line 1717 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3303,7 +3307,7 @@ case 147:
                                                }
     break;
 case 148:
-#line 1724 "parse.y"
+#line 1728 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3317,7 +3321,7 @@ case 148:
                                                }
     break;
 case 149:
-#line 1735 "parse.y"
+#line 1739 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3331,7 +3335,7 @@ case 149:
                                                }
     break;
 case 150:
-#line 1746 "parse.y"
+#line 1750 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3344,7 +3348,7 @@ case 150:
                                        }
     break;
 case 151:
-#line 1756 "parse.y"
+#line 1760 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -3357,7 +3361,7 @@ case 151:
                                        }
     break;
 case 152:
-#line 1766 "parse.y"
+#line 1770 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3370,39 +3374,39 @@ case 152:
                                        }
     break;
 case 153:
-#line 1776 "parse.y"
+#line 1780 "parse.y"
 { has_self = FALSE; }
     break;
 case 154:
-#line 1779 "parse.y"
+#line 1783 "parse.y"
 { vararg = TRUE; }
     break;
 case 155:
-#line 1780 "parse.y"
+#line 1784 "parse.y"
 { vararg = FALSE; }
     break;
 case 156:
-#line 1783 "parse.y"
+#line 1787 "parse.y"
 { ; }
     break;
 case 157:
-#line 1784 "parse.y"
+#line 1788 "parse.y"
 { ; }
     break;
 case 158:
-#line 1787 "parse.y"
+#line 1791 "parse.y"
 {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                }
     break;
 case 159:
-#line 1790 "parse.y"
+#line 1794 "parse.y"
 {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                }
     break;
 case 160:
-#line 1793 "parse.y"
+#line 1797 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3413,7 +3417,7 @@ case 160:
                                                                }
     break;
 case 161:
-#line 1801 "parse.y"
+#line 1805 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3424,15 +3428,15 @@ case 161:
                                                                }
     break;
 case 162:
-#line 1811 "parse.y"
+#line 1815 "parse.y"
 { ; }
     break;
 case 163:
-#line 1812 "parse.y"
+#line 1816 "parse.y"
 { ; }
     break;
 case 164:
-#line 1815 "parse.y"
+#line 1819 "parse.y"
 {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3452,7 +3456,7 @@ case 164:
                                        }
     break;
 case 165:
-#line 1832 "parse.y"
+#line 1836 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3462,7 +3466,7 @@ case 165:
                                        }
     break;
 case 166:
-#line 1839 "parse.y"
+#line 1843 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3472,7 +3476,7 @@ case 166:
                                        }
     break;
 case 167:
-#line 1846 "parse.y"
+#line 1850 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3482,7 +3486,7 @@ case 167:
                                        }
     break;
 case 168:
-#line 1853 "parse.y"
+#line 1857 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3492,7 +3496,7 @@ case 168:
                                        }
     break;
 case 169:
-#line 1860 "parse.y"
+#line 1864 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3502,7 +3506,7 @@ case 169:
                                        }
     break;
 case 170:
-#line 1867 "parse.y"
+#line 1871 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3512,7 +3516,7 @@ case 170:
                                        }
     break;
 case 171:
-#line 1876 "parse.y"
+#line 1880 "parse.y"
 {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3524,7 +3528,7 @@ case 171:
                        }
     break;
 case 172:
-#line 1885 "parse.y"
+#line 1889 "parse.y"
 {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3536,15 +3540,15 @@ case 172:
                        }
     break;
 case 173:
-#line 1896 "parse.y"
+#line 1900 "parse.y"
 {;}
     break;
 case 174:
-#line 1897 "parse.y"
+#line 1901 "parse.y"
 {;}
     break;
 case 175:
-#line 1900 "parse.y"
+#line 1904 "parse.y"
 {
                        Node *node;
                        char *num = yyvsp[0].id;
@@ -3567,7 +3571,7 @@ case 175:
                        }
     break;
 case 176:
-#line 1920 "parse.y"
+#line 1924 "parse.y"
 {
                        Node *node;
 
@@ -3578,7 +3582,7 @@ case 176:
        }
     break;
 case 177:
-#line 1930 "parse.y"
+#line 1934 "parse.y"
 {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3590,7 +3594,7 @@ case 177:
                        }
     break;
 case 178:
-#line 1939 "parse.y"
+#line 1943 "parse.y"
 {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3602,19 +3606,19 @@ case 178:
                        }
     break;
 case 179:
-#line 1950 "parse.y"
+#line 1954 "parse.y"
 {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 case 180:
-#line 1953 "parse.y"
+#line 1957 "parse.y"
 {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 case 181:
-#line 1958 "parse.y"
+#line 1962 "parse.y"
 {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3626,7 +3630,7 @@ case 181:
                        }
     break;
 case 182:
-#line 1967 "parse.y"
+#line 1971 "parse.y"
 {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3638,34 +3642,34 @@ case 182:
                        }
     break;
 case 183:
-#line 1978 "parse.y"
+#line 1982 "parse.y"
 {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 case 184:
-#line 1981 "parse.y"
+#line 1985 "parse.y"
 {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 case 185:
-#line 1987 "parse.y"
+#line 1991 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 186:
-#line 1988 "parse.y"
+#line 1992 "parse.y"
 {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
                                        }
     break;
 case 187:
-#line 1992 "parse.y"
+#line 1996 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 188:
-#line 1993 "parse.y"
+#line 1997 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 }
@@ -3901,5 +3905,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1996 "parse.y"
+#line 2000 "parse.y"