]> git.draconx.ca Git - gob-dx.git/blobdiff - src/main.c
Release 0.90.1
[gob-dx.git] / src / main.c
index 54293fca1ee59b654fe545eb8ac4a8757f6f0659..0ed34ee56c2827e0ab8d3b9321a1fe0edf842ce0 100644 (file)
@@ -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)