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

Bug#985538: unblock: vala/0.48.15-1



On 2021-03-21 18:05:25 +0100, Sebastian Ramacher wrote:
> Control: tags -1 moreinfo
> 
> Hi Rico
> 
> On 2021-03-19 16:43:09 +0100, Rico Tzschichholz wrote:
> > Package: release.debian.org
> > Severity: normal
> > User: release.debian.org@packages.debian.org
> > Usertags: unblock
> > X-Debbugs-Cc: ricotz@ubuntu.com
> > 
> > Please unblock package vala
> > 
> > [ Reason ]
> > Vala 0.48.x series is a Long-Term support version and receives important bug
> > fixes and binding fixes.
> > 
> > It is part of GNOME SDK and improves the stability of the vala compiler shipped
> > in Debian.
> > 
> > Upstream summary at
> > https://gitlab.gnome.org/GNOME/vala/-/commit/10166000cbf8963cfebae5e15fa0f13b15791308
> > 
> > [ Impact ]
> > Vala is a compiler and affects every reverse-dependency.
> > 
> > [ Tests ]
> > The vala 0.48.x series is constantly used by current package set of Debian
> > testing.
> > The upstream test suite is extended with every release.
> > http://ci.vala-project.org:8010/builders/vala-0.48/builds/39
> > 
> > [ Risks ]
> > Vala is a compiler and affects every reverse-dependency.
> > 
> > [ Other info ]
> > Upstream between 0.48.14 and 0.48.15
> > https://gitlab.gnome.org/GNOME/vala/-/compare/8b87a6dbc354d5ec4a04fe6f65238e884bbd7211...10166000cbf8963cfebae5e15fa0f13b15791308
> > 
> > unblock vala/0.48.15-1
> 
>  109 files changed, 13216 insertions(+), 11665 deletions(-)
> 
> That's quite a lot. Could you please prepare a filtered diff with the
> relevant changes? Especially  the changes to some of the *.c files look
> like they were generated from the corresponding vala sources.

Sorry, I missed the filtered diff. In any case, I rebuilt all the
reverse dependencies of vala to check for regressions. Unfortunately,
libisocodes is failing to build in unstable (see also
https://tests.reproducible-builds.org/debian/rbuild/unstable/amd64/libisocodes_1.2.3-1.rbuild.log.gz).
I haven't checked yet whether this failure is caused by vala or some
other change in unstable, but until somebody does, let's put this one on
hold.

Cheers


> 
> Cheers
> 
> 
> > diff --git a/NEWS b/NEWS
> > index 782900d78..e78d744d0 100644
> > --- a/NEWS
> > +++ b/NEWS
> > @@ -1,3 +1,48 @@
> > +Vala 0.48.15
> > +============
> > + * Various improvements and bug fixes:
> > +  - codegen:
> > +    + More use of get_ccode_type_name()
> > +    + "_first_array" parameter for params-array is variadic too
> > +    + Inherit GType from base struct of SimpleType structs
> > +    + Error for missing type-arguments of HashTable (de)serialization [#1147]
> > +    + Free intermediate temp-variables of postcondition expression [#80]
> > +    + Use the one available source_reference for internal error [#436]
> > +    + Fix access to captured generics in async method of interfaces [#537]
> > +    + Don't ever create null-aware free macro for GenericType
> > +    + Don't add generics arguments/parameters to async finish method
> > +    + Drop inner casts before converting between generics and integers
> > +    + Include "glib.h" for deprecated symbols (GOBJECT) [#1155]
> > +  - vala:
> > +    + Report warning if --target-glib=auto was not evaluated successfully
> > +    + Fix ownership inheritance of "unowned var" in foreach statement
> > +    + Add missing null-check in DataType.get_type_signature()
> > +    + Check array type of declarations for errornous type-arguments
> > +    + Check (optional) type-arguments of array creation expression
> > +    + Replace all type parameter occurances in parameters for signal delegate
> > +    + Improve error for incompatible expressions in conditional expression
> > +  - gdbus: Don't leak memory of deserialized arguments on error in wrapper method
> > +  - girparser:
> > +    + Reuse populated Node.gtype_struct_for instead of resolving again
> > +    + Evaluate "glib:type-struct" twice to pick up reparented structs
> > +    + Allow overriding of "Compact" attribute for classes
> > +    + Handle empty "<type/>" element and report an error
> > +    + Add support for NoWrapper metadata for methods
> > +  - testrunner: Include Gio-2.0/gio-2.0 for GIR tests too
> > +
> > + * Bindings:
> > +  - glib-2.0,gio-2.0: Add some missing type-arguments
> > +  - gio-2.0: Add some missing NoWrapper and CCode.has_typedef attributes
> > +  - gnutls: Fix some binding errors
> > +  - gsl: Fix some binding errors
> > +  - gtk4: Add Gtk.INVALID_LIST_POSITION [#1151]
> > +  - gtk4-unix-print: Switch to gir
> > +  - gtk4: Update to 4.1.2
> > +  - libwnck-3.0: Update to 3.36.0
> > +  - linux: Provide Input.Event.input_event_sec/input_event_usec fields [#1152]
> > +  - vapi: Fix a couple of attribute typos
> > +  - webkit2gtk-4.0: Update to 2.31.91
> > +
> >  Vala 0.48.14
> >  ============
> >   * Highlights:
> > diff --git a/build-aux/testrunner.sh b/build-aux/testrunner.sh
> > index dd97adb08..6c31fbe76 100755
> > --- a/build-aux/testrunner.sh
> > +++ b/build-aux/testrunner.sh
> > @@ -105,6 +105,7 @@ function sourceheader() {
> >  			xmlns:glib="http://www.gtk.org/introspection/glib/1.0";>
> >    <include name="GLib" version="2.0"/>
> >    <include name="GObject" version="2.0"/>
> > +  <include name="Gio" version="2.0"/>
> >    <c:include name="test.h"/>
> >    <namespace name="Test"
> >  			 version="1.2"
> > @@ -130,7 +131,8 @@ function sourceend() {
> >  			echo "  </namespace>" >> $SOURCEFILE
> >  			echo "</repository>" >> $SOURCEFILE
> >  		fi
> > -		echo "$VAPIGEN $VAPIGENFLAGS --library $ns $ns.gir && tail -n +5 $ns.vapi|sed '\$d'|diff -wu $ns.vapi.ref -" > check
> > +		PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg")
> > +		echo "$VAPIGEN $VAPIGENFLAGS $PACKAGEFLAGS --library $ns $ns.gir && tail -n +5 $ns.vapi|sed '\$d'|diff -wu $ns.vapi.ref -" > check
> >  	else
> >  		PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg")
> >  		echo "$VALAC $VALAFLAGS $PACKAGEFLAGS -o $ns$EXEEXT $SOURCEFILE" >> prepare
> > diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
> > index b2b2e7e1e..851778171 100644
> > --- a/codegen/valaccodearraymodule.vala
> > +++ b/codegen/valaccodearraymodule.vala
> > @@ -148,7 +148,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
> >  
> >  		List<CCodeExpression> size = ((GLibValue) value).array_length_cvalues;
> >  		if (size == null || size.size < dim) {
> > -			Report.error (null, "internal error: invalid array_length for given dimension");
> > +			Report.error (array_type.source_reference, "internal: invalid array_length for given dimension");
> >  			return new CCodeInvalidExpression ();
> >  		}
> >  		return size[dim - 1];
> > diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala
> > index dd5cb8a52..e647b4152 100644
> > --- a/codegen/valaccodeattribute.vala
> > +++ b/codegen/valaccodeattribute.vala
> > @@ -842,7 +842,7 @@ public class Vala.CCodeAttribute : AttributeCache {
> >  			return "void";
> >  		} else if (node is ClassType) {
> >  			var type = (ClassType) node;
> > -			return "%sClass*".printf (get_ccode_name (type.class_symbol));
> > +			return "%s*".printf (get_ccode_type_name (type.class_symbol));
> >  		} else if (node is InterfaceType) {
> >  			var type = (InterfaceType) node;
> >  			return "%s*".printf (get_ccode_type_name (type.interface_symbol));
> > @@ -1014,8 +1014,8 @@ public class Vala.CCodeAttribute : AttributeCache {
> >  				return get_ccode_upper_case_name (sym, "TYPE_");
> >  			} else if (sym is Struct) {
> >  				unowned Struct st = (Struct) sym;
> > -				if (!get_ccode_has_type_id (st)) {
> > -					unowned Struct? base_struct = st.base_struct;
> > +				unowned Struct? base_struct = st.base_struct;
> > +				if (!get_ccode_has_type_id (st) || (base_struct != null && base_struct.is_simple_type ())) {
> >  					if (base_struct != null) {
> >  						return get_ccode_type_id (base_struct);
> >  					}
> > diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
> > index 60c4d34cd..412ec82d4 100644
> > --- a/codegen/valaccodebasemodule.vala
> > +++ b/codegen/valaccodebasemodule.vala
> > @@ -828,7 +828,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  
> >  		var cenum = new CCodeEnum (get_ccode_name (en));
> >  
> > -		cenum.modifiers |= (en.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
> > +		if (en.version.deprecated) {
> > +			if (context.profile == Profile.GOBJECT) {
> > +				decl_space.add_include ("glib.h");
> > +			}
> > +			cenum.modifiers |= CCodeModifiers.DEPRECATED;
> > +		}
> >  
> >  		var current_cfile = cfile;
> >  		cfile = decl_space;
> > @@ -1649,6 +1654,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  		}
> >  
> >  		if (prop.version.deprecated) {
> > +			if (context.profile == Profile.GOBJECT) {
> > +				decl_space.add_include ("glib.h");
> > +			}
> >  			function.modifiers |= CCodeModifiers.DEPRECATED;
> >  		}
> >  
> > @@ -2834,9 +2842,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  
> >  				string method_name = "get_%s_type".printf (type_parameter.name.ascii_down ());
> >  				var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface)));
> > -				cast_self.add_argument (new CCodeIdentifier ("self"));
> > +				cast_self.add_argument (get_this_cexpression ());
> >  				var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name));
> > -				function_call.add_argument (new CCodeIdentifier ("self"));
> > +				function_call.add_argument (get_this_cexpression ());
> >  				return function_call;
> >  			}
> >  
> > @@ -3461,9 +3469,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  
> >  				string method_name = "get_%s_destroy_func".printf (type_parameter.name.ascii_down ());
> >  				var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface)));
> > -				cast_self.add_argument (new CCodeIdentifier ("self"));
> > +				cast_self.add_argument (get_this_cexpression ());
> >  				var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name));
> > -				function_call.add_argument (new CCodeIdentifier ("self"));
> > +				function_call.add_argument (get_this_cexpression ());
> >  				return function_call;
> >  			}
> >  
> > @@ -3695,7 +3703,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  			}
> >  		}
> >  
> > -		if (!is_gcollection && ccall.call is CCodeIdentifier && !(type is ArrayType) && !is_macro_definition) {
> > +		if (!is_gcollection && ccall.call is CCodeIdentifier && !(type is ArrayType) && !(type is GenericType) && !is_macro_definition) {
> >  			// generate and use NULL-aware free macro to simplify code
> >  
> >  			var freeid = (CCodeIdentifier) ccall.call;
> > @@ -5926,8 +5934,16 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  			generate_type_declaration (actual_type, cfile);
> >  			result = new CCodeCastExpression (cexpr, get_ccode_name (actual_type));
> >  		} else if (analyzer.is_signed_integer_type_argument (actual_type)) {
> > +			// FIXME this should not happen
> > +			while (cexpr is CCodeCastExpression) {
> > +				cexpr = ((CCodeCastExpression) cexpr).inner;
> > +			}
> >  			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "gintptr"), get_ccode_name (actual_type));
> >  		} else if (analyzer.is_unsigned_integer_type_argument (actual_type)) {
> > +			// FIXME this should not happen
> > +			while (cexpr is CCodeCastExpression) {
> > +				cexpr = ((CCodeCastExpression) cexpr).inner;
> > +			}
> >  			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "guintptr"), get_ccode_name (actual_type));
> >  		}
> >  		return result;
> > @@ -5937,8 +5953,16 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  		unowned SemanticAnalyzer analyzer = context.analyzer;
> >  		var result = cexpr;
> >  		if (analyzer.is_signed_integer_type_argument (actual_type)) {
> > +			// FIXME this should not happen
> > +			while (cexpr is CCodeCastExpression) {
> > +				cexpr = ((CCodeCastExpression) cexpr).inner;
> > +			}
> >  			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "gintptr"), get_ccode_name (pointer_type));
> >  		} else if (analyzer.is_unsigned_integer_type_argument (actual_type)) {
> > +			// FIXME this should not happen
> > +			while (cexpr is CCodeCastExpression) {
> > +				cexpr = ((CCodeCastExpression) cexpr).inner;
> > +			}
> >  			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "guintptr"), get_ccode_name (pointer_type));
> >  		}
> >  		return result;
> > @@ -6461,6 +6485,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
> >  		requires_assert = true;
> >  
> >  		ccode.add_expression (cassert);
> > +
> > +		foreach (var value in temp_ref_values) {
> > +			ccode.add_expression (destroy_value (value));
> > +		}
> > +
> > +		temp_ref_values.clear ();
> >  	}
> >  
> >  	public unowned DataType? get_this_type () {
> > diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
> > index dd3e0fcf6..b0770a5a0 100644
> > --- a/codegen/valaccodedelegatemodule.vala
> > +++ b/codegen/valaccodedelegatemodule.vala
> > @@ -111,7 +111,13 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
> >  		}
> >  
> >  		var ctypedef = new CCodeTypeDefinition (get_ccode_name (creturn_type), cfundecl);
> > -		ctypedef.modifiers |= (d.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
> > +
> > +		if (d.version.deprecated) {
> > +			if (context.profile == Profile.GOBJECT) {
> > +				decl_space.add_include ("glib.h");
> > +			}
> > +			ctypedef.modifiers |= CCodeModifiers.DEPRECATED;
> > +		}
> >  
> >  		decl_space.add_type_declaration (ctypedef);
> >  	}
> > diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
> > index def8ae955..f15c660ee 100644
> > --- a/codegen/valaccodemethodmodule.vala
> > +++ b/codegen/valaccodemethodmodule.vala
> > @@ -178,6 +178,9 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
> >  		}
> >  
> >  		if (m.version.deprecated) {
> > +			if (context.profile == Profile.GOBJECT) {
> > +				decl_space.add_include ("glib.h");
> > +			}
> >  			function.modifiers |= CCodeModifiers.DEPRECATED;
> >  		}
> >  
> > @@ -917,7 +920,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
> >  				}
> >  
> >  				cparam = new CCodeParameter ("_first_%s".printf (get_ccode_name (param)), ctypename);
> > -				cparam_map.set (get_param_pos (get_ccode_pos (param), false), cparam);
> > +				cparam_map.set (get_param_pos (get_ccode_pos (param) - 0.1, true), cparam);
> >  
> >  				va_list_name = "_va_list_%s".printf (get_ccode_name (param));
> >  			}
> > @@ -979,7 +982,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
> >  			cparam_map.set (get_param_pos (get_ccode_instance_pos (m)), class_param);
> >  		}
> >  
> > -		if (is_gtypeinstance_creation_method (m)) {
> > +		if (is_gtypeinstance_creation_method (m) && (direction & 1) == 1) {
> >  			// memory management for generic types
> >  			int type_param_index = 0;
> >  			var cl = (Class) m.parent_symbol;
> > diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
> > index 2eab9e0e1..edd392304 100644
> > --- a/codegen/valaccodestructmodule.vala
> > +++ b/codegen/valaccodestructmodule.vala
> > @@ -77,7 +77,13 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
> >  		}
> >  
> >  		var instance_struct = new CCodeStruct ("_%s".printf (get_ccode_name (st)));
> > -		instance_struct.modifiers |= (st.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
> > +
> > +		if (st.version.deprecated) {
> > +			if (context.profile == Profile.GOBJECT) {
> > +				decl_space.add_include ("glib.h");
> > +			}
> > +			instance_struct.modifiers |= CCodeModifiers.DEPRECATED;
> > +		}
> >  
> >  		foreach (Field f in st.get_fields ()) {
> >  			if (f.binding == MemberBinding.INSTANCE)  {
> > diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
> > index 6eca1d14a..f0afb3c6a 100644
> > --- a/codegen/valagdbusservermodule.vala
> > +++ b/codegen/valagdbusservermodule.vala
> > @@ -193,6 +193,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
> >  					}
> >  
> >  					ccode.close ();
> > +				} else if (!need_goto_label && m.tree_can_fail && requires_destroy (owned_type)) {
> > +					need_goto_label = true;
> >  				}
> >  			}
> >  		}
> > diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
> > index 7fea7c92e..5d3960ba7 100644
> > --- a/codegen/valagtypemodule.vala
> > +++ b/codegen/valagtypemodule.vala
> > @@ -75,7 +75,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  			macro = "(G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, %s))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
> >  			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(obj)".printf (get_ccode_type_cast_function (cl)), macro));
> >  
> > -			macro = "(G_TYPE_CHECK_CLASS_CAST ((klass), %s, %sClass))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
> > +			macro = "(G_TYPE_CHECK_CLASS_CAST ((klass), %s, %s))".printf (get_ccode_type_id (cl), get_ccode_type_name (cl));
> >  			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(klass)".printf (get_ccode_class_type_function (cl)), macro));
> >  
> >  			macro = "(G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))".printf (get_ccode_type_id (cl));
> > @@ -84,7 +84,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  			macro = "(G_TYPE_CHECK_CLASS_TYPE ((klass), %s))".printf (get_ccode_type_id (cl));
> >  			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(klass)".printf (get_ccode_class_type_check_function (cl)), macro));
> >  
> > -			macro = "(G_TYPE_INSTANCE_GET_CLASS ((obj), %s, %sClass))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
> > +			macro = "(G_TYPE_INSTANCE_GET_CLASS ((obj), %s, %s))".printf (get_ccode_type_id (cl), get_ccode_type_name (cl));
> >  			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(obj)".printf (get_ccode_type_get_function (cl)), macro));
> >  			decl_space.add_type_declaration (new CCodeNewline ());
> >  		}
> > @@ -473,7 +473,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  		bool has_class_locks = false;
> >  
> >  		var instance_priv_struct = new CCodeStruct ("_%sPrivate".printf (get_ccode_name (cl)));
> > -		var type_priv_struct = new CCodeStruct ("_%sClassPrivate".printf (get_ccode_name (cl)));
> > +		var type_priv_struct = new CCodeStruct ("_%sPrivate".printf (get_ccode_type_name (cl)));
> >  
> >  		if (is_gtypeinstance) {
> >  			/* create type, dup_func, and destroy_func fields for generic types */
> > @@ -527,7 +527,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  
> >  		if (is_gtypeinstance) {
> >  			if (cl.has_class_private_fields || has_class_locks) {
> > -				decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (type_priv_struct.name), new CCodeVariableDeclarator ("%sClassPrivate".printf (get_ccode_name (cl)))));
> > +				decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (type_priv_struct.name), new CCodeVariableDeclarator ("%sPrivate".printf (get_ccode_type_name (cl)))));
> >  			}
> >  
> >  			/* only add the *Private struct if it is not empty, i.e. we actually have private data */
> > @@ -559,7 +559,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  			if (cl.has_class_private_fields || has_class_locks) {
> >  				decl_space.add_type_definition (type_priv_struct);
> >  
> > -				string macro = "(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sClassPrivate))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
> > +				string macro = "(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sPrivate))".printf (get_ccode_type_id (cl), get_ccode_type_name (cl));
> >  				decl_space.add_type_member_declaration (new CCodeMacroReplacement ("%s(klass)".printf (get_ccode_class_get_private_function (cl)), macro));
> >  			}
> >  		}
> > @@ -1189,7 +1189,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  		push_context (base_init_context);
> >  
> >  		var base_init = new CCodeFunction ("%s_base_init".printf (get_ccode_lower_case_name (cl, null)), "void");
> > -		base_init.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
> > +		base_init.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
> >  		base_init.modifiers = CCodeModifiers.STATIC;
> >  
> >  		push_function (base_init);
> > @@ -1211,7 +1211,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  		push_context (class_init_context);
> >  
> >  		var func = new CCodeFunction ("%s_class_init".printf (get_ccode_lower_case_name (cl, null)));
> > -		func.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
> > +		func.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
> >  		func.add_parameter (new CCodeParameter ("klass_data", "gpointer"));
> >  		func.modifiers = CCodeModifiers.STATIC;
> >  
> > @@ -1240,7 +1240,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  				fundamental_class = fundamental_class.base_class;
> >  			}
> >  
> > -			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (fundamental_class)));
> > +			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%s *".printf (get_ccode_type_name (fundamental_class)));
> >  			var finalize_assignment = new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, "finalize"), new CCodeIdentifier ("%sfinalize".printf (get_ccode_lower_case_prefix (cl))));
> >  			ccode.add_expression (finalize_assignment);
> >  		}
> > @@ -1266,7 +1266,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  
> >  				CCodeExpression cfunc = new CCodeIdentifier (get_ccode_real_name (m));
> >  				cfunc = cast_method_pointer (m.base_method, cfunc, base_type, (m.coroutine ? 1 : 3));
> > -				var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (base_type)));
> > +				var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%s *".printf (get_ccode_type_name (base_type)));
> >  				ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (m.base_method)), cfunc);
> >  
> >  				if (m.coroutine) {
> > @@ -1283,7 +1283,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  				continue;
> >  			}
> >  
> > -			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (cl)));
> > +			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%s *".printf (get_ccode_type_name (cl)));
> >  			ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (sig.default_handler)), new CCodeIdentifier (get_ccode_real_name (sig.default_handler)));
> >  		}
> >  
> > @@ -1690,7 +1690,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  		var function = new CCodeFunction ("%s_class_finalize".printf (get_ccode_lower_case_name (cl, null)), "void");
> >  		function.modifiers = CCodeModifiers.STATIC;
> >  
> > -		function.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
> > +		function.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
> >  
> >  		push_function (function);
> >  
> > @@ -1712,7 +1712,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  		var function = new CCodeFunction ("%s_base_finalize".printf (get_ccode_lower_case_name (cl, null)), "void");
> >  		function.modifiers = CCodeModifiers.STATIC;
> >  
> > -		function.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
> > +		function.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
> >  		function.add_parameter (new CCodeParameter ("klass_data", "gpointer"));
> >  
> >  		push_function (function);
> > @@ -2187,7 +2187,7 @@ public class Vala.GTypeModule : GErrorModule {
> >  		push_context (new EmitContext (iface));
> >  
> >  		var default_init = new CCodeFunction ("%s_default_init".printf (get_ccode_lower_case_name (iface, null)), "void");
> > -		default_init.add_parameter (new CCodeParameter ("iface", "%sIface *".printf (get_ccode_name (iface))));
> > +		default_init.add_parameter (new CCodeParameter ("iface", "%s *".printf (get_ccode_type_name (iface))));
> >  		default_init.add_parameter (new CCodeParameter ("iface_data", "gpointer"));
> >  		default_init.modifiers = CCodeModifiers.STATIC;
> >  
> > diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
> > index bd45a7738..d4719b906 100644
> > --- a/codegen/valagvariantmodule.vala
> > +++ b/codegen/valagvariantmodule.vala
> > @@ -468,7 +468,10 @@ public class Vala.GVariantModule : GValueModule {
> >  		string value_name = "_tmp%d_".printf (next_temp_var_id++);
> >  
> >  		var type_args = type.get_type_arguments ();
> > -		assert (type_args.size == 2);
> > +		if (type_args.size != 2) {
> > +			Report.error (type.source_reference, "Missing type-arguments for GVariant deserialization of `%s'".printf (type.type_symbol.get_full_name ()));
> > +			return new CCodeInvalidExpression ();
> > +		}
> >  		var key_type = type_args.get (0);
> >  		var value_type = type_args.get (1);
> >  
> > @@ -785,7 +788,10 @@ public class Vala.GVariantModule : GValueModule {
> >  		string value_name = "_tmp%d_".printf (next_temp_var_id++);
> >  
> >  		var type_args = type.get_type_arguments ();
> > -		assert (type_args.size == 2);
> > +		if (type_args.size != 2) {
> > +			Report.error (type.source_reference, "Missing type-arguments for GVariant serialization of `%s'".printf (type.type_symbol.get_full_name ()));
> > +			return new CCodeInvalidExpression ();
> > +		}
> >  		var key_type = type_args.get (0);
> >  		var value_type = type_args.get (1);
> >  
> > diff --git a/codegen/valatyperegisterfunction.vala b/codegen/valatyperegisterfunction.vala
> > index eac326312..2150df0d7 100644
> > --- a/codegen/valatyperegisterfunction.vala
> > +++ b/codegen/valatyperegisterfunction.vala
> > @@ -223,7 +223,7 @@ public abstract class Vala.TypeRegisterFunction {
> >  
> >  			add_class_private_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_add_class_private"));
> >  			add_class_private_call.add_argument (new CCodeIdentifier (type_id_name));
> > -			add_class_private_call.add_argument (new CCodeIdentifier ("sizeof (%sClassPrivate)".printf (get_ccode_name (type_symbol))));
> > +			add_class_private_call.add_argument (new CCodeIdentifier ("sizeof (%sPrivate)".printf (get_ccode_type_name (cl))));
> >  			type_init.add_statement (new CCodeExpressionStatement (add_class_private_call));
> >  		}
> >  
> > diff --git a/doc/vala-gen-introspect.1 b/doc/vala-gen-introspect.1
> > index 250e2e6aa..48edff8a3 100644
> > --- a/doc/vala-gen-introspect.1
> > +++ b/doc/vala-gen-introspect.1
> > @@ -1,5 +1,5 @@
> >  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
> > -.TH VALA-GEN-INTROSPECT "1" "February 2021" "gen-introspect 0.48.14" "User Commands"
> > +.TH VALA-GEN-INTROSPECT "1" "March 2021" "gen-introspect 0.48.15" "User Commands"
> >  .SH NAME
> >  vala-gen-introspect \- generate a GI file for GObject and glib based packages
> >  .SH SYNOPSIS
> > diff --git a/doc/valac.1 b/doc/valac.1
> > index 8af927f0c..0a09d4469 100644
> > --- a/doc/valac.1
> > +++ b/doc/valac.1
> > @@ -1,5 +1,5 @@
> >  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
> > -.TH VALAC "1" "February 2021" "Vala 0.48.14" "User Commands"
> > +.TH VALAC "1" "March 2021" "Vala 0.48.15" "User Commands"
> >  .SH NAME
> >  valac \- compiler that translates Vala source code into C source and header files
> >  .SH SYNOPSIS
> > diff --git a/doc/valadoc.1 b/doc/valadoc.1
> > index fd7a785a0..fe893c3ea 100644
> > --- a/doc/valadoc.1
> > +++ b/doc/valadoc.1
> > @@ -1,5 +1,5 @@
> >  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
> > -.TH VALADOC "1" "February 2021" "Valadoc 0.48.14" "User Commands"
> > +.TH VALADOC "1" "March 2021" "Valadoc 0.48.15" "User Commands"
> >  .SH NAME
> >  valadoc \- Vala Documentation Tool
> >  .SH SYNOPSIS
> > diff --git a/doc/vapigen.1 b/doc/vapigen.1
> > index ca2e1cd00..54daa1bf4 100644
> > --- a/doc/vapigen.1
> > +++ b/doc/vapigen.1
> > @@ -1,5 +1,5 @@
> >  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
> > -.TH VAPIGEN "1" "February 2021" "Vala API Generator 0.48.14" "User Commands"
> > +.TH VAPIGEN "1" "March 2021" "Vala API Generator 0.48.15" "User Commands"
> >  .SH NAME
> >  vapigen \- generate a Vala API
> >  .SH SYNOPSIS
> > diff --git a/tests/annotations/deprecated-delegate-minimal.vala b/tests/annotations/deprecated-delegate-minimal.vala
> > new file mode 100644
> > index 000000000..3e34e8657
> > diff --git a/tests/annotations/deprecated-enum-minimal.vala b/tests/annotations/deprecated-enum-minimal.vala
> > new file mode 100644
> > index 000000000..91f0be73e
> > diff --git a/tests/annotations/deprecated-method-minimal.vala b/tests/annotations/deprecated-method-minimal.vala
> > new file mode 100644
> > index 000000000..99aba27e8
> > diff --git a/tests/annotations/deprecated-property-minimal.vala b/tests/annotations/deprecated-property-minimal.vala
> > new file mode 100644
> > index 000000000..a52e7733f
> > diff --git a/tests/annotations/deprecated-struct-minimal.vala b/tests/annotations/deprecated-struct-minimal.vala
> > new file mode 100644
> > index 000000000..6b1c34493
> > diff --git a/tests/basic-types/gvariants-hashtable-missing-type-arguments.test b/tests/basic-types/gvariants-hashtable-missing-type-arguments.test
> > new file mode 100644
> > index 000000000..2ce71ded5
> > diff --git a/tests/generics/gvariant-serialization.test b/tests/generics/gvariant-serialization.test
> > new file mode 100644
> > index 000000000..e9f9ad593
> > diff --git a/tests/generics/integer-member-access.vala b/tests/generics/integer-member-access.vala
> > new file mode 100644
> > index 000000000..47dc31a13
> > diff --git a/tests/gir/async-creation-method.test b/tests/gir/async-creation-method.test
> > new file mode 100644
> > index 000000000..fccafb0b8
> > diff --git a/tests/gir/method-class.test b/tests/gir/method-class.test
> > new file mode 100644
> > index 000000000..adb7ec105
> > diff --git a/tests/gir/method-nowrapper.test b/tests/gir/method-nowrapper.test
> > new file mode 100644
> > index 000000000..ed2c1deca
> > diff --git a/tests/gir/signal-virtual.test b/tests/gir/signal-virtual.test
> > new file mode 100644
> > index 000000000..b0073eddd
> > diff --git a/tests/methods/params-array-with-throws.vala b/tests/methods/params-array-with-throws.vala
> > new file mode 100644
> > index 000000000..9bffd6680
> > diff --git a/tests/methods/postconditions-temp-variables.vala b/tests/methods/postconditions-temp-variables.vala
> > new file mode 100644
> > index 000000000..46414725d
> > diff --git a/tests/methods/preconditions-temp-variables.vala b/tests/methods/preconditions-temp-variables.vala
> > new file mode 100644
> > index 000000000..b116166bb
> > diff --git a/tests/objects/bug626038-2.vala b/tests/objects/bug626038-2.vala
> > new file mode 100644
> > index 000000000..2a2422846
> > diff --git a/tests/objects/interface-async-captured-generic.vala b/tests/objects/interface-async-captured-generic.vala
> > new file mode 100644
> > index 000000000..ae51d676a
> > diff --git a/tests/posix/string-concat.vala b/tests/posix/string-concat.vala
> > new file mode 100644
> > index 000000000..ead6abeed
> > diff --git a/tests/semantic/array-invalid-type-argument.test b/tests/semantic/array-invalid-type-argument.test
> > new file mode 100644
> > index 000000000..89e6d4039
> > diff --git a/tests/semantic/array-too-few-type-arguments.test b/tests/semantic/array-too-few-type-arguments.test
> > new file mode 100644
> > index 000000000..3161b5b3e
> > diff --git a/tests/semantic/array-too-many-type-arguments.test b/tests/semantic/array-too-many-type-arguments.test
> > new file mode 100644
> > index 000000000..84d64e83f
> > diff --git a/tests/semantic/assignment-fixed-array-length.test b/tests/semantic/assignment-fixed-array-length.test
> > new file mode 100644
> > index 000000000..5de56ba56
> > diff --git a/tests/semantic/conditional-expression-incompatible.test b/tests/semantic/conditional-expression-incompatible.test
> > new file mode 100644
> > index 000000000..1d8c108c3
> > diff --git a/tests/structs/gtype-base-struct.vala b/tests/structs/gtype-base-struct.vala
> > new file mode 100644
> > index 000000000..3a4c2b946
> > diff --git a/vala/valaarraycreationexpression.vala b/vala/valaarraycreationexpression.vala
> > index 534481562..5e0f46172 100644
> > --- a/vala/valaarraycreationexpression.vala
> > +++ b/vala/valaarraycreationexpression.vala
> > @@ -245,6 +245,12 @@ public class Vala.ArrayCreationExpression : Expression {
> >  
> >  		if (element_type != null) {
> >  			element_type.check (context);
> > +
> > +			// check whether there is the expected amount of type-arguments
> > +			if (!element_type.check_type_arguments (context, true)) {
> > +				error = true;
> > +				return false;
> > +			}
> >  		}
> >  
> >  		if (length_type == null) {
> > diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
> > index 588539c12..7fff66b04 100644
> > --- a/vala/valaarraytype.vala
> > +++ b/vala/valaarraytype.vala
> > @@ -324,7 +324,18 @@ public class Vala.ArrayType : ReferenceType {
> >  			}
> >  		}
> >  
> > -		return element_type.check (context);
> > +		if (!element_type.check (context)) {
> > +			error = true;
> > +			return false;
> > +		}
> > +
> > +		// check whether there is the expected amount of type-arguments
> > +		if (!element_type.check_type_arguments (context, true)) {
> > +			error = true;
> > +			return false;
> > +		}
> > +
> > +		return true;
> >  	}
> >  
> >  	public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
> > diff --git a/vala/valaclass.vala b/vala/valaclass.vala
> > index dcd3ecacc..3fffdb352 100644
> > --- a/vala/valaclass.vala
> > +++ b/vala/valaclass.vala
> > @@ -555,15 +555,9 @@ public class Vala.Class : ObjectTypeSymbol {
> >  				return false;
> >  			}
> >  
> > -			int n_type_args = base_type_reference.get_type_arguments ().size;
> > -			int n_type_params = ((ObjectTypeSymbol) base_type_reference.type_symbol).get_type_parameters ().size;
> > -			if (n_type_args < n_type_params) {
> > +			// check whether there is the expected amount of type-arguments
> > +			if (!base_type_reference.check_type_arguments (context)) {
> >  				error = true;
> > -				Report.error (base_type_reference.source_reference, "too few type arguments");
> > -				return false;
> > -			} else if (n_type_args > n_type_params) {
> > -				error = true;
> > -				Report.error (base_type_reference.source_reference, "too many type arguments");
> >  				return false;
> >  			}
> >  		}
> > diff --git a/vala/valacodecontext.vala b/vala/valacodecontext.vala
> > index af9afed33..051cc2c00 100644
> > --- a/vala/valacodecontext.vala
> > +++ b/vala/valacodecontext.vala
> > @@ -602,10 +602,13 @@ public class Vala.CodeContext {
> >  		if (target_glib == "auto") {
> >  			var available_glib = pkg_config_modversion ("glib-2.0");
> >  			if (available_glib != null && available_glib.scanf ("%d.%d", out glib_major, out glib_minor) >= 2) {
> > -				glib_minor -= ++glib_minor % 2;
> > +				glib_minor++;
> > +				glib_minor -= glib_minor % 2;
> >  				set_target_glib_version ("%d.%d".printf (glib_major, glib_minor));
> > -				return;
> > +			} else {
> > +				Report.warning (null, "Could not determine the version of `glib-2.0', target version of glib was not set");
> >  			}
> > +			return;
> >  		}
> >  
> >  		glib_major = target_glib_major;
> > diff --git a/vala/valaconditionalexpression.vala b/vala/valaconditionalexpression.vala
> > index 868b58108..01983ed25 100644
> > --- a/vala/valaconditionalexpression.vala
> > +++ b/vala/valaconditionalexpression.vala
> > @@ -194,7 +194,8 @@ public class Vala.ConditionalExpression : Expression {
> >  			value_type = false_expression.value_type.copy ();
> >  		} else {
> >  			error = true;
> > -			Report.error (condition.source_reference, "Incompatible expressions");
> > +			var source_reference = new SourceReference (true_expression.source_reference.file, true_expression.source_reference.begin, false_expression.source_reference.end);
> > +			Report.error (source_reference, "Cannot resolve target type from `%s' and `%s'".printf (true_expression.value_type.to_prototype_string (), false_expression.value_type.to_prototype_string ()));
> >  			return false;
> >  		}
> >  
> > diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala
> > index bb00ff8cf..209a40821 100644
> > --- a/vala/valadatatype.vala
> > +++ b/vala/valadatatype.vala
> > @@ -497,6 +497,38 @@ public abstract class Vala.DataType : CodeNode {
> >  		return result;
> >  	}
> >  
> > +	public bool is_generic () {
> > +		if (this is GenericType) {
> > +			return true;
> > +		}
> > +
> > +		if (!has_type_arguments ()) {
> > +			return false;
> > +		}
> > +		foreach (var type_arg in type_argument_list) {
> > +			if (type_arg.is_generic ()) {
> > +				return true;
> > +			}
> > +		}
> > +		return false;
> > +	}
> > +
> > +	public void replace_type_parameter (TypeParameter old_type_param, TypeParameter new_type_param) {
> > +		if (this is GenericType) {
> > +			unowned GenericType generic_type = (GenericType) this;
> > +			if (generic_type.type_parameter == old_type_param) {
> > +				generic_type.type_parameter = new_type_param;
> > +			}
> > +			return;
> > +		}
> > +		if (!has_type_arguments ()) {
> > +			return;
> > +		}
> > +		foreach (var type_arg in type_argument_list) {
> > +			type_arg.replace_type_parameter (old_type_param, new_type_param);
> > +		}
> > +	}
> > +
> >  	/**
> >  	 * Search for the type parameter in this formal type and match it in
> >  	 * value_type.
> > @@ -574,7 +606,12 @@ public abstract class Vala.DataType : CodeNode {
> >  				str.append_c ('(');
> >  				foreach (Field f in st.get_fields ()) {
> >  					if (f.binding == MemberBinding.INSTANCE) {
> > -						str.append (f.variable_type.get_type_signature (f));
> > +						var s = f.variable_type.get_type_signature (f);
> > +						if (s != null) {
> > +							str.append (s);
> > +						} else {
> > +							return null;
> > +						}
> >  					}
> >  				}
> >  				str.append_c (')');
> > @@ -612,4 +649,49 @@ public abstract class Vala.DataType : CodeNode {
> >  			return null;
> >  		}
> >  	}
> > +
> > +	/**
> > +	 * Returns whether the given amount of type-argument matches the symbol's count of type-parameters
> > +	 *
> > +	 * @param context a CodeContext
> > +	 * @param allow_none whether no type-argments are allowed
> > +	 * @return true if successful
> > +	 */
> > +	public bool check_type_arguments (CodeContext context, bool allow_none = false) {
> > +		int n_type_args = get_type_arguments ().size;
> > +		int expected_n_type_args = 0;
> > +
> > +		if (type_symbol is ObjectTypeSymbol) {
> > +			expected_n_type_args = ((ObjectTypeSymbol) type_symbol).get_type_parameters ().size;
> > +		} else if (type_symbol is Struct) {
> > +			expected_n_type_args = ((Struct) type_symbol).get_type_parameters ().size;
> > +		} else if (type_symbol is Delegate) {
> > +			expected_n_type_args = ((Delegate) type_symbol).get_type_parameters ().size;
> > +		} else if (n_type_args > 0) {
> > +			Report.error (source_reference, "`%s' does not support type arguments".printf (type_symbol.get_full_name ()));
> > +			error = true;
> > +			return false;
> > +		} else {
> > +			// nothing to do here
> > +			return true;
> > +		}
> > +
> > +		if ((!allow_none || n_type_args > 0) && n_type_args < expected_n_type_args) {
> > +			error = true;
> > +			Report.error (source_reference, "too few type arguments for `%s'".printf (type_symbol.get_full_name ()));
> > +			return false;
> > +		} else if ((!allow_none || n_type_args > 0) && n_type_args > expected_n_type_args) {
> > +			error = true;
> > +			Report.error (source_reference, "too many type arguments for `%s'".printf (type_symbol.get_full_name ()));
> > +			return false;
> > +		}
> > +
> > +		foreach (DataType type in get_type_arguments ()) {
> > +			if (!type.check (context)) {
> > +				return false;
> > +			}
> > +		}
> > +
> > +		return true;
> > +	}
> >  }
> > diff --git a/vala/valadelegatetype.vala b/vala/valadelegatetype.vala
> > index 4029f00af..9821a9e70 100644
> > --- a/vala/valadelegatetype.vala
> > +++ b/vala/valadelegatetype.vala
> > @@ -99,23 +99,9 @@ public class Vala.DelegateType : CallableType {
> >  			return false;
> >  		}
> >  
> > -		var n_type_params = delegate_symbol.get_type_parameters ().size;
> > -		var n_type_args = get_type_arguments ().size;
> > -		if (n_type_args > 0 && n_type_args < n_type_params) {
> > -			error = true;
> > -			Report.error (source_reference, "too few type arguments");
> > +		// check whether there is the expected amount of type-arguments
> > +		if (!check_type_arguments (context, true)) {
> >  			return false;
> > -		} else if (n_type_args > 0 && n_type_args > n_type_params) {
> > -			error = true;
> > -			Report.error (source_reference, "too many type arguments");
> > -			return false;
> > -		}
> > -
> > -		foreach (DataType type in get_type_arguments ()) {
> > -			if (!type.check (context)) {
> > -				error = true;
> > -				return false;
> > -			}
> >  		}
> >  
> >  		return true;
> > diff --git a/vala/valaforeachstatement.vala b/vala/valaforeachstatement.vala
> > index a04076b58..e225047bc 100644
> > --- a/vala/valaforeachstatement.vala
> > +++ b/vala/valaforeachstatement.vala
> > @@ -332,9 +332,10 @@ public class Vala.ForeachStatement : Block {
> >  		// analyze element type
> >  		if (type_reference is VarType) {
> >  			// var type
> > +			bool value_owned = type_reference.value_owned;
> >  			type_reference = element_type.copy ();
> >  			// FIXME Only follows "unowned var" otherwise inherit ownership of element-type
> > -			if (!type_reference.value_owned) {
> > +			if (!value_owned) {
> >  				type_reference.value_owned = false;
> >  			}
> >  		} else if (!element_type.compatible (type_reference)) {
> > @@ -354,9 +355,10 @@ public class Vala.ForeachStatement : Block {
> >  		// analyze element type
> >  		if (type_reference is VarType) {
> >  			// var type
> > +			bool value_owned = type_reference.value_owned;
> >  			type_reference = element_type.copy ();
> >  			// FIXME Only follows "unowned var" otherwise inherit ownership of element-type
> > -			if (!type_reference.value_owned) {
> > +			if (!value_owned) {
> >  				type_reference.value_owned = false;
> >  			}
> >  		} else if (!element_type.compatible (type_reference)) {
> > diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
> > index fe9ea451d..5496023c2 100644
> > --- a/vala/valagirparser.vala
> > +++ b/vala/valagirparser.vala
> > @@ -63,6 +63,7 @@ public class Vala.GirParser : CodeVisitor {
> >  		VFUNC_NAME,
> >  		VIRTUAL,
> >  		ABSTRACT,
> > +		COMPACT,
> >  		SEALED,
> >  		SCOPE,
> >  		STRUCT,
> > @@ -93,6 +94,7 @@ public class Vala.GirParser : CodeVisitor {
> >  		DESTROY_NOTIFY_CNAME,
> >  		FINISH_VFUNC_NAME,
> >  		NO_ACCESSOR_METHOD,
> > +		NO_WRAPPER,
> >  		CNAME,
> >  		DELEGATE_TARGET,
> >  		CTYPE;
> > @@ -537,6 +539,8 @@ public class Vala.GirParser : CodeVisitor {
> >  		public ArrayList<int> destroy_parameters;
> >  		// record-specific
> >  		public UnresolvedSymbol gtype_struct_for;
> > +		// class-specific
> > +		public UnresolvedSymbol type_struct;
> >  		// alias-specific
> >  		public DataType base_type;
> >  		// struct-specific
> > @@ -854,6 +858,25 @@ public class Vala.GirParser : CodeVisitor {
> >  			return res;
> >  		}
> >  
> > +		static void move_class_methods (Node target, Node? source) {
> > +			if (source == null) {
> > +				return;
> > +			}
> > +
> > +			var i = 0;
> > +			while (i < source.members.size) {
> > +				var node = source.members[i];
> > +				if (node.symbol is Method) {
> > +					source.remove_member (node);
> > +					target.add_member (node);
> > +
> > +					((Method) node.symbol).binding = MemberBinding.CLASS;
> > +				} else {
> > +					i++;
> > +				}
> > +			}
> > +		}
> > +
> >  		public void process (GirParser parser) {
> >  			if (processed) {
> >  				return;
> > @@ -881,24 +904,12 @@ public class Vala.GirParser : CodeVisitor {
> >  			}
> >  
> >  			if (symbol is Class && girdata != null) {
> > +				if (type_struct != null) {
> > +					move_class_methods (this, parser.resolve_node (parent, type_struct));
> > +				}
> >  				var class_struct = girdata["glib:type-struct"];
> >  				if (class_struct != null) {
> > -					var klass = parser.resolve_node (parent, parser.parse_symbol_from_string (class_struct, source_reference));
> > -					if (klass != null) {
> > -						var i = 0;
> > -						while ( i < klass.members.size ) {
> > -							var node = klass.members[i];
> > -							if (node.symbol is Method) {
> > -								klass.remove_member (node);
> > -								this.add_member (node);
> > -
> > -								Method m = (Method) node.symbol;
> > -								m.binding = MemberBinding.CLASS;
> > -							} else {
> > -								i++;
> > -							}
> > -						}
> > -					}
> > +					move_class_methods (this, parser.resolve_node (parent, parser.parse_symbol_from_string (class_struct, source_reference)));
> >  				}
> >  			}
> >  
> > @@ -1202,9 +1213,8 @@ public class Vala.GirParser : CodeVisitor {
> >  						merged = true;
> >  					} else {
> >  						// record for a gtype
> > -						var gtype_struct_for = girdata["glib:is-gtype-struct-for"];
> >  						if (gtype_struct_for != null) {
> > -							var obj = parser.resolve_node (parent, parser.parse_symbol_from_string (gtype_struct_for, source_reference));
> > +							var obj = parser.resolve_node (parent, gtype_struct_for);
> >  							if (obj != null && obj.symbol is Interface && "%sIface".printf (obj.get_cname ()) != get_cname ()) {
> >  								// set the interface struct name
> >  								obj.symbol.set_attribute_string ("CCode", "type_cname", get_cname ());
> > @@ -2713,7 +2723,16 @@ public class Vala.GirParser : CodeVisitor {
> >  			type_name = ctype;
> >  		}
> >  
> > -		DataType type = parse_type_from_gir_name (type_name, out no_array_length, out array_null_terminated, ctype);
> > +		DataType type;
> > +		if (type_name != null) {
> > +			type = parse_type_from_gir_name (type_name, out no_array_length, out array_null_terminated, ctype);
> > +		} else {
> > +			// empty <type/>
> > +			no_array_length = false;
> > +			array_null_terminated = false;
> > +			type = new InvalidType ();
> > +			Report.error (get_current_src (), "empty type element");
> > +		}
> >  
> >  		// type arguments / element types
> >  		while (current_token == MarkupTokenType.START_ELEMENT) {
> > @@ -2932,6 +2951,11 @@ public class Vala.GirParser : CodeVisitor {
> >  			if (parent != null) {
> >  				cl.add_base_type (parse_type_from_gir_name (parent));
> >  			}
> > +			var type_struct = reader.get_attribute ("glib:type-struct");
> > +			if (type_struct != null) {
> > +				current.type_struct = parse_symbol_from_string (type_struct, current.source_reference);
> > +				unresolved_gir_symbols.add (current.type_struct);
> > +			}
> >  			current.symbol = cl;
> >  		} else {
> >  			cl = (Class) current.symbol;
> > @@ -3270,9 +3294,12 @@ public class Vala.GirParser : CodeVisitor {
> >  				} else {
> >  					m.is_virtual = true;
> >  				}
> > -				if (invoker == null && !metadata.has_argument (ArgumentType.VFUNC_NAME)) {
> > +				if (metadata.has_argument (ArgumentType.NO_WRAPPER)) {
> > +					s.set_attribute ("NoWrapper", metadata.get_bool (ArgumentType.NO_WRAPPER), s.source_reference);
> > +				} else if (invoker == null && !metadata.has_argument (ArgumentType.VFUNC_NAME)) {
> >  					s.set_attribute ("NoWrapper", true, s.source_reference);
> > -				} if (current.girdata["name"] != name) {
> > +				}
> > +				if (current.girdata["name"] != name) {
> >  					m.set_attribute_string ("CCode", "vfunc_name", current.girdata["name"]);
> >  				}
> >  			} else if (symbol_type == "function") {
> > @@ -3482,7 +3509,11 @@ public class Vala.GirParser : CodeVisitor {
> >  		bool require_copy_free = false;
> >  		if (current.new_symbol) {
> >  			cl = new Class (current.name, current.source_reference);
> > -			cl.is_compact = true;
> > +			if (metadata.has_argument (ArgumentType.COMPACT)) {
> > +				cl.is_compact = metadata.get_bool (ArgumentType.COMPACT);
> > +			} else {
> > +				cl.is_compact = true;
> > +			}
> >  			current.symbol = cl;
> >  		} else {
> >  			cl = (Class) current.symbol;
> > diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala
> > index ea9565755..321058ae6 100644
> > --- a/vala/valaobjectcreationexpression.vala
> > +++ b/vala/valaobjectcreationexpression.vala
> > @@ -256,14 +256,9 @@ public class Vala.ObjectCreationExpression : Expression {
> >  		value_type = type_reference.copy ();
> >  		value_type.value_owned = true;
> >  
> > -		int given_num_type_args = type_reference.get_type_arguments ().size;
> > -		int expected_num_type_args = 0;
> > -
> >  		if (type is Class) {
> >  			var cl = (Class) type;
> >  
> > -			expected_num_type_args = cl.get_type_parameters ().size;
> > -
> >  			if (struct_creation) {
> >  				error = true;
> >  				Report.error (source_reference, "syntax error, use `new' to create new objects");
> > @@ -320,8 +315,6 @@ public class Vala.ObjectCreationExpression : Expression {
> >  		} else if (type is Struct) {
> >  			var st = (Struct) type;
> >  
> > -			expected_num_type_args = st.get_type_parameters ().size;
> > -
> >  			if (!struct_creation && !context.deprecated) {
> >  				Report.warning (source_reference, "deprecated syntax, don't use `new' to initialize structs");
> >  			}
> > @@ -337,13 +330,9 @@ public class Vala.ObjectCreationExpression : Expression {
> >  			}
> >  		}
> >  
> > -		if (expected_num_type_args > given_num_type_args) {
> > -			error = true;
> > -			Report.error (source_reference, "too few type arguments");
> > -			return false;
> > -		} else if (expected_num_type_args < given_num_type_args) {
> > +		// check whether there is the expected amount of type-arguments
> > +		if (!type_reference.check_type_arguments (context)) {
> >  			error = true;
> > -			Report.error (source_reference, "too many type arguments");
> >  			return false;
> >  		}
> >  
> > diff --git a/vala/valaobjecttype.vala b/vala/valaobjecttype.vala
> > index 53101926c..8e08ade76 100644
> > --- a/vala/valaobjecttype.vala
> > +++ b/vala/valaobjecttype.vala
> > @@ -103,21 +103,9 @@ public class Vala.ObjectType : ReferenceType {
> >  			return false;
> >  		}
> >  
> > -		int n_type_args = get_type_arguments ().size;
> > -		if (n_type_args > 0 && n_type_args < object_type_symbol.get_type_parameters ().size) {
> > -			error = true;
> > -			Report.error (source_reference, "too few type arguments");
> > +		// check whether there is the expected amount of type-arguments
> > +		if (!check_type_arguments (context, true)) {
> >  			return false;
> > -		} else if (n_type_args > 0 && n_type_args > object_type_symbol.get_type_parameters ().size) {
> > -			error = true;
> > -			Report.error (source_reference, "too many type arguments");
> > -			return false;
> > -		}
> > -
> > -		foreach (DataType type in get_type_arguments ()) {
> > -			if (!type.check (context)) {
> > -				return false;
> > -			}
> >  		}
> >  
> >  		return true;
> > diff --git a/vala/valasignal.vala b/vala/valasignal.vala
> > index 392b31489..c63542617 100644
> > --- a/vala/valasignal.vala
> > +++ b/vala/valasignal.vala
> > @@ -122,7 +122,7 @@ public class Vala.Signal : Symbol, Callable {
> >  			actual_param.variable_type = actual_param.variable_type.get_actual_type (sender_type, null, node_reference);
> >  			generated_delegate.add_parameter (actual_param);
> >  
> > -			if (actual_param.variable_type is GenericType) {
> > +			if (actual_param.variable_type.is_generic ()) {
> >  				is_generic = true;
> >  			}
> >  		}
> > @@ -136,9 +136,8 @@ public class Vala.Signal : Symbol, Callable {
> >  			// parameter types must refer to the delegate type parameters
> >  			// instead of to the class type parameters
> >  			foreach (var param in generated_delegate.get_parameters ()) {
> > -				unowned GenericType? generic_type = param.variable_type as GenericType;
> > -				if (generic_type != null) {
> > -					generic_type.type_parameter = generated_delegate.get_type_parameters ().get (generated_delegate.get_type_parameter_index (generic_type.type_parameter.name));
> > +				foreach (var type_param in generated_delegate.get_type_parameters ()) {
> > +					param.variable_type.replace_type_parameter (cl.get_type_parameters ().get (cl.get_type_parameter_index (type_param.name)), type_param);
> >  				}
> >  			}
> >  		}
> > diff --git a/vapi/Makefile.am b/vapi/Makefile.am
> > index 5136d5812..854ba8642 100644
> > --- a/vapi/Makefile.am
> > +++ b/vapi/Makefile.am
> > @@ -584,7 +584,7 @@ gtk+-3.0:
> >  	$(GENVAPI) --library $(srcdir)/gtk+-3.0 --pkg atk --pkg gdk-3.0 --pkg gdk-pixbuf-2.0 --pkg gio-2.0 --pkg pango --pkg cairo --metadatadir $(METADATADIR) $(METADATADIR)/Gtk-3.0-custom.vala $(GIRDIR)/Gtk-3.0.gir
> >  
> >  gtk4:
> > -	$(GENVAPI) --library $(srcdir)/gtk4 --pkg cairo --pkg gdk-pixbuf-2.0 --pkg gio-2.0 --pkg graphene-gobject-1.0 --pkg pango --pkg x11 \
> > +	$(GENVAPI) --library $(srcdir)/gtk4 --pkg cairo --pkg gdk-pixbuf-2.0 --pkg gio-2.0 --pkg graphene-gobject-1.0 --pkg pango --pkg pangocairo --pkg x11 \
> >  		--metadatadir $(METADATADIR) \
> >  		$(METADATADIR)/GdkWayland-4.0-custom.vala $(GIRDIR)/GdkWayland-4.0.gir \
> >  		$(METADATADIR)/GdkX11-4.0-custom.vala $(GIRDIR)/GdkX11-4.0.gir \
> > @@ -599,7 +599,9 @@ gtk+-unix-print-3.0:
> >  	$(GENVAPI) --library $(srcdir)/gtk+-unix-print-3.0 $(PACKAGESDIR)/gtk+-unix-print-3.0/gtk+-unix-print-3.0-custom.vala $(PACKAGESDIR)/gtk+-unix-print-3.0/gtk+-unix-print-3.0.gi
> >  
> >  gtk4-unix-print:
> > -	$(GENVAPI) --library $(srcdir)/gtk4-unix-print $(PACKAGESDIR)/gtk4-unix-print/gtk4-unix-print-custom.vala $(PACKAGESDIR)/gtk4-unix-print/gtk4-unix-print.gi
> > +	ln -s $(GIRDIR)/Gtk-4.0.gir GtkUnixPrint-4.0.gir; \
> > +	$(GENVAPI) --library $(srcdir)/gtk4-unix-print --pkg gtk4 --pkg pangocairo --metadatadir $(METADATADIR) $(METADATADIR)/GtkUnixPrint-4.0-custom.vala GtkUnixPrint-4.0.gir; \
> > +	rm -f GtkUnixPrint-4.0.gir
> >  
> >  gtksourceview-2.0:
> >  	$(GENVAPI) --library $(srcdir)/gtksourceview-2.0 $(PACKAGESDIR)/gtksourceview-2.0/gtksourceview-2.0.gi
> > diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi
> > index d9aeb4189..f9bdad9ca 100644
> > --- a/vapi/gio-2.0.vapi
> > +++ b/vapi/gio-2.0.vapi
> > @@ -1682,7 +1682,7 @@ namespace GLib {
> >  		[Version (since = "2.64")]
> >  		public bool find (GLib.Object item, out uint position);
> >  		[Version (since = "2.64")]
> > -		public bool find_with_equal_func (GLib.Object item, GLib.EqualFunc equal_func, out uint position);
> > +		public bool find_with_equal_func (GLib.Object item, GLib.EqualFunc<GLib.Object> equal_func, out uint position);
> >  		[Version (since = "2.44")]
> >  		public void insert (uint position, GLib.Object item);
> >  		[Version (since = "2.44")]
> > @@ -2284,10 +2284,10 @@ namespace GLib {
> >  		public void changed (string key, void* origin_tag);
> >  		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
> >  		[Version (since = "2.26")]
> > -		public void changed_tree (GLib.Tree tree, void* origin_tag);
> > +		public void changed_tree ([CCode (type = "GTree*")] GLib.Tree<string,GLib.Variant> tree, void* origin_tag);
> >  		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
> >  		[Version (since = "2.26")]
> > -		public static void flatten_tree (GLib.Tree tree, out string path, [CCode (array_length = false, array_null_terminated = true)] out (unowned string)[] keys, [CCode (array_length = false, array_null_terminated = true)] out (unowned GLib.Variant)[] values);
> > +		public static void flatten_tree ([CCode (type = "GTree*")] GLib.Tree<string,GLib.Variant> tree, out string path, [CCode (array_length = false, array_null_terminated = true)] out (unowned string)[] keys, [CCode (array_length = false, array_null_terminated = true)] out (unowned GLib.Variant)[] values);
> >  		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
> >  		[Version (since = "2.28")]
> >  		public static GLib.SettingsBackend get_default ();
> > @@ -2337,7 +2337,7 @@ namespace GLib {
> >  		public virtual bool write (string key, GLib.Variant value, void* origin_tag);
> >  		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
> >  		[NoWrapper]
> > -		public virtual bool write_tree (GLib.Tree tree, void* origin_tag);
> > +		public virtual bool write_tree ([CCode (type = "GTree*")] GLib.Tree<string,GLib.Variant> tree, void* origin_tag);
> >  	}
> >  	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_settings_schema_ref", type_id = "g_settings_schema_get_type ()", unref_function = "g_settings_schema_unref")]
> >  	[Compact]
> > @@ -3432,14 +3432,19 @@ namespace GLib {
> >  		public bool condition_wait (GLib.IOCondition condition, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		public GLib.Source create_source (GLib.IOCondition condition, GLib.Cancellable? cancellable = null);
> >  		[CCode (vfunc_name = "condition_check")]
> > +		[NoWrapper]
> >  		public virtual GLib.IOCondition datagram_condition_check (GLib.IOCondition condition);
> >  		[CCode (vfunc_name = "condition_wait")]
> > +		[NoWrapper]
> >  		public virtual bool datagram_condition_wait (GLib.IOCondition condition, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[CCode (vfunc_name = "create_source")]
> > +		[NoWrapper]
> >  		public virtual GLib.Source datagram_create_source (GLib.IOCondition condition, GLib.Cancellable? cancellable = null);
> >  		[CCode (vfunc_name = "receive_messages")]
> > +		[NoWrapper]
> >  		public virtual int datagram_receive_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.InputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[CCode (vfunc_name = "send_messages")]
> > +		[NoWrapper]
> >  		public virtual int datagram_send_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.OutputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		public int receive_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.InputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		public int send_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.OutputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
> > @@ -3823,6 +3828,7 @@ namespace GLib {
> >  		public abstract bool is_readable ();
> >  		public ssize_t read_nonblocking ([CCode (array_length_cname = "count", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[CCode (vfunc_name = "read_nonblocking")]
> > +		[NoWrapper]
> >  		public abstract ssize_t read_nonblocking_fn ([CCode (array_length_cname = "count", array_length_pos = 1.1, array_length_type = "gsize")] uint8[] buffer) throws GLib.Error;
> >  	}
> >  	[CCode (cheader_filename = "gio/gio.h", type_cname = "GPollableOutputStreamInterface", type_id = "g_pollable_output_stream_get_type ()")]
> > @@ -3833,10 +3839,12 @@ namespace GLib {
> >  		public abstract bool is_writable ();
> >  		public ssize_t write_nonblocking ([CCode (array_length_cname = "count", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[CCode (vfunc_name = "write_nonblocking")]
> > +		[NoWrapper]
> >  		public abstract ssize_t write_nonblocking_fn ([CCode (array_length_cname = "count", array_length_pos = 1.1, array_length_type = "gsize")] uint8[]? buffer) throws GLib.Error;
> >  		[Version (since = "2.60")]
> >  		public GLib.PollableReturn writev_nonblocking ([CCode (array_length_cname = "n_vectors", array_length_pos = 1.5, array_length_type = "gsize")] GLib.OutputVector[] vectors, out size_t bytes_written, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[CCode (vfunc_name = "writev_nonblocking")]
> > +		[NoWrapper]
> >  		[Version (since = "2.60")]
> >  		public abstract GLib.PollableReturn writev_nonblocking_fn ([CCode (array_length_cname = "n_vectors", array_length_pos = 1.5, array_length_type = "gsize")] GLib.OutputVector[] vectors, out size_t bytes_written) throws GLib.Error;
> >  	}
> > @@ -4906,9 +4914,9 @@ namespace GLib {
> >  	public delegate GLib.Variant SettingsBindSetMappingShared (GLib.Value value, GLib.VariantType expected_type, void* user_data);
> >  	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
> >  	public delegate bool SettingsGetMapping (GLib.Variant value, out void* result);
> > -	[CCode (cheader_filename = "gio/gio.h")]
> > +	[CCode (cheader_filename = "gio/gio.h", has_typedef = false)]
> >  	public delegate void SimpleActionActivateCallback (GLib.SimpleAction action, GLib.Variant? parameter);
> > -	[CCode (cheader_filename = "gio/gio.h")]
> > +	[CCode (cheader_filename = "gio/gio.h", has_typedef = false)]
> >  	public delegate void SimpleActionChangeStateCallback (GLib.SimpleAction action, GLib.Variant value);
> >  	[CCode (cheader_filename = "gio/gio.h", has_target = false)]
> >  	public delegate void SimpleAsyncThreadFunc (GLib.SimpleAsyncResult res, GLib.Object object, GLib.Cancellable? cancellable = null);
> > diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi
> > index 39a6b0b88..71df44b9d 100644
> > --- a/vapi/glib-2.0.vapi
> > +++ b/vapi/glib-2.0.vapi
> > @@ -2165,7 +2165,7 @@ namespace GLib {
> >  		public static void yield ();
> >  		public static void exit (T retval);
> >  		[Version (deprecated_since = "2.32", since = "2.10")]
> > -		public static void @foreach (Func<Thread> thread_func);
> > +		public static void @foreach (Func<Thread<T>> thread_func);
> >  
> >  		[CCode (cname = "g_usleep")]
> >  		public static void usleep (ulong microseconds);
> > @@ -2346,10 +2346,10 @@ namespace GLib {
> >  		[CCode (cname = "g_thread_pool_free")]
> >  		void _free (bool immediate, bool wait);
> >  		[CCode (cname = "vala__g_thread_pool_free_wrapper")]
> > -		public static void free (owned ThreadPool? pool, bool immediate, bool wait) {
> > -			ThreadPool* ptr = (owned) pool;
> > +		public static void free (owned ThreadPool<T>? pool, bool immediate, bool wait) {
> > +			ThreadPool<T>* ptr = (owned) pool;
> >  			if (ptr != null) {
> > -				((ThreadPool)ptr)._free (immediate, wait);
> > +				((ThreadPool<T>)ptr)._free (immediate, wait);
> >  			}
> >  		}
> >  		public static void set_max_unused_threads (int max_threads);
> > @@ -4864,7 +4864,7 @@ namespace GLib {
> >  		public uint get_length ();
> >  		[Version (since = "2.4")]
> >  		public void reverse ();
> > -		public Queue copy ();
> > +		public Queue<G> copy ();
> >  		[Version (since = "2.4")]
> >  		public unowned List<G> find (G data);
> >  		[Version (since = "2.4")]
> > @@ -5392,8 +5392,8 @@ namespace GLib {
> >  
> >  	/* N-ary Trees */
> >  
> > -	public delegate bool NodeTraverseFunc (Node node);
> > -	public delegate void NodeForeachFunc (Node node);
> > +	public delegate bool NodeTraverseFunc<G> (Node<G> node);
> > +	public delegate void NodeForeachFunc<G> (Node<G> node);
> >  
> >  	[CCode (cprefix = "G_TRAVERSE_")]
> >  	public enum TraverseFlags {
> > @@ -5421,8 +5421,8 @@ namespace GLib {
> >  		public unowned Node<G> append_data (owned G data);
> >  		public unowned Node<G> prepend_data (owned G data);
> >  		public void reverse_children ();
> > -		public void traverse (TraverseType order, TraverseFlags flags, int max_depth, NodeTraverseFunc func);
> > -		public void children_foreach (TraverseFlags flags, NodeForeachFunc func);
> > +		public void traverse (TraverseType order, TraverseFlags flags, int max_depth, NodeTraverseFunc<G> func);
> > +		public void children_foreach (TraverseFlags flags, NodeForeachFunc<G> func);
> >  		public unowned Node<G> get_root ();
> >  		public unowned Node<G> find (TraverseType order, TraverseFlags flags, G data);
> >  		public unowned Node<G> find_child (TraverseFlags flags, G data);
> > @@ -5458,10 +5458,10 @@ namespace GLib {
> >  		}
> >  
> >  		public G data;
> > -		public Node next;
> > -		public Node prev;
> > -		public Node parent;
> > -		public Node children;
> > +		public Node<G> next;
> > +		public Node<G> prev;
> > +		public Node<G> parent;
> > +		public Node<G> children;
> >  	}
> >  
> >  	/* Quarks */
> > diff --git a/vapi/gnet-2.0.vapi b/vapi/gnet-2.0.vapi
> > index b15338cbf..9bafd317e 100644
> > --- a/vapi/gnet-2.0.vapi
> > +++ b/vapi/gnet-2.0.vapi
> > @@ -115,17 +115,17 @@ namespace GNet {
> >  	}
> >  
> >  	public class IOChannel {
> > -		[CCode(name = "gnet_io_channel_writen")]
> > +		[CCode(cname = "gnet_io_channel_writen")]
> >  		public static GLib.IOError writen(GLib.IOChannel chan, string buf,
> >  										  size_t len, out size_t bytes_written);
> >  
> > -		[CCode(name = "gnet_io_channel_readn")]
> > +		[CCode(cname = "gnet_io_channel_readn")]
> >  		public static GLib.IOError readn(GLib.IOChannel chan, string buf,
> >  										 size_t len, out size_t bytes_read);
> > -		[CCode(name = "gnet_io_channel_readline")]
> > +		[CCode(cname = "gnet_io_channel_readline")]
> >  		public static GLib.IOError readline(GLib.IOChannel chan, string buf,
> >  											size_t len, out size_t bytes_read);
> > -		[CCode(name = "gnet_io_channel_readline_strdup")]
> > +		[CCode(cname = "gnet_io_channel_readline_strdup")]
> >  		public static GLib.IOError readline_strdup(GLib.IOChannel chan,
> >  												   out string buf,
> >  												   size_t bytes_read);
> > diff --git a/vapi/gnutls.vapi b/vapi/gnutls.vapi
> > index a7299af33..9369792f4 100644
> > --- a/vapi/gnutls.vapi
> > +++ b/vapi/gnutls.vapi
> > @@ -904,9 +904,9 @@ namespace GnuTLS
> >  		public struct Ava
> >  		{
> >  			[CCode (cname = "oid.data", array_length_cname = "oid.size")]
> > -			uint8[] oid;
> > +			unowned uint8[] oid;
> >  			[CCode (cname = "value.data", array_length_cname = "value.size")]
> > -			uint8[] value;
> > +			unowned uint8[] value;
> >  			ulong value_tag;
> >  		}
> >  
> > @@ -1711,13 +1711,13 @@ namespace GnuTLS
> >  	{
> >  		public CertificateType type;
> >  		[CCode (cname = "cert.x509", array_length_cname = "ncerts", array_length_type = "unsigned int")]
> > -		public X509.Certificate[] cert_x509;
> > +		public unowned X509.Certificate[] cert_x509;
> >  		[CCode (cname = "cert.pgp")]
> > -		public OpenPGP.Certificate cert_pgp;
> > +		public unowned OpenPGP.Certificate cert_pgp;
> >  		[CCode (cname = "key.x509")]
> > -		public X509.PrivateKey key_x509;
> > +		public unowned X509.PrivateKey key_x509;
> >  		[CCode (cname = "key.pgp")]
> > -		public OpenPGP.PrivateKey key_pgp;
> > +		public unowned OpenPGP.PrivateKey key_pgp;
> >  		public uint deinit_all;
> >  	}
> >  
> > diff --git a/vapi/gsl.vapi b/vapi/gsl.vapi
> > index 2631e5a5f..1b328af9f 100644
> > --- a/vapi/gsl.vapi
> > +++ b/vapi/gsl.vapi
> > @@ -66,10 +66,6 @@ namespace Gsl
> >  		MASS_NEUTRON,
> >  		RYDBERG,
> >  		BOLTZMANN,
> > -		BOHR_MAGNETON,
> > -		NUCLEAR_MAGNETON,
> > -		ELECTRON_MAGNETIC_MOMENT,
> > -		PROTON_MAGNETIC_MOMENT,
> >  		MOLAR_GAS,
> >  		STANDARD_GAS_VOLUME,
> >  		MINUTE,
> > @@ -128,9 +124,6 @@ namespace Gsl
> >  		PSI,
> >  		POISE,
> >  		STOKES,
> > -		FARADAY,
> > -		ELECTRON_CHARGE,
> > -		GAUSS,
> >  		STILB,
> >  		LUMEN,
> >  		LUX,
> > @@ -169,10 +162,6 @@ namespace Gsl
> >  		MASS_NEUTRON,
> >  		RYDBERG,
> >  		BOLTZMANN,
> > -		BOHR_MAGNETON,
> > -		NUCLEAR_MAGNETON,
> > -		ELECTRON_MAGNETIC_MOMENT,
> > -		PROTON_MAGNETIC_MOMENT,
> >  		MOLAR_GAS,
> >  		STANDARD_GAS_VOLUME,
> >  		MINUTE,
> > @@ -231,9 +220,6 @@ namespace Gsl
> >  		PSI,
> >  		POISE,
> >  		STOKES,
> > -		FARADAY,
> > -		ELECTRON_CHARGE,
> > -		GAUSS,
> >  		STILB,
> >  		LUMEN,
> >  		LUX,
> > @@ -251,7 +237,13 @@ namespace Gsl
> >  		JOULE,
> >  		ERG,
> >  		STEFAN_BOLTZMANN_CONSTANT,
> > -		THOMSON_CROSS_SECTION
> > +		THOMSON_CROSS_SECTION,
> > +		BOHR_MAGNETON,
> > +		NUCLEAR_MAGNETON,
> > +		ELECTRON_MAGNETIC_MOMENT,
> > +		PROTON_MAGNETIC_MOMENT,
> > +		FARADAY,
> > +		ELECTRON_CHARGE
> >  	}
> >  
> >  	[CCode (cprefix="GSL_CONST_MKS_", cheader_filename="gsl/gsl_const_mks.h", has_type_id = false)]
> > @@ -272,10 +264,6 @@ namespace Gsl
> >  		MASS_NEUTRON,
> >  		RYDBERG,
> >  		BOLTZMANN,
> > -		BOHR_MAGNETON,
> > -		NUCLEAR_MAGNETON,
> > -		ELECTRON_MAGNETIC_MOMENT,
> > -		PROTON_MAGNETIC_MOMENT,
> >  		MOLAR_GAS,
> >  		STANDARD_GAS_VOLUME,
> >  		MINUTE,
> > @@ -334,9 +322,6 @@ namespace Gsl
> >  		PSI,
> >  		POISE,
> >  		STOKES,
> > -		FARADAY,
> > -		ELECTRON_CHARGE,
> > -		GAUSS,
> >  		STILB,
> >  		LUMEN,
> >  		LUX,
> > @@ -353,11 +338,18 @@ namespace Gsl
> >  		DYNE,
> >  		JOULE,
> >  		ERG,
> > +		BOHR_MAGNETON,
> > +		NUCLEAR_MAGNETON,
> > +		ELECTRON_MAGNETIC_MOMENT,
> > +		PROTON_MAGNETIC_MOMENT,
> >  		STEFAN_BOLTZMANN_CONSTANT,
> >  		THOMSON_CROSS_SECTION,
> > +		FARADAY,
> > +		ELECTRON_CHARGE,
> >  		VACUUM_PERMITTIVITY,
> >  		VACUUM_PERMEABILITY,
> > -		DEBYE
> > +		DEBYE,
> > +		GAUSS
> >  	}
> >  
> >  	[CCode (cprefix="GSL_CONST_MKSA_", cheader_filename="gsl/gsl_const_mksa.h", has_type_id = false)]
> > @@ -378,10 +370,6 @@ namespace Gsl
> >  		MASS_NEUTRON,
> >  		RYDBERG,
> >  		BOLTZMANN,
> > -		BOHR_MAGNETON,
> > -		NUCLEAR_MAGNETON,
> > -		ELECTRON_MAGNETIC_MOMENT,
> > -		PROTON_MAGNETIC_MOMENT,
> >  		MOLAR_GAS,
> >  		STANDARD_GAS_VOLUME,
> >  		MINUTE,
> > @@ -440,9 +428,6 @@ namespace Gsl
> >  		PSI,
> >  		POISE,
> >  		STOKES,
> > -		FARADAY,
> > -		ELECTRON_CHARGE,
> > -		GAUSS,
> >  		STILB,
> >  		LUMEN,
> >  		LUX,
> > @@ -461,9 +446,16 @@ namespace Gsl
> >  		ERG,
> >  		STEFAN_BOLTZMANN_CONSTANT,
> >  		THOMSON_CROSS_SECTION,
> > +		BOHR_MAGNETON,
> > +		NUCLEAR_MAGNETON,
> > +		ELECTRON_MAGNETIC_MOMENT,
> > +		PROTON_MAGNETIC_MOMENT,
> > +		FARADAY,
> > +		ELECTRON_CHARGE,
> >  		VACUUM_PERMITTIVITY,
> >  		VACUUM_PERMEABILITY,
> > -		DEBYE
> > +		DEBYE,
> > +		GAUSS
> >  	}
> >  
> >  
> > @@ -518,9 +510,9 @@ namespace Gsl
> >  		APPROX
> >  	}
> >  
> > -	[CCode (has_target = false)]
> > +	[CCode (cname = "gsl_error_handler_t*", has_target = false)]
> >  	public delegate void ErrorHandler (string reason, string file, int line, int errno);
> > -	[CCode (has_target = false)]
> > +	[CCode (cname = "gsl_stream_handler_t*", has_target = false)]
> >  	public delegate void StreamHandler (string label, string file, int line, string reason);
> >  
> >  	[CCode (lower_case_cprefix="gsl_", cheader_filename="gsl/gsl_errno.h")]
> > @@ -568,9 +560,9 @@ namespace Gsl
> >  
> >  	/* The isnan, isinf and finite are define in the double type. The elementary functions are in GLib.Math */
> >  
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate double _Function (double x, void* params);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void _FunctionFdf (double x, void* params, out double f, out double df);
> >  
> >  	[SimpleType]
> > @@ -910,7 +902,7 @@ namespace Gsl
> >  		public static int CL_array (double lmin, int kmax, double eta, [CCode (array_length = false)] double[] cl);
> >  	}
> >  
> > -	[CCode (lower_case_cprefix="gsl_sf_coupling_", cheader_filename="gsl/gsl_coupling.h")]
> > +	[CCode (lower_case_cprefix="gsl_sf_coupling_", cheader_filename="gsl/gsl_sf_coupling.h")]
> >  	namespace Coupling
> >  	{
> >  		public static double 3j (int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc);
> > @@ -990,8 +982,8 @@ namespace Gsl
> >  		public static int E_e (double phi, double k, Mode mode, out Result result);
> >  		public static double P (double phi, double k, double n, Mode mode);
> >  		public static int P_e (double phi, double k, double n, Mode mode, out Result result);
> > -		public static double D (double phi, double k, double n, Mode mode);
> > -		public static int D_e (double phi, double k, double n, Mode mode, out Result result);
> > +		public static double D (double phi, double k, Mode mode);
> > +		public static int D_e (double phi, double k, Mode mode, out Result result);
> >  
> >  		public static double RC (double x, double y, Mode mode);
> >  		public static int RC_e (double x, double y, Mode mode, out Result result);
> > @@ -1003,7 +995,7 @@ namespace Gsl
> >  		public static int RJ_e (double x, double y, double z, double p, Mode mode, out Result result);
> >  	}
> >  
> > -	[CCode (lower_case_cprefix="gsl_sf_elljac_", cheader_filename="gsl/gsl_elljac.h")]
> > +	[CCode (lower_case_cprefix="gsl_sf_elljac_", cheader_filename="gsl/gsl_sf_elljac.h")]
> >  	namespace EllJac
> >  	{
> >  		public static int e (double u, double m, out double sn, out double cn, out double dn);
> > @@ -1037,8 +1029,8 @@ namespace Gsl
> >  		public static int exp_mult_e10_e (double x, double y, out ResultE10 result);
> >  		public static int exp_err_e (double x, double dx, out Result result);
> >  		public static int exp_err_e10_e (double x, double dx, out ResultE10 result);
> > -		public static int exp_mul_err_e (double x, double dx, double y, double dy, out Result result);
> > -		public static int exp_mul_err_e10_e (double x, double dx, double y, double dy, out ResultE10 result);
> > +		public static int exp_mult_err_e (double x, double dx, double y, double dy, out Result result);
> > +		public static int exp_mult_err_e10_e (double x, double dx, double y, double dy, out ResultE10 result);
> >  		public static double expm1 (double x);
> >  		public static int expm1_e (double x, out Result result);
> >  		public static double exprel (double x);
> > @@ -1060,8 +1052,8 @@ namespace Gsl
> >  		public static int expint_En_e (int n, double x, out Result result);
> >  		public static double expint_Ei (double x);
> >  		public static int expint_Ei_e (double x, out Result result);
> > -		public static double expint_Ei_3 (double x);
> > -		public static int expint_Ei_3_e (double x, out Result result);
> > +		public static double expint_3 (double x);
> > +		public static int expint_3_e (double x, out Result result);
> >  		public static double Shi (double x);
> >  		public static int Shi_e (double x, out Result result);
> >  		public static double Chi (double x);
> > @@ -1074,7 +1066,7 @@ namespace Gsl
> >  		public static double atanint_e (double x, out Result result);
> >  	}
> >  
> > -	[CCode (lower_case_cprefix="gsl_sf_fermi_dirac_", cheader_filename="gsl/gsl_sf_fermi_dirach.h")]
> > +	[CCode (lower_case_cprefix="gsl_sf_fermi_dirac_", cheader_filename="gsl/gsl_sf_fermi_dirac.h")]
> >  	namespace FermiDirac
> >  	{
> >  		public static double m1 (double x);
> > @@ -1174,10 +1166,10 @@ namespace Gsl
> >  		[CCode (cname="gsl_sf_gegenpoly_3_e")]
> >  		public static double C3_e (double lambda, double x, out Result result);
> >  		[CCode (cname="gsl_sf_gegenpoly_n")]
> > -		public static double Cn (double lambda, double x);
> > +		public static double Cn (int n, double lambda, double x);
> >  		[CCode (cname="gsl_sf_gegenpoly_n_e")]
> > -		public static double Cn_e (double lambda, double x, out Result result);
> > -		public static int array (int nmax, double lambda, double x, out Result result);
> > +		public static double Cn_e (int n, double lambda, double x, out Result result);
> > +		public static int array (int nmax, double lambda, double x, [CCode (array_length = false)] double[] result_array);
> >  	}
> >  
> >  	[CCode (lower_case_cprefix="gsl_sf_hyperg_", cheader_filename="gsl/gsl_sf_hyperg.h")]
> > @@ -1260,11 +1252,11 @@ namespace Gsl
> >  		public static double Plm (int l, int m, double x);
> >  		public static int Plm_e (int l, int m, double x, out Result result);
> >  		public static int Plm_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array);
> > -		public static int Plm_deriv_array (int lmax, int m, double x, double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
> > +		public static int Plm_deriv_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
> >  		public static double sphPlm (int l, int m, double x);
> >  		public static int sphPlm_e (int l, int m, double x, out Result result);
> >  		public static int sphPlm_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array);
> > -		public static int sphPlm_deriv_array (int lmax, int m, double x, double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
> > +		public static int sphPlm_deriv_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
> >  		public static int array_size (int lmax, int m);
> >  
> >  		[CCode (cname="gsl_sf_conicalP_half")]
> > @@ -1338,21 +1330,21 @@ namespace Gsl
> >  
> >  		public static int a_array (int order_min, int order_max, double qq, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
> >  		public static int b_array (int order_min, int order_max, double qq, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
> > -		public static int a (int order, double qq, out Result result);
> > -		public static int b (int order, double qq, out Result result);
> > +		public static int a (int order, double qq);
> > +		public static int b (int order, double qq);
> >  		public static int a_coeff (int order, double qq, double aa, [CCode (array_length = false)] double[] coeff);
> >  		public static int b_coeff (int order, double qq, double aa, [CCode (array_length = false)] double[] coeff);
> >  
> >  		[CCode (cname="gsl_sf_mathieu_alloc")]
> >  		public MathieuWorkspace (size_t nn, double qq);
> >  
> > -		public static int ce (int order, double qq, double zz, out Result result);
> > -		public static int se (int order, double qq, double zz, out Result result);
> > +		public static int ce (int order, double qq, double zz);
> > +		public static int se (int order, double qq, double zz);
> >  		public static int ce_array (int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
> >  		public static int se_array (int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
> >  
> > -		public static int Mc (int kind, int order, double qq, double zz, out Result result);
> > -		public static int Ms (int kind, int order, double qq, double zz, out Result result);
> > +		public static int Mc (int kind, int order, double qq, double zz);
> > +		public static int Ms (int kind, int order, double qq, double zz);
> >  		public static int Mc_array (int kind, int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
> >  		public static int Ms_array (int kind, int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
> >  	}
> > @@ -1380,7 +1372,7 @@ namespace Gsl
> >  		public static int psi_1_e (double x, out Result result);
> >  
> >  		public static double psi_n (int n, double x);
> > -		public static int psi_e_n (int n, double x, out Result result);
> > +		public static int psi_n_e (int n, double x, out Result result);
> >  	}
> >  
> >  	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_synchrotron.h")]
> > @@ -1619,8 +1611,8 @@ namespace Gsl
> >  
> >  		public VectorComplexView subvector (size_t i, size_t n);
> >  		public VectorComplexView subvector_with_stride (size_t i, size_t stride, size_t n);
> > -		public VectorView complex_real ();
> > -		public VectorView complex_imag ();
> > +		public VectorView const_real ();
> > +		public VectorView const_imag ();
> >  
> >  		public int memcpy (VectorComplex src);
> >  		public int swap (VectorComplex w);
> > @@ -1632,15 +1624,8 @@ namespace Gsl
> >  		public int sub (VectorComplex b);
> >  		public int mul (VectorComplex b);
> >  		public int div (VectorComplex b);
> > -		public int scale (double x);
> > -		public int add_constant (double x);
> > -
> > -		public double max ();
> > -		public double min ();
> > -		public void minmax (out double min_out, out double max_out);
> > -		public size_t max_index ();
> > -		public size_t min_index ();
> > -		public void minmax_index (out size_t imin, out size_t imax);
> > +		public int scale (Complex x);
> > +		public int add_constant (Complex x);
> >  
> >  		public bool isnull ();
> >  		public bool ispos ();
> > @@ -1657,7 +1642,7 @@ namespace Gsl
> >  		public static MatrixView array ([CCode (array_length = false)] double[] v, size_t n1, size_t n2);
> >  		public static MatrixView array_with_tda ([CCode (array_length = false)] double[] v, size_t n1, size_t n2, size_t tda);
> >  		public static MatrixView vector (Vector v, size_t n1, size_t n2);
> > -		public static MatrixView vectr_with_tda (Vector v, size_t n1, size_t n2, size_t tda);
> > +		public static MatrixView vector_with_tda (Vector v, size_t n1, size_t n2, size_t tda);
> >  	}
> >  
> >  	[Compact]
> > @@ -1680,7 +1665,9 @@ namespace Gsl
> >  		[CCode (cname="gsl_matrix_alloc_from_matrix")]
> >  		public Matrix.from_matrix (Matrix m, size_t k1, size_t k2, size_t n1, size_t n2);
> >  
> > +		[CCode (cname="gsl_vector_alloc_row_from_matrix")]
> >  		public Vector alloc_row_from_matrix (size_t i);
> > +		[CCode (cname="gsl_vector_alloc_col_from_matrix")]
> >  		public Vector alloc_col_from_matrix (size_t j);
> >  
> >  		public double @get (size_t i, size_t j);
> > @@ -1752,7 +1739,7 @@ namespace Gsl
> >  		public static MatrixComplexView array ([CCode (array_length = false)] double[] v, size_t n1, size_t n2);
> >  		public static MatrixComplexView array_with_tda ([CCode (array_length = false)] double[] v, size_t n1, size_t n2, size_t tda);
> >  		public static MatrixComplexView vector (VectorComplex v, size_t n1, size_t n2);
> > -		public static MatrixComplexView vectr_with_tda (VectorComplex v, size_t n1, size_t n2, size_t tda);
> > +		public static MatrixComplexView vector_with_tda (VectorComplex v, size_t n1, size_t n2, size_t tda);
> >  	}
> >  
> >  	[Compact]
> > @@ -1775,14 +1762,16 @@ namespace Gsl
> >  		[CCode (cname="gsl_matrix_complex_alloc_from_matrix")]
> >  		public MatrixComplex.from_matrix (MatrixComplex m, size_t k1, size_t k2, size_t n1, size_t n2);
> >  
> > +		[CCode (cname="gsl_vector_complex_alloc_row_from_matrix")]
> >  		public VectorComplex alloc_row_from_matrix (size_t i);
> > +		[CCode (cname="gsl_vector_complex_alloc_col_from_matrix")]
> >  		public VectorComplex alloc_col_from_matrix (size_t j);
> >  
> > -		public double @get (size_t i, size_t j);
> > -		public void @set (size_t i, size_t j, double x);
> > -		public double* ptr (size_t i, size_t j);
> > +		public Complex @get (size_t i, size_t j);
> > +		public void @set (size_t i, size_t j, Complex x);
> > +		public Complex* ptr (size_t i, size_t j);
> >  
> > -		public void set_all (double x);
> > +		public void set_all (Complex x);
> >  		public void set_zero ();
> >  		public void set_identity ();
> >  
> > @@ -1821,16 +1810,9 @@ namespace Gsl
> >  		public int sub (MatrixComplex b);
> >  		public int mul_elements (MatrixComplex b);
> >  		public int div_elements (MatrixComplex b);
> > -		public int scale (double x);
> > -		public int add_constant (double x);
> > -		public int add_diagonal (double x);
> > -
> > -		public double max ();
> > -		public double min ();
> > -		public void minmax (out double min_out, out double max_out);
> > -		public void max_index (out size_t imax, out size_t jmax);
> > -		public void min_index (out size_t imin, out size_t jmin);
> > -		public void minmax_index (out size_t imin, out size_t jmin, out size_t imax, out size_t jmax);
> > +		public int scale (Complex x);
> > +		public int add_constant (Complex x);
> > +		public int add_diagonal (Complex x);
> >  
> >  		public bool isnull ();
> >  		public bool ispos ();
> > @@ -1913,9 +1895,9 @@ namespace Gsl
> >  	namespace PermuteVectorComplex
> >  	{
> >  		[CCode (cname="gsl_permute_vector_complex")]
> > -		public static int permute (Permutation p, Vector v);
> > +		public static int permute (Permutation p, VectorComplex v);
> >  		[CCode (cname="gsl_permute_vector_complex_inverse")]
> > -		public static int permute_inverse (Permutation p, Vector v);
> > +		public static int permute_inverse (Permutation p, VectorComplex v);
> >  	}
> >  
> >  
> > @@ -2001,7 +1983,7 @@ namespace Gsl
> >  		public static int LU_refine (Matrix A, Matrix LU, Permutation p, Vector b, Vector x, Vector residual);
> >  		public static int complex_LU_refine (MatrixComplex A, MatrixComplex LU, Permutation p, VectorComplex b, VectorComplex x, VectorComplex residual);
> >  		public static int LU_invert (Matrix LU, Permutation p, Matrix inverse);
> > -		public static int complex_LU_invert (MatrixComplex LU, Permutation p, Matrix inverse);
> > +		public static int complex_LU_invert (MatrixComplex LU, Permutation p, MatrixComplex inverse);
> >  		public static double LU_det (Matrix LU, int signum);
> >  		public static Complex complex_LU_det (MatrixComplex LU, int signum);
> >  		public static double LU_lndet (Matrix LU);
> > @@ -2065,7 +2047,7 @@ namespace Gsl
> >  		public static int bidiag_unpack2 (Matrix A, Vector tau_U, Vector tau_V, Matrix V);
> >  		public static int bidiag_unpack_B (Matrix A, Vector diag, Vector superdiag);
> >  
> > -		public static int householder_tansform (Vector v);
> > +		public static int householder_transform (Vector v);
> >  		public static Complex complex_householder_transform (VectorComplex V);
> >  		public static int householder_hm (double tau, Vector v, Matrix A);
> >  		public static int complex_householder_hm (Complex tau, VectorComplex V, MatrixComplex A);
> > @@ -2140,7 +2122,7 @@ namespace Gsl
> >  		[CCode (cname="gsl_eigen_herm_alloc")]
> >  		public EigenHermWorkspace (size_t n);
> >  		[CCode (cname="gsl_eigen_herm", instance_pos=-1)]
> > -		public int init (MatrixComplex A, VectorComplex eval);
> > +		public int init (MatrixComplex A, Vector eval);
> >  	}
> >  
> >  	[Compact]
> > @@ -2157,7 +2139,7 @@ namespace Gsl
> >  		[CCode (cname="gsl_eigen_hermv_alloc")]
> >  		public EigenHermvWorkspace (size_t n);
> >  		[CCode (cname="gsl_eigen_hermv", instance_pos=-1)]
> > -		public int init (MatrixComplex A, VectorComplex eval, MatrixComplex evec);
> > +		public int init (MatrixComplex A, Vector eval, MatrixComplex evec);
> >  	}
> >  
> >  	[Compact]
> > @@ -2322,7 +2304,7 @@ namespace Gsl
> >  	/*
> >  	 * Fast Fourier Transforms (FFTs)
> >  	 */
> > -	[CCode (cname="gsl_fft_direction", cheader_filename="gsl/gsl_fft.h", has_type_id = false)]
> > +	[CCode (cname="gsl_fft_direction", cprefix = "gsl_fft_", cheader_filename="gsl/gsl_fft.h", has_type_id = false)]
> >  	public enum FFTDirection
> >  	{
> >  		forward = -1,
> > @@ -2336,11 +2318,12 @@ namespace Gsl
> >  		public size_t n;
> >  		public size_t nf;
> >  		public size_t factor[64];
> > -		public Complex twiddle[64];
> > -		public Complex trig;
> > +		public Complex* twiddle[64];
> > +		public Complex* trig;
> >  
> >  		[CCode (cname="gsl_fft_complex_wavetable_alloc")]
> >  		public FFTComplexWavetable (size_t n);
> > +		[CCode (cname="gsl_fft_complex_memcpy")]
> >  		public int memcpy (FFTComplexWavetable src);
> >  	}
> >  
> > @@ -2355,7 +2338,6 @@ namespace Gsl
> >  		public FFTComplexWorkspace (size_t n);
> >  	}
> >  
> > -	[Compact]
> >  	[CCode (lower_case_cprefix="gsl_fft_complex_", cheader_filename="gsl/gsl_fft_complex.h")]
> >  	namespace FFTComplex
> >  	{
> > @@ -2381,8 +2363,8 @@ namespace Gsl
> >  		public size_t n;
> >  		public size_t nf;
> >  		public size_t factor[64];
> > -		public Complex twiddle[64];
> > -		public Complex trig;
> > +		public Complex* twiddle[64];
> > +		public Complex* trig;
> >  
> >  		[CCode (cname="gsl_fft_real_wavetable_alloc")]
> >  		public FFTRealWavetable (size_t n);
> > @@ -2399,11 +2381,10 @@ namespace Gsl
> >  		public FFTRealWorkspace (size_t n);
> >  	}
> >  
> > -	[Compact]
> >  	[CCode (lower_case_cprefix="gsl_fft_real_", cheader_filename="gsl/gsl_fft_real.h")]
> >  	namespace FFTReal
> >  	{
> > -		public static int radix2_forward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
> > +		public static int radix2_transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
> >  		public static int transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTRealWavetable wavetable, FFTRealWorkspace work);
> >  		public static int unpack ([CCode (array_length = false)] double[] real_coefficient, [CCode (array_length = false)] double[] complex_coeficient, size_t stride, size_t n);
> >  	}
> > @@ -2415,8 +2396,8 @@ namespace Gsl
> >  		public size_t n;
> >  		public size_t nf;
> >  		public size_t factor[64];
> > -		public Complex twiddle[64];
> > -		public Complex trig;
> > +		public Complex* twiddle[64];
> > +		public Complex* trig;
> >  
> >  		[CCode (cname="gsl_fft_halfcomplex_wavetable_alloc")]
> >  		public FFTHalfcomplexWavetable (size_t n);
> > @@ -2439,7 +2420,7 @@ namespace Gsl
> >  	/*
> >  	 * Numerical Integration
> >  	 */
> > -	[CCode (cprefix="GSL_INTEG_", cheader_filename="gsl/gsl_integration.h", has_type_id = false)]
> > +	[CCode (cname = "enum gsl_integration_qawo_enum", cprefix="GSL_INTEG_", cheader_filename="gsl/gsl_integration.h", has_type_id = false)]
> >  	public enum QAWO
> >  	{
> >  		COSINE,
> > @@ -2523,7 +2504,7 @@ namespace Gsl
> >  		public static void qk61 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
> >  		public static void qcheb (Function* f, double a, double b, out double cheb12, out double cheb24);
> >  
> > -		public static void qk (int n, [CCode (array_length = false)] double[] xgk, [CCode (array_length = false)] double[] wg, [CCode (array_length = false)] double[] wgk, [CCode (array_length = false)] double[] fv1, [CCode (array_length = false)] double[] fv2, Function* f, double a, double b, out double result, out double abserr, out double resabs, double resasc);
> > +		public static void qk (int n, [CCode (array_length = false)] double[] xgk, [CCode (array_length = false)] double[] wg, [CCode (array_length = false)] double[] wgk, [CCode (array_length = false)] double[] fv1, [CCode (array_length = false)] double[] fv2, Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
> >  		public static int qng (Function* f, double a, double b, double epsabs, double epsrel, out double result, out double abserr, out size_t neval);
> >  		public static int qag (Function* f, double a, double b, double epsabs, double epsrel, size_t limit, int key, IntegrationWorkspace workspace, out double result, out double abserr);
> >  		public static int qagi (Function* f, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
> > @@ -2541,18 +2522,18 @@ namespace Gsl
> >  	/*
> >  	 * Random Number Generation
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void RNGSetState (void *state, ulong seed);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate ulong RNGGetState (void* state);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate double RNGGetDouble (void* state);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_rng_type", cheader_filename="gsl/gsl_rng.h", has_type_id = false)]
> >  	public struct RNGType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public ulong max;
> >  		public ulong min;
> >  		public size_t size;
> > @@ -2797,18 +2778,18 @@ namespace Gsl
> >  	/*
> >  	 * Quasi-Random Sequences
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate size_t QRNGStateSize (uint dimension);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int QRNGInitState (void* state, uint dimension);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int QRNGGetState2 (void* state, uint dimension, out double x);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_qrng_type", cheader_filename="gsl/gsl_qrng.h", has_type_id = false)]
> >  	public struct QRNGType
> >  	{
> > -  		public string name;
> > +  		public unowned string name;
> >    		public uint max_dimension;
> >    		public QRNGStateSize state_size;
> >    		public QRNGInitState init_state;
> > @@ -2989,7 +2970,7 @@ namespace Gsl
> >  
> >  		[CCode (cname="gsl_ran_discrete_preproc")]
> >  		public RanDiscrete (size_t K, double* P);
> > -		[CCode (cname="gsl_ran_discrete")]
> > +		[CCode (cname="gsl_ran_discrete", instance_pos = -1)]
> >  		public size_t discrete (RNG g);
> >  		[CCode (instance_pos=-1)]
> >  		public double pdf (size_t k);
> > @@ -3179,9 +3160,9 @@ namespace Gsl
> >  		public double cov ();
> >  
> >  		public double sum ();
> > -		public int equal_bins_p (Histogram h2) ;
> > -		public int add (Histogram h2);
> > -		public int sub (Histogram h2);
> > +		public int equal_bins_p (Histogram2d h2);
> > +		public int add (Histogram2d h2);
> > +		public int sub (Histogram2d h2);
> >  		public int mul (Histogram2d h2);
> >  		public int div (Histogram2d h2);
> >  		public int scale (double scale);
> > @@ -3191,7 +3172,7 @@ namespace Gsl
> >  		public int fwrite (GLib.FileStream stream);
> >  		[CCode (instance_pos=-1)]
> >  		public int fread (GLib.FileStream stream);
> > -		public static int fprintf (GLib.FileStream stream, Histogram h, string range_format, string bin_format);
> > +		public static int fprintf (GLib.FileStream stream, Histogram2d h, string range_format, string bin_format);
> >  		[CCode (instance_pos=-1)]
> >  		public int fscanf (GLib.FileStream stream);
> >  	}
> > @@ -3216,14 +3197,16 @@ namespace Gsl
> >  	/*
> >  	 * N-Tuples
> >  	 */
> > -	[CCode (has_target = false)]
> > -	public delegate int NTupleFunc (void* ntuple_data, void* params);
> > +	[CCode (has_target = false, has_typedef = false)]
> > +	public delegate int NTupleSelectFunc (void* ntuple_data, void* params);
> > +	[CCode (has_target = false, has_typedef = false)]
> > +	public delegate double NTupleValueFunc (void* ntuple_data, void* params);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_ntuple_select_fn", cheader_filename="gsl/gsl_ntuple.h", has_type_id = false)]
> >  	public struct NTupleSelectFn
> >  	{
> > -		public NTupleFunc function;
> > +		public NTupleSelectFunc function;
> >  		public void* params;
> >  	}
> >  
> > @@ -3231,7 +3214,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_ntuple_value_fn", cheader_filename="gsl/gsl_ntuple.h", has_type_id = false)]
> >  	public struct NTupleValueFn
> >  	{
> > -		public NTupleFunc function;
> > +		public NTupleValueFunc function;
> >  		public void* params;
> >  	}
> >  
> > @@ -3240,7 +3223,7 @@ namespace Gsl
> >  	public class NTuple
> >  	{
> >  		public GLib.FileStream file;
> > -		public void* ntrupel_data;
> > +		public void* ntuple_data;
> >  		public size_t size;
> >  
> >  		public static NTuple open (string filename, void* ntuple_data, size_t size);
> > @@ -3264,7 +3247,7 @@ namespace Gsl
> >  		STRATIFIED
> >  	}
> >  
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate double MonteFunc ([CCode (array_length = false)] double[] x_array, size_t dim, void* params);
> >  
> >  	[SimpleType]
> > @@ -3384,19 +3367,19 @@ namespace Gsl
> >  	[CCode (lower_case_cprefix="gsl_siman_", cheader_filename="gsl/gsl_siman.h", has_type_id = false)]
> >  	namespace Siman
> >  	{
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_Efunc_t", has_target = false)]
> >  		public delegate double Efunc_t (void *xp);
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_step_t", has_target = false)]
> >  		public delegate void step_t (RNG r, void *xp, double step_size);
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_metric_t", has_target = false)]
> >  		public delegate double metric_t (void *xp, void* yp);
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_print_t", has_target = false)]
> >  		public delegate void print_t (void* xp);
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_copy_t", has_target = false)]
> >  		public delegate void copy_t (void* source, void* dest);
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_copy_construct_t", has_target = false)]
> >  		public delegate void copy_construct_t (void* xp);
> > -		[CCode (has_target = false)]
> > +		[CCode (cname = "gsl_siman_destroy_t", has_target = false)]
> >  		public delegate void destroy_t (void* xp);
> >  
> >  		public static void solve(RNG r, void *x0_p, Efunc_t Ef, step_t take_step, metric_t distance, print_t print_position, copy_t copyfunc, copy_construct_t copy_constructor, destroy_t destructor, size_t element_size, SimanParams params);
> > @@ -3415,27 +3398,27 @@ namespace Gsl
> >  		DEC
> >  	}
> >  
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int OdeivFunction (double t, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] dydt, void* params);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int OdeivJacobian (double t, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] dfdy, [CCode (array_length = false)] double[] dfdt, void* params);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void* OdeivStepAlloc (size_t dim);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int OdeivStepApply (void* state, size_t dim, double t, double h, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] dydt_in, [CCode (array_length = false)] double[] dydt_out, OdeivSystem* dydt);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int OdeivStepReset (void* state, size_t dim);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate uint OdeivStepOrder (void* state);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void OdeivStepFree (void* state);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void* OdeivControlAlloc ();
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int OdeivControlInit (void* state, double eps_abs, double eps_rel, double a_y, double a_dydt);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int OdeivControlHadjust (void* state, size_t dim, uint ord, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] yp, [CCode (array_length = false)] double[] h);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void OdeivControlFree (void* state);
> >  
> >  	[SimpleType]
> > @@ -3452,7 +3435,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_odeiv_step_type", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
> >  	public struct OdeivStepType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public int can_use_dydt_in;
> >  		public int gives_exact_dydt_out;
> >  		public OdeivStepAlloc alloc;
> > @@ -3499,7 +3482,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_odeiv_control_type", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
> >  	public struct OdeivControlType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public OdeivControlAlloc alloc;
> >  		public OdeivControlInit init;
> >  		public OdeivControlHadjust hadjust;
> > @@ -3552,19 +3535,19 @@ namespace Gsl
> >  	/*
> >  	 * Interpolation
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void* InterpAlloc (size_t size);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int InterpInit (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int InterpEval (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int InterpEvalDeriv (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y_p);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int InterpEvalDeriv2 (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y_pp);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int InterpEvalInteg (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, InterpAccel* i, double a, double b, out double result);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void InterpFree (void* t);
> >  
> >  	[Compact]
> > @@ -3585,7 +3568,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_interp_type", cheader_filename="gsl/gsl_interp.h", has_type_id = false)]
> >  	public struct InterpType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public uint min_size;
> >  		public InterpAlloc alloc;
> >  		public InterpInit init;
> > @@ -3618,7 +3601,7 @@ namespace Gsl
> >  		public void* state;
> >  
> >  		[CCode (cname="gsl_interp_alloc")]
> > -		public Interp (InterpType T, size_t n);
> > +		public Interp (InterpType* T, size_t n);
> >  		public int init ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
> >  		public string name ();
> >  		public uint min_size ();
> > @@ -3660,7 +3643,7 @@ namespace Gsl
> >  	/*
> >  	 * Numerical Differentiation
> >  	 */
> > -	[CCode (lower_case_cprefix="gsl_deriv_", cheader_fileame="gsl/gsl_deriv.h")]
> > +	[CCode (lower_case_cprefix="gsl_deriv_", cheader_filename="gsl/gsl_deriv.h")]
> >  	namespace Deriv
> >  	{
> >  		public static int central (Function* f, double x, double h, out double result, out double abserr);
> > @@ -3754,21 +3737,21 @@ namespace Gsl
> >  	/*
> >  	 * Wavelet Transforms
> >  	 */
> > -	[CCode (has_type_id = false)]
> > +	[CCode (cname = "gsl_wavelet_direction", cprefix = "gsl_wavelet_", has_type_id = false)]
> >  	public enum WaveletDirection
> >  	{
> >  		forward = 1,
> >  		backward = -1
> >  	}
> >  
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int WaveletInit (double** h1, double** g1, double** h2, double** g2, size_t* nc, size_t* offset, size_t member);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_wavelet_type", cheader_filename="gsl/gsl_wavelet.h", has_type_id = false)]
> >  	public struct WaveletType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public WaveletInit init;
> >  	}
> >  
> > @@ -3817,25 +3800,25 @@ namespace Gsl
> >  		public int transform_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletDirection dir, WaveletWorkspace work);
> >  		[CCode (cname="gsl_wavelet2d_transform_forward")]
> >  		public int transform_forward_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
> > -		[CCode (cname="gsl_wavelet2d__transform_inverse")]
> > +		[CCode (cname="gsl_wavelet2d_transform_inverse")]
> >  		public int transform_inverse_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_nstransform")]
> >  		public int nstransform ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletDirection dir,WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_nstransform_forward")]
> >  		public int nstransform_forward ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_nstransform_inverse")]
> >  		public int nstransform_inverse ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace * work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_transform_matrix")]
> >  		public int transform_matrix (Matrix a, WaveletDirection dir, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_transform_matrix_forward")]
> >  		public int transform_matrix_forward (Matrix a, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_transform_matrix_inverse")]
> >  		public int transform_matrix_inverse (Matrix a, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_nstransform_matrix")]
> >  		public int nstransform_matrix (Matrix a, WaveletDirection dir, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_nstransform_matrix_forward")]
> >  		public int nstransform_matrix_forward (Matrix a, WaveletWorkspace work);
> > -		[CCode (cprefix="gsl_wavelet2d_")]
> > +		[CCode (cname="gsl_wavelet2d_nstransform_matrix_inverse")]
> >  		public int nstransform_matrix_inverse (Matrix a, WaveletWorkspace work);
> >  	}
> >  
> > @@ -3869,20 +3852,20 @@ namespace Gsl
> >  	/*
> >  	 * One dimensional Root-Finding
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int RootFsolverSet (void* state, Function* f, double* root, double x_lower, double x_upper);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int RootFsolverIterate (void* state, Function* f, double* root, double* x_lower, double* x_upper);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int RootFdfsolverSet (void* state, FunctionFdf* f, double* root);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int RootFdfsolverIterate (void* state, FunctionFdf* d, double* root);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_root_fsolver_type", cheader_filename="gsl/gsl_roots.h", has_type_id = false)]
> >  	public struct RootFsolverType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public RootFsolverSet @set;
> >  		public RootFsolverIterate iterate;
> > @@ -3910,7 +3893,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_root_fdfsolver_type", cheader_filename="gsl/gsl_roots.h", has_type_id = false)]
> >  	public struct RootFdfsolverType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public RootFdfsolverSet @set;
> >  		public RootFdfsolverIterate iterate;
> > @@ -3960,18 +3943,18 @@ namespace Gsl
> >  	/*
> >  	 * One dimensional Minimization
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MinSet (void* state, Function* f, double xminimun, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MinIterate (void *state, Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MinBracketingFunction (Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper, size_t eval_max);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_min_fminimizer_type", cheader_filename="gsl/gsl_min.h", has_type_id = false)]
> >  	public struct MinFminimizerType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MinSet @set;
> >  		public MinIterate iterate;
> > @@ -4019,27 +4002,27 @@ namespace Gsl
> >  	/*
> >  	 * Multidimensional Root-Finding
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootF (Vector x, void* params, Vector f);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFAlloc (void* state, size_t n);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFSet (void* state, MultirootFunction* function, Vector x, Vector f, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFIterate (void* state, MultirootFunction* function, Vector x, Vector f, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void MultirootFFree (void* state);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootDF (Vector x, void* params, Matrix df);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFDF (Vector x, void* params, Vector f, Matrix df);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFdfAlloc (void* state, size_t n);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFdfSet (void* state, MultirootFunctionFdf* fdf, Vector x, Vector f, Matrix J, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFdfIterate (void* state, MultirootFunctionFdf* fdf, Vector x, Vector f, Matrix J, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultirootFdfFree (void* state);
> >  
> >  	[SimpleType]
> > @@ -4058,7 +4041,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_multiroot_fsolver_type", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
> >  	public struct MultirootFsolverType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MultirootFAlloc alloc;
> >  		public MultirootFSet @set;
> > @@ -4100,7 +4083,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_multiroot_fdfsolver_type", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
> >  	public struct MultirootFdfsolverType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MultirootFdfAlloc alloc;
> >  		public MultirootFdfSet @set;
> > @@ -4157,19 +4140,19 @@ namespace Gsl
> >  	/*
> >  	 * Multidimensional Minimization
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate double MultiminF (Vector x, void* params);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void MultiminDf (Vector x, void* params, Vector df);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void MultiminFdf (Vector x, void* params, double* f, Vector df);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFAlloc (void *state, size_t n);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFSet (void* state, MultiminFunction* f, Vector x, double* size);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFIterate (void* state, MultiminFunction* f, Vector x, double* size, double* fval);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFFree (void* state);
> >  
> >  	[SimpleType]
> > @@ -4199,7 +4182,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_multimin_fminimizer_type", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
> >  	public struct MultiminFminimizerType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MultiminFAlloc alloc;
> >  		public MultiminFSet @set;
> > @@ -4233,22 +4216,22 @@ namespace Gsl
> >  		public static int size (double size, double epsabs);
> >  	}
> >  
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFdfAlloc (void *state, size_t n);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFdfSet (void* state, MultiminFunctionFdf* fdf, Vector x, double* f, Vector gradient, double step_size, double tol);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFdfIterate (void* state, MultiminFunctionFdf* fdf, Vector x, double* f, Vector gradient, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFdfRestart (void* state);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultiminFdfFree (void* state);
> >  
> >  	[SimpleType]
> >  	[CCode (cname="gsl_multimin_fdfminimizer_type", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
> >  	public struct MultiminFdfminimizerType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MultiminFdfAlloc alloc;
> >  		public MultiminFdfSet @set;
> > @@ -4302,7 +4285,7 @@ namespace Gsl
> >  	namespace Fit
> >  	{
> >  		public static int linear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, out double sumsq);
> > -		public static int wlinear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, double chisq);
> > +		public static int wlinear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, out double chisq);
> >  		public static int linear_est (double x, double c0, double c1, double cov00, double cov01, double cov11, out double y, out double y_err);
> >  		public static int mul ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c1, out double cov11, out double sumsq);
> >  		public static int wmul ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c1, out double cov11, out double sumsq);
> > @@ -4331,7 +4314,7 @@ namespace Gsl
> >  	namespace Multifit
> >  	{
> >  		public static int linear (Matrix X, Vector y, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
> > -		public static int linear_svd (Matrix X, Vector y, double tol, out size_t rank, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
> > +		public static int linear_svd (Matrix X, MultifitLinearWorkspace work);
> >  		public static int wlinear (Matrix X, Vector w, Vector y, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
> >  		public static int wlinear_svd (Matrix X, Vector w, Vector y, double tol, out size_t rank, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
> >  		public static int linear_est (Vector x, Vector c, Matrix cov, out double y, out double y_err);
> > @@ -4342,27 +4325,27 @@ namespace Gsl
> >  	/*
> >  	 * Nonlinear Least-Squares Fitting
> >  	 */
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitF (Vector x, void* params, Vector f);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFAlloc (void* state, size_t n, size_t p);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFSet (void* state, MultifitFunction* function, Vector x, Vector f, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFIterate (void* state, MultifitFunction* function, Vector x, Vector f, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void MultifitFFree (void* state);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitDf (Vector x, void* params, Matrix df);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFdf (Vector x, void* params, Vector f, Matrix df);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFdfAlloc (void* state, size_t n, size_t p);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFdfSet (void* state, MultifitFunctionFdf fdf, Vector x, Vector f, Matrix J, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate int MultifitFdfIterate (void* state, MultifitFunctionFdf fdf, Vector x, Vector f, Matrix J, Vector dx);
> > -	[CCode (has_target = false)]
> > +	[CCode (has_target = false, has_typedef = false)]
> >  	public delegate void MultifitFdfFree (void* state);
> >  
> >  	[CCode (lower_case_cprefix="gsl_multifit_", cheader_filename="gsl/gsl_multifit_nlin.h")]
> > @@ -4373,7 +4356,7 @@ namespace Gsl
> >  	}
> >  
> >  	[SimpleType]
> > -	[CCode (cname="gsl_multifit_function", cheader_filename="gls/gsl_multifit_nlin.h", has_type_id = false)]
> > +	[CCode (cname="gsl_multifit_function", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
> >  	public struct MultifitFunction
> >  	{
> >  		public MultifitF f;
> > @@ -4386,7 +4369,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_multifit_fsolver_type", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
> >  	public struct MultifitFsolverType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MultifitFAlloc alloc;
> >  		public MultifitFSet @set;
> > @@ -4429,7 +4412,7 @@ namespace Gsl
> >  	[CCode (cname="gsl_multifit_fdfsolver_type", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
> >  	public struct MultifitFdfsolverType
> >  	{
> > -		public string name;
> > +		public unowned string name;
> >  		public size_t size;
> >  		public MultifitFdfAlloc alloc;
> >  		public MultifitFdfSet @set;
> > @@ -4445,8 +4428,10 @@ namespace Gsl
> >  		public MultifitFunctionFdf* fdf;
> >  		public Vector x;
> >  		public Vector f;
> > -		public Vector J;
> >  		public Vector dx;
> > +		public Vector g;
> > +		public Vector sqrt_wts;
> > +		public size_t niter;
> >  		public void* state;
> >  
> >  		[CCode (cname="gsl_multifit_fdfsolver_alloc")]
> > diff --git a/vapi/gstreamer-audio-1.0.vapi b/vapi/gstreamer-audio-1.0.vapi
> > index 16c60fdb8..21dfdfde9 100644
> > --- a/vapi/gstreamer-audio-1.0.vapi
> > +++ b/vapi/gstreamer-audio-1.0.vapi
> > @@ -341,6 +341,8 @@ namespace Gst {
> >  			public weak Gst.Audio.Info info;
> >  			[CCode (has_construct_function = false)]
> >  			protected Filter ();
> > +			[CCode (cname = "gst_audio_filter_class_add_pad_templates")]
> > +			public class void add_pad_templates (Gst.Caps allowed_caps);
> >  			[NoWrapper]
> >  			public virtual bool setup (Gst.Audio.Info info);
> >  		}
> > diff --git a/vapi/gstreamer-rtsp-1.0.vapi b/vapi/gstreamer-rtsp-1.0.vapi
> > index 988d1deb3..fafa3293b 100644
> > --- a/vapi/gstreamer-rtsp-1.0.vapi
> > +++ b/vapi/gstreamer-rtsp-1.0.vapi
> > @@ -239,7 +239,7 @@ namespace Gst {
> >  			public Gst.RTSP.Result wait_backlog_usec (int64 timeout);
> >  			public Gst.RTSP.Result write_data ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "guint")] owned uint8[] data, out uint id);
> >  		}
> > -		[CCode (cheader_filename = "gst/rtsp/rtsp.h", type_id = "gst_rtsp_extension_get_type ()")]
> > +		[CCode (cheader_filename = "gst/rtsp/rtsp.h", type_cname = "GstRTSPExtensionInterface", type_id = "gst_rtsp_extension_get_type ()")]
> >  		[GIR (name = "RTSPExtension")]
> >  		public interface Extension : GLib.Object {
> >  			public abstract Gst.RTSP.Result after_send (Gst.RTSP.Message req, Gst.RTSP.Message resp);
> > diff --git a/vapi/gstreamer-tag-1.0.vapi b/vapi/gstreamer-tag-1.0.vapi
> > index 953fe1711..1ef26138b 100644
> > --- a/vapi/gstreamer-tag-1.0.vapi
> > +++ b/vapi/gstreamer-tag-1.0.vapi
> > @@ -134,7 +134,7 @@ namespace Gst {
> >  			[NoWrapper]
> >  			public virtual Gst.Buffer render_start_tag (Gst.TagList tag_list);
> >  		}
> > -		[CCode (cheader_filename = "gst/tag/tag.h", type_id = "gst_tag_xmp_writer_get_type ()")]
> > +		[CCode (cheader_filename = "gst/tag/tag.h", type_cname = "GstTagXmpWriterInterface", type_id = "gst_tag_xmp_writer_get_type ()")]
> >  		[GIR (name = "TagXmpWriter")]
> >  		public interface XmpWriter : Gst.Element {
> >  			public void add_all_schemas ();
> > diff --git a/vapi/gstreamer-video-1.0.vapi b/vapi/gstreamer-video-1.0.vapi
> > index 8730c72ed..2129c3a4e 100644
> > --- a/vapi/gstreamer-video-1.0.vapi
> > +++ b/vapi/gstreamer-video-1.0.vapi
> > @@ -518,7 +518,7 @@ namespace Gst {
> >  			[HasEmitter]
> >  			public virtual signal void value_changed (Gst.Video.ColorBalanceChannel channel, int value);
> >  		}
> > -		[CCode (cheader_filename = "gst/video/video.h", type_id = "gst_video_direction_get_type ()")]
> > +		[CCode (cheader_filename = "gst/video/video.h", type_cname = "GstVideoDirectionInterface", type_id = "gst_video_direction_get_type ()")]
> >  		[GIR (name = "VideoDirection")]
> >  		[Version (since = "1.10")]
> >  		public interface Direction : GLib.Object {
> > @@ -560,7 +560,7 @@ namespace Gst {
> >  			[Version (since = "1.18")]
> >  			public void send_mouse_scroll_event (double x, double y, double delta_x, double delta_y);
> >  		}
> > -		[CCode (cheader_filename = "gst/video/video.h", type_id = "gst_video_orientation_get_type ()")]
> > +		[CCode (cheader_filename = "gst/video/video.h", type_cname = "GstVideoOrientationInterface", type_id = "gst_video_orientation_get_type ()")]
> >  		[GIR (name = "VideoOrientation")]
> >  		public interface Orientation : GLib.Object {
> >  			public abstract bool get_hcenter (out int center);
> > @@ -572,7 +572,7 @@ namespace Gst {
> >  			public abstract bool set_vcenter (int center);
> >  			public abstract bool set_vflip (bool flip);
> >  		}
> > -		[CCode (cheader_filename = "gst/video/video.h", type_id = "gst_video_overlay_get_type ()")]
> > +		[CCode (cheader_filename = "gst/video/video.h", type_cname = "GstVideoOverlayInterface", type_id = "gst_video_overlay_get_type ()")]
> >  		[GIR (name = "VideoOverlay")]
> >  		public interface Overlay : GLib.Object {
> >  			public abstract void expose ();
> > diff --git a/vapi/gtk4-unix-print.vapi b/vapi/gtk4-unix-print.vapi
> > index 38a742e01..6885b50ae 100644
> > --- a/vapi/gtk4-unix-print.vapi
> > +++ b/vapi/gtk4-unix-print.vapi
> > @@ -2,10 +2,10 @@
> >  
> >  [CCode (cprefix = "Gtk", gir_namespace = "Gtk", gir_version = "4.0", lower_case_cprefix = "gtk_")]
> >  namespace Gtk {
> > -	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > -	public class PageSetupUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.ShortcutManager, Gtk.Root {
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_page_setup_unix_dialog_get_type ()")]
> > +	public class PageSetupUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.Root, Gtk.ShortcutManager {
> >  		[CCode (has_construct_function = false, type = "GtkWidget*")]
> > -		public PageSetupUnixDialog (string title, Gtk.Window parent);
> > +		public PageSetupUnixDialog (string? title, Gtk.Window? parent);
> >  		public unowned Gtk.PageSetup get_page_setup ();
> >  		public unowned Gtk.PrintSettings get_print_settings ();
> >  		public void set_page_setup (Gtk.PageSetup page_setup);
> > @@ -14,7 +14,7 @@ namespace Gtk {
> >  	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> >  	public abstract class PrintBackend : GLib.Object {
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_print_job_get_type ()")]
> >  	public class PrintJob : GLib.Object {
> >  		[CCode (has_construct_function = false)]
> >  		public PrintJob (string title, Gtk.Printer printer, Gtk.PrintSettings settings, Gtk.PageSetup page_setup);
> > @@ -22,6 +22,7 @@ namespace Gtk {
> >  		public uint get_n_up ();
> >  		public Gtk.NumberUpLayout get_n_up_layout ();
> >  		public int get_num_copies ();
> > +		[CCode (array_length_pos = 0.1)]
> >  		public unowned Gtk.PageRange[] get_page_ranges ();
> >  		public Gtk.PageSet get_page_set ();
> >  		public Gtk.PrintPages get_pages ();
> > @@ -39,7 +40,7 @@ namespace Gtk {
> >  		public void set_n_up (uint n_up);
> >  		public void set_n_up_layout (Gtk.NumberUpLayout layout);
> >  		public void set_num_copies (int num_copies);
> > -		public void set_page_ranges (Gtk.PageRange[] ranges);
> > +		public void set_page_ranges ([CCode (array_length_cname = "n_ranges", array_length_pos = 1.1)] owned Gtk.PageRange[] ranges);
> >  		public void set_page_set (Gtk.PageSet page_set);
> >  		public void set_pages (Gtk.PrintPages pages);
> >  		public void set_reverse (bool reverse);
> > @@ -54,12 +55,12 @@ namespace Gtk {
> >  		public Gtk.PrintSettings settings { get; construct; }
> >  		public string title { get; construct; }
> >  		public bool track_print_status { get; set; }
> > -		public virtual signal void status_changed ();
> > +		public signal void status_changed ();
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > -	public class PrintUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.ShortcutManager, Gtk.Root {
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_print_unix_dialog_get_type ()")]
> > +	public class PrintUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.Root, Gtk.ShortcutManager {
> >  		[CCode (has_construct_function = false, type = "GtkWidget*")]
> > -		public PrintUnixDialog (string title, Gtk.Window parent);
> > +		public PrintUnixDialog (string? title, Gtk.Window? parent);
> >  		public void add_custom_tab (Gtk.Widget child, Gtk.Widget tab_label);
> >  		public int get_current_page ();
> >  		public bool get_embed_page_setup ();
> > @@ -75,7 +76,7 @@ namespace Gtk {
> >  		public void set_has_selection (bool has_selection);
> >  		public void set_manual_capabilities (Gtk.PrintCapabilities capabilities);
> >  		public void set_page_setup (Gtk.PageSetup page_setup);
> > -		public void set_settings (Gtk.PrintSettings settings);
> > +		public void set_settings (Gtk.PrintSettings? settings);
> >  		public void set_support_selection (bool support_selection);
> >  		public int current_page { get; set; }
> >  		public bool embed_page_setup { get; set; }
> > @@ -87,7 +88,7 @@ namespace Gtk {
> >  		public Gtk.Printer selected_printer { get; }
> >  		public bool support_selection { get; set; }
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_printer_get_type ()")]
> >  	public class Printer : GLib.Object {
> >  		[CCode (has_construct_function = false)]
> >  		public Printer (string name, Gtk.PrintBackend backend, bool virtual_);
> > @@ -132,9 +133,9 @@ namespace Gtk {
> >  		[NoAccessorMethod]
> >  		public bool paused { get; }
> >  		public string state_message { get; }
> > -		public virtual signal void details_acquired (bool p0);
> > +		public signal void details_acquired (bool success);
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtkunixprint.h", cprefix = "GTK_PRINT_CAPABILITY_")]
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", cprefix = "GTK_PRINT_CAPABILITY_", type_id = "gtk_print_capabilities_get_type ()")]
> >  	[Flags]
> >  	public enum PrintCapabilities {
> >  		PAGE_SET,
> > @@ -150,8 +151,8 @@ namespace Gtk {
> >  	}
> >  	[CCode (cheader_filename = "gtk/gtkunixprint.h", instance_pos = 1.9)]
> >  	public delegate void PrintJobCompleteFunc (Gtk.PrintJob print_job) throws GLib.Error;
> > -	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", instance_pos = 1.9)]
> >  	public delegate bool PrinterFunc (Gtk.Printer printer);
> >  	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > -	public static void enumerate_printers (owned Gtk.PrinterFunc func, bool wait);
> > +	public static void enumerate_printers ([CCode (delegate_target_pos = 1.33333, destroy_notify_pos = 1.66667)] owned Gtk.PrinterFunc func, bool wait);
> >  }
> > diff --git a/vapi/gtk4.vapi b/vapi/gtk4.vapi
> > index 841487e8d..99574a9c2 100644
> > --- a/vapi/gtk4.vapi
> > +++ b/vapi/gtk4.vapi
> > @@ -5301,12 +5301,16 @@ namespace Gdk {
> >  		public unowned Gdk.Rectangle? get_anchor_rect ();
> >  		public void get_offset (out int dx, out int dy);
> >  		public Gdk.Gravity get_rect_anchor ();
> > +		[Version (since = "4.2")]
> > +		public void get_shadow_width (out int left, out int right, out int top, out int bottom);
> >  		public Gdk.Gravity get_surface_anchor ();
> >  		public unowned Gdk.PopupLayout @ref ();
> >  		public void set_anchor_hints (Gdk.AnchorHints anchor_hints);
> >  		public void set_anchor_rect (Gdk.Rectangle anchor_rect);
> >  		public void set_offset (int dx, int dy);
> >  		public void set_rect_anchor (Gdk.Gravity anchor);
> > +		[Version (since = "4.2")]
> > +		public void set_shadow_width (int left, int right, int top, int bottom);
> >  		public void set_surface_anchor (Gdk.Gravity anchor);
> >  		public void unref ();
> >  	}
> > @@ -6004,6 +6008,8 @@ namespace Gsk {
> >  	public class ConicGradientNode : Gsk.RenderNode {
> >  		[CCode (has_construct_function = false, type = "GskRenderNode*")]
> >  		public ConicGradientNode (Graphene.Rect bounds, Graphene.Point center, float rotation, [CCode (array_length_cname = "n_color_stops", array_length_pos = 4.1, array_length_type = "gsize")] Gsk.ColorStop[] color_stops);
> > +		[Version (since = "4.2")]
> > +		public float get_angle ();
> >  		public unowned Graphene.Point? get_center ();
> >  		[CCode (array_length_pos = 0.1, array_length_type = "gsize")]
> >  		public unowned Gsk.ColorStop[] get_color_stops ();
> > @@ -6097,6 +6103,12 @@ namespace Gsk {
> >  		public size_t get_n_color_stops ();
> >  		public unowned Graphene.Point? get_start ();
> >  	}
> > +	[CCode (cheader_filename = "gsk/gsk.h", type_id = "gsk_ngl_renderer_get_type ()")]
> > +	public class NglRenderer : Gsk.Renderer {
> > +		[CCode (has_construct_function = false, type = "GskRenderer*")]
> > +		[Version (since = "4.2")]
> > +		public NglRenderer ();
> > +	}
> >  	[CCode (cheader_filename = "gsk/gsk.h", type_id = "gsk_opacity_node_get_type ()")]
> >  	public class OpacityNode : Gsk.RenderNode {
> >  		[CCode (has_construct_function = false, type = "GskRenderNode*")]
> > @@ -6451,7 +6463,7 @@ namespace Gtk {
> >  		public void set_license_type (Gtk.License license_type);
> >  		public void set_logo (Gdk.Paintable? logo);
> >  		public void set_logo_icon_name (string? icon_name);
> > -		public void set_program_name (string name);
> > +		public void set_program_name (string? name);
> >  		public void set_system_information (string? system_information);
> >  		public void set_translator_credits (string? translator_credits);
> >  		public void set_version (string? version);
> > @@ -7388,6 +7400,8 @@ namespace Gtk {
> >  		public bool inconsistent { get; set; }
> >  		public string label { get; set; }
> >  		public bool use_underline { get; set; }
> > +		[Version (since = "4.2")]
> > +		public virtual signal void activate ();
> >  		public virtual signal void toggled ();
> >  	}
> >  	[CCode (cheader_filename = "gtk/gtk.h", type_id = "gtk_closure_expression_get_type ()")]
> > @@ -8191,9 +8205,10 @@ namespace Gtk {
> >  		public void unref ();
> >  		public unowned Gtk.ExpressionWatch watch (GLib.Object? this_, owned Gtk.ExpressionNotify notify);
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtk.h", has_type_id = false, ref_function = "gtk_expression_watch_ref", unref_function = "gtk_expression_watch_unref")]
> > -	[Compact]
> > +	[CCode (cheader_filename = "gtk/gtk.h", ref_function = "gtk_expression_watch_ref", type_id = "gtk_expression_watch_get_type ()", unref_function = "gtk_expression_watch_unref")]
> >  	public class ExpressionWatch {
> > +		[CCode (has_construct_function = false)]
> > +		protected ExpressionWatch ();
> >  		public bool evaluate (GLib.Value value);
> >  		public unowned Gtk.ExpressionWatch @ref ();
> >  		public void unref ();
> > @@ -8697,11 +8712,15 @@ namespace Gtk {
> >  		public virtual void focus_in ();
> >  		public virtual void focus_out ();
> >  		public virtual void get_preedit_string (out string str, out Pango.AttrList attrs, out int cursor_pos);
> > +		[Version (deprecated = true, deprecated_since = "4.2")]
> >  		public virtual bool get_surrounding (out string text, out int cursor_index);
> > +		public virtual bool get_surrounding_with_selection (out string text, out int cursor_index, out int anchor_index);
> >  		public virtual void reset ();
> >  		public virtual void set_client_widget (Gtk.Widget? widget);
> >  		public virtual void set_cursor_location (Gdk.Rectangle area);
> > +		[Version (deprecated = true, deprecated_since = "4.2")]
> >  		public virtual void set_surrounding (string text, int len, int cursor_index);
> > +		public virtual void set_surrounding_with_selection (string text, int len, int cursor_index, int anchor_index);
> >  		public virtual void set_use_preedit (bool use_preedit);
> >  		[NoAccessorMethod]
> >  		public Gtk.InputHints input_hints { get; set; }
> > @@ -9114,7 +9133,7 @@ namespace Gtk {
> >  		public unowned Gtk.Adjustment get_adjustment ();
> >  		public unowned Gtk.ListBoxRow? get_row_at_index (int index_);
> >  		public unowned Gtk.ListBoxRow? get_row_at_y (int y);
> > -		public unowned Gtk.ListBoxRow get_selected_row ();
> > +		public unowned Gtk.ListBoxRow? get_selected_row ();
> >  		public GLib.List<weak Gtk.ListBoxRow> get_selected_rows ();
> >  		public Gtk.SelectionMode get_selection_mode ();
> >  		public bool get_show_separators ();
> > @@ -10642,7 +10661,7 @@ namespace Gtk {
> >  		public bool get_can_unselect ();
> >  		public unowned GLib.ListModel get_model ();
> >  		public uint get_selected ();
> > -		public void* get_selected_item ();
> > +		public unowned GLib.Object? get_selected_item ();
> >  		public void set_autoselect (bool autoselect);
> >  		public void set_can_unselect (bool can_unselect);
> >  		public void set_model (GLib.ListModel? model);
> > @@ -11083,10 +11102,6 @@ namespace Gtk {
> >  		public signal void preedit_changed (string preedit);
> >  		public signal void toggle_overwrite ();
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtk.h", has_type_id = false)]
> > -	[Compact]
> > -	public class TextBTree {
> > -	}
> >  	[CCode (cheader_filename = "gtk/gtk.h", type_id = "gtk_text_buffer_get_type ()")]
> >  	public class TextBuffer : GLib.Object {
> >  		[CCode (has_construct_function = false)]
> > @@ -12078,7 +12093,7 @@ namespace Gtk {
> >  		public int get_margin_end ();
> >  		public int get_margin_start ();
> >  		public int get_margin_top ();
> > -		public unowned string? get_name ();
> > +		public unowned string get_name ();
> >  		public unowned Gtk.Native? get_native ();
> >  		public unowned Gtk.Widget? get_next_sibling ();
> >  		public double get_opacity ();
> > @@ -12292,6 +12307,8 @@ namespace Gtk {
> >  		public unowned Gtk.Widget? get_focus ();
> >  		public bool get_focus_visible ();
> >  		public unowned Gtk.WindowGroup get_group ();
> > +		[Version (since = "4.2")]
> > +		public bool get_handle_menubar_accel ();
> >  		public bool get_hide_on_close ();
> >  		public unowned string? get_icon_name ();
> >  		public bool get_mnemonics_visible ();
> > @@ -12321,6 +12338,8 @@ namespace Gtk {
> >  		public void set_display (Gdk.Display display);
> >  		public void set_focus (Gtk.Widget? focus);
> >  		public void set_focus_visible (bool setting);
> > +		[Version (since = "4.2")]
> > +		public void set_handle_menubar_accel (bool handle_menubar_accel);
> >  		public void set_hide_on_close (bool setting);
> >  		public void set_icon_name (string? name);
> >  		public static void set_interactive_debugging (bool enable);
> > @@ -12351,6 +12370,8 @@ namespace Gtk {
> >  		public Gtk.Widget focus_widget { owned get; set; }
> >  		[NoAccessorMethod]
> >  		public bool fullscreened { get; set construct; }
> > +		[Version (since = "4.2")]
> > +		public bool handle_menubar_accel { get; set; }
> >  		public bool hide_on_close { get; set; }
> >  		public string icon_name { get; set; }
> >  		[NoAccessorMethod]
> > @@ -12852,11 +12873,6 @@ namespace Gtk {
> >  		public Gtk.Requisition? copy ();
> >  		public void free ();
> >  	}
> > -	[CCode (cheader_filename = "gtk/gtk.h", has_type_id = false)]
> > -	public struct SettingsValue {
> > -		public weak string origin;
> > -		public GLib.Value value;
> > -	}
> >  	[CCode (cheader_filename = "gtk/gtk.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gtk_text_iter_get_type ()")]
> >  	public struct TextIter {
> >  		public void assign (Gtk.TextIter other);
> > @@ -13509,7 +13525,9 @@ namespace Gtk {
> >  	public enum Ordering {
> >  		SMALLER,
> >  		EQUAL,
> > -		LARGER
> > +		LARGER;
> > +		[CCode (cheader_filename = "gtk/gtk.h")]
> > +		public static Gtk.Ordering from_cmpfunc (int cmpfunc_result);
> >  	}
> >  	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_ORIENTATION_", type_id = "gtk_orientation_get_type ()")]
> >  	public enum Orientation {
> > @@ -14103,6 +14121,8 @@ namespace Gtk {
> >  	public const int INPUT_ERROR;
> >  	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_INTERFACE_AGE")]
> >  	public const int INTERFACE_AGE;
> > +	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_INVALID_LIST_POSITION")]
> > +	public const uint INVALID_LIST_POSITION;
> >  	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_LEVEL_BAR_OFFSET_FULL")]
> >  	public const string LEVEL_BAR_OFFSET_FULL;
> >  	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_LEVEL_BAR_OFFSET_HIGH")]
> > @@ -14236,7 +14256,7 @@ namespace Gtk {
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> >  	public static void disable_setlocale ();
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> > -	public static int distribute_natural_allocation (int extra_space, uint n_requested_sizes, Gtk.RequestedSize sizes);
> > +	public static int distribute_natural_allocation (int extra_space, [CCode (array_length_cname = "n_requested_sizes", array_length_pos = 1.5, array_length_type = "guint")] Gtk.RequestedSize[] sizes);
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> >  	public static bool drag_check_threshold (Gtk.Widget widget, int start_x, int start_y, int current_x, int current_y);
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> > @@ -14258,8 +14278,6 @@ namespace Gtk {
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> >  	public static void hsv_to_rgb (float h, float s, float v, out float r, out float g, out float b);
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> > -	public static void im_modules_init ();
> > -	[CCode (cheader_filename = "gtk/gtk.h")]
> >  	public static void init ();
> >  	[CCode (cheader_filename = "gtk/gtk.h")]
> >  	public static bool init_check ();
> > diff --git a/vapi/libftdi.vapi b/vapi/libftdi.vapi
> > index 7008985a0..b98f097e0 100644
> > --- a/vapi/libftdi.vapi
> > +++ b/vapi/libftdi.vapi
> > @@ -1,4 +1,4 @@
> > -[CCode (cprefix = "FTDI_", lower_case_prefix = "ftdi_", cheader_filename = "ftdi.h")]
> > +[CCode (cprefix = "FTDI_", lower_case_cprefix = "ftdi_", cheader_filename = "ftdi.h")]
> >  namespace FTDI {
> >  
> >  	public const int DEFAULT_EEPROM_SIZE;
> > diff --git a/vapi/libwnck-3.0.vapi b/vapi/libwnck-3.0.vapi
> > index 537099c2d..9fce7617f 100644
> > --- a/vapi/libwnck-3.0.vapi
> > +++ b/vapi/libwnck-3.0.vapi
> > @@ -61,6 +61,17 @@ namespace Wnck {
> >  		public virtual signal void icon_changed ();
> >  		public virtual signal void name_changed ();
> >  	}
> > +	[CCode (cheader_filename = "libwnck/libwnck.h", type_id = "wnck_image_menu_item_get_type ()")]
> > +	public class ImageMenuItem : Gtk.MenuItem, Atk.Implementor, Gtk.Actionable, Gtk.Activatable, Gtk.Buildable {
> > +		[CCode (has_construct_function = false, type = "GtkWidget*")]
> > +		public ImageMenuItem ();
> > +		public void make_label_bold ();
> > +		public void make_label_normal ();
> > +		public void set_image_from_icon_pixbuf (Gdk.Pixbuf pixbuf);
> > +		public void set_image_from_window (Wnck.Window window);
> > +		[CCode (has_construct_function = false, type = "GtkWidget*")]
> > +		public ImageMenuItem.with_label (string label);
> > +	}
> >  	[CCode (cheader_filename = "libwnck/libwnck.h", type_id = "wnck_pager_get_type ()")]
> >  	public class Pager : Gtk.Widget, Atk.Implementor, Gtk.Buildable {
> >  		[CCode (has_construct_function = false, type = "GtkWidget*")]
> > @@ -70,6 +81,7 @@ namespace Wnck {
> >  		public void set_display_mode (Wnck.PagerDisplayMode mode);
> >  		public bool set_n_rows (int n_rows);
> >  		public bool set_orientation (Gtk.Orientation orientation);
> > +		[Version (since = "3.36")]
> >  		public void set_scroll_mode (Wnck.PagerScrollMode scroll_mode);
> >  		[Version (since = "2.2")]
> >  		public void set_shadow_type (Gtk.ShadowType shadow_type);
> > @@ -363,9 +375,11 @@ namespace Wnck {
> >  		CONTENT
> >  	}
> >  	[CCode (cheader_filename = "libwnck/libwnck.h", cprefix = "WNCK_PAGER_SCROLL_", type_id = "wnck_pager_scroll_mode_get_type ()")]
> > +	[Version (since = "3.36")]
> >  	public enum PagerScrollMode {
> >  		@2D,
> > -		@1D
> > +		@1D,
> > +		NONE
> >  	}
> >  	[CCode (cheader_filename = "libwnck/libwnck.h", cprefix = "WNCK_TASKLIST_", type_id = "wnck_tasklist_grouping_type_get_type ()")]
> >  	public enum TasklistGroupingType {
> > diff --git a/vapi/linux.vapi b/vapi/linux.vapi
> > index 25b5188f3..37441b0fa 100644
> > --- a/vapi/linux.vapi
> > +++ b/vapi/linux.vapi
> > @@ -664,7 +664,7 @@ namespace Linux {
> >                  SET_TEARSYNC
> >              }
> >  
> > -            [Flags, CCode (cname = "int", has_type_id = false, prefix = "OMAPFB_CAPS_")]
> > +            [Flags, CCode (cname = "int", has_type_id = false, cprefix = "OMAPFB_CAPS_")]
> >              public enum Caps {
> >                  GENERIC_MASK,
> >                  LCDC_MASK,
> > @@ -1644,7 +1644,10 @@ namespace Linux {
> >  
> >          [CCode (cname = "struct input_event", has_type_id = false, cheader_filename = "linux/input.h")]
> >          public struct Event {
> > +            [Version (deprecated = true, replacement = "Event.input_event_sec and Event.input_event_usec")]
> >              public Posix.timeval time;
> > +            public time_t input_event_sec;
> > +            public long input_event_usec;
> >              public uint16 type;
> >              public uint16 code;
> >              public int32 value;
> > diff --git a/vapi/metadata/Gdk-4.0.metadata b/vapi/metadata/Gdk-4.0.metadata
> > index 3053be7df..40cb0fcbf 100644
> > --- a/vapi/metadata/Gdk-4.0.metadata
> > +++ b/vapi/metadata/Gdk-4.0.metadata
> > @@ -57,5 +57,3 @@ Device
> >  
> >  // vapigen actually generates the correctly, but in away that breaks BC
> >  Rectangle.union return_void
> > -
> > -DrawingContext skip
> > diff --git a/vapi/metadata/Gio-2.0-custom.vala b/vapi/metadata/Gio-2.0-custom.vala
> > index 9bb88ae92..1b212271a 100644
> > --- a/vapi/metadata/Gio-2.0-custom.vala
> > +++ b/vapi/metadata/Gio-2.0-custom.vala
> > @@ -177,7 +177,9 @@ namespace GLib {
> >  		}
> >  	}
> >  
> > +	[CCode (has_typedef = false)]
> >  	public delegate void SimpleActionActivateCallback (SimpleAction action, Variant? parameter);
> > +	[CCode (has_typedef = false)]
> >  	public delegate void SimpleActionChangeStateCallback (SimpleAction action, Variant value);
> >  	[CCode (cheader_filename = "gio/gio.h", cname = "GAsyncReadyCallback", instance_pos = 2.9)]
> >  	public delegate void TaskReadyCallback (GLib.Object? source_object, GLib.Task task);
> > diff --git a/vapi/metadata/Gio-2.0.metadata b/vapi/metadata/Gio-2.0.metadata
> > index 51c5e7079..2da6f7838 100644
> > --- a/vapi/metadata/Gio-2.0.metadata
> > +++ b/vapi/metadata/Gio-2.0.metadata
> > @@ -55,6 +55,9 @@ dbus_address_get_for_bus_sync parent="GLib.BusType" name="get_address_sync"
> >  SETTINGS_BACKEND_EXTENSION_POINT_NAME cheader_filename="gio/gsettingsbackend.h" feature_test_macro="G_SETTINGS_ENABLE_BACKEND"
> >  SettingsBackend
> >    .* cheader_filename="gio/gsettingsbackend.h" feature_test_macro="G_SETTINGS_ENABLE_BACKEND"
> > +  .changed_tree.tree type="GLib.Tree<string,GLib.Variant>"
> > +  .flatten_tree.tree type="GLib.Tree<string,GLib.Variant>"
> > +  .write_tree.tree type="GLib.Tree<string,GLib.Variant>"
> >  
> >  Action
> >    .parameter_type nullable
> > @@ -81,11 +84,11 @@ Cancellable
> >  Credentials
> >    .get_native skip=false
> >  DatagramBased
> > -  .condition_check#virtual_method virtual name="datagram_condition_check"
> > -  .condition_wait#virtual_method virtual name="datagram_condition_wait"
> > -  .create_source#virtual_method virtual name="datagram_create_source"
> > -  .receive_messages#virtual_method virtual name="datagram_receive_messages"
> > -  .send_messages#virtual_method virtual name="datagram_send_messages"
> > +  .condition_check#virtual_method virtual name="datagram_condition_check" no_wrapper
> > +  .condition_wait#virtual_method virtual name="datagram_condition_wait" no_wrapper
> > +  .create_source#virtual_method virtual name="datagram_create_source" no_wrapper
> > +  .receive_messages#virtual_method virtual name="datagram_receive_messages" no_wrapper
> > +  .send_messages#virtual_method virtual name="datagram_send_messages" no_wrapper
> >  DataInputStream
> >    .read_* throws="GLib.IOError"
> >    .read_line_finish_utf8 skip
> > @@ -157,6 +160,7 @@ ListModel
> >    .get_item#virtual_method skip
> >    .get_item#method skip=false abstract type="GLib.Object?"
> >  ListStore
> > +  .find_with_equal_func.equal_func type_arguments="GLib.Object"
> >    .insert_sorted.compare_func type_arguments="GLib.Object"
> >    .sort.compare_func type_arguments="GLib.Object"
> >  MemoryInputStream
> > @@ -276,11 +280,11 @@ Initable
> >  PollableInputStream
> >    .create_source type="GLib.PollableSource"
> >    .read_nonblocking.buffer type="uint8[]" array_length_idx=1
> > -  .read_nonblocking#virtual_method name="read_nonblocking_fn"
> > +  .read_nonblocking#virtual_method name="read_nonblocking_fn" no_wrapper
> >  PollableOutputStream
> >    .create_source type="GLib.PollableSource"
> > -  .write_nonblocking#virtual_method name="write_nonblocking_fn"
> > -  .writev_nonblocking#virtual_method name="writev_nonblocking_fn"
> > +  .write_nonblocking#virtual_method name="write_nonblocking_fn" no_wrapper
> > +  .writev_nonblocking#virtual_method name="writev_nonblocking_fn" no_wrapper
> >  TlsClientConnection
> >    .new nullable
> >    .accepted_cas type="GLib.List<GLib.ByteArray>"
> > diff --git a/vapi/metadata/Gtk-4.0-custom.vala b/vapi/metadata/Gtk-4.0-custom.vala
> > index c3f98568b..9c600f520 100644
> > --- a/vapi/metadata/Gtk-4.0-custom.vala
> > +++ b/vapi/metadata/Gtk-4.0-custom.vala
> > @@ -39,4 +39,7 @@ namespace Gtk {
> >  		[CCode (delegate_target = false)]
> >  		public unowned Gtk.BuildableParserErrorFunc error;
> >  	}
> > +
> > +	[CCode (cname = "GTK_INVALID_LIST_POSITION")]
> > +	public const uint INVALID_LIST_POSITION;
> >  }
> > diff --git a/vapi/metadata/Gtk-4.0.metadata b/vapi/metadata/Gtk-4.0.metadata
> > index 76cfd5e3b..d918d3c8e 100644
> > --- a/vapi/metadata/Gtk-4.0.metadata
> > +++ b/vapi/metadata/Gtk-4.0.metadata
> > @@ -6,10 +6,22 @@
> >  * cheader_filename="gtk/gtk.h"
> >  IMContext cheader_filename="gtk/gtk.h,gtk/gtkimmodule.h"
> >  
> > +// Needs to be in gtk4-unix-print
> > +PageSetupUnixDialog skip
> > +Printer skip
> > +PrinterFunc skip
> > +PrintBackend skip
> > +PrintCapabilities skip
> > +PrintJob skip
> > +PrintJobCompleteFunc skip
> > +PrintUnixDialog skip
> > +enumerate_printers skip
> > +
> >  // Causes vapigen issues, not sure why -- <union> without name
> >  
> >  // G-I doesn't support structs
> >  Border struct
> > +ExpressionWatch compact=false
> >  Requisition struct
> >  TextIter struct
> >  TreeIter struct
> > diff --git a/vapi/metadata/GtkUnixPrint-4.0-custom.vala b/vapi/metadata/GtkUnixPrint-4.0-custom.vala
> > new file mode 100644
> > index 000000000..88fb76f6b
> > --- /dev/null
> > +++ b/vapi/metadata/GtkUnixPrint-4.0-custom.vala
> > @@ -0,0 +1,17 @@
> > +namespace Gtk {
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > +	public class Printer : GLib.Object {
> > +		[CCode (cname = "gtk_printer_accepts_pdf")]
> > +		public bool get_accepts_pdf ();
> > +		[CCode (cname = "gtk_printer_accepts_ps")]
> > +		public bool get_accepts_ps ();
> > +		[CCode (cname = "gtk_printer_is_virtual")]
> > +		public bool get_is_virtual ();
> > +		public Gtk.PrintBackend backend { get; construct; }
> > +	}
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
> > +	public abstract class PrintBackend : GLib.Object {
> > +	}
> > +	[CCode (cheader_filename = "gtk/gtkunixprint.h", instance_pos = 1.9)]
> > +	public delegate void PrintJobCompleteFunc (Gtk.PrintJob print_job) throws GLib.Error;
> > +}
> > diff --git a/vapi/metadata/GtkUnixPrint-4.0.metadata b/vapi/metadata/GtkUnixPrint-4.0.metadata
> > new file mode 100644
> > index 000000000..c595b6bde
> > --- /dev/null
> > +++ b/vapi/metadata/GtkUnixPrint-4.0.metadata
> > @@ -0,0 +1,12 @@
> > +* cheader_filename="gtk/gtkunixprint.h"
> > +* skip
> > +
> > +PageSetupUnixDialog skip=false
> > +Printer skip=false
> > +PrinterFunc skip=false
> > +//PrintBackend skip=false
> > +PrintCapabilities skip=false
> > +PrintJob skip=false
> > +//PrintJobCompleteFunc skip=false
> > +PrintUnixDialog skip=false
> > +enumerate_printers skip=false
> > diff --git a/vapi/packages/gtk4-unix-print/gtk4-unix-print.excludes b/vapi/packages/gtk4-unix-print/gtk4-unix-print.excludes
> > deleted file mode 100644
> > index e69de29bb..000000000
> > diff --git a/vapi/packages/gtk4-unix-print/gtk4-unix-print.files b/vapi/packages/gtk4-unix-print/gtk4-unix-print.files
> > diff --git a/vapi/posix.vapi b/vapi/posix.vapi
> > index 24c07b326..3bc992d55 100644
> > --- a/vapi/posix.vapi
> > +++ b/vapi/posix.vapi
> > @@ -2496,11 +2496,11 @@ namespace Posix {
> >  	[CCode (cheader_filename = "unistd.h")]
> >  	public int execlp (string path, params string[] arg);
> >  	[CCode (cheader_filename = "unistd.h")]
> > -	public int execv (string path, [CCode (array_length = false, null_terminated = true)] string[] arg);
> > +	public int execv (string path, [CCode (array_length = false, array_null_terminated = true)] string[] arg);
> >  	[CCode (cheader_filename = "unistd.h")]
> > -	public int execvp (string path, [CCode (array_length = false, null_terminated = true)] string[] arg);
> > +	public int execvp (string path, [CCode (array_length = false, array_null_terminated = true)] string[] arg);
> >  	[CCode (cheader_filename = "unistd.h")]
> > -	public int pipe ([CCode (array_length = false, null_terminated = false)] int[] pipefd);
> > +	public int pipe ([CCode (array_length = false, array_null_terminated = false)] int[] pipefd);
> >  	[CCode (cheader_filename = "unistd.h")]
> >  	public ssize_t read (int fd, void* buf, size_t count);
> >  	[CCode (cheader_filename = "unistd.h")]
> > diff --git a/vapi/webkit2gtk-4.0.vapi b/vapi/webkit2gtk-4.0.vapi
> > index b50ca9885..a7616e387 100644
> > --- a/vapi/webkit2gtk-4.0.vapi
> > +++ b/vapi/webkit2gtk-4.0.vapi
> > @@ -471,14 +471,24 @@ namespace WebKit {
> >  		public unowned WebKit.JavascriptResult @ref ();
> >  		public void unref ();
> >  	}
> > +	[CCode (cheader_filename = "webkit2/webkit2.h", type_id = "webkit_media_key_system_permission_request_get_type ()")]
> > +	public class MediaKeySystemPermissionRequest : GLib.Object, WebKit.PermissionRequest {
> > +		[CCode (has_construct_function = false)]
> > +		protected MediaKeySystemPermissionRequest ();
> > +	}
> >  	[CCode (cheader_filename = "webkit2/webkit2.h", ref_function = "webkit_mime_info_ref", type_id = "webkit_mime_info_get_type ()", unref_function = "webkit_mime_info_unref")]
> >  	[Compact]
> >  	public class MimeInfo {
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned string get_description ();
> >  		[CCode (array_length = false, array_null_terminated = true)]
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned string[] get_extensions ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned string get_mime_type ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned WebKit.MimeInfo @ref ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public void unref ();
> >  	}
> >  	[CCode (cheader_filename = "webkit2/webkit2.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "webkit_navigation_action_get_type ()")]
> > @@ -614,9 +624,13 @@ namespace WebKit {
> >  	public class Plugin : GLib.Object {
> >  		[CCode (has_construct_function = false)]
> >  		protected Plugin ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned string get_description ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned GLib.List<WebKit.MimeInfo> get_mime_info_list ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned string get_name ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public unowned string get_path ();
> >  	}
> >  	[CCode (cheader_filename = "webkit2/webkit2.h", type_id = "webkit_pointer_lock_permission_request_get_type ()")]
> > @@ -729,7 +743,7 @@ namespace WebKit {
> >  		public uint16 get_port ();
> >  		[Version (since = "2.16")]
> >  		public unowned string? get_protocol ();
> > -		[Version (since = "2.16")]
> > +		[Version (deprecated = true, deprecated_since = "2.32", since = "2.16")]
> >  		public bool is_opaque ();
> >  		[Version (since = "2.16")]
> >  		public unowned WebKit.SecurityOrigin @ref ();
> > @@ -760,7 +774,7 @@ namespace WebKit {
> >  		public uint32 get_default_font_size ();
> >  		public uint32 get_default_monospace_font_size ();
> >  		public bool get_draw_compositing_indicators ();
> > -		[Version (since = "2.2")]
> > +		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.2")]
> >  		public bool get_enable_accelerated_2d_canvas ();
> >  		[Version (since = "2.24")]
> >  		public bool get_enable_back_forward_navigation_gestures ();
> > @@ -790,6 +804,7 @@ namespace WebKit {
> >  		public bool get_enable_mock_capture_devices ();
> >  		public bool get_enable_offline_web_application_cache ();
> >  		public bool get_enable_page_cache ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public bool get_enable_plugins ();
> >  		[Version (deprecated = true, deprecated_since = "2.16.")]
> >  		public bool get_enable_private_browsing ();
> > @@ -836,7 +851,7 @@ namespace WebKit {
> >  		public void set_default_font_size (uint32 font_size);
> >  		public void set_default_monospace_font_size (uint32 font_size);
> >  		public void set_draw_compositing_indicators (bool enabled);
> > -		[Version (since = "2.2")]
> > +		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.2")]
> >  		public void set_enable_accelerated_2d_canvas (bool enabled);
> >  		[Version (since = "2.24")]
> >  		public void set_enable_back_forward_navigation_gestures (bool enabled);
> > @@ -866,6 +881,7 @@ namespace WebKit {
> >  		public void set_enable_mock_capture_devices (bool enabled);
> >  		public void set_enable_offline_web_application_cache (bool enabled);
> >  		public void set_enable_page_cache (bool enabled);
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public void set_enable_plugins (bool enabled);
> >  		[Version (deprecated = true, deprecated_since = "2.16.")]
> >  		public void set_enable_private_browsing (bool enabled);
> > @@ -913,7 +929,7 @@ namespace WebKit {
> >  		public uint default_font_size { get; set construct; }
> >  		public uint default_monospace_font_size { get; set construct; }
> >  		public bool draw_compositing_indicators { get; set construct; }
> > -		[Version (since = "2.2")]
> > +		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.2")]
> >  		public bool enable_accelerated_2d_canvas { get; set construct; }
> >  		[Version (since = "2.24")]
> >  		public bool enable_back_forward_navigation_gestures { get; set construct; }
> > @@ -943,6 +959,7 @@ namespace WebKit {
> >  		public bool enable_mock_capture_devices { get; set construct; }
> >  		public bool enable_offline_web_application_cache { get; set construct; }
> >  		public bool enable_page_cache { get; set construct; }
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public bool enable_plugins { get; set construct; }
> >  		[Version (deprecated = true, deprecated_since = "2.16.")]
> >  		public bool enable_private_browsing { get; set construct; }
> > @@ -1073,6 +1090,10 @@ namespace WebKit {
> >  		public void remove_filter (WebKit.UserContentFilter filter);
> >  		[Version (since = "2.26")]
> >  		public void remove_filter_by_id (string filter_id);
> > +		[Version (since = "2.32")]
> > +		public void remove_script (WebKit.UserScript script);
> > +		[Version (since = "2.32")]
> > +		public void remove_style_sheet (WebKit.UserStyleSheet stylesheet);
> >  		[Version (since = "2.8")]
> >  		public void unregister_script_message_handler (string name);
> >  		[Version (since = "2.22")]
> > @@ -1095,11 +1116,11 @@ namespace WebKit {
> >  		[Version (since = "2.28")]
> >  		public UserMessage (string name, GLib.Variant? parameters);
> >  		[Version (since = "2.28")]
> > -		public unowned GLib.UnixFDList get_fd_list ();
> > +		public unowned GLib.UnixFDList? get_fd_list ();
> >  		[Version (since = "2.28")]
> >  		public unowned string get_name ();
> >  		[Version (since = "2.28")]
> > -		public unowned GLib.Variant get_parameters ();
> > +		public unowned GLib.Variant? get_parameters ();
> >  		[Version (since = "2.28")]
> >  		public void send_reply (WebKit.UserMessage reply);
> >  		[CCode (has_construct_function = false)]
> > @@ -1161,6 +1182,7 @@ namespace WebKit {
> >  		public unowned string get_favicon_database_directory ();
> >  		[Version (since = "2.26")]
> >  		public unowned WebKit.GeolocationManager get_geolocation_manager ();
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public async GLib.List<WebKit.Plugin> get_plugins (GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[Version (since = "2.4")]
> >  		public WebKit.ProcessModel get_process_model ();
> > @@ -1170,6 +1192,7 @@ namespace WebKit {
> >  		public bool get_spell_checking_enabled ();
> >  		[CCode (array_length = false, array_null_terminated = true)]
> >  		public unowned string[] get_spell_checking_languages ();
> > +		[Version (deprecated = true, deprecated_since = "2.32.")]
> >  		public WebKit.TLSErrorsPolicy get_tls_errors_policy ();
> >  		[Version (since = "2.30")]
> >  		public bool get_use_system_appearance_for_scrollbars ();
> > @@ -1188,6 +1211,7 @@ namespace WebKit {
> >  		public void register_uri_scheme (string scheme, owned WebKit.URISchemeRequestCallback callback);
> >  		[Version (since = "2.28")]
> >  		public void send_message_to_all_extensions (WebKit.UserMessage message);
> > +		[Version (deprecated = true, deprecated_since = "2.32")]
> >  		public void set_additional_plugins_directory (string directory);
> >  		[Version (since = "2.18")]
> >  		public void set_automation_allowed (bool allowed);
> > @@ -1195,7 +1219,7 @@ namespace WebKit {
> >  		[Version (deprecated = true, deprecated_since = "2.10.")]
> >  		public void set_disk_cache_directory (string directory);
> >  		public void set_favicon_database_directory (string? path);
> > -		[Version (since = "2.16")]
> > +		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.16")]
> >  		public void set_network_proxy_settings (WebKit.NetworkProxyMode proxy_mode, WebKit.NetworkProxySettings? proxy_settings);
> >  		public void set_preferred_languages ([CCode (array_length = false, array_null_terminated = true)] string[]? languages);
> >  		[Version (since = "2.4")]
> > @@ -1204,6 +1228,7 @@ namespace WebKit {
> >  		public void set_sandbox_enabled (bool enabled);
> >  		public void set_spell_checking_enabled (bool enabled);
> >  		public void set_spell_checking_languages ([CCode (array_length = false, array_null_terminated = true)] string[] languages);
> > +		[Version (deprecated = true, deprecated_since = "2.32.")]
> >  		public void set_tls_errors_policy (WebKit.TLSErrorsPolicy policy);
> >  		[Version (since = "2.30")]
> >  		public void set_use_system_appearance_for_scrollbars (bool enabled);
> > @@ -1526,14 +1551,20 @@ namespace WebKit {
> >  		public bool get_persistent_credential_storage_enabled ();
> >  		[Version (since = "2.30")]
> >  		public unowned string? get_service_worker_registrations_directory ();
> > +		[Version (since = "2.32")]
> > +		public WebKit.TLSErrorsPolicy get_tls_errors_policy ();
> >  		[Version (deprecated = true, deprecated_since = "2.24.", since = "2.10")]
> >  		public unowned string? get_websql_directory ();
> >  		[Version (since = "2.16")]
> >  		public async bool remove (WebKit.WebsiteDataTypes types, GLib.List<WebKit.WebsiteData> website_data, GLib.Cancellable? cancellable = null) throws GLib.Error;
> >  		[Version (since = "2.30")]
> >  		public void set_itp_enabled (bool enabled);
> > +		[Version (since = "2.32")]
> > +		public void set_network_proxy_settings (WebKit.NetworkProxyMode proxy_mode, WebKit.NetworkProxySettings? proxy_settings);
> >  		[Version (since = "2.30")]
> >  		public void set_persistent_credential_storage_enabled (bool enabled);
> > +		[Version (since = "2.32")]
> > +		public void set_tls_errors_policy (WebKit.TLSErrorsPolicy policy);
> >  		[Version (since = "2.10")]
> >  		public string base_cache_directory { get; construct; }
> >  		[Version (since = "2.10")]
> > @@ -1983,6 +2014,9 @@ namespace WebKit {
> >  	[CCode (cheader_filename = "webkit2/webkit2.h")]
> >  	public static uint get_minor_version ();
> >  	[CCode (cheader_filename = "webkit2/webkit2.h")]
> > +	[Version (since = "2.32")]
> > +	public static unowned string media_key_system_permission_get_name (WebKit.MediaKeySystemPermissionRequest request);
> > +	[CCode (cheader_filename = "webkit2/webkit2.h")]
> >  	[Version (since = "2.24")]
> >  	public static string? uri_for_display (string uri);
> >  	[CCode (cheader_filename = "webkit2/webkit2.h")]
> > diff --git a/vapi/webkit2gtk-web-extension-4.0.vapi b/vapi/webkit2gtk-web-extension-4.0.vapi
> > index f0c03aabb..893236c56 100644
> > --- a/vapi/webkit2gtk-web-extension-4.0.vapi
> > +++ b/vapi/webkit2gtk-web-extension-4.0.vapi
> > @@ -4104,11 +4104,11 @@ namespace WebKit {
> >  		public UserMessage (string name, GLib.Variant? parameters);
> >  		public static GLib.Quark error_quark ();
> >  		[Version (since = "2.28")]
> > -		public unowned GLib.UnixFDList get_fd_list ();
> > +		public unowned GLib.UnixFDList? get_fd_list ();
> >  		[Version (since = "2.28")]
> >  		public unowned string get_name ();
> >  		[Version (since = "2.28")]
> > -		public unowned GLib.Variant get_parameters ();
> > +		public unowned GLib.Variant? get_parameters ();
> >  		[Version (since = "2.28")]
> >  		public void send_reply (WebKit.UserMessage reply);
> >  		[CCode (has_construct_function = false)]
> > diff --git a/vapi/zlib.vapi b/vapi/zlib.vapi
> > index 2ce34ad16..6f76ba941 100644
> > --- a/vapi/zlib.vapi
> > +++ b/vapi/zlib.vapi
> > @@ -139,7 +139,7 @@ namespace ZLib {
> >  		public int inflate (int flush);
> >  		[CCode (cname = "inflateSetDictionary")]
> >  		public int set_dictionary ([CCode (array_length_type = "guint")] uint8[] dictionary);
> > -		[CCode (cnmae = "inflateSync")]
> > +		[CCode (cname = "inflateSync")]
> >  		public int sync ();
> >  		public int reset ();
> >  		public int prime (int bits, int value);
> 
> 
> -- 
> Sebastian Ramacher



-- 
Sebastian Ramacher

Attachment: signature.asc
Description: PGP signature


Reply to: