X-Git-Url: http://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/6bec711e14babb0d6388754f41834036f22a3ef1..185449d25b2f9c93d2928e4745e8aa64d7d9ab9c:/src/main.c diff --git a/src/main.c b/src/main.c index 734efa4..9a9a1ac 100644 --- a/src/main.c +++ b/src/main.c @@ -120,8 +120,12 @@ gboolean no_write = FALSE; gboolean no_lines = FALSE; gboolean no_self_alias = FALSE; gboolean always_private_struct = FALSE; +gboolean gtk3_ok = FALSE; + gint prealloc = 0; + + gboolean use_m4 = FALSE; /* preprocess sources with m4 */ gboolean use_m4_clean = FALSE; /* preprocess sources with m4, no m4 flags */ char *m4_commandline = NULL; @@ -578,11 +582,13 @@ put_priv_method_prot(const Method *m) m->cbuf)) { /* add unique ID */ char *s = g_strdup_printf("___%x_", (guint)m->unique_id); - out_addline_infile(out, m->line_no); + if (m->line_no > 0) + out_addline_infile(out, m->line_no); print_method(out, "static ", s, "", " ", "", no_gnu?";\n":" G_GNUC_UNUSED;\n", m, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); - out_addline_outfile(out); + if (m->line_no > 0) + out_addline_outfile(out); g_free(s); } else if(m->scope == PRIVATE_SCOPE || m->method == INIT_METHOD || @@ -590,11 +596,13 @@ put_priv_method_prot(const Method *m) m->method == CONSTRUCTOR_METHOD || m->method == DISPOSE_METHOD || m->method == FINALIZE_METHOD) { - out_addline_infile(out, m->line_no); + if (m->line_no > 0) + out_addline_infile(out, m->line_no); print_method(out, "static ", "", "", " ", "", no_gnu?";\n":" G_GNUC_UNUSED;\n", m, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE); - out_addline_outfile(out); + if (m->line_no > 0) + out_addline_outfile(out); } } @@ -925,10 +933,10 @@ add_signal_prots(Method *m) /* hack because glib is braindamaged */ set_func = g_strdup ("g_value_set_uint"); else - set_func = g_strdup_printf ("g_value_set_%s%s", - (char *)m->gtktypes->data, + set_func = g_strdup_printf ("g_value_%s_%s", take_ownership ? - "_take_ownership" : ""); + "take" : "set", + (char *)m->gtktypes->data); gob_strdown (set_func); out_printf (out, "\n\t%s (return_value, v_return);\n", @@ -1043,17 +1051,26 @@ add_interface_inits (Class *c) char *name = replace_sep (interface, '_'); char *type = remove_sep (interface); - /* EEEK! evil, we should have some sort of option - * to force this for arbitrary interfaces, since - * some are Class and some are Iface. Glib is shite - * in consistency. */ - if (strcmp (type, "GtkEditable") == 0 || - strcmp (type, "GTypePlugin") == 0) - end = "Class"; + if(!gtk3_ok) + { + /* EEEK! evil, we should have some sort of option + * to force this for arbitrary interfaces, since + * some are Class and some are Iface. Glib is shite + * in consistency. */ + + if (strcmp (type, "GtkEditable") == 0 || + strcmp (type, "GTypePlugin") == 0) + end = "Class"; + else + // We'll assume Iface is the standard ending + end = "Iface"; + } else - /* We'll assume Iface is the standard ending */ - end = "Iface"; - + { + /*GTK3 doesn't need Iface end*/ + end="Interface"; + } + out_printf (out, "\nstatic void\n" "___%s_init (%s%s *iface)\n" "{\n", @@ -1346,14 +1363,14 @@ add_signals(Class *c) gob_strup (sig); flags = make_run_signal_flags (m, last); out_printf (out, "\tobject_signals[%s_SIGNAL] =\n" - "\t\tg_signal_new (\"%s\",\n" + "\t\tg_signal_new (%s,\n" "\t\t\tG_TYPE_FROM_CLASS (g_object_class),\n" "\t\t\t(GSignalFlags)(%s),\n" "\t\t\tG_STRUCT_OFFSET (%sClass, %s),\n" "\t\t\tNULL, NULL,\n" "\t\t\t%s,\n" "\t\t\tG_TYPE_%s, %d", - sig, m->id, + sig, m->signal_name /*m->id* if not given signal_name*/, flags, typebase, m->id, mar, (char *)m->gtktypes->data, @@ -1676,7 +1693,7 @@ make_property (Property *p) gob_strup (s); out_printf (out, "\tg_object_class_override_property (g_object_class,\n" "\t\tPROP_%s,\n" - "\t\t\"%s\");\n", s, p->name); + "\t\t\"%s\");\n", s, value_for_print (p->canonical_name, p->name) ); g_free (s); } else { GString *flags; @@ -1728,7 +1745,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "-128"), @@ -1744,7 +1761,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "0"), @@ -1758,7 +1775,7 @@ make_property (Property *p) "\t\t %s /* blurb */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->default_value, "FALSE"), @@ -1772,7 +1789,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "G_MININT"), @@ -1788,7 +1805,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "0"), @@ -1804,7 +1821,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "G_MINLONG"), @@ -1820,7 +1837,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "0"), @@ -1836,7 +1853,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "G_MININT64"), @@ -1852,7 +1869,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "0"), @@ -1866,7 +1883,7 @@ make_property (Property *p) "\t\t %s /* blurb */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->default_value, "0"), @@ -1881,7 +1898,7 @@ make_property (Property *p) "\t\t %s /* enum_type */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), type, @@ -1898,7 +1915,7 @@ make_property (Property *p) "\t\t %s /* flags_type */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), type, @@ -1914,7 +1931,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "-G_MAXFLOAT"), @@ -1930,7 +1947,7 @@ make_property (Property *p) "\t\t %s /* maximum */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->minimum, "-G_MAXDOUBLE"), @@ -1944,7 +1961,7 @@ make_property (Property *p) "\t\t %s /* blurb */,\n" "\t\t %s /* default_value */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), value_for_print (p->default_value, "NULL"), @@ -1958,7 +1975,7 @@ make_property (Property *p) "\t\t %s /* blurb */,\n" "\t\t %s /* param_type */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), type, @@ -1973,7 +1990,7 @@ make_property (Property *p) "\t\t %s /* blurb */,\n" "\t\t %s /* boxed_type */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), type, @@ -1985,7 +2002,7 @@ make_property (Property *p) "\t\t %s /* nick */,\n" "\t\t %s /* blurb */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), flags->str); @@ -1996,7 +2013,7 @@ make_property (Property *p) "\t\t %s /* nick */,\n" "\t\t %s /* blurb */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), flags->str); @@ -2009,7 +2026,7 @@ make_property (Property *p) "\t\t %s /* blurb */,\n" "\t\t %s /* object_type */,\n" "\t\t %s);\n", - p->name, + value_for_print (p->canonical_name, p->name), value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), type, @@ -2162,7 +2179,7 @@ print_destructor (Variable *v) if(v->destructor_line > 0) out_addline_outfile(out); - out_printf(out, "\tmemset(&%s, 0, sizeof(%s));\n", + out_printf(out, "\tmemset(&(%s), 0, sizeof(%s));\n", v->id, v->id); out_printf(out, "#undef VAR\n"); out_printf(out, "#undef %s\n", v->id); @@ -2196,6 +2213,22 @@ add_constructor (Class *c) "#undef __GOB_FUNCTION__\n\n"); } +static void +print_unreftors (Class *c) +{ + GList *li; + for(li = ((Class *)class)->nodes; + li != NULL; + li = li->next) { + Node *n = li->data; + Variable *v = (Variable *)n; + if (n->type == VARIABLE_NODE && + v->scope != CLASS_SCOPE && + v->destructor_unref) + print_destructor (v); + } +} + static void add_dispose (Class *c) { @@ -2214,6 +2247,10 @@ add_dispose (Class *c) } if (dispose_handler != NULL) { + if (unreftors > 0) { + print_unreftors (c); + } + /* so we get possible bad argument warning */ if (dispose_handler->line_no > 0) out_addline_infile (out, dispose_handler->line_no); @@ -2230,29 +2267,35 @@ add_dispose (Class *c) out_addline_outfile (out); } + if (unreftors > 0) { + print_unreftors (c); + } + out_printf (out, "\tif (G_OBJECT_CLASS (parent_class)->dispose) \\\n" "\t\t(* G_OBJECT_CLASS (parent_class)->dispose) (obj_self);\n"); } - if (unreftors > 0) { - GList *li; - for(li = ((Class *)class)->nodes; - li != NULL; - li = li->next) { - Node *n = li->data; - Variable *v = (Variable *)n; - if (n->type == VARIABLE_NODE && - v->scope != CLASS_SCOPE && - v->destructor_unref) - print_destructor (v); - } - } - out_printf(out, "}\n" "#undef __GOB_FUNCTION__\n\n"); } +static void +print_destructors (Class *c) +{ + GList *li; + for (li = ((Class *)class)->nodes; + li != NULL; + li = li->next) { + Node *n = li->data; + Variable *v = (Variable *)n; + if (n->type == VARIABLE_NODE && + v->scope != CLASS_SCOPE && + ! v->destructor_unref) + print_destructor (v); + } +} + static void add_finalize (Class *c) { @@ -2282,6 +2325,10 @@ add_finalize (Class *c) } if(finalize_handler) { + if (destructors > 0) { + print_destructors (c); + } + /* so we get possible bad argument warning */ if(finalize_handler->line_no > 0) out_addline_infile(out, finalize_handler->line_no); @@ -2298,25 +2345,15 @@ add_finalize (Class *c) out_addline_outfile (out); } + if (destructors > 0) { + print_destructors (c); + } + out_printf(out, "\tif(G_OBJECT_CLASS(parent_class)->finalize) \\\n" "\t\t(* G_OBJECT_CLASS(parent_class)->finalize)(obj_self);\n"); } - if (destructors > 0) { - GList *li; - for (li = ((Class *)class)->nodes; - li != NULL; - li = li->next) { - Node *n = li->data; - Variable *v = (Variable *)n; - if (n->type == VARIABLE_NODE && - v->scope != CLASS_SCOPE && - ! v->destructor_unref) - print_destructor (v); - } - } - out_printf(out, "}\n" "#undef __GOB_FUNCTION__\n\n"); } @@ -3860,9 +3897,9 @@ print_includes(void) p = g_strconcat(filebase, sep, "private.h", NULL); if( ! g_list_find_custom(include_files, p, (GCompareFunc)strcmp)) { - out_printf(out, "#include \"%s%cprivate.h\"\n\n", + out_printf(out, "#include \"%s%sprivate.h\"\n\n", filebase, - file_sep); + sep); if(found_header) error_printf(GOB_WARN, 0, "Implicit private header include " @@ -4258,7 +4295,9 @@ print_help(void) "\t-o,--output-dir The directory where output " "should be placed\n" "\t--file-sep[=c] replace default \'-\' file " - "name separator\n\n"); + "name separator\n\n" + "\t--gtk3 Use gtk+3\n" + ); fprintf(stderr, "End world hunger, donate to the World Food Programme, http://www.wfp.org\n"); } @@ -4392,6 +4431,8 @@ parse_options(int argc, char *argv[]) } else { file_sep = 0; } + } else if(strcmp(argv[i], "--gtk3")==0) { + gtk3_ok = TRUE; } else if(strcmp(argv[i], "--")==0) { /*further arguments are files*/ no_opts = TRUE;