mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	Bug 557383 - Virtual method support
Broadly speaking, this change adds the concept of <vfunc> to the .gir. The typelib already had most of the infrastructure for virtual functions, though there is one API addition. The scanner assumes that any class callback slot that doesn't match a signal name is a virtual. In the .gir, we write out *both* the <method> wrapper and a <vfunc>. If we can determine an association between them (based on the names matching, or a new Virtual: annotation), then we notate that in the .gir. The typelib gains an association from the vfunc to the function, if it exists. This will be useful for bindings since they already know how to consume FunctionInfo.
This commit is contained in:
		
				
					committed by
					
						
						Philip Withnall
					
				
			
			
				
	
			
			
			
						parent
						
							43c682703c
						
					
				
				
					commit
					02bb4f8d6a
				
			@@ -869,6 +869,7 @@ write_vfunc_info (const gchar *namespace,
 | 
			
		||||
{
 | 
			
		||||
  GIVFuncInfoFlags flags;
 | 
			
		||||
  const gchar *name;
 | 
			
		||||
  GIFunctionInfo *invoker;
 | 
			
		||||
  gboolean deprecated;
 | 
			
		||||
  gint offset;
 | 
			
		||||
 | 
			
		||||
@@ -876,8 +877,9 @@ write_vfunc_info (const gchar *namespace,
 | 
			
		||||
  flags = g_vfunc_info_get_flags (info);
 | 
			
		||||
  deprecated = g_base_info_is_deprecated ((GIBaseInfo *)info);
 | 
			
		||||
  offset = g_vfunc_info_get_offset (info);
 | 
			
		||||
  invoker = g_vfunc_info_get_invoker (info);
 | 
			
		||||
 | 
			
		||||
  xml_start_element (file, "vfunc");
 | 
			
		||||
  xml_start_element (file, "virtual-method");
 | 
			
		||||
  xml_printf (file, " name=\"%s\"", name);
 | 
			
		||||
 | 
			
		||||
  if (deprecated)
 | 
			
		||||
@@ -893,9 +895,12 @@ write_vfunc_info (const gchar *namespace,
 | 
			
		||||
    
 | 
			
		||||
  xml_printf (file, " offset=\"%d\"", offset);
 | 
			
		||||
 | 
			
		||||
  if (invoker)
 | 
			
		||||
    xml_printf (file, " invoker=\"%s\"", g_base_info_get_name ((GIBaseInfo*)invoker));
 | 
			
		||||
 | 
			
		||||
  write_callable_info (namespace, (GICallableInfo*)info, file);
 | 
			
		||||
 | 
			
		||||
  xml_end_element (file, "vfunc");
 | 
			
		||||
  xml_end_element (file, "virtual-method");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user