+static void
+check_duplicate_override(Class *c, Method *method)
+{
+ GList *l;
+ for(l = c->nodes; l != NULL; l = g_list_next(l)) {
+ Node *n = l->data;
+ Method *m = (Method *)n;
+ char *s;
+ if(n->type != METHOD_NODE ||
+ m->method != OVERRIDE_METHOD)
+ continue;
+
+ if(method == m ||
+ method->line_no > m->line_no ||
+ strcmp(m->id, method->id) != 0 ||
+ strcmp(m->otype, method->otype) != 0)
+ continue;
+ s = g_strdup_printf("override '%s(%s)' redefined, "
+ "first defined on line %d",
+ m->id, m->otype, method->line_no);
+ print_error(FALSE, s, m->line_no);
+ g_free(s);
+ }
+}
+
+void
+check_duplicate_overrides(Class *c)
+{
+ GList *l;
+ for(l = c->nodes; l != NULL; l = g_list_next(l)) {
+ Node *n = l->data;
+ Method *m = (Method *)n;
+ if(n->type != METHOD_NODE ||
+ m->method != OVERRIDE_METHOD)
+ continue;
+ check_duplicate_override(c, m);
+ }
+}
+