gobject-introspection r722 - in trunk: . girepository



Author: tko
Date: Wed Oct 15 22:28:53 2008
New Revision: 722
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=722&view=rev

Log:
2008-10-15  Tommi Komulainen  <tommi komulainen iki fi>

	Bug 556434 â unhandled interface/object/... member types

	* girepository/girnode.c (g_ir_node_check_unhandled_members,
	g_ir_node_build_typelib): Check all
	interface/object/boxed/struct/union members are processed and
	abort if they are not. (Mostly callbacks in structs, but also
	fields in interfaces.)

Modified:
   trunk/ChangeLog
   trunk/girepository/girnode.c

Modified: trunk/girepository/girnode.c
==============================================================================
--- trunk/girepository/girnode.c	(original)
+++ trunk/girepository/girnode.c	Wed Oct 15 22:28:53 2008
@@ -1197,6 +1197,33 @@
     }
 }
 
+static void
+g_ir_node_check_unhandled_members (GList         **members,
+				   GIrNodeTypeId   container_type)
+{
+  if (*members)
+    {
+      GList *l;
+
+      for (l = *members; l; l = l->next)
+	{
+	  GIrNode *member = (GIrNode *)l->data;
+
+	  g_printerr ("Unhandled '%s' member '%s' type '%s'\n",
+		      g_ir_node_type_to_string (container_type),
+		      member->name,
+		      g_ir_node_type_to_string (member->type));
+	}
+
+      g_list_free (*members);
+      *members = NULL;
+
+      /* Commented out for now to not break the build.
+      g_error ("Unhandled members. Aborting.");
+      */
+    }
+}
+
 void
 g_ir_node_build_typelib (GIrNode    *node,
 			 GIrModule  *module,
@@ -1665,7 +1692,9 @@
 				 module, modules, strings,
 				 types, data, offset, offset2);
 
-	g_list_free (members);
+	g_ir_node_check_unhandled_members (&members, node->type);
+
+	g_assert (members == NULL);
       }
       break;
 
@@ -1698,7 +1727,9 @@
 				 module, modules, strings,
 				 types, data, offset, offset2);
 
-	g_list_free (members);
+	g_ir_node_check_unhandled_members (&members, node->type);
+
+	g_assert (members == NULL);
       }
       break;
 
@@ -1755,7 +1786,9 @@
 				 module, modules, strings,
 				 types, data, offset, offset2);
 
-	g_list_free (members);
+	g_ir_node_check_unhandled_members (&members, node->type);
+
+	g_assert (members == NULL);
 
 	if (union_->discriminator_type)
 	  {
@@ -1878,7 +1911,9 @@
 				 module, modules, strings,
 				 types, data, offset, offset2);
 
-	g_list_free (members);
+	g_ir_node_check_unhandled_members (&members, node->type);
+
+	g_assert (members == NULL);
       }
       break;
 
@@ -1936,7 +1971,9 @@
 				 module, modules, strings,
 				 types, data, offset, offset2);
 
-	g_list_free (members);
+	g_ir_node_check_unhandled_members (&members, node->type);
+
+	g_assert (members == NULL);
       }
       break;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]