/* GOB C Preprocessor
* Copyright (C) 1999-2000 the Free Software Foundation.
* Copyright (C) 2000 Eazel, Inc.
- * Copyright (C) 2001 George Lebl
+ * Copyright (C) 2001-2004 George Lebl
*
* Author: George Lebl
*
continue;
for (l = m->gtktypes; l != NULL; l = l->next) {
+ if (strcmp (l->data, "BOXED") == 0) {
+ error_printf (GOB_ERROR, m->line_no,
+ "BOXED not allowed as "
+ "a signal argument, use "
+ "POINTER, or BOXED_*");
+ continue;
+ } else if (strcmp (l->data, "FLAGS") == 0) {
+ error_printf (GOB_ERROR, m->line_no,
+ "FLAGS not allowed as "
+ "a signal argument, use "
+ "UINT");
+ continue;
+ }
if (get_cast (l->data, FALSE))
continue;
error_printf (GOB_ERROR, m->line_no,
}
}
+void
+check_func_attrs(Class *c)
+{
+ GList *li;
+ for (li = c->nodes; li != NULL; li = li->next) {
+ Node *n = li->data;
+ if (n->type == METHOD_NODE) {
+ Method *m = (Method *)n;
+ if ((m->method == INIT_METHOD ||
+ m->method == CLASS_INIT_METHOD)
+ && (m->funcattrs != NULL && strlen(m->funcattrs) != 0)) {
+ /* This is actually dead code at the moment, since the parser
+ doesn't accept attributes to the init or class_init
+ syntactic forms anyway. But it could easily be made to do
+ so, and also for virtual override and signal methods, and
+ then we could give kinder error messages here. */
+ error_print (GOB_ERROR, m->line_no,
+ "function attributes (G_GNUC_PRINTF, etc.) aren't "
+ "supported for the init or class_init methods");
+ }
+ }
+ }
+}
+
+void
+check_for_class_destructors (Class *c)
+{
+ GList *li;
+ for (li = c->nodes; li != NULL; li = li->next) {
+ Node *n = li->data;
+ if (n->type == VARIABLE_NODE) {
+ Variable *v = (Variable *)n;
+ if (v->destructor != NULL &&
+ v->scope == CLASS_SCOPE) {
+ error_print (GOB_WARN, v->line_no,
+ "classwide members cannot have "
+ "destructors since the classes "
+ "are static and never get "
+ "destroyed anyway");
+ }
+ }
+ }
+}
+
int
count_signals(Class *c)
{
if (n->type == VARIABLE_NODE) {
Variable *v = (Variable *)n;
if (v->destructor != NULL &&
- v->destructor_unref)
+ v->destructor_unref &&
+ v->scope != CLASS_SCOPE)
num++;
}
}
if (n->type == VARIABLE_NODE) {
Variable *v = (Variable *)n;
if (v->destructor != NULL &&
- ! v->destructor_unref)
+ ! v->destructor_unref &&
+ v->scope != CLASS_SCOPE)
num++;
}
}
return num;
}
+int
+count_glade_widgets (Class *c)
+{
+ int num = 0;
+ GList *li;
+ for (li = c->nodes; li != NULL; li = li->next) {
+ Node *n = li->data;
+ if (n->type == VARIABLE_NODE) {
+ Variable *v = (Variable *)n;
+ if (v->glade_widget)
+ num++;
+ }
+ }
+ return num;
+}
+
gboolean
find_get_type (Class *c)
{