out_printf(fp,"%s",arg->name);
}
+ if(m->vararg)
+ out_printf(fp,", ...");
} else {
out_printf(fp,"void");
}
(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) {
(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);
}
}
}
}
+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)
{
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)