]> git.draconx.ca Git - gob-dx.git/blobdiff - src/main.c
Release 0.93.2
[gob-dx.git] / src / main.c
index a84d0db2e52f7f565f2f2ce14669c4bd7ffcc933..ab2dd21224e330d7067c6e03b52a1cfc6b7e064c 100644 (file)
@@ -28,7 +28,7 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 
-#include "tree.h"
+#include "treefuncs.h"
 #include "parse.h"
 #include "out.h"
 #include "util.h"
@@ -498,7 +498,7 @@ make_inits(Class *cl)
                                  (Type *)new_type(0, g_strdup("void"),NULL),
                                  NULL, NULL, NULL, g_strdup("class_init"),
                                  make_func_arg(cl->otype, TRUE, g_strdup("c")),
-                                 NULL, NULL, 0, 0, FALSE);
+                                 NULL, NULL, NULL, 0, 0, FALSE);
                cl->nodes = g_list_prepend(cl->nodes,node);
        }
        if(!got_init) {
@@ -506,7 +506,7 @@ make_inits(Class *cl)
                                  (Type *)new_type(0, g_strdup("void"),NULL),
                                  NULL, NULL, NULL, g_strdup("init"),
                                  make_func_arg(cl->otype, FALSE, g_strdup("o")),
-                                 NULL, NULL, 0, 0, FALSE);
+                                 NULL, NULL, NULL, 0, 0, FALSE);
                cl->nodes = g_list_prepend(cl->nodes,node);
        }
 }
@@ -539,7 +539,7 @@ make_finalize(Class *cl)
                                  g_strdup("Gtk:Object"),
                                  NULL, NULL, g_strdup("finalize"),
                                  make_func_arg("Gtk:Object",FALSE,g_strdup("o")),
-                                 NULL,
+                                 NULL, NULL,
                                  g_strdup("PARENT_HANDLER (o);\n"),
                                  0,0,FALSE);
                cl->nodes = g_list_append(cl->nodes,node);
@@ -1465,9 +1465,16 @@ put_method(Method *m)
                        put_signal_args(m);
                        out_printf(out,");\n}\n");
                } else {
-                       out_printf(out,"\t");
-                       print_type(out,m->mtype,TRUE);
-                       out_printf(out,"return_val;\n");
+                       out_printf(out, "\t");
+                       print_type(out, m->mtype, TRUE);
+                       out_printf(out, "return_val = (");
+                       print_type(out, m->mtype, TRUE);
+                       if(m->defreturn)
+                               out_printf(out, ")(%s);\n", m->defreturn);
+                       else if(m->onerror)
+                               out_printf(out, ")(%s);\n", m->onerror);
+                       else
+                               out_printf(out, ")(0);\n");
                        print_preconditions(m);
                        out_printf(out,"\tgtk_signal_emit (GTK_OBJECT (%s),\n"
                                "\t\tobject_signals[%s_SIGNAL]",
@@ -1512,18 +1519,22 @@ put_method(Method *m)
                        out_printf(out,");\n}\n");
                } else {
                        GList *li;
-                       out_printf(out,"\t\treturn (*klass->%s)(%s",m->id,
+                       out_printf(out, "\t\treturn (*klass->%s)(%s",m->id,
                                   ((FuncArg *)m->args->data)->name);
                        for(li=m->args->next;li;li=g_list_next(li)) {
                                FuncArg *fa = li->data;
                                out_printf(out,",%s",fa->name);
                        }
-                       out_printf(out,");\n"
+                       out_printf(out, ");\n"
                                "\telse\n"
                                "\t\treturn (");
-                       print_type(out,m->mtype,TRUE);
-                       out_printf(out,")(%s);\n}\n",
-                               m->onerror?m->onerror:"0");
+                       print_type(out, m->mtype, TRUE);
+                       if(m->defreturn)
+                               out_printf(out, ")(%s);\n}\n", m->defreturn);
+                       else if(m->onerror)
+                               out_printf(out, ")(%s);\n}\n", m->onerror);
+                       else
+                               out_printf(out, ")(0);\n}\n");
                }
 
                if(!m->cbuf)