]> git.draconx.ca Git - gob-dx.git/blobdiff - src/main.c
Release 2.0.19
[gob-dx.git] / src / main.c
index f3142ada93025d7a52904ed651cbb29b765b1b73..b4d1b270f4332b126da8e0c428cf6aa081742217 100644 (file)
@@ -1,7 +1,7 @@
 /* GOB C Preprocessor
  * Copyright (C) 1999,2000 the Free Software Foundation.
  * Copyright (C) 2000 Eazel, Inc.
- * Copyright (C) 2001-2009 George (Jiri) Lebl
+ * Copyright (C) 2001-2011 George (Jiri) Lebl
  *
  * Author: George (Jiri) Lebl
  *
@@ -578,11 +578,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 +592,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);
        }
 }
 
@@ -1613,13 +1617,13 @@ make_argument (Argument *a)
                           a->name, flags->str);
        else if (!strcmp (a->gtktype, "FLOAT"))
                out_printf(out, "\tparam_spec = g_param_spec_float (\"%s\", NULL, NULL,\n"
-                          "\t\tG_MINFLOAT, G_MAXFLOAT,\n"
+                          "\t\t-G_MAXFLOAT, G_MAXFLOAT,\n"
                           "\t\t0,\n"
                           "\t\t%s);\n",
                           a->name, flags->str);
        else if (!strcmp (a->gtktype, "DOUBLE"))
                out_printf(out, "\tparam_spec = g_param_spec_double (\"%s\", NULL, NULL,\n"
-                          "\t\tG_MINDOUBLE, G_MAXDOUBLE,\n"
+                          "\t\t-G_MAXDOUBLE, G_MAXDOUBLE,\n"
                           "\t\t0,\n"
                           "\t\t%s);\n",
                           a->name, flags->str);
@@ -1655,22 +1659,22 @@ make_property (Property *p)
        if (p->override) {
                if (p->flags != NULL)
                        error_print (GOB_WARN, p->line_no,
-                                    "Overriden property, flags ignored");
+                                    "Overridden property, flags ignored");
                if (p->nick != NULL)
                        error_print (GOB_WARN, p->line_no,
-                                    "Overriden property, nick ignored");
+                                    "Overridden property, nick ignored");
                if (p->blurb != NULL)
                        error_print (GOB_WARN, p->line_no,
-                                    "Overriden property, blurb ignored");
+                                    "Overridden property, blurb ignored");
                if (p->minimum != NULL)
                        error_print (GOB_WARN, p->line_no,
-                                    "Overriden property, minimum ignored");
+                                    "Overridden property, minimum ignored");
                if (p->maximum != NULL)
                        error_print (GOB_WARN, p->line_no,
-                                    "Overriden property, maximum ignored");
+                                    "Overridden property, maximum ignored");
                if (p->default_value != NULL)
                        error_print (GOB_WARN, p->line_no,
-                                    "Overriden property, default_value ignored");
+                                    "Overridden property, default_value ignored");
 
                s = g_strdup (p->name);
                gob_strup (s);
@@ -1917,7 +1921,7 @@ make_property (Property *p)
                                    p->name,
                                    value_for_print (p->nick, "NULL"),
                                    value_for_print (p->blurb, "NULL"),
-                                   value_for_print (p->minimum, "G_MINFLOAT"),
+                                   value_for_print (p->minimum, "-G_MAXFLOAT"),
                                    value_for_print (p->maximum, "G_MAXFLOAT"),
                                    value_for_print (p->default_value, "0.0"),
                                    flags->str);
@@ -1933,7 +1937,7 @@ make_property (Property *p)
                                    p->name,
                                    value_for_print (p->nick, "NULL"),
                                    value_for_print (p->blurb, "NULL"),
-                                   value_for_print (p->minimum, "G_MINDOUBLE"),
+                                   value_for_print (p->minimum, "-G_MAXDOUBLE"),
                                    value_for_print (p->maximum, "G_MAXDOUBLE"),
                                    value_for_print (p->default_value, "0.0"),
                                    flags->str);
@@ -2162,7 +2166,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 +2200,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 +2234,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 +2254,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 +2312,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 +2332,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");
 }
@@ -3390,6 +3414,7 @@ print_ccode_block(CCode *cc)
                out_addline_infile(fp, cc->line_no);
                break;
        default:
+       case CT_CCODE:
        case C_CCODE:
                fp = out;
                out_printf(fp, "\n");
@@ -3859,9 +3884,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 "
@@ -3924,12 +3949,13 @@ print_all_top(void)
 {
        GList *li;
 
-       /* print the AT_CCODE blocks */
+       /* print the AT_CCODE and CT_CCODE blocks */
        for(li = nodes; li != NULL; li = li->next) {
                Node *node = li->data;
                if(node->type == CCODE_NODE) {
                        CCode *cc = (CCode *)node;
-                       if(cc->cctype == AT_CCODE)
+                       if (cc->cctype == AT_CCODE ||
+                           cc->cctype == CT_CCODE)
                                print_ccode_block((CCode *)node);
                }
        }
@@ -4256,7 +4282,8 @@ 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");
+                                         "name separator\n\n");
+       fprintf(stderr, "End world hunger, donate to the World Food Programme, http://www.wfp.org\n");
 }
 
 static void
@@ -4516,7 +4543,7 @@ int
 main(int argc, char *argv[])
 {
        parse_options(argc, argv);
-       
+
        if(use_m4) {
                yyin = popen(m4_commandline, "r");
                if(!yyin) {