From b3db2950b11fc5f3abd9ecdae855746e2d19c836 Mon Sep 17 00:00:00 2001 From: George Lebl Date: Sat, 12 Jun 2004 00:19:00 -0800 Subject: [PATCH] Release 2.0.8 --- ChangeLog | 23 +++ NEWS | 5 + configure | 2 +- configure.in | 2 +- doc/gob2.1.in | 13 +- gob2.spec | 2 +- src/main.c | 62 +++++--- src/parse.c | 423 +++++++++++++++++++++++++------------------------- src/parse.y | 7 +- src/test.gob | 18 +++ src/util.c | 14 ++ src/util.h | 2 + 12 files changed, 328 insertions(+), 245 deletions(-) diff --git a/ChangeLog b/ChangeLog index 385fb76..454d272 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +Fri Jun 11 15:16:05 2004 George Lebl + + * Release 2.0.8 + + * doc/gob2.1.in: quote the version in GOB2_CHECK + +Fri May 07 18:07:33 2004 George Lebl + + * 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 + + * 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 + + * 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 * Release 2.0.7 diff --git a/NEWS b/NEWS index 17008a2..75ad848 100644 --- 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) diff --git a/configure b/configure index b7d0e8c..9f5d3bd 100755 --- 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 diff --git a/configure.in b/configure.in index eb72d20..ab05205 100644 --- a/configure.in +++ b/configure.in @@ -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 diff --git a/doc/gob2.1.in b/doc/gob2.1.in index f36c725..67c6f55 100644 --- a/doc/gob2.1.in +++ b/doc/gob2.1.in @@ -59,11 +59,11 @@ unchanged however. .TP .B --always-private-header Always create a \fB-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 diff --git a/gob2.spec b/gob2.spec index 26bbd34..87060e2 100644 --- 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 diff --git a/src/main.c b/src/main.c index 296cf0d..c94c805 100644 --- a/src/main.c +++ b/src/main.c @@ -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; diff --git a/src/parse.c b/src/parse.c index c0ac2d0..79e5761 100644 --- a/src/parse.c +++ b/src/parse.c @@ -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" diff --git a/src/parse.y b/src/parse.y index 7588b9d..917476a 100644 --- a/src/parse.y +++ b/src/parse.y @@ -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; diff --git a/src/test.gob b/src/test.gob index 75d45f0..8146a72 100644 --- a/src/test.gob +++ b/src/test.gob @@ -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; diff --git a/src/util.c b/src/util.c index 38dd535..de1d008 100644 --- a/src/util.c +++ b/src/util.c @@ -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"); +} diff --git a/src/util.h b/src/util.h index 3c249a3..b4dfde5 100644 --- a/src/util.h +++ b/src/util.h @@ -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 */ -- 2.43.0