]> git.draconx.ca Git - gob-dx.git/commitdiff
Release 2.0.8 v2.0.8
authorGeorge Lebl <jirka@5z.com>
Sat, 12 Jun 2004 08:19:00 +0000 (00:19 -0800)
committerNick Bowler <nbowler@draconx.ca>
Tue, 19 Feb 2019 17:33:49 +0000 (12:33 -0500)
12 files changed:
ChangeLog
NEWS
configure
configure.in
doc/gob2.1.in
gob2.spec
src/main.c
src/parse.c
src/parse.y
src/test.gob
src/util.c
src/util.h

index 385fb769f42a7144065e48ec3df32e1c05691787..454d2726b44de5c04221731dac63577cccbc9832 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+Fri Jun 11 15:16:05 2004  George Lebl <jirka@5z.com>
+
+       * Release 2.0.8
+
+       * doc/gob2.1.in: quote the version in GOB2_CHECK
+
+Fri May 07 18:07:33 2004  George Lebl <jirka@5z.com>
+
+       * src/main.c: add -o,--output-dir command line option
+
+       * doc/gob2.1.in: document the above
+
+Tue May 04 22:34:00 2004  George Lebl <jirka@5z.com>
+
+       * src/parse.y, src/main.c, src/util.[ch]: move the make_me_type
+         to util and use it when making the boxed property set/get function
+         to fix boxed_type
+
+Tue Apr 13 11:32:51 2004  George Lebl <jirka@5z.com>
+
+       * doc/gob2.1.in: --always-private-header is NOT the default, but
+         --ondemand-private-header is the default.
+
 Tue Mar 30 17:32:47 2004  George Lebl <jirka@5z.com>
 
        * Release 2.0.7
diff --git a/NEWS b/NEWS
index 17008a28f62b0a1fe6229b433e4a8e241b048a35..75ad848137c612e742d24ac0c74d7a370b01c2b1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+2.0.8:
+       * Documentation fixes
+       * Add support for -o and --output-dir
+       * Fixed boxed_type
+
 2.0.7:
        * Add support for INT64 and UINT64 types for signals and properties
          (Nicolas Brugier)
index b7d0e8cc3a6628188cc5905fead5e01e010cd227..9f5d3bd27309c92a0fbf94df6bbdc5d48a1e9e06 100755 (executable)
--- a/configure
+++ b/configure
@@ -1561,7 +1561,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=gob2
- VERSION=2.0.7
+ VERSION=2.0.8
 
 
 cat >>confdefs.h <<_ACEOF
index eb72d20c2872fc5ff312d9f417380a28a1a6ed20..ab0520558760be8b304cafd26e32d9be7b994697 100644 (file)
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.2)
 AC_INIT(src/treefuncs.h)
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(gob2,2.0.7)
+AM_INIT_AUTOMAKE(gob2,2.0.8)
 AM_MAINTAINER_MODE
 
 GLIB_REQUIRED=2.0.0
index f36c7259a8118c044cce4eaa68c5965c44a65908..67c6f55d89aa7c967c540add399bbe716398122e 100644 (file)
@@ -59,11 +59,11 @@ unchanged however.
 .TP
 .B --always-private-header
 Always create a \fB<basename>-private.h\fR file, even if it would be empty.
-This is the default.
 .TP
 .B --ondemand-private-header
 Create the private header only if it would have something in it, that is,
 if there are some private data members or protected methods.
+This is the default.
 .TP
 .B --no-private-header
 Never create a private header file.  If we use any private data members,
@@ -91,9 +91,12 @@ and SELF_CLASS macros.
 Do not remove the initial underscore from method names.
 .TP
 .B --always-private-struct
-Always include the private pointer in the public header file.  This is useful for
-files which are part of a library and you want to reserve the right to add some
-private data members without breaking binary compatibility.
+Always include the private pointer in the public header file.  This is useful
+for files which are part of a library and you want to reserve the right to add
+some private data members without breaking binary compatibility.
+.TP
+.B -o --output-dir
+The directory into which output should be placed.
 
 .SH TYPENAMES
 .PP
@@ -1109,7 +1112,7 @@ check for GOB2 in your configure.in file.  You can use the supplied m4 macro
 which will also check the version of gob.  Basically you include this:
 .nf
 
-  GOB2_CHECK(2.0.0)
+  GOB2_CHECK([2.0.0])
 
 .fi
 This will replace @GOB2@ in your makefiles with the full path of gob2.  Thus
index 26bbd34cb79d7f980bc2692dfad30a2700c1dc47..87060e26f1e8e296b39cafa731b351782062cfcd 100644 (file)
--- a/gob2.spec
+++ b/gob2.spec
@@ -1,4 +1,4 @@
-%define  ver     2.0.7
+%define  ver     2.0.8
 %define  rel     1
 %define  prefix  /usr
 
index 296cf0d844aa6c74f070e6367da63b261cbe3334..c94c805121d6c0852b2ca475ad66d9a1dbf15733 100644 (file)
@@ -53,6 +53,7 @@ extern GList *include_files;
 extern GHashTable *gtk_doc_hash;
 
 char *filebase;
+char *fullfilebase;
 static char *funcbase;
 static char *pfuncbase;
 static char *macrobase;
@@ -63,6 +64,8 @@ static char *pmacrotype;
 static char *typebase;
 static char *ptypebase;
 
+char *output_dir = NULL;
+
 static int signals = 0; /* number of signals */
 static int set_properties = 0; /* number of named (set) properties */
 static int get_properties = 0; /* number of named (get) properties */
@@ -122,6 +125,13 @@ make_bases (void)
        filebase = replace_sep (((Class *)class)->otype, '-');
        gob_strdown (filebase);
 
+       if (output_dir != NULL &&
+           output_dir[0] != '\0') {
+               fullfilebase = g_build_filename (output_dir, filebase, NULL);
+       } else {
+               fullfilebase = g_strdup (filebase);
+       }
+
        funcbase = replace_sep (((Class *)class)->otype, '_');
        gob_strdown (funcbase);
 
@@ -1581,21 +1591,6 @@ make_argument (Argument *a)
 
 #define value_for_print(str, alt) (str != NULL ? str : alt)
 
-static char *
-make_me_type (const char *type, const char *alt)
-{
-       if (type == NULL)
-               return g_strdup (alt);
-       /* HACK!  just in case someone made this
-        * work with 2.0.0 by using the TYPE
-        * macro directly */
-       if ((strstr (type, "_TYPE_") != NULL ||
-            strstr (type, "TYPE_") == type) &&
-           strchr (type, ':') == NULL)
-               return g_strdup (type);
-       return make_pre_macro (type, "TYPE");
-}
-
 static void
 make_property (Property *p)
 {
@@ -2945,18 +2940,18 @@ open_files(void)
        char *outfile, *outfileh, *outfileph;
 
        if ( ! for_cpp)
-               outfile = g_strconcat (filebase, ".c", NULL);
+               outfile = g_strconcat (fullfilebase, ".c", NULL);
        else
-               outfile = g_strconcat (filebase, ".cc", NULL);
+               outfile = g_strconcat (fullfilebase, ".cc", NULL);
        if (no_touch_headers)
-               outfileh = g_strconcat ("#gob#", filebase, ".h#gob#", NULL);
+               outfileh = g_strconcat (fullfilebase, ".h#gob#", NULL);
        else
-               outfileh = g_strconcat (filebase, ".h", NULL);
+               outfileh = g_strconcat (fullfilebase, ".h", NULL);
 
        if ((privates > 0 || protecteds > 0 ||
             private_header == PRIVATE_HEADER_ALWAYS) &&
            private_header != PRIVATE_HEADER_NEVER)
-               outfileph = g_strconcat (filebase, "-private.h", NULL);
+               outfileph = g_strconcat (fullfilebase, "-private.h", NULL);
        else
                outfileph = NULL;
 
@@ -3934,10 +3929,10 @@ print_help(void)
                                          "really changed\n"
                "\t--always-private-header Always create a private header "
                                          "file,\n"
-               "\t                        even if it would be empty "
-                                         "[default]\n"
+               "\t                        even if it would be empty\n"
                "\t--ondemand-private-header Create private header only when "
                                          "needed\n"
+               "\t                        [default]\n"
                "\t--no-private-header     Don't create a private header, "
                                          "put private\n"
                "\t                        structure and protected "
@@ -3956,7 +3951,9 @@ print_help(void)
                "\t--no-lines              Don't print '#line' to output\n"
                "\t--no-self-alias         Don't create self type and macro "
                                          "aliases\n"
-               "\t--no-kill-underscores   Ignored for compatibility\n");
+               "\t--no-kill-underscores   Ignored for compatibility\n"
+               "\t-o,--output-dir         The directory where output "
+                                         "should be placed\n");
 }
 
 static void
@@ -4058,6 +4055,21 @@ parse_options(int argc, char *argv[])
                        use_m4_clean=TRUE;
                        m4_opts = TRUE;
                        m4_commandline=g_strdup(M4_COMMANDLINE);
+               } else if (strcmp (argv[i], "-o") == 0 || 
+                          strcmp (argv[i], "--output-dir") == 0) {
+                       if (i+1 < argc) {
+                               output_dir = g_strdup (argv[i+1]);
+                               i++;
+                       } else {
+                               output_dir = NULL;
+                       }
+               } else if (strncmp (argv[i], "-o=", strlen ("-o=")) == 0 || 
+                          strncmp (argv[i],
+                                   "--output-dir=",
+                                   strlen ("--output-dir=")) == 0) {
+                       char *p = strchr (argv[i], '=');
+                       g_assert (p != NULL);
+                       output_dir = g_strdup (p+1);
                } else if(strcmp(argv[i], "--")==0) {
                        /*further arguments are files*/
                        no_opts = TRUE;
@@ -4110,8 +4122,8 @@ parse_options(int argc, char *argv[])
 static void
 compare_and_move_header(void)
 {
-       char *hfnew = g_strconcat("#gob#", filebase, ".h#gob#", NULL);
-       char *hf = g_strconcat(filebase, ".h", NULL);
+       char *hfnew = g_strconcat(fullfilebase, ".h#gob#", NULL);
+       char *hf = g_strconcat(fullfilebase, ".h", NULL);
        struct stat s;
        if(stat(hf, &s) == 0) {
                char *s;
index c0ac2d080428e63b8a95be885da229ba575c71c4..79e576115ed3fe0cd2c868839cb522c0376e7a26 100644 (file)
@@ -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,  1094,  1102,  1107,  1155,  1191,  1207,  1208,
-    1211,  1212,  1215,  1216,  1228,  1229,  1232,  1238,  1244,  1250,
-    1256,  1262,  1268,  1275,  1281,  1287,  1293,  1299,  1305,  1311,
-    1317,  1323,  1329,  1335,  1355,  1364,  1370,  1371,  1374,  1377,
-    1383,  1390,  1399,  1402,  1405,  1409,  1413,  1417,  1422,  1430,
-    1434,  1439,  1443,  1446,  1450,  1453,  1458,  1459,  1460,  1461,
-    1462,  1463,  1464,  1465,  1466,  1469,  1470,  1471,  1474,  1475,
-    1476,  1480,  1487,  1499,  1505,  1517,  1529,  1532,  1538,  1543,
-    1546,  1551,  1552,  1556,  1572,  1588,  1604,  1620,  1631,  1637,
-    1647,  1670,  1681,  1700,  1706,  1707,  1713,  1714,  1725,  1736,
-    1747,  1757,  1767,  1777,  1780,  1781,  1784,  1785,  1788,  1791,
-    1794,  1802,  1812,  1813,  1816,  1833,  1840,  1847,  1854,  1861,
-    1868,  1877,  1886,  1897,  1898,  1901,  1921,  1931,  1940,  1951,
-    1954,  1959,  1968,  1979,  1982,  1988,  1989,  1993,  1994
+       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,7 +2355,7 @@ case 51:
                                                }
     break;
 case 52:
-#line 1005 "parse.y"
+#line 1008 "parse.y"
 {
                        Node *node;
                        char *get, *set = NULL;
@@ -2442,7 +2445,7 @@ case 52:
                                                }
     break;
 case 53:
-#line 1094 "parse.y"
+#line 1097 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2453,13 +2456,13 @@ case 53:
                                                }
     break;
 case 54:
-#line 1102 "parse.y"
+#line 1105 "parse.y"
 {
                        yyval.id = NULL;
                                                }
     break;
 case 55:
-#line 1107 "parse.y"
+#line 1110 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2510,7 +2513,7 @@ case 55:
                }
     break;
 case 56:
-#line 1155 "parse.y"
+#line 1158 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2549,7 +2552,7 @@ case 56:
                }
     break;
 case 57:
-#line 1191 "parse.y"
+#line 1194 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2566,27 +2569,27 @@ case 57:
                }
     break;
 case 58:
-#line 1207 "parse.y"
+#line 1210 "parse.y"
 { ; }
     break;
 case 59:
-#line 1208 "parse.y"
+#line 1211 "parse.y"
 { ; }
     break;
 case 60:
-#line 1211 "parse.y"
+#line 1214 "parse.y"
 { ; }
     break;
 case 61:
-#line 1212 "parse.y"
+#line 1215 "parse.y"
 { ; }
     break;
 case 62:
-#line 1215 "parse.y"
+#line 1218 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 63:
-#line 1216 "parse.y"
+#line 1219 "parse.y"
 {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2599,15 +2602,15 @@ case 63:
                }
     break;
 case 64:
-#line 1228 "parse.y"
+#line 1231 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 65:
-#line 1229 "parse.y"
+#line 1232 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 66:
-#line 1232 "parse.y"
+#line 1235 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2616,7 +2619,7 @@ case 66:
                  }
     break;
 case 67:
-#line 1238 "parse.y"
+#line 1241 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2625,7 +2628,7 @@ case 67:
                  }
     break;
 case 68:
-#line 1244 "parse.y"
+#line 1247 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2634,7 +2637,7 @@ case 68:
                  }
     break;
 case 69:
-#line 1250 "parse.y"
+#line 1253 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2643,7 +2646,7 @@ case 69:
                  }
     break;
 case 70:
-#line 1256 "parse.y"
+#line 1259 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2652,7 +2655,7 @@ case 70:
                  }
     break;
 case 71:
-#line 1262 "parse.y"
+#line 1265 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2661,7 +2664,7 @@ case 71:
                  }
     break;
 case 72:
-#line 1268 "parse.y"
+#line 1271 "parse.y"
 {
                Type *type = pop_type ();
                ensure_property ();
@@ -2671,7 +2674,7 @@ case 72:
                  }
     break;
 case 73:
-#line 1275 "parse.y"
+#line 1278 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2680,7 +2683,7 @@ case 73:
                  }
     break;
 case 74:
-#line 1281 "parse.y"
+#line 1284 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2689,7 +2692,7 @@ case 74:
                  }
     break;
 case 75:
-#line 1287 "parse.y"
+#line 1290 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2698,7 +2701,7 @@ case 75:
                  }
     break;
 case 76:
-#line 1293 "parse.y"
+#line 1296 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2707,7 +2710,7 @@ case 76:
                  }
     break;
 case 77:
-#line 1299 "parse.y"
+#line 1302 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2716,7 +2719,7 @@ case 77:
                  }
     break;
 case 78:
-#line 1305 "parse.y"
+#line 1308 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2725,7 +2728,7 @@ case 78:
                  }
     break;
 case 79:
-#line 1311 "parse.y"
+#line 1314 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2734,7 +2737,7 @@ case 79:
                  }
     break;
 case 80:
-#line 1317 "parse.y"
+#line 1320 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2743,7 +2746,7 @@ case 80:
                  }
     break;
 case 81:
-#line 1323 "parse.y"
+#line 1326 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2752,7 +2755,7 @@ case 81:
                  }
     break;
 case 82:
-#line 1329 "parse.y"
+#line 1332 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2761,7 +2764,7 @@ case 82:
                  }
     break;
 case 83:
-#line 1335 "parse.y"
+#line 1338 "parse.y"
 {
                ensure_property ();
                if (strcmp (yyvsp[0].id, "link") == 0) {
@@ -2782,7 +2785,7 @@ case 83:
                  }
     break;
 case 84:
-#line 1355 "parse.y"
+#line 1358 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -2794,34 +2797,34 @@ case 84:
                                                }
     break;
 case 85:
-#line 1364 "parse.y"
+#line 1367 "parse.y"
 {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
                                                }
     break;
 case 86:
-#line 1370 "parse.y"
+#line 1373 "parse.y"
 { yyval.list = yyvsp[-1].list; }
     break;
 case 87:
-#line 1371 "parse.y"
+#line 1374 "parse.y"
 { yyval.list = NULL; }
     break;
 case 88:
-#line 1374 "parse.y"
+#line 1377 "parse.y"
 {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                }
     break;
 case 89:
-#line 1377 "parse.y"
+#line 1380 "parse.y"
 {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                }
     break;
 case 90:
-#line 1383 "parse.y"
+#line 1386 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -2831,7 +2834,7 @@ case 90:
                                                        }
     break;
 case 91:
-#line 1390 "parse.y"
+#line 1393 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -2840,40 +2843,40 @@ case 91:
                                                        }
     break;
 case 92:
-#line 1399 "parse.y"
+#line 1402 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 case 93:
-#line 1402 "parse.y"
+#line 1405 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 case 94:
-#line 1405 "parse.y"
+#line 1408 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 case 95:
-#line 1409 "parse.y"
+#line 1412 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 case 96:
-#line 1413 "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 1417 "parse.y"
+#line 1420 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
@@ -2881,7 +2884,7 @@ case 97:
                                                        }
     break;
 case 98:
-#line 1422 "parse.y"
+#line 1425 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
@@ -2889,14 +2892,14 @@ case 98:
                                                        }
     break;
 case 99:
-#line 1430 "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 1434 "parse.y"
+#line 1437 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[-1].id);
@@ -2904,109 +2907,109 @@ case 100:
                                                        }
     break;
 case 101:
-#line 1439 "parse.y"
+#line 1442 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        }
     break;
 case 102:
-#line 1443 "parse.y"
+#line 1446 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        }
     break;
 case 103:
-#line 1446 "parse.y"
+#line 1449 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        }
     break;
 case 104:
-#line 1450 "parse.y"
+#line 1453 "parse.y"
 {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        }
     break;
 case 105:
-#line 1453 "parse.y"
+#line 1456 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        }
     break;
 case 106:
-#line 1458 "parse.y"
+#line 1461 "parse.y"
 { yyval.id = "void"; }
     break;
 case 107:
-#line 1459 "parse.y"
+#line 1462 "parse.y"
 { yyval.id = "char"; }
     break;
 case 108:
-#line 1460 "parse.y"
+#line 1463 "parse.y"
 { yyval.id = "short"; }
     break;
 case 109:
-#line 1461 "parse.y"
+#line 1464 "parse.y"
 { yyval.id = "int"; }
     break;
 case 110:
-#line 1462 "parse.y"
+#line 1465 "parse.y"
 { yyval.id = "long"; }
     break;
 case 111:
-#line 1463 "parse.y"
+#line 1466 "parse.y"
 { yyval.id = "float"; }
     break;
 case 112:
-#line 1464 "parse.y"
+#line 1467 "parse.y"
 { yyval.id = "double"; }
     break;
 case 113:
-#line 1465 "parse.y"
+#line 1468 "parse.y"
 { yyval.id = "signed"; }
     break;
 case 114:
-#line 1466 "parse.y"
+#line 1469 "parse.y"
 { yyval.id = "unsigned"; }
     break;
 case 115:
-#line 1469 "parse.y"
+#line 1472 "parse.y"
 { yyval.id = "struct"; }
     break;
 case 116:
-#line 1470 "parse.y"
+#line 1473 "parse.y"
 { yyval.id = "union"; }
     break;
 case 117:
-#line 1471 "parse.y"
+#line 1474 "parse.y"
 { yyval.id = "enum"; }
     break;
 case 118:
-#line 1474 "parse.y"
+#line 1477 "parse.y"
 { yyval.id = g_strdup("*"); }
     break;
 case 119:
-#line 1475 "parse.y"
+#line 1478 "parse.y"
 { yyval.id = g_strdup("* const"); }
     break;
 case 120:
-#line 1476 "parse.y"
+#line 1479 "parse.y"
 {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 case 121:
-#line 1480 "parse.y"
+#line 1483 "parse.y"
 {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        }
     break;
 case 122:
-#line 1487 "parse.y"
+#line 1490 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3021,13 +3024,13 @@ case 122:
                                        }
     break;
 case 123:
-#line 1499 "parse.y"
+#line 1502 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 case 124:
-#line 1505 "parse.y"
+#line 1508 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3042,7 +3045,7 @@ case 124:
                                        }
     break;
 case 125:
-#line 1517 "parse.y"
+#line 1520 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -3057,46 +3060,46 @@ case 125:
                                        }
     break;
 case 126:
-#line 1529 "parse.y"
+#line 1532 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        }
     break;
 case 127:
-#line 1532 "parse.y"
+#line 1535 "parse.y"
 {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
                                        }
     break;
 case 128:
-#line 1538 "parse.y"
+#line 1541 "parse.y"
 {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                }
     break;
 case 129:
-#line 1543 "parse.y"
+#line 1546 "parse.y"
 {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                }
     break;
 case 130:
-#line 1546 "parse.y"
+#line 1549 "parse.y"
 { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        }
     break;
 case 131:
-#line 1551 "parse.y"
+#line 1554 "parse.y"
 { yyval.cbuf = yyvsp[0].cbuf; }
     break;
 case 132:
-#line 1552 "parse.y"
+#line 1555 "parse.y"
 { yyval.cbuf = NULL; }
     break;
 case 133:
-#line 1556 "parse.y"
+#line 1559 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3115,7 +3118,7 @@ case 133:
                                                                        }
     break;
 case 134:
-#line 1572 "parse.y"
+#line 1575 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -3134,7 +3137,7 @@ case 134:
                                                                        }
     break;
 case 135:
-#line 1588 "parse.y"
+#line 1591 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3153,7 +3156,7 @@ case 135:
                                                                        }
     break;
 case 136:
-#line 1604 "parse.y"
+#line 1607 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3172,7 +3175,7 @@ case 136:
                                                                        }
     break;
 case 137:
-#line 1620 "parse.y"
+#line 1623 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -3186,7 +3189,7 @@ case 137:
                                                                        }
     break;
 case 138:
-#line 1631 "parse.y"
+#line 1634 "parse.y"
 {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -3195,7 +3198,7 @@ case 138:
                                                                        }
     break;
 case 139:
-#line 1637 "parse.y"
+#line 1640 "parse.y"
 {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -3208,7 +3211,7 @@ case 139:
                                                                }
     break;
 case 140:
-#line 1647 "parse.y"
+#line 1650 "parse.y"
 {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -3232,7 +3235,7 @@ case 140:
                                                }
     break;
 case 141:
-#line 1670 "parse.y"
+#line 1673 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3246,7 +3249,7 @@ case 141:
                                        }
     break;
 case 142:
-#line 1681 "parse.y"
+#line 1684 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -3268,29 +3271,29 @@ case 142:
                                                }
     break;
 case 143:
-#line 1700 "parse.y"
+#line 1703 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
                                        }
     break;
 case 144:
-#line 1706 "parse.y"
+#line 1709 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 145:
-#line 1707 "parse.y"
+#line 1710 "parse.y"
 {
                        yyval.id = (yyvsp[0].cbuf)->str;
                        g_string_free(yyvsp[0].cbuf, FALSE);
                                        }
     break;
 case 146:
-#line 1713 "parse.y"
+#line 1716 "parse.y"
 { vararg = FALSE; has_self = FALSE; }
     break;
 case 147:
-#line 1714 "parse.y"
+#line 1717 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3304,7 +3307,7 @@ case 147:
                                                }
     break;
 case 148:
-#line 1725 "parse.y"
+#line 1728 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3318,7 +3321,7 @@ case 148:
                                                }
     break;
 case 149:
-#line 1736 "parse.y"
+#line 1739 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3332,7 +3335,7 @@ case 149:
                                                }
     break;
 case 150:
-#line 1747 "parse.y"
+#line 1750 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3345,7 +3348,7 @@ case 150:
                                        }
     break;
 case 151:
-#line 1757 "parse.y"
+#line 1760 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -3358,7 +3361,7 @@ case 151:
                                        }
     break;
 case 152:
-#line 1767 "parse.y"
+#line 1770 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3371,39 +3374,39 @@ case 152:
                                        }
     break;
 case 153:
-#line 1777 "parse.y"
+#line 1780 "parse.y"
 { has_self = FALSE; }
     break;
 case 154:
-#line 1780 "parse.y"
+#line 1783 "parse.y"
 { vararg = TRUE; }
     break;
 case 155:
-#line 1781 "parse.y"
+#line 1784 "parse.y"
 { vararg = FALSE; }
     break;
 case 156:
-#line 1784 "parse.y"
+#line 1787 "parse.y"
 { ; }
     break;
 case 157:
-#line 1785 "parse.y"
+#line 1788 "parse.y"
 { ; }
     break;
 case 158:
-#line 1788 "parse.y"
+#line 1791 "parse.y"
 {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                }
     break;
 case 159:
-#line 1791 "parse.y"
+#line 1794 "parse.y"
 {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                }
     break;
 case 160:
-#line 1794 "parse.y"
+#line 1797 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3414,7 +3417,7 @@ case 160:
                                                                }
     break;
 case 161:
-#line 1802 "parse.y"
+#line 1805 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3425,15 +3428,15 @@ case 161:
                                                                }
     break;
 case 162:
-#line 1812 "parse.y"
+#line 1815 "parse.y"
 { ; }
     break;
 case 163:
-#line 1813 "parse.y"
+#line 1816 "parse.y"
 { ; }
     break;
 case 164:
-#line 1816 "parse.y"
+#line 1819 "parse.y"
 {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3453,7 +3456,7 @@ case 164:
                                        }
     break;
 case 165:
-#line 1833 "parse.y"
+#line 1836 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3463,7 +3466,7 @@ case 165:
                                        }
     break;
 case 166:
-#line 1840 "parse.y"
+#line 1843 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3473,7 +3476,7 @@ case 166:
                                        }
     break;
 case 167:
-#line 1847 "parse.y"
+#line 1850 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3483,7 +3486,7 @@ case 167:
                                        }
     break;
 case 168:
-#line 1854 "parse.y"
+#line 1857 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3493,7 +3496,7 @@ case 168:
                                        }
     break;
 case 169:
-#line 1861 "parse.y"
+#line 1864 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3503,7 +3506,7 @@ case 169:
                                        }
     break;
 case 170:
-#line 1868 "parse.y"
+#line 1871 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3513,7 +3516,7 @@ case 170:
                                        }
     break;
 case 171:
-#line 1877 "parse.y"
+#line 1880 "parse.y"
 {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3525,7 +3528,7 @@ case 171:
                        }
     break;
 case 172:
-#line 1886 "parse.y"
+#line 1889 "parse.y"
 {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3537,15 +3540,15 @@ case 172:
                        }
     break;
 case 173:
-#line 1897 "parse.y"
+#line 1900 "parse.y"
 {;}
     break;
 case 174:
-#line 1898 "parse.y"
+#line 1901 "parse.y"
 {;}
     break;
 case 175:
-#line 1901 "parse.y"
+#line 1904 "parse.y"
 {
                        Node *node;
                        char *num = yyvsp[0].id;
@@ -3568,7 +3571,7 @@ case 175:
                        }
     break;
 case 176:
-#line 1921 "parse.y"
+#line 1924 "parse.y"
 {
                        Node *node;
 
@@ -3579,7 +3582,7 @@ case 176:
        }
     break;
 case 177:
-#line 1931 "parse.y"
+#line 1934 "parse.y"
 {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3591,7 +3594,7 @@ case 177:
                        }
     break;
 case 178:
-#line 1940 "parse.y"
+#line 1943 "parse.y"
 {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3603,19 +3606,19 @@ case 178:
                        }
     break;
 case 179:
-#line 1951 "parse.y"
+#line 1954 "parse.y"
 {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 case 180:
-#line 1954 "parse.y"
+#line 1957 "parse.y"
 {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                }
     break;
 case 181:
-#line 1959 "parse.y"
+#line 1962 "parse.y"
 {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3627,7 +3630,7 @@ case 181:
                        }
     break;
 case 182:
-#line 1968 "parse.y"
+#line 1971 "parse.y"
 {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3639,34 +3642,34 @@ case 182:
                        }
     break;
 case 183:
-#line 1979 "parse.y"
+#line 1982 "parse.y"
 {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 case 184:
-#line 1982 "parse.y"
+#line 1985 "parse.y"
 {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                }
     break;
 case 185:
-#line 1988 "parse.y"
+#line 1991 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 186:
-#line 1989 "parse.y"
+#line 1992 "parse.y"
 {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
                                        }
     break;
 case 187:
-#line 1993 "parse.y"
+#line 1996 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 case 188:
-#line 1994 "parse.y"
+#line 1997 "parse.y"
 { yyval.id = yyvsp[0].id; }
     break;
 }
@@ -3902,5 +3905,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1997 "parse.y"
+#line 2000 "parse.y"
 
index 7588b9d252131bfe1eb4b0f8bc464de469cc4f6a..917476aa9e6d51799752abdf2a530e19f704186b 100644 (file)
@@ -517,6 +517,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 "
@@ -531,12 +533,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;
index 75d45f01f9a66e7fe9ca4d342a97c2519bf268ed..8146a72538f234665c65ea4bdb5712add599876c 100644 (file)
@@ -56,6 +56,11 @@ union _gob__union_t {
        int i, x, y, z;
 };
 void bubu(void);
+
+/* Fake boxed */
+#define PACKAGE_TYPE_BOXED 1
+typedef void * PackageBoxed;
+
 %}
 %header{
 /* this should be in the header, just under bubu prototype */
@@ -196,6 +201,19 @@ class Test:Object from G:Object
                                flags_type = Some:Flags,
                                link);
 
+         private PackageBoxed *prop;
+         property BOXED prop (nick="prop",
+                              blurb="prop",
+                              boxed_type=Package:Boxed,
+                              link);
+         /* testing old semantics */
+         private PackageBoxed *prop2;
+         property BOXED prop2 (nick="prop2",
+                              blurb="prop2",
+                              boxed_type=PACKAGE_TYPE_BOXED,
+                              link);
+
+
        private int j;
        public GObject * h;
        public char *bleh;
index 38dd53547b3cdf70bd423b39501040e4dde4f304..de1d008f9be49aa955741b92f1245a092af8d1d7 100644 (file)
@@ -390,3 +390,17 @@ gob_strdown (char *str)
        return str;
 }
 
+char *
+make_me_type (const char *type, const char *alt)
+{
+       if (type == NULL)
+               return g_strdup (alt);
+       /* HACK!  just in case someone made this
+        * work with 2.0.0 by using the TYPE
+        * macro directly */
+       if ((strstr (type, "_TYPE_") != NULL ||
+            strstr (type, "TYPE_") == type) &&
+           strchr (type, ':') == NULL)
+               return g_strdup (type);
+       return make_pre_macro (type, "TYPE");
+}
index 3c249a3a0217abea1cab3aca16292f19dc120c57..b4dfde5e99ce557ca399bbad27d43086ef533a5b 100644 (file)
@@ -62,4 +62,6 @@ enum {
 /* returns TRUE if there are any special types at all */
 gboolean setup_special_array(Class *c, gboolean *special_array);
 
+char * make_me_type (const char *type, const char *alt);
+
 #endif /* UTIL_H */