Revert "[GIRPARSER] - tidy up of var args."
[gnome.gobject-introspection] / girepository / girparser.c
index c45ac78..17b5f6e 100644 (file)
@@ -3254,7 +3254,7 @@ post_filter_varargs_functions (GList *list, GList ** varargs_callbacks_out)
        
                  GList *callback = node_find_in_list(
                                        varargs_callbacks, 
-                                       ((GIrNode *)callback->data)->name));
+                                       ((GIrNode *)callback->data)->name);
                  if (callback)
                     {
                       list = g_list_delete_link (list, link);
@@ -3264,6 +3264,46 @@ post_filter_varargs_functions (GList *list, GList ** varargs_callbacks_out)
                }
            }
        }
+
+       if (node->type == G_IR_NODE_FIELD)
+          {
+           /*
+               this is a field, if the member is a blacklisted callback, 
+               then we need to flag it as to be generated as a void*
+            */
+           GIrNodeField *fnode = (GIrNodeField *)node;
+           GIrNodeType * tnode;
+           GList *match;
+
+           if (!fnode->type)
+              continue;
+           
+           tnode = (GIrNodeType *)fnode->type;
+            /* field is not an interface. */
+           if (!tnode->is_interface)
+             continue;
+             
+           match = node_find_in_list(
+                       varargs_callbacks, tnode->interface);
+
+            if (!match)
+             continue;
+
+           /*
+               we now have a field which is pointing to an blacklisted callback.
+              so need modify the type so it points to void* and
+               is not read/or writable.
+            */
+           fnode->readable = FALSE;
+           fnode->writable = FALSE;
+           
+           tnode->tag          = GI_TYPE_TAG_VOID;
+           tnode->is_interface = FALSE;
+           tnode->is_pointer   = TRUE;
+           tnode->is_basic     = TRUE;
+         }
+
+        
     }
 
   *varargs_callbacks_out = varargs_callbacks;