X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/5b42e9400440d86723a27747b2191ab8cd59c2ee..3379dcdfd0872947d761053c61d773add94d38c2:/src/main.c diff --git a/src/main.c b/src/main.c index a84d0db..ab2dd21 100644 --- a/src/main.c +++ b/src/main.c @@ -28,7 +28,7 @@ #include #include -#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)