]> git.draconx.ca Git - gob-dx.git/blobdiff - src/parse.c
Release 2.0.10
[gob-dx.git] / src / parse.c
index c9e2c5c3ddb1f3cd4062569e0d4a546e34ddae3a..762e14c4b3010cabfc31573d7c10b460cb106833 100644 (file)
@@ -703,6 +703,11 @@ property_link_and_export (Node *node)
                                        setcast = "(gint) ";
                                        getcast = to_free =
                                                get_prop_enum_flag_cast (prop);
+                               }  else if (strcmp (prop->gtktype, "POINTER") == 0) {
+                                       setcast = "(gpointer) ";
+                                       getcast = g_strdup_printf ("(%s%s) ",
+                                                                 prop->ptype->name,
+                                                                 prop->ptype->pointer ? prop->ptype->pointer : "");
                                }
                        }
 
@@ -775,7 +780,7 @@ ensure_property (void)
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 623 "parse.y"
+#line 628 "parse.y"
 typedef union YYSTYPE {
        char *id;
        GString *cbuf;
@@ -784,7 +789,7 @@ typedef union YYSTYPE {
        int sigtype;
 } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 788 "parse.c"
+#line 793 "parse.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -796,7 +801,7 @@ typedef union YYSTYPE {
 
 
 /* Line 214 of yacc.c.  */
-#line 800 "parse.c"
+#line 805 "parse.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -1061,25 +1066,25 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   644,   644,   645,   646,   647,   650,   659,   668,   677,
-     686,   695,   706,   707,   708,   709,   710,   711,   712,   713,
-     716,   721,   728,   742,   743,   755,   764,   778,   779,   782,
-     783,   792,   804,   805,   806,   807,   810,   811,   812,   813,
-     816,   836,   860,   864,   872,   873,   874,   875,   876,   882,
-     885,   890,   958,  1012,  1101,  1109,  1114,  1162,  1198,  1214,
-    1215,  1218,  1219,  1222,  1223,  1235,  1236,  1239,  1245,  1251,
-    1257,  1263,  1269,  1275,  1282,  1288,  1294,  1300,  1306,  1312,
-    1318,  1324,  1330,  1336,  1342,  1362,  1371,  1377,  1378,  1381,
-    1384,  1390,  1397,  1406,  1409,  1412,  1416,  1420,  1424,  1429,
-    1437,  1441,  1446,  1450,  1453,  1457,  1460,  1465,  1466,  1467,
-    1468,  1469,  1470,  1471,  1472,  1473,  1476,  1477,  1478,  1481,
-    1482,  1483,  1487,  1494,  1506,  1512,  1524,  1536,  1539,  1545,
-    1550,  1553,  1558,  1559,  1563,  1579,  1595,  1611,  1627,  1638,
-    1644,  1654,  1677,  1688,  1707,  1713,  1714,  1720,  1721,  1732,
-    1743,  1754,  1764,  1774,  1784,  1787,  1788,  1791,  1792,  1795,
-    1798,  1801,  1809,  1819,  1820,  1823,  1840,  1847,  1854,  1861,
-    1868,  1875,  1884,  1893,  1904,  1905,  1908,  1928,  1938,  1947,
-    1958,  1961,  1966,  1975,  1986,  1989,  1995,  1996,  2000,  2001
+       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
 };
 #endif
 
@@ -2072,27 +2077,27 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 644 "parse.y"
+#line 649 "parse.y"
     { ; }
     break;
 
   case 3:
-#line 645 "parse.y"
+#line 650 "parse.y"
     { ; }
     break;
 
   case 4:
-#line 646 "parse.y"
+#line 651 "parse.y"
     { ; }
     break;
 
   case 5:
-#line 647 "parse.y"
+#line 652 "parse.y"
     { ; }
     break;
 
   case 6:
-#line 650 "parse.y"
+#line 655 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", C_CCODE,
@@ -2105,7 +2110,7 @@ yyreduce:
     break;
 
   case 7:
-#line 659 "parse.y"
+#line 664 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", H_CCODE,
@@ -2118,7 +2123,7 @@ yyreduce:
     break;
 
   case 8:
-#line 668 "parse.y"
+#line 673 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", HT_CCODE,
@@ -2131,7 +2136,7 @@ yyreduce:
     break;
 
   case 9:
-#line 677 "parse.y"
+#line 682 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", PH_CCODE,
@@ -2144,7 +2149,7 @@ yyreduce:
     break;
 
   case 10:
-#line 686 "parse.y"
+#line 691 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", A_CCODE,
@@ -2157,7 +2162,7 @@ yyreduce:
     break;
 
   case 11:
-#line 695 "parse.y"
+#line 700 "parse.y"
     {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", AT_CCODE,
@@ -2170,47 +2175,47 @@ yyreduce:
     break;
 
   case 12:
-#line 706 "parse.y"
+#line 711 "parse.y"
     { ; }
     break;
 
   case 13:
-#line 707 "parse.y"
+#line 712 "parse.y"
     { ; }
     break;
 
   case 14:
-#line 708 "parse.y"
+#line 713 "parse.y"
     { ; }
     break;
 
   case 15:
-#line 709 "parse.y"
+#line 714 "parse.y"
     { ; }
     break;
 
   case 16:
-#line 710 "parse.y"
+#line 715 "parse.y"
     { ; }
     break;
 
   case 17:
-#line 711 "parse.y"
+#line 716 "parse.y"
     { ; }
     break;
 
   case 18:
-#line 712 "parse.y"
+#line 717 "parse.y"
     { ; }
     break;
 
   case 19:
-#line 713 "parse.y"
+#line 718 "parse.y"
     { ; }
     break;
 
   case 20:
-#line 716 "parse.y"
+#line 721 "parse.y"
     {
                        ((Class *)class)->nodes = class_nodes;
                        class_nodes = NULL;
@@ -2219,7 +2224,7 @@ yyreduce:
     break;
 
   case 21:
-#line 721 "parse.y"
+#line 726 "parse.y"
     {
                        ((Class *)class)->nodes = NULL;
                        class_nodes = NULL;
@@ -2228,7 +2233,7 @@ yyreduce:
     break;
 
   case 22:
-#line 728 "parse.y"
+#line 733 "parse.y"
     {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", yyvsp[-3].id,
@@ -2244,7 +2249,7 @@ yyreduce:
     break;
 
   case 24:
-#line 743 "parse.y"
+#line 748 "parse.y"
     {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2260,7 +2265,7 @@ yyreduce:
     break;
 
   case 25:
-#line 755 "parse.y"
+#line 760 "parse.y"
     {
                        if (strcmp (yyvsp[-3].id, "interface") == 0) {
                                interfaces = g_list_append (interfaces,
@@ -2273,7 +2278,7 @@ yyreduce:
     break;
 
   case 26:
-#line 764 "parse.y"
+#line 769 "parse.y"
     {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -2289,22 +2294,22 @@ yyreduce:
     break;
 
   case 27:
-#line 778 "parse.y"
+#line 783 "parse.y"
     { ; }
     break;
 
   case 28:
-#line 779 "parse.y"
+#line 784 "parse.y"
     { ; }
     break;
 
   case 29:
-#line 782 "parse.y"
+#line 787 "parse.y"
     { ; }
     break;
 
   case 30:
-#line 783 "parse.y"
+#line 788 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "BonoboObject") != 0) {
                                g_free (yyvsp[-1].id);
@@ -2317,7 +2322,7 @@ yyreduce:
     break;
 
   case 31:
-#line 792 "parse.y"
+#line 797 "parse.y"
     {
                        if (strcmp (yyvsp[-2].id, "interface") != 0) {
                                g_free (yyvsp[-2].id);
@@ -2333,47 +2338,47 @@ yyreduce:
     break;
 
   case 32:
-#line 804 "parse.y"
+#line 809 "parse.y"
     { ; }
     break;
 
   case 33:
-#line 805 "parse.y"
+#line 810 "parse.y"
     { ; }
     break;
 
   case 34:
-#line 806 "parse.y"
+#line 811 "parse.y"
     { ; }
     break;
 
   case 35:
-#line 807 "parse.y"
+#line 812 "parse.y"
     { ; }
     break;
 
   case 36:
-#line 810 "parse.y"
+#line 815 "parse.y"
     { the_scope = PUBLIC_SCOPE; }
     break;
 
   case 37:
-#line 811 "parse.y"
+#line 816 "parse.y"
     { the_scope = PRIVATE_SCOPE; }
     break;
 
   case 38:
-#line 812 "parse.y"
+#line 817 "parse.y"
     { the_scope = PROTECTED_SCOPE; }
     break;
 
   case 39:
-#line 813 "parse.y"
+#line 818 "parse.y"
     { the_scope = CLASS_SCOPE; }
     break;
 
   case 40:
-#line 816 "parse.y"
+#line 821 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "destroywith") == 0) {
                                g_free (yyvsp[-1].id);
@@ -2397,7 +2402,7 @@ yyreduce:
     break;
 
   case 41:
-#line 836 "parse.y"
+#line 841 "parse.y"
     {
                        if (strcmp (yyvsp[-2].id, "destroy") == 0) {
                                g_free(yyvsp[-2].id);
@@ -2423,7 +2428,7 @@ yyreduce:
     break;
 
   case 42:
-#line 860 "parse.y"
+#line 865 "parse.y"
     {
                        initializer = yyvsp[0].id;
                        initializer_line = ccode_line;
@@ -2431,7 +2436,7 @@ yyreduce:
     break;
 
   case 43:
-#line 864 "parse.y"
+#line 869 "parse.y"
     {
                        initializer = (yyvsp[0].cbuf)->str;
                        initializer_line = ccode_line;
@@ -2440,27 +2445,27 @@ yyreduce:
     break;
 
   case 44:
-#line 872 "parse.y"
+#line 877 "parse.y"
     { ; }
     break;
 
   case 45:
-#line 873 "parse.y"
+#line 878 "parse.y"
     { ; }
     break;
 
   case 46:
-#line 874 "parse.y"
+#line 879 "parse.y"
     { destructor = NULL; }
     break;
 
   case 47:
-#line 875 "parse.y"
+#line 880 "parse.y"
     { initializer = NULL; }
     break;
 
   case 48:
-#line 876 "parse.y"
+#line 881 "parse.y"
     {
                        destructor = NULL;
                        initializer = NULL;
@@ -2468,21 +2473,21 @@ yyreduce:
     break;
 
   case 49:
-#line 882 "parse.y"
+#line 887 "parse.y"
     {
                        push_variable(yyvsp[-2].id, the_scope,yyvsp[-4].line, NULL);
                                                }
     break;
 
   case 50:
-#line 885 "parse.y"
+#line 890 "parse.y"
     {
                        push_variable(yyvsp[-3].id, the_scope, yyvsp[-5].line, yyvsp[-2].id);
                                                }
     break;
 
   case 51:
-#line 890 "parse.y"
+#line 895 "parse.y"
     {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-6].id,"get")==0 &&
@@ -2554,7 +2559,7 @@ yyreduce:
     break;
 
   case 52:
-#line 958 "parse.y"
+#line 963 "parse.y"
     {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-3].id, "get") == 0) {
@@ -2612,7 +2617,7 @@ yyreduce:
     break;
 
   case 53:
-#line 1012 "parse.y"
+#line 1017 "parse.y"
     {
                        Node *node;
                        char *get, *set = NULL;
@@ -2703,7 +2708,7 @@ yyreduce:
     break;
 
   case 54:
-#line 1101 "parse.y"
+#line 1106 "parse.y"
     {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2715,14 +2720,14 @@ yyreduce:
     break;
 
   case 55:
-#line 1109 "parse.y"
+#line 1114 "parse.y"
     {
                        yyval.id = NULL;
                                                }
     break;
 
   case 56:
-#line 1114 "parse.y"
+#line 1119 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2774,7 +2779,7 @@ yyreduce:
     break;
 
   case 57:
-#line 1162 "parse.y"
+#line 1167 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2814,7 +2819,7 @@ yyreduce:
     break;
 
   case 58:
-#line 1198 "parse.y"
+#line 1203 "parse.y"
     {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2832,32 +2837,32 @@ yyreduce:
     break;
 
   case 59:
-#line 1214 "parse.y"
+#line 1219 "parse.y"
     { ; }
     break;
 
   case 60:
-#line 1215 "parse.y"
+#line 1220 "parse.y"
     { ; }
     break;
 
   case 61:
-#line 1218 "parse.y"
+#line 1223 "parse.y"
     { ; }
     break;
 
   case 62:
-#line 1219 "parse.y"
+#line 1224 "parse.y"
     { ; }
     break;
 
   case 63:
-#line 1222 "parse.y"
+#line 1227 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
   case 64:
-#line 1223 "parse.y"
+#line 1228 "parse.y"
     {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2871,17 +2876,17 @@ yyreduce:
     break;
 
   case 65:
-#line 1235 "parse.y"
+#line 1240 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
   case 66:
-#line 1236 "parse.y"
+#line 1241 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
   case 67:
-#line 1239 "parse.y"
+#line 1244 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2891,7 +2896,7 @@ yyreduce:
     break;
 
   case 68:
-#line 1245 "parse.y"
+#line 1250 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2901,7 +2906,7 @@ yyreduce:
     break;
 
   case 69:
-#line 1251 "parse.y"
+#line 1256 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2911,7 +2916,7 @@ yyreduce:
     break;
 
   case 70:
-#line 1257 "parse.y"
+#line 1262 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2921,7 +2926,7 @@ yyreduce:
     break;
 
   case 71:
-#line 1263 "parse.y"
+#line 1268 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2931,7 +2936,7 @@ yyreduce:
     break;
 
   case 72:
-#line 1269 "parse.y"
+#line 1274 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2941,7 +2946,7 @@ yyreduce:
     break;
 
   case 73:
-#line 1275 "parse.y"
+#line 1280 "parse.y"
     {
                Type *type = pop_type ();
                ensure_property ();
@@ -2952,7 +2957,7 @@ yyreduce:
     break;
 
   case 74:
-#line 1282 "parse.y"
+#line 1287 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2962,7 +2967,7 @@ yyreduce:
     break;
 
   case 75:
-#line 1288 "parse.y"
+#line 1293 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2972,7 +2977,7 @@ yyreduce:
     break;
 
   case 76:
-#line 1294 "parse.y"
+#line 1299 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2982,7 +2987,7 @@ yyreduce:
     break;
 
   case 77:
-#line 1300 "parse.y"
+#line 1305 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -2992,7 +2997,7 @@ yyreduce:
     break;
 
   case 78:
-#line 1306 "parse.y"
+#line 1311 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3002,7 +3007,7 @@ yyreduce:
     break;
 
   case 79:
-#line 1312 "parse.y"
+#line 1317 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3012,7 +3017,7 @@ yyreduce:
     break;
 
   case 80:
-#line 1318 "parse.y"
+#line 1323 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3022,7 +3027,7 @@ yyreduce:
     break;
 
   case 81:
-#line 1324 "parse.y"
+#line 1329 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3032,7 +3037,7 @@ yyreduce:
     break;
 
   case 82:
-#line 1330 "parse.y"
+#line 1335 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3042,7 +3047,7 @@ yyreduce:
     break;
 
   case 83:
-#line 1336 "parse.y"
+#line 1341 "parse.y"
     {
                ensure_property ();
                node_set ((Node *)property,
@@ -3052,10 +3057,15 @@ yyreduce:
     break;
 
   case 84:
-#line 1342 "parse.y"
+#line 1347 "parse.y"
     {
                ensure_property ();
-               if (strcmp (yyvsp[0].id, "link") == 0) {
+               if (strcmp (yyvsp[0].id, "override") == 0) {
+                       g_free(yyvsp[0].id);
+                       node_set ((Node *)property,
+                                 "override", TRUE,
+                                 NULL);
+               } else if (strcmp (yyvsp[0].id, "link") == 0) {
                        g_free(yyvsp[0].id);
                        node_set ((Node *)property,
                                  "link", TRUE,
@@ -3074,7 +3084,7 @@ yyreduce:
     break;
 
   case 85:
-#line 1362 "parse.y"
+#line 1372 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -3087,7 +3097,7 @@ yyreduce:
     break;
 
   case 86:
-#line 1371 "parse.y"
+#line 1381 "parse.y"
     {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
@@ -3095,31 +3105,31 @@ yyreduce:
     break;
 
   case 87:
-#line 1377 "parse.y"
+#line 1387 "parse.y"
     { yyval.list = yyvsp[-1].list; }
     break;
 
   case 88:
-#line 1378 "parse.y"
+#line 1388 "parse.y"
     { yyval.list = NULL; }
     break;
 
   case 89:
-#line 1381 "parse.y"
+#line 1391 "parse.y"
     {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                }
     break;
 
   case 90:
-#line 1384 "parse.y"
+#line 1394 "parse.y"
     {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                }
     break;
 
   case 91:
-#line 1390 "parse.y"
+#line 1400 "parse.y"
     {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -3130,7 +3140,7 @@ yyreduce:
     break;
 
   case 92:
-#line 1397 "parse.y"
+#line 1407 "parse.y"
     {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -3140,21 +3150,21 @@ yyreduce:
     break;
 
   case 93:
-#line 1406 "parse.y"
+#line 1416 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
   case 94:
-#line 1409 "parse.y"
+#line 1419 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
   case 95:
-#line 1412 "parse.y"
+#line 1422 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
@@ -3162,7 +3172,7 @@ yyreduce:
     break;
 
   case 96:
-#line 1416 "parse.y"
+#line 1426 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
@@ -3170,7 +3180,7 @@ yyreduce:
     break;
 
   case 97:
-#line 1420 "parse.y"
+#line 1430 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
@@ -3178,7 +3188,7 @@ yyreduce:
     break;
 
   case 98:
-#line 1424 "parse.y"
+#line 1434 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
@@ -3187,7 +3197,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1429 "parse.y"
+#line 1439 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
@@ -3196,7 +3206,7 @@ yyreduce:
     break;
 
   case 100:
-#line 1437 "parse.y"
+#line 1447 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
@@ -3204,7 +3214,7 @@ yyreduce:
     break;
 
   case 101:
-#line 1441 "parse.y"
+#line 1451 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[-1].id);
@@ -3213,7 +3223,7 @@ yyreduce:
     break;
 
   case 102:
-#line 1446 "parse.y"
+#line 1456 "parse.y"
     {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
@@ -3221,14 +3231,14 @@ yyreduce:
     break;
 
   case 103:
-#line 1450 "parse.y"
+#line 1460 "parse.y"
     {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 
   case 104:
-#line 1453 "parse.y"
+#line 1463 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
@@ -3236,91 +3246,91 @@ yyreduce:
     break;
 
   case 105:
-#line 1457 "parse.y"
+#line 1467 "parse.y"
     {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        }
     break;
 
   case 106:
-#line 1460 "parse.y"
+#line 1470 "parse.y"
     {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        }
     break;
 
   case 107:
-#line 1465 "parse.y"
+#line 1475 "parse.y"
     { yyval.id = "void"; }
     break;
 
   case 108:
-#line 1466 "parse.y"
+#line 1476 "parse.y"
     { yyval.id = "char"; }
     break;
 
   case 109:
-#line 1467 "parse.y"
+#line 1477 "parse.y"
     { yyval.id = "short"; }
     break;
 
   case 110:
-#line 1468 "parse.y"
+#line 1478 "parse.y"
     { yyval.id = "int"; }
     break;
 
   case 111:
-#line 1469 "parse.y"
+#line 1479 "parse.y"
     { yyval.id = "long"; }
     break;
 
   case 112:
-#line 1470 "parse.y"
+#line 1480 "parse.y"
     { yyval.id = "float"; }
     break;
 
   case 113:
-#line 1471 "parse.y"
+#line 1481 "parse.y"
     { yyval.id = "double"; }
     break;
 
   case 114:
-#line 1472 "parse.y"
+#line 1482 "parse.y"
     { yyval.id = "signed"; }
     break;
 
   case 115:
-#line 1473 "parse.y"
+#line 1483 "parse.y"
     { yyval.id = "unsigned"; }
     break;
 
   case 116:
-#line 1476 "parse.y"
+#line 1486 "parse.y"
     { yyval.id = "struct"; }
     break;
 
   case 117:
-#line 1477 "parse.y"
+#line 1487 "parse.y"
     { yyval.id = "union"; }
     break;
 
   case 118:
-#line 1478 "parse.y"
+#line 1488 "parse.y"
     { yyval.id = "enum"; }
     break;
 
   case 119:
-#line 1481 "parse.y"
+#line 1491 "parse.y"
     { yyval.id = g_strdup("*"); }
     break;
 
   case 120:
-#line 1482 "parse.y"
+#line 1492 "parse.y"
     { yyval.id = g_strdup("* const"); }
     break;
 
   case 121:
-#line 1483 "parse.y"
+#line 1493 "parse.y"
     {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
@@ -3328,7 +3338,7 @@ yyreduce:
     break;
 
   case 122:
-#line 1487 "parse.y"
+#line 1497 "parse.y"
     {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
@@ -3336,7 +3346,7 @@ yyreduce:
     break;
 
   case 123:
-#line 1494 "parse.y"
+#line 1504 "parse.y"
     {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3352,14 +3362,14 @@ yyreduce:
     break;
 
   case 124:
-#line 1506 "parse.y"
+#line 1516 "parse.y"
     {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 
   case 125:
-#line 1512 "parse.y"
+#line 1522 "parse.y"
     {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3375,7 +3385,7 @@ yyreduce:
     break;
 
   case 126:
-#line 1524 "parse.y"
+#line 1534 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3391,14 +3401,14 @@ yyreduce:
     break;
 
   case 127:
-#line 1536 "parse.y"
+#line 1546 "parse.y"
     {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 
   case 128:
-#line 1539 "parse.y"
+#line 1549 "parse.y"
     {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
@@ -3406,38 +3416,38 @@ yyreduce:
     break;
 
   case 129:
-#line 1545 "parse.y"
+#line 1555 "parse.y"
     {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                }
     break;
 
   case 130:
-#line 1550 "parse.y"
+#line 1560 "parse.y"
     {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                }
     break;
 
   case 131:
-#line 1553 "parse.y"
+#line 1563 "parse.y"
     { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        }
     break;
 
   case 132:
-#line 1558 "parse.y"
+#line 1568 "parse.y"
     { yyval.cbuf = yyvsp[0].cbuf; }
     break;
 
   case 133:
-#line 1559 "parse.y"
+#line 1569 "parse.y"
     { yyval.cbuf = NULL; }
     break;
 
   case 134:
-#line 1563 "parse.y"
+#line 1573 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3457,7 +3467,7 @@ yyreduce:
     break;
 
   case 135:
-#line 1579 "parse.y"
+#line 1589 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3477,7 +3487,7 @@ yyreduce:
     break;
 
   case 136:
-#line 1595 "parse.y"
+#line 1605 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3497,7 +3507,7 @@ yyreduce:
     break;
 
   case 137:
-#line 1611 "parse.y"
+#line 1621 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3517,7 +3527,7 @@ yyreduce:
     break;
 
   case 138:
-#line 1627 "parse.y"
+#line 1637 "parse.y"
     {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3532,7 +3542,7 @@ yyreduce:
     break;
 
   case 139:
-#line 1638 "parse.y"
+#line 1648 "parse.y"
     {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -3542,7 +3552,7 @@ yyreduce:
     break;
 
   case 140:
-#line 1644 "parse.y"
+#line 1654 "parse.y"
     {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -3556,7 +3566,7 @@ yyreduce:
     break;
 
   case 141:
-#line 1654 "parse.y"
+#line 1664 "parse.y"
     {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -3581,7 +3591,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1677 "parse.y"
+#line 1687 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3596,7 +3606,7 @@ yyreduce:
     break;
 
   case 143:
-#line 1688 "parse.y"
+#line 1698 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3619,7 +3629,7 @@ yyreduce:
     break;
 
   case 144:
-#line 1707 "parse.y"
+#line 1717 "parse.y"
     {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3627,12 +3637,12 @@ yyreduce:
     break;
 
   case 145:
-#line 1713 "parse.y"
+#line 1723 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
   case 146:
-#line 1714 "parse.y"
+#line 1724 "parse.y"
     {
                        yyval.id = (yyvsp[0].cbuf)->str;
                        g_string_free(yyvsp[0].cbuf, FALSE);
@@ -3640,12 +3650,12 @@ yyreduce:
     break;
 
   case 147:
-#line 1720 "parse.y"
+#line 1730 "parse.y"
     { vararg = FALSE; has_self = FALSE; }
     break;
 
   case 148:
-#line 1721 "parse.y"
+#line 1731 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3660,7 +3670,7 @@ yyreduce:
     break;
 
   case 149:
-#line 1732 "parse.y"
+#line 1742 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3675,7 +3685,7 @@ yyreduce:
     break;
 
   case 150:
-#line 1743 "parse.y"
+#line 1753 "parse.y"
     {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3690,7 +3700,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1754 "parse.y"
+#line 1764 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3704,7 +3714,7 @@ yyreduce:
     break;
 
   case 152:
-#line 1764 "parse.y"
+#line 1774 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -3718,7 +3728,7 @@ yyreduce:
     break;
 
   case 153:
-#line 1774 "parse.y"
+#line 1784 "parse.y"
     {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3732,46 +3742,46 @@ yyreduce:
     break;
 
   case 154:
-#line 1784 "parse.y"
+#line 1794 "parse.y"
     { has_self = FALSE; }
     break;
 
   case 155:
-#line 1787 "parse.y"
+#line 1797 "parse.y"
     { vararg = TRUE; }
     break;
 
   case 156:
-#line 1788 "parse.y"
+#line 1798 "parse.y"
     { vararg = FALSE; }
     break;
 
   case 157:
-#line 1791 "parse.y"
+#line 1801 "parse.y"
     { ; }
     break;
 
   case 158:
-#line 1792 "parse.y"
+#line 1802 "parse.y"
     { ; }
     break;
 
   case 159:
-#line 1795 "parse.y"
+#line 1805 "parse.y"
     {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                }
     break;
 
   case 160:
-#line 1798 "parse.y"
+#line 1808 "parse.y"
     {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                }
     break;
 
   case 161:
-#line 1801 "parse.y"
+#line 1811 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3783,7 +3793,7 @@ yyreduce:
     break;
 
   case 162:
-#line 1809 "parse.y"
+#line 1819 "parse.y"
     {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3795,17 +3805,17 @@ yyreduce:
     break;
 
   case 163:
-#line 1819 "parse.y"
+#line 1829 "parse.y"
     { ; }
     break;
 
   case 164:
-#line 1820 "parse.y"
+#line 1830 "parse.y"
     { ; }
     break;
 
   case 165:
-#line 1823 "parse.y"
+#line 1833 "parse.y"
     {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3826,7 +3836,7 @@ yyreduce:
     break;
 
   case 166:
-#line 1840 "parse.y"
+#line 1850 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3837,7 +3847,7 @@ yyreduce:
     break;
 
   case 167:
-#line 1847 "parse.y"
+#line 1857 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3848,7 +3858,7 @@ yyreduce:
     break;
 
   case 168:
-#line 1854 "parse.y"
+#line 1864 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3859,7 +3869,7 @@ yyreduce:
     break;
 
   case 169:
-#line 1861 "parse.y"
+#line 1871 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3870,7 +3880,7 @@ yyreduce:
     break;
 
   case 170:
-#line 1868 "parse.y"
+#line 1878 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3881,7 +3891,7 @@ yyreduce:
     break;
 
   case 171:
-#line 1875 "parse.y"
+#line 1885 "parse.y"
     {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3892,7 +3902,7 @@ yyreduce:
     break;
 
   case 172:
-#line 1884 "parse.y"
+#line 1894 "parse.y"
     {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3905,7 +3915,7 @@ yyreduce:
     break;
 
   case 173:
-#line 1893 "parse.y"
+#line 1903 "parse.y"
     {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3918,17 +3928,17 @@ yyreduce:
     break;
 
   case 174:
-#line 1904 "parse.y"
+#line 1914 "parse.y"
     {;}
     break;
 
   case 175:
-#line 1905 "parse.y"
+#line 1915 "parse.y"
     {;}
     break;
 
   case 176:
-#line 1908 "parse.y"
+#line 1918 "parse.y"
     {
                        Node *node;
                        char *num = yyvsp[0].id;
@@ -3952,7 +3962,7 @@ yyreduce:
     break;
 
   case 177:
-#line 1928 "parse.y"
+#line 1938 "parse.y"
     {
                        Node *node;
 
@@ -3964,7 +3974,7 @@ yyreduce:
     break;
 
   case 178:
-#line 1938 "parse.y"
+#line 1948 "parse.y"
     {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3977,7 +3987,7 @@ yyreduce:
     break;
 
   case 179:
-#line 1947 "parse.y"
+#line 1957 "parse.y"
     {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3990,21 +4000,21 @@ yyreduce:
     break;
 
   case 180:
-#line 1958 "parse.y"
+#line 1968 "parse.y"
     {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 
   case 181:
-#line 1961 "parse.y"
+#line 1971 "parse.y"
     {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 
   case 182:
-#line 1966 "parse.y"
+#line 1976 "parse.y"
     {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -4017,7 +4027,7 @@ yyreduce:
     break;
 
   case 183:
-#line 1975 "parse.y"
+#line 1985 "parse.y"
     {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -4030,26 +4040,26 @@ yyreduce:
     break;
 
   case 184:
-#line 1986 "parse.y"
+#line 1996 "parse.y"
     {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 
   case 185:
-#line 1989 "parse.y"
+#line 1999 "parse.y"
     {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 
   case 186:
-#line 1995 "parse.y"
+#line 2005 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
   case 187:
-#line 1996 "parse.y"
+#line 2006 "parse.y"
     {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
@@ -4057,12 +4067,12 @@ yyreduce:
     break;
 
   case 188:
-#line 2000 "parse.y"
+#line 2010 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
   case 189:
-#line 2001 "parse.y"
+#line 2011 "parse.y"
     { yyval.id = yyvsp[0].id; }
     break;
 
@@ -4070,7 +4080,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 4074 "parse.c"
+#line 4084 "parse.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4295,6 +4305,6 @@ yyreturn:
 }
 
 
-#line 2004 "parse.y"
+#line 2014 "parse.y"