X-Git-Url: http://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/daead564b9592e78d418deb56a211cd5ea399f76..64034bc2613afefb289d1450411e69a0de4bce4e:/src/main.c diff --git a/src/main.c b/src/main.c index 54293fc..0ed34ee 100644 --- a/src/main.c +++ b/src/main.c @@ -257,6 +257,8 @@ print_method(FILE *fp, char *typeprefix, char *nameprefix, out_printf(fp,"%s",arg->name); } + if(m->vararg) + out_printf(fp,", ..."); } else { out_printf(fp,"void"); } @@ -347,7 +349,7 @@ make_inits(Class *cl) (Type *)new_type(0,g_strdup("void")), NULL,NULL,g_strdup("class_init"), make_init_args(cl,g_strdup("c"),TRUE), - NULL, NULL,0,0); + NULL, NULL,0,0,FALSE); cl->nodes = g_list_prepend(cl->nodes,node); } if(!got_init) { @@ -355,7 +357,7 @@ make_inits(Class *cl) (Type *)new_type(0,g_strdup("void")), NULL,NULL,g_strdup("init"), make_init_args(cl,g_strdup("o"),FALSE), - NULL, NULL,0,0); + NULL, NULL,0,0,FALSE); cl->nodes = g_list_prepend(cl->nodes,node); } } @@ -1105,6 +1107,30 @@ check_public_new(Class *c) } } +static void +check_vararg(Class *c) +{ + GList *l; + for(l=c->nodes;l;l=g_list_next(l)) { + Node *n = l->data; + if(n->type == METHOD_NODE) { + Method *m = (Method *)n; + if(!m->vararg) + continue; + if(m->scope == OVERRIDE_METHOD || + m->scope == SIGNAL_LAST_METHOD || + m->scope == SIGNAL_FIRST_METHOD || + m->scope == VIRTUAL_METHOD) { + print_error(FALSE, + "signals, overrides and virtuals, " + "can't have variable argument " + "lists", + m->line_no); + } + } + } +} + static int count_signals(Class *c) { @@ -1384,6 +1410,7 @@ main(int argc, char *argv[]) check_duplicate_symbols((Class *)class); check_duplicate_signals_args((Class *)class); check_public_new((Class *)class); + check_vararg((Class *)class); exit_on_error = TRUE; if(got_error)