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

Bug#986646: marked as done (unblock: vala/0.48.16-1)



Your message dated Tue, 13 Apr 2021 15:40:20 +0200
with message-id <20210413134020.GA31744@ramacher.at>
and subject line Re: Bug#986646: (no subject)
has caused the Debian Bug report #986646,
regarding unblock: vala/0.48.16-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
986646: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=986646
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
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/429b7194a9a520dc4a057db8aa1257520e686fdd

[ 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/43

[ 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/10166000cbf8963cfebae5e15fa0f13b15791308...429b7194a9a520dc4a057db8aa1257520e686fdd

unblock vala/0.48.16-1
diff --git a/NEWS b/NEWS
index e78d744d0..4bf72f071 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,26 @@
+Vala 0.48.16
+============
+ * Various improvements and bug fixes:
+  - codegen:
+    + Improve handling of ellipsis parameter in get_ccode_name()
+    + Fix default value of get_ccode_destroy_notify_pos()
+    + Don't override valid target/destroy of previous lambda argument [#59]
+    + Don't call *_instance_init() in compact class chainup
+  - vala: Mark tranformed static member-access as qualified [#270]
+  - girwriter: namespace expects "c:symbol-prefixes" attribute [#1038]
+  - girwriter: Don't use instance-parameter inside callback [#1167]
+  - girparser,libvaladoc/girimporter: Don't guess length of xml header, iterate
+    forward to <repository>
+  - libvaladoc/girimporter: parse_constant() use "c:identifier" attribute first
+
+ * Bindings:
+  - rest-0.7: Fix OAuthProxyAuthCallback binding
+  - gtk+-3.0: Fix ModuleInitFunc binding
+  - gio-2.0: Fix TlsPassword.get_value() binding
+  - Fix several bindings which lead to invalid code by using them in:
+    javascriptcoregtk-4.0, libusb, libusb-1.0, pixman-1,
+    webkit2gtk-web-extension-4.0, x11, zlib,
+
 Vala 0.48.15
 ============
  * Various improvements and bug fixes:
diff --git a/codegen/valaccode.vala b/codegen/valaccode.vala
index 7671b2c50..9b1da33f7 100644
--- a/codegen/valaccode.vala
+++ b/codegen/valaccode.vala
@@ -365,12 +365,7 @@ namespace Vala {
 		if (a != null && a.has_argument ("destroy_notify_pos")) {
 			return a.get_double ("destroy_notify_pos");
 		}
-		if (node is Parameter) {
-			unowned Parameter param = (Parameter) node;
-			return get_ccode_pos (param) + 0.1;
-		} else {
-			return -3;
-		}
+		return get_ccode_delegate_target_pos (node) + 0.01;
 	}
 
 	public static bool get_ccode_delegate_target (CodeNode node) {
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index 851778171..9bfe9db59 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -606,7 +606,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 			ccode.add_return (new CCodeIdentifier ("result"));
 
 			ccode.close ();
-			ccode.add_return (new CCodeIdentifier ("NULL"));
+			ccode.add_return (new CCodeConstant ("NULL"));
 		} else {
 			// only dup if length > 0, this deals with negative lengths and returns NULL
 			var length_check = new CCodeBinaryExpression (CCodeBinaryOperator.GREATER_THAN, new CCodeIdentifier ("length"), new CCodeConstant ("0"));
@@ -644,7 +644,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 			}
 
 			ccode.close ();
-			ccode.add_return (new CCodeIdentifier ("NULL"));
+			ccode.add_return (new CCodeConstant ("NULL"));
 		}
 
 		// append to file
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala
index e647b4152..b1e84583e 100644
--- a/codegen/valaccodeattribute.vala
+++ b/codegen/valaccodeattribute.vala
@@ -771,7 +771,18 @@ public class Vala.CCodeAttribute : AttributeCache {
 				}
 			} else if (sym is Signal) {
 				return Symbol.camel_case_to_lower_case (sym.name).replace ("_", "-");;
-			} else if (sym is LocalVariable || sym is Parameter) {
+			} else if (sym is LocalVariable) {
+				unowned string name = sym.name;
+				if (CCodeBaseModule.reserved_identifiers.contains (name)) {
+					return "_%s_".printf (name);
+				} else {
+					return name;
+				}
+			} else if (sym is Parameter) {
+				unowned Parameter param = (Parameter) sym;
+				if (param.ellipsis) {
+					return "...";
+				}
 				unowned string name = sym.name;
 				if (CCodeBaseModule.reserved_identifiers.contains (name)) {
 					return "_%s_".printf (name);
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 412ec82d4..282e6aafd 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -1233,7 +1233,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 							ccode.add_assignment (get_delegate_target_cvalue (field_value), new CCodeIdentifier ("self"));
 							if (delegate_type.is_disposable ()) {
-								ccode.add_assignment (get_delegate_target_destroy_notify_cvalue (field_value), new CCodeIdentifier ("NULL"));
+								ccode.add_assignment (get_delegate_target_destroy_notify_cvalue (field_value), new CCodeConstant ("NULL"));
 							}
 						}
 					}
@@ -4952,7 +4952,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 								var delegate_target = get_delegate_target_cexpression (arg, out delegate_target_destroy_notify);
 								carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), delegate_target);
 								if (deleg_type.is_disposable ()) {
-									carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param) + 0.01), delegate_target_destroy_notify);
+									carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (param)), delegate_target_destroy_notify);
 								}
 							}
 						}
@@ -5984,7 +5984,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 			if (sink_func != "") {
 				if (type.nullable) {
-					var is_not_null = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, result.cvalue, new CCodeIdentifier ("NULL"));
+					var is_not_null = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, result.cvalue, new CCodeConstant ("NULL"));
 					ccode.open_if (is_not_null);
 				}
 
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index b0770a5a0..dc54d636c 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -77,7 +77,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				if (deleg_type.is_disposable ()) {
 					generate_type_declaration (delegate_target_destroy_type, decl_space);
 					cparam = new CCodeParameter (get_delegate_target_destroy_notify_cname ("result"), get_ccode_name (delegate_target_destroy_type) + "*");
-					cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (d) + 0.01), cparam);
+					cparam_map.set (get_param_pos (get_ccode_destroy_notify_pos (d)), cparam);
 				}
 			}
 		}
@@ -244,7 +244,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (d)), cparam);
 				if (deleg_type.is_disposable ()) {
 					cparam = new CCodeParameter (get_delegate_target_destroy_notify_cname ("result"), get_ccode_name (delegate_target_destroy_type) + "*");
-					cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (d) + 0.01), cparam);
+					cparam_map.set (get_param_pos (get_ccode_destroy_notify_pos (d)), cparam);
 				}
 			}
 		} else if (d.return_type.is_real_non_null_struct_type ()) {
@@ -343,7 +343,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 					carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), ctarget);
 					if (deleg_type.is_disposable ()) {
 						var ctarget_destroy_notify = new CCodeIdentifier (get_ccode_delegate_target_destroy_notify_name (d_params.get (i)));
-						carg_map.set (get_param_pos (get_ccode_delegate_target_pos (m) + 0.01), ctarget_destroy_notify);
+						carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (m)), ctarget_destroy_notify);
 					}
 				}
 			}
@@ -369,7 +369,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				carg_map.set (get_param_pos (get_ccode_delegate_target_pos (m)), ctarget);
 				if (deleg_type.is_disposable ()) {
 					var ctarget_destroy_notify = new CCodeIdentifier (get_delegate_target_destroy_notify_cname ("result"));
-					carg_map.set (get_param_pos (get_ccode_delegate_target_pos (m) + 0.01), ctarget_destroy_notify);
+					carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (m)), ctarget_destroy_notify);
 				}
 			}
 		} else if (m.return_type.is_real_non_null_struct_type ()) {
@@ -488,9 +488,9 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				}
 				if (deleg_type.is_disposable ()) {
 					cparam = new CCodeParameter (get_ccode_delegate_target_destroy_notify_name (param), target_destroy_notify_ctypename);
-					cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (param) + 0.01), cparam);
+					cparam_map.set (get_param_pos (get_ccode_destroy_notify_pos (param)), cparam);
 					if (carg_map != null) {
-						carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param) + 0.01), get_cexpression (cparam.name));
+						carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (param)), get_cexpression (cparam.name));
 					}
 				}
 			}
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 461e89735..42a7fcaa0 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -432,12 +432,17 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 									closure_new.add_argument (new CCodeCastExpression (cexpr, "GCallback"));
 									closure_new.add_argument (delegate_target);
 									closure_new.add_argument (new CCodeCastExpression (delegate_target_destroy_notify, "GClosureNotify"));
-									cexpr = new CCodeConditionalExpression (new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, cexpr, new CCodeIdentifier ("NULL")), new CCodeIdentifier ("NULL"), closure_new);
+									cexpr = new CCodeConditionalExpression (new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, cexpr, new CCodeConstant ("NULL")), new CCodeConstant ("NULL"), closure_new);
 								} else {
-									carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), delegate_target);
-									if (deleg_type.is_disposable ()) {
-										assert (delegate_target_destroy_notify != null);
-										carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param) + 0.01), delegate_target_destroy_notify);
+									// Override previously given target/destroy only if it was NULL
+									// TODO https://gitlab.gnome.org/GNOME/vala/issues/59
+									var node = carg_map.get (get_param_pos (get_ccode_delegate_target_pos (param)));
+									if (node == null || (node is CCodeConstant && ((CCodeConstant) node).name == "NULL")) {
+										carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), delegate_target);
+										if (deleg_type.is_disposable ()) {
+											assert (delegate_target_destroy_notify != null);
+											carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (param)), delegate_target_destroy_notify);
+										}
 									}
 								}
 							}
@@ -491,7 +496,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 									temp_var = get_temp_variable (delegate_target_destroy_type, true, null, true);
 									emit_temp_var (temp_var);
 									set_delegate_target_destroy_notify (arg, get_variable_cexpression (temp_var.name));
-									carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param) + 0.01), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_delegate_target_destroy_notify (arg)));
+									carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (param)), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_delegate_target_destroy_notify (arg)));
 								}
 							}
 						}
@@ -612,7 +617,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 
 					emit_temp_var (temp_var);
 
-					out_arg_map.set (get_param_pos (get_ccode_delegate_target_pos (m) + 0.01), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, temp_ref));
+					out_arg_map.set (get_param_pos (get_ccode_destroy_notify_pos (m)), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, temp_ref));
 
 					set_delegate_target_destroy_notify (expr, temp_ref);
 				} else {
@@ -677,7 +682,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 
 					emit_temp_var (temp_var);
 
-					out_arg_map.set (get_param_pos (get_ccode_delegate_target_pos (deleg) + 0.01), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, temp_ref));
+					out_arg_map.set (get_param_pos (get_ccode_destroy_notify_pos (deleg)), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, temp_ref));
 
 					set_delegate_target_destroy_notify (expr, temp_ref);
 				}
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index f15c660ee..f29463ea4 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -89,9 +89,9 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 				}
 				if (deleg_type.is_disposable ()) {
 					cparam = new CCodeParameter (get_delegate_target_destroy_notify_cname ("result"), get_ccode_name (delegate_target_destroy_type) + "*");
-					cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (m) + 0.01), cparam);
+					cparam_map.set (get_param_pos (get_ccode_destroy_notify_pos (m)), cparam);
 					if (carg_map != null) {
-						carg_map.set (get_param_pos (get_ccode_delegate_target_pos (m) + 0.01), get_cexpression (cparam.name));
+						carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (m)), get_cexpression (cparam.name));
 					}
 				}
 			}
@@ -645,7 +645,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 							ccode.add_assignment (get_this_cexpression (), ccall);
 						}
 
-						if (cl.base_class == null) {
+						if (cl.base_class == null && !(((CreationMethod) m).chain_up && cl.is_compact)) {
 							var cinitcall = new CCodeFunctionCall (new CCodeIdentifier ("%s_instance_init".printf (get_ccode_lower_case_name (cl, null))));
 							cinitcall.add_argument (get_this_cexpression ());
 							if (!cl.is_compact) {
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala
index 4cc54ff13..96e9a307e 100644
--- a/codegen/valagirwriter.vala
+++ b/codegen/valagirwriter.vala
@@ -351,7 +351,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		}
 		string? csymbol_prefix = get_ccode_lower_case_suffix (ns);
 		if (csymbol_prefix != null) {
-			buffer.append_printf (" c:symbol-prefix=\"%s\"", csymbol_prefix);
+			buffer.append_printf (" c:symbol-prefixes=\"%s\"", csymbol_prefix);
 		}
 		buffer.append_printf (">\n");
 		indent++;
@@ -1125,7 +1125,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf ("</%s>\n", tag_type);
 	}
 
-	private void write_params_and_return (List<Parameter> params, List<TypeParameter>? type_params, DataType? return_type, bool return_array_length, string? return_comment = null, bool constructor = false, Parameter? instance_param = null, bool user_data = false) {
+	private void write_params_and_return (string tag_name, List<Parameter> params, List<TypeParameter>? type_params, DataType? return_type, bool return_array_length, string? return_comment = null, bool constructor = false, Parameter? instance_param = null, bool user_data = false) {
 		int last_index = 0;
 		bool ret_is_struct = return_type != null && return_type.is_real_non_null_struct_type ();
 
@@ -1169,7 +1169,12 @@ public class Vala.GIRWriter : CodeVisitor {
 					type.nullable = true;
 				}
 				int skip = 0;
-				write_param_or_return (type, "instance-parameter", ref skip, false, "self");
+				if (tag_name == "callback") {
+					write_param_or_return (type, "parameter", ref skip, false, "self");
+					index++;
+				} else {
+					write_param_or_return (type, "instance-parameter", ref skip, false, "self");
+				}
 			}
 
 			if (type_params != null) {
@@ -1180,9 +1185,9 @@ public class Vala.GIRWriter : CodeVisitor {
 			}
 
 			foreach (Parameter param in params) {
-				write_param_or_return (param.variable_type, "parameter", ref index, get_ccode_array_length (param), param.name, get_parameter_comment (param), param.direction, false, false, param.ellipsis || param.params_array);
+				write_param_or_return (param.variable_type, "parameter", ref index, get_ccode_array_length (param), get_ccode_name (param), get_parameter_comment (param), param.direction, false, false, param.ellipsis || param.params_array);
 
-				write_implicit_params (param.variable_type, ref index, get_ccode_array_length (param), param.name, param.direction);
+				write_implicit_params (param.variable_type, ref index, get_ccode_array_length (param), get_ccode_name (param), param.direction);
 			}
 
 			if (ret_is_struct) {
@@ -1234,7 +1239,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 		write_doc (get_delegate_comment (cb));
 
-		write_params_and_return (cb.get_parameters (), cb.get_type_parameters (), cb.return_type, get_ccode_array_length (cb), get_delegate_return_comment (cb), false, null, cb.has_target);
+		write_params_and_return ("callback", cb.get_parameters (), cb.get_type_parameters (), cb.return_type, get_ccode_array_length (cb), get_delegate_return_comment (cb), false, null, cb.has_target);
 
 		indent--;
 		write_indent ();
@@ -1359,7 +1364,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			write_doc (get_method_comment (m));
 		}
 
-		write_params_and_return (params, m.get_type_parameters (), return_type, get_ccode_array_length (m), return_comment, false, m.this_parameter);
+		write_params_and_return (tag_name, params, m.get_type_parameters (), return_type, get_ccode_array_length (m), return_comment, false, m.this_parameter);
 
 		indent--;
 		write_indent ();
@@ -1407,7 +1412,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		if (m.parent_symbol is Class) {
 			type_params = ((Class) m.parent_symbol).get_type_parameters ();
 		}
-		write_params_and_return (m.get_parameters (), type_params, datatype, false, get_method_return_comment (m), true);
+		write_params_and_return (tag_name, m.get_parameters (), type_params, datatype, false, get_method_return_comment (m), true);
 
 		indent--;
 		write_indent ();
@@ -1484,7 +1489,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 		write_doc (get_signal_comment (sig));
 
-		write_params_and_return (sig.get_parameters (), null, sig.return_type, false, get_signal_return_comment (sig));
+		write_params_and_return ("glib:signal", sig.get_parameters (), null, sig.return_type, false, get_signal_return_comment (sig));
 
 		indent--;
 		write_indent ();
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 5d3960ba7..5c79f1ef4 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -997,7 +997,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 		var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_return_val_if_fail"));
 		ccall.add_argument (subccall);
-		ccall.add_argument (new CCodeIdentifier ("NULL"));
+		ccall.add_argument (new CCodeConstant ("NULL"));
 		ccode.add_expression (ccall);
 
 		ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_param_spec_internal"));
@@ -1176,7 +1176,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 		var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_return_val_if_fail"));
 		ccall.add_argument (ccall_typecheck);
-		ccall.add_argument (new CCodeIdentifier ("NULL"));
+		ccall.add_argument (new CCodeConstant ("NULL"));
 		ccode.add_expression (ccall);
 
 		ccode.add_return (vpointer);
@@ -2329,8 +2329,8 @@ public class Vala.GTypeModule : GErrorModule {
 			get_value.add_argument ((CCodeExpression) get_ccodenode (((MemberAccess) expr.call).inner));
 
 			ccode.add_assignment (get_variable_cexpression (temp_var.name), get_value);
-			var is_null_value = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, get_variable_cexpression (temp_var.name), new CCodeIdentifier ("NULL"));
-			set_cvalue (expr, new CCodeConditionalExpression (is_null_value, new CCodeMemberAccess.pointer (get_variable_cexpression (temp_var.name), "value_name"), new CCodeIdentifier ("NULL")));
+			var is_null_value = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, get_variable_cexpression (temp_var.name), new CCodeConstant ("NULL"));
+			set_cvalue (expr, new CCodeConditionalExpression (is_null_value, new CCodeMemberAccess.pointer (get_variable_cexpression (temp_var.name), "value_name"), new CCodeConstant ("NULL")));
 		}
 		pop_line ();
 	}
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index d4719b906..fb28aa762 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -345,7 +345,7 @@ public class Vala.GVariantModule : GValueModule {
 			// NULL terminate array
 			var length = new CCodeIdentifier (temp_name + "_length");
 			var element_access = new CCodeElementAccess (new CCodeIdentifier (temp_name), length);
-			ccode.add_assignment (element_access, new CCodeIdentifier ("NULL"));
+			ccode.add_assignment (element_access, new CCodeConstant ("NULL"));
 		}
 
 		return new CCodeIdentifier (temp_name);
@@ -499,7 +499,7 @@ public class Vala.GVariantModule : GValueModule {
 		} else if (key_type.type_symbol.get_full_name () == "GLib.HashTable") {
 			hash_table_new.add_argument (new CCodeCastExpression (new CCodeIdentifier ("g_hash_table_unref"), "GDestroyNotify"));
 		} else {
-			hash_table_new.add_argument (new CCodeIdentifier ("NULL"));
+			hash_table_new.add_argument (new CCodeConstant ("NULL"));
 		}
 
 		if (value_type.type_symbol.is_subtype_of (string_type.type_symbol)) {
@@ -509,7 +509,7 @@ public class Vala.GVariantModule : GValueModule {
 		} else if (value_type.type_symbol.get_full_name () == "GLib.HashTable") {
 			hash_table_new.add_argument (new CCodeCastExpression (new CCodeIdentifier ("g_hash_table_unref"), "GDestroyNotify"));
 		} else {
-			hash_table_new.add_argument (new CCodeIdentifier ("NULL"));
+			hash_table_new.add_argument (new CCodeConstant ("NULL"));
 		}
 		ccode.add_assignment (new CCodeIdentifier (temp_name), hash_table_new);
 
diff --git a/doc/vala-gen-introspect.1 b/doc/vala-gen-introspect.1
index 48edff8a3..5491b4200 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" "March 2021" "gen-introspect 0.48.15" "User Commands"
+.TH VALA-GEN-INTROSPECT "1" "April 2021" "gen-introspect 0.48.16" "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 0a09d4469..5b8b4d1ce 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" "March 2021" "Vala 0.48.15" "User Commands"
+.TH VALAC "1" "April 2021" "Vala 0.48.16" "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 fe893c3ea..add271d00 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" "March 2021" "Valadoc 0.48.15" "User Commands"
+.TH VALADOC "1" "April 2021" "Valadoc 0.48.16" "User Commands"
 .SH NAME
 valadoc \- Vala Documentation Tool
 .SH SYNOPSIS
diff --git a/doc/vapigen.1 b/doc/vapigen.1
index 54daa1bf4..65ddb44d2 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" "March 2021" "Vala API Generator 0.48.15" "User Commands"
+.TH VAPIGEN "1" "April 2021" "Vala API Generator 0.48.16" "User Commands"
 .SH NAME
 vapigen \- generate a Vala API
 .SH SYNOPSIS
diff --git a/libvaladoc/importer/girdocumentationimporter.vala b/libvaladoc/importer/girdocumentationimporter.vala
index b7d475043..057ab499b 100644
--- a/libvaladoc/importer/girdocumentationimporter.vala
+++ b/libvaladoc/importer/girdocumentationimporter.vala
@@ -69,10 +69,14 @@ public class Valadoc.Importer.GirDocumentationImporter : DocumentationImporter {
 		this.reader = new Vala.MarkupReader (source_file);
 
 		// xml prolog
-		next ();
-		next ();
+		do {
+			next ();
+			if (current_token == Vala.MarkupTokenType.EOF) {
+				error ("unexpected end of file");
+				return;
+			}
+		} while (current_token != Vala.MarkupTokenType.START_ELEMENT && reader.name != "repository");
 
-		next ();
 		parse_repository ();
 
 		reader = null;
@@ -845,7 +849,15 @@ public class Valadoc.Importer.GirDocumentationImporter : DocumentationImporter {
 
 	private void parse_constant () {
 		start_element ("constant");
-		string c_identifier = reader.get_attribute ("c:type");
+		string c_identifier = reader.get_attribute ("c:identifier");
+		if (c_identifier == null) {
+			//TODO G-I seems to do this wrong
+			c_identifier = reader.get_attribute ("c:type");
+		}
+		if (c_identifier == null) {
+			skip_element ();
+			return ;
+		}
 		next ();
 
 		Api.GirSourceComment? comment = parse_symbol_doc ();
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2979f644f..8f5ff2360 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -142,6 +142,7 @@ TESTS = \
 	chainup/class-base.vala \
 	chainup/class-base-foo.vala \
 	chainup/class-compact-base.vala \
+	chainup/class-compact-this.vala \
 	chainup/class-object.vala \
 	chainup/class-this.vala \
 	chainup/class-this-foo.vala \
@@ -975,6 +976,7 @@ TESTS = \
 	semantic/member-access-protected-invalid.test \
 	semantic/member-access-undefined.test \
 	semantic/member-access-static-with-instance.vala \
+	semantic/member-access-static-transformed-qualified.vala \
 	semantic/member-access-transformed-qualified.vala \
 	semantic/method-abstract.test \
 	semantic/method-abstract-body.test \
diff --git a/tests/chainup/class-compact-this.vala b/tests/chainup/class-compact-this.vala
new file mode 100644
index 000000000..3ace7a7eb
--- /dev/null
+++ b/tests/chainup/class-compact-this.vala
@@ -0,0 +1,34 @@
+[Compact]
+class Foo {
+	public string s = "foo";
+	public int i = 42;
+	public int j;
+
+	public Foo () {
+		assert (s == "foo");
+		assert (i == 42);
+		j = 23;
+	}
+
+	public Foo.bar () {
+		this ();
+		assert (s == "foo");
+		assert (i == 42);
+		assert (j == 23);
+	}
+}
+
+void main () {
+	{
+		var foo = new Foo ();
+		assert (foo.s == "foo");
+		assert (foo.i == 42);
+		assert (foo.j == 23);
+	}
+	{
+		var foo = new Foo.bar ();
+		assert (foo.s == "foo");
+		assert (foo.i == 42);
+		assert (foo.j == 23);
+	}
+}
diff --git a/tests/delegates/lambda-shared-closure.vala b/tests/delegates/lambda-shared-closure.vala
index 028eca31a..08f694e6d 100644
--- a/tests/delegates/lambda-shared-closure.vala
+++ b/tests/delegates/lambda-shared-closure.vala
@@ -94,6 +94,80 @@ public class Foo : Object {
 	}
 }
 
+void call_shared ([CCode (delegate_target_cname = "user_data", delegate_target_pos = 2.9)] FooFunc a, [CCode (delegate_target_cname = "user_data", delegate_target_pos = 2.9)] FooFunc b) {
+	a ();
+	b ();
+}
+
+void call_shared_owned ([CCode (delegate_target_cname = "user_data", delegate_target_pos = 2.9)] owned FooFunc a, [CCode (delegate_target_cname = "user_data", delegate_target_pos = 2.9)] owned FooFunc b) {
+	a ();
+	b ();
+}
+
+void run_static_1 () {
+	var foo = new Foo ();
+
+	assert (foo.ref_count == 1);
+
+	call_shared (
+		() => {
+			assert (foo != null);
+		},
+		() => {
+		}
+	);
+
+	assert (foo.ref_count == 1);
+}
+
+void run_static_2 () {
+	var foo = new Foo ();
+
+	assert (foo.ref_count == 1);
+
+	call_shared (
+		() => {
+		},
+		() => {
+			assert (foo != null);
+		}
+	);
+
+	assert (foo.ref_count == 1);
+}
+
+void run_static_3 () {
+	var foo = new Foo ();
+
+	assert (foo.ref_count == 1);
+
+	call_shared_owned (
+		() => {
+			assert (foo != null);
+		},
+		() => {
+		}
+	);
+
+	assert (foo.ref_count == 1);
+}
+
+void run_static_4 () {
+	var foo = new Foo ();
+
+	assert (foo.ref_count == 1);
+
+	call_shared_owned (
+		() => {
+		},
+		() => {
+			assert (foo != null);
+		}
+	);
+
+	assert (foo.ref_count == 1);
+}
+
 void main () {
 	var foo = new Foo ();
 	assert (foo.ref_count == 1);
@@ -105,4 +179,9 @@ void main () {
 	assert (foo.ref_count == 1);
 	foo.run_4 ();
 	assert (foo.ref_count == 1);
+
+	run_static_1 ();
+	run_static_2 ();
+	run_static_3 ();
+	run_static_4 ();
 }
diff --git a/tests/girwriter/GirTest-1.0.gir-expected b/tests/girwriter/GirTest-1.0.gir-expected
index 26d11df7e..d64753ac1 100644
--- a/tests/girwriter/GirTest-1.0.gir-expected
+++ b/tests/girwriter/GirTest-1.0.gir-expected
@@ -4,7 +4,7 @@
 <include name="Gio" version="2.0"/>
 <package name="girtest"/>
 <c:include name="girtest.h"/>
-<namespace name="GirTest" version="1.0" shared-library="girtest" c:prefix="GirTest" c:identifier-prefixes="GirTest" c:symbol-prefix="gir_test">
+<namespace name="GirTest" version="1.0" shared-library="girtest" c:prefix="GirTest" c:identifier-prefixes="GirTest" c:symbol-prefixes="gir_test">
 	<function name="nested_function" c:identifier="gir_test_nested_function">
 		<return-value transfer-ownership="full">
 			<type name="none" c:type="void"/>
@@ -848,6 +848,60 @@
 				</parameter>
 			</parameters>
 		</virtual-method>
+		<method name="method_implicit_params" c:identifier="gir_test_object_test_method_implicit_params">
+			<return-value transfer-ownership="full">
+				<type name="none" c:type="void"/>
+			</return-value>
+			<parameters>
+				<instance-parameter name="self" transfer-ownership="none">
+					<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+				</instance-parameter>
+				<parameter name="param1" transfer-ownership="none">
+					<array length="1" c:type="gint*">
+						<type name="gint" c:type="gint"/>
+					</array>
+				</parameter>
+				<parameter name="param1_length1" transfer-ownership="none">
+					<type name="gint" c:type="gint"/>
+				</parameter>
+				<parameter name="param2" transfer-ownership="none" closure="3" scope="notified" destroy="4">
+					<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+				</parameter>
+				<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="void*"/>
+				</parameter>
+				<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+					<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+				</parameter>
+			</parameters>
+		</method>
+		<virtual-method name="method_implicit_params" invoker="method_implicit_params">
+			<return-value transfer-ownership="full">
+				<type name="none" c:type="void"/>
+			</return-value>
+			<parameters>
+				<instance-parameter name="self" transfer-ownership="none">
+					<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+				</instance-parameter>
+				<parameter name="param1" transfer-ownership="none">
+					<array length="1" c:type="gint*">
+						<type name="gint" c:type="gint"/>
+					</array>
+				</parameter>
+				<parameter name="param1_length1" transfer-ownership="none">
+					<type name="gint" c:type="gint"/>
+				</parameter>
+				<parameter name="param2" transfer-ownership="none" closure="3" scope="notified" destroy="4">
+					<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+				</parameter>
+				<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="void*"/>
+				</parameter>
+				<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+					<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+				</parameter>
+			</parameters>
+		</virtual-method>
 		<property name="some-property" writable="1" construct="1">
 			<type name="utf8" c:type="gchar*"/>
 		</property>
@@ -973,9 +1027,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint8" c:type="gint8"/>
 					</parameter>
@@ -988,10 +1042,10 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="1" scope="async">
+					</parameter>
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -1006,9 +1060,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
@@ -1021,13 +1075,13 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="i1" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="3" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -1042,9 +1096,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
@@ -1060,9 +1114,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 				</parameters>
 			</callback>
 		</field>
@@ -1072,9 +1126,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 				</parameters>
 			</callback>
 		</field>
@@ -1084,10 +1138,10 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="1" scope="async">
+					</parameter>
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -1102,24 +1156,53 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
 				</parameters>
 			</callback>
 		</field>
+		<field name="method_implicit_params">
+			<callback name="method_implicit_params" c:type="method_implicit_params">
+				<return-value transfer-ownership="full">
+					<type name="none" c:type="void"/>
+				</return-value>
+				<parameters>
+					<parameter name="self" transfer-ownership="none">
+						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+					</parameter>
+					<parameter name="param1" transfer-ownership="none">
+						<array length="2" c:type="gint*">
+							<type name="gint" c:type="gint"/>
+						</array>
+					</parameter>
+					<parameter name="param1_length1" transfer-ownership="none">
+						<type name="gint" c:type="gint"/>
+					</parameter>
+					<parameter name="param2" transfer-ownership="none" closure="4" scope="notified" destroy="5">
+						<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+					</parameter>
+					<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+						<type name="gpointer" c:type="void*"/>
+					</parameter>
+					<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+						<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+					</parameter>
+				</parameters>
+			</callback>
+		</field>
 		<field name="signal_with_default_handlder">
 			<callback name="object_test_signal_with_default_handlder" c:type="object_test_signal_with_default_handlder">
 				<return-value transfer-ownership="full">
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="i1" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
@@ -1368,6 +1451,60 @@
 				</parameter>
 			</parameters>
 		</virtual-method>
+		<method name="method_implicit_params" c:identifier="gir_test_abstract_object_test_method_implicit_params">
+			<return-value transfer-ownership="full">
+				<type name="none" c:type="void"/>
+			</return-value>
+			<parameters>
+				<instance-parameter name="self" transfer-ownership="none">
+					<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
+				</instance-parameter>
+				<parameter name="param1" transfer-ownership="none">
+					<array length="1" c:type="gint*">
+						<type name="gint" c:type="gint"/>
+					</array>
+				</parameter>
+				<parameter name="param1_length1" transfer-ownership="none">
+					<type name="gint" c:type="gint"/>
+				</parameter>
+				<parameter name="param2" transfer-ownership="none" closure="3" scope="notified" destroy="4">
+					<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+				</parameter>
+				<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="void*"/>
+				</parameter>
+				<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+					<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+				</parameter>
+			</parameters>
+		</method>
+		<virtual-method name="method_implicit_params" invoker="method_implicit_params">
+			<return-value transfer-ownership="full">
+				<type name="none" c:type="void"/>
+			</return-value>
+			<parameters>
+				<instance-parameter name="self" transfer-ownership="none">
+					<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
+				</instance-parameter>
+				<parameter name="param1" transfer-ownership="none">
+					<array length="1" c:type="gint*">
+						<type name="gint" c:type="gint"/>
+					</array>
+				</parameter>
+				<parameter name="param1_length1" transfer-ownership="none">
+					<type name="gint" c:type="gint"/>
+				</parameter>
+				<parameter name="param2" transfer-ownership="none" closure="3" scope="notified" destroy="4">
+					<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+				</parameter>
+				<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="void*"/>
+				</parameter>
+				<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+					<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+				</parameter>
+			</parameters>
+		</virtual-method>
 	</class>
 	<record name="AbstractObjectTestClass" c:type="GirTestAbstractObjectTestClass" glib:is-gtype-struct-for="AbstractObjectTest">
 		<field name="parent_class" readable="0" private="1">
@@ -1379,9 +1516,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint8" c:type="gint8"/>
 					</parameter>
@@ -1394,9 +1531,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" direction="inout" transfer-ownership="full">
 						<type name="gint8" c:type="gint8*"/>
 					</parameter>
@@ -1409,9 +1546,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" direction="out" transfer-ownership="full">
 						<type name="gint8" c:type="gint8*"/>
 					</parameter>
@@ -1424,9 +1561,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 				</parameters>
 			</callback>
 		</field>
@@ -1436,9 +1573,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
@@ -1454,13 +1591,13 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="3" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -1475,9 +1612,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
@@ -1490,9 +1627,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 				</parameters>
 			</callback>
 		</field>
@@ -1502,10 +1639,10 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="1" scope="async">
+					</parameter>
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -1520,15 +1657,44 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
 				</parameters>
 			</callback>
 		</field>
+		<field name="method_implicit_params">
+			<callback name="method_implicit_params" c:type="method_implicit_params">
+				<return-value transfer-ownership="full">
+					<type name="none" c:type="void"/>
+				</return-value>
+				<parameters>
+					<parameter name="self" transfer-ownership="none">
+						<type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
+					</parameter>
+					<parameter name="param1" transfer-ownership="none">
+						<array length="2" c:type="gint*">
+							<type name="gint" c:type="gint"/>
+						</array>
+					</parameter>
+					<parameter name="param1_length1" transfer-ownership="none">
+						<type name="gint" c:type="gint"/>
+					</parameter>
+					<parameter name="param2" transfer-ownership="none" closure="4" scope="notified" destroy="5">
+						<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+					</parameter>
+					<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+						<type name="gpointer" c:type="void*"/>
+					</parameter>
+					<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+						<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+					</parameter>
+				</parameters>
+			</callback>
+		</field>
 	</record>
 	<record name="AbstractObjectTestPrivate" c:type="GirTestAbstractObjectTestPrivate" disguised="1"/>
 	<class name="ImplementionTest" c:type="GirTestImplementionTest" c:symbol-prefix="implemention_test" glib:type-name="GirTestImplementionTest" glib:get-type="gir_test_implemention_test_get_type" glib:type-struct="ImplementionTestClass" parent="GObject.Object">
@@ -2026,6 +2192,60 @@
 				</parameter>
 			</parameters>
 		</virtual-method>
+		<method name="method_implicit_params" c:identifier="gir_test_interface_test_method_implicit_params">
+			<return-value transfer-ownership="full">
+				<type name="none" c:type="void"/>
+			</return-value>
+			<parameters>
+				<instance-parameter name="self" transfer-ownership="none">
+					<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+				</instance-parameter>
+				<parameter name="param1" transfer-ownership="none">
+					<array length="1" c:type="gint*">
+						<type name="gint" c:type="gint"/>
+					</array>
+				</parameter>
+				<parameter name="param1_length1" transfer-ownership="none">
+					<type name="gint" c:type="gint"/>
+				</parameter>
+				<parameter name="param2" transfer-ownership="none" closure="3" scope="notified" destroy="4">
+					<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+				</parameter>
+				<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="void*"/>
+				</parameter>
+				<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+					<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+				</parameter>
+			</parameters>
+		</method>
+		<virtual-method name="method_implicit_params" invoker="method_implicit_params">
+			<return-value transfer-ownership="full">
+				<type name="none" c:type="void"/>
+			</return-value>
+			<parameters>
+				<instance-parameter name="self" transfer-ownership="none">
+					<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+				</instance-parameter>
+				<parameter name="param1" transfer-ownership="none">
+					<array length="1" c:type="gint*">
+						<type name="gint" c:type="gint"/>
+					</array>
+				</parameter>
+				<parameter name="param1_length1" transfer-ownership="none">
+					<type name="gint" c:type="gint"/>
+				</parameter>
+				<parameter name="param2" transfer-ownership="none" closure="3" scope="notified" destroy="4">
+					<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+				</parameter>
+				<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="void*"/>
+				</parameter>
+				<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+					<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+				</parameter>
+			</parameters>
+		</virtual-method>
 		<function name="static_method" c:identifier="gir_test_interface_test_static_method">
 			<return-value transfer-ownership="full">
 				<type name="none" c:type="void"/>
@@ -2114,9 +2334,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint8" c:type="gint8"/>
 					</parameter>
@@ -2129,10 +2349,10 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="1" scope="async">
+					</parameter>
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -2147,9 +2367,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
@@ -2162,9 +2382,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
@@ -2180,13 +2400,13 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="param" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="3" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -2201,9 +2421,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
@@ -2216,9 +2436,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 				</parameters>
 			</callback>
 		</field>
@@ -2228,10 +2448,10 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
-					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="1" scope="async">
+					</parameter>
+					<parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
 						<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
 					</parameter>
 					<parameter name="_callback__target" transfer-ownership="none" allow-none="1">
@@ -2246,24 +2466,53 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="_res_" transfer-ownership="none">
 						<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
 					</parameter>
 				</parameters>
 			</callback>
 		</field>
+		<field name="method_implicit_params">
+			<callback name="method_implicit_params" c:type="method_implicit_params">
+				<return-value transfer-ownership="full">
+					<type name="none" c:type="void"/>
+				</return-value>
+				<parameters>
+					<parameter name="self" transfer-ownership="none">
+						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+					</parameter>
+					<parameter name="param1" transfer-ownership="none">
+						<array length="2" c:type="gint*">
+							<type name="gint" c:type="gint"/>
+						</array>
+					</parameter>
+					<parameter name="param1_length1" transfer-ownership="none">
+						<type name="gint" c:type="gint"/>
+					</parameter>
+					<parameter name="param2" transfer-ownership="none" closure="4" scope="notified" destroy="5">
+						<type name="GirTest.DelegateTest" c:type="GirTestDelegateTest"/>
+					</parameter>
+					<parameter name="param2_target" transfer-ownership="none" allow-none="1">
+						<type name="gpointer" c:type="void*"/>
+					</parameter>
+					<parameter name="param2_target_destroy_notify" transfer-ownership="none" scope="call">
+						<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+					</parameter>
+				</parameters>
+			</callback>
+		</field>
 		<field name="get_property">
 			<callback name="get_property" c:type="get_property">
 				<return-value transfer-ownership="none">
 					<type name="gint" c:type="gint"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 				</parameters>
 			</callback>
 		</field>
@@ -2273,9 +2522,9 @@
 					<type name="none" c:type="void"/>
 				</return-value>
 				<parameters>
-					<instance-parameter name="self" transfer-ownership="none">
+					<parameter name="self" transfer-ownership="none">
 						<type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
-					</instance-parameter>
+					</parameter>
 					<parameter name="value" transfer-ownership="none">
 						<type name="gint" c:type="gint"/>
 					</parameter>
diff --git a/tests/girwriter/girtest.vala b/tests/girwriter/girtest.vala
index e39dabc59..a08020bd0 100644
--- a/tests/girwriter/girtest.vala
+++ b/tests/girwriter/girtest.vala
@@ -82,6 +82,8 @@ namespace GirTest {
 		[NoWrapper]
 		public virtual async void no_wrapper_method_async () {
 		}
+		public virtual void method_implicit_params (int[] param1, owned DelegateTest param2) {
+		}
 		[HasEmitter]
 		public signal void some_signal (int param);
 		public static void static_method () {
@@ -284,6 +286,9 @@ namespace GirTest {
 		[NoWrapper]
 		public virtual async void no_wrapper_method_async () {
 		}
+
+		public virtual void method_implicit_params (int[] param1, owned DelegateTest param2) {
+		}
 	}
 
 	public abstract class AbstractObjectTest : Object {
@@ -305,6 +310,8 @@ namespace GirTest {
 
 		[NoWrapper]
 		public abstract async void no_wrapper_method_async ();
+
+		public abstract void method_implicit_params (int[] param1, owned DelegateTest param2);
 	}
 
 	public interface PrerequisiteTest : InterfaceTest {
diff --git a/tests/girwriter/girtest.vapi-expected b/tests/girwriter/girtest.vapi-expected
index aa02fb5cb..807080a33 100644
--- a/tests/girwriter/girtest.vapi-expected
+++ b/tests/girwriter/girtest.vapi-expected
@@ -7,6 +7,7 @@ namespace GirTest {
 	[CCode (cheader_filename = "girtest.h")]
 	public abstract class AbstractObjectTest : GLib.Object {
 		protected AbstractObjectTest ();
+		public abstract void method_implicit_params (int[] param1, owned GirTest.DelegateTest param2);
 		public abstract void method_int8_in (int8 param);
 		public abstract void method_int8_inout (ref int8 param);
 		public abstract void method_int8_out (out int8 param);
@@ -73,6 +74,7 @@ namespace GirTest {
 		public int[] int_in_int_in_array_return (int param1, int param2);
 		public ObjectTest.may_fail (int param) throws GirTest.ErrorTest;
 		public void method ();
+		public virtual void method_implicit_params (int[] param1, owned GirTest.DelegateTest param2);
 		public virtual void method_throw () throws GirTest.ErrorTest;
 		public void method_valist (int param, va_list vargs);
 		public void method_varargs (int param, ...);
@@ -126,6 +128,7 @@ namespace GirTest {
 	public interface InterfaceTest : GLib.Object {
 		public virtual async void coroutine_async ();
 		public virtual void int8_in (int8 param);
+		public virtual void method_implicit_params (int[] param1, owned GirTest.DelegateTest param2);
 		public virtual void method_valist (int param, va_list vargs);
 		[NoWrapper]
 		public virtual void no_wrapper_method ();
diff --git a/tests/girwriter/girtest.vapigen-expected b/tests/girwriter/girtest.vapigen-expected
index b03b374e7..35a839f72 100644
--- a/tests/girwriter/girtest.vapigen-expected
+++ b/tests/girwriter/girtest.vapigen-expected
@@ -8,6 +8,7 @@ namespace GirTest {
 	public abstract class AbstractObjectTest : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected AbstractObjectTest ();
+		public abstract void method_implicit_params ([CCode (array_length_cname = "param1_length1", array_length_pos = 1.5)] int[] param1, owned GirTest.DelegateTest param2);
 		public abstract void method_int8_in (int8 param);
 		public abstract void method_int8_inout (ref int8 param);
 		public abstract void method_int8_out (out int8 param);
@@ -102,6 +103,7 @@ namespace GirTest {
 		[CCode (cname = "gir_test_object_test_new_may_fail", has_construct_function = false)]
 		public ObjectTest.may_fail (int param) throws GirTest.ErrorTest;
 		public void method ();
+		public virtual void method_implicit_params ([CCode (array_length_cname = "param1_length1", array_length_pos = 1.5)] int[] param1, owned GirTest.DelegateTest param2);
 		public virtual void method_throw () throws GirTest.ErrorTest;
 		public void method_valist (int param, va_list vargs);
 		public void method_varargs (int param, ...);
@@ -159,6 +161,7 @@ namespace GirTest {
 		public virtual void coroutine_finish (GLib.AsyncResult _res_);
 		public virtual int get_property ();
 		public virtual void int8_in (int8 param);
+		public virtual void method_implicit_params ([CCode (array_length_cname = "param1_length1", array_length_pos = 1.5)] int[] param1, owned GirTest.DelegateTest param2);
 		[NoWrapper]
 		public virtual void no_wrapper_method ();
 		[NoWrapper]
diff --git a/tests/semantic/member-access-static-transformed-qualified.vala b/tests/semantic/member-access-static-transformed-qualified.vala
new file mode 100644
index 000000000..6469ffd88
--- /dev/null
+++ b/tests/semantic/member-access-static-transformed-qualified.vala
@@ -0,0 +1,14 @@
+namespace Manam {
+	class Manam {
+	}
+
+	class Foo {
+		public static void bar () {
+		}
+	}
+
+	void main () {
+		var foo = new Foo ();
+		foo.bar ();
+	}
+}
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 5496023c2..eddc1e206 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -1468,10 +1468,14 @@ public class Vala.GirParser : CodeVisitor {
 		reader = new MarkupReader (source_file.filename);
 
 		// xml prolog
-		next ();
-		next ();
+		do {
+			next ();
+			if (current_token == MarkupTokenType.EOF) {
+				Report.error (get_current_src (), "unexpected end of file");
+				return;
+			}
+		} while (current_token != MarkupTokenType.START_ELEMENT && reader.name != "repository");
 
-		next ();
 		parse_repository ();
 
 		reader = null;
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala
index 4188cbc0b..a5afbb444 100644
--- a/vala/valamemberaccess.vala
+++ b/vala/valamemberaccess.vala
@@ -942,6 +942,7 @@ public class Vala.MemberAccess : Expression {
 						inner_ma = (MemberAccess) inner_ma.inner;
 						inner_sym = inner_sym.parent_symbol;
 					}
+					inner_ma.qualified = true;
 					inner.check (context);
 				}
 			}
diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi
index f9bdad9ca..0c60a0a0c 100644
--- a/vapi/gio-2.0.vapi
+++ b/vapi/gio-2.0.vapi
@@ -3112,7 +3112,7 @@ namespace GLib {
 		public virtual unowned string get_default_warning ();
 		public unowned string get_description ();
 		public GLib.TlsPasswordFlags get_flags ();
-		[CCode (array_length_pos = 0.1)]
+		[CCode (array_length_pos = 0.1, array_length_type = "gsize")]
 		public virtual unowned uint8[] get_value ();
 		public unowned string get_warning ();
 		public void set_description (string description);
diff --git a/vapi/gtk+-3.0.vapi b/vapi/gtk+-3.0.vapi
index c9eca25c2..d963e7f20 100644
--- a/vapi/gtk+-3.0.vapi
+++ b/vapi/gtk+-3.0.vapi
@@ -12384,7 +12384,7 @@ namespace Gtk {
 	[Version (since = "2.2")]
 	public delegate void ModuleDisplayInitFunc (Gdk.Display display);
 	[CCode (cheader_filename = "gtk/gtk.h", has_target = false)]
-	public delegate void ModuleInitFunc ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] string[]? argv);
+	public delegate void ModuleInitFunc ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] ref unowned string[]? argv);
 	[CCode (cheader_filename = "gtk/gtk.h", instance_pos = 1.9)]
 	public delegate void PageSetupDoneFunc (Gtk.PageSetup page_setup);
 	[CCode (cheader_filename = "gtk/gtk.h", instance_pos = 2.9)]
diff --git a/vapi/javascriptcoregtk-4.0.vapi b/vapi/javascriptcoregtk-4.0.vapi
index ec34b2b84..0e79debcb 100644
--- a/vapi/javascriptcoregtk-4.0.vapi
+++ b/vapi/javascriptcoregtk-4.0.vapi
@@ -43,7 +43,7 @@ namespace JS {
 		[CCode (cname = "JSObjectHasProperty", instance_pos = 1.1)]
 		public bool has_property (JS.Context ctx, JS.String property_name);
 		[CCode (cname = "JSObjectMakeFunction")]
-		public Object.make_function (JS.String? name, [CCode (array_length_pos = 1.5)] JS.String[]? parameter_names, JS.String body, JS.String? source_url, int starting_line_number, out JS.Value? exception);
+		public Object.make_function (JS.Context ctx, JS.String? name, [CCode (array_length_pos = 2.5)] JS.String[]? parameter_names, JS.String body, JS.String? source_url, int starting_line_number, out JS.Value? exception);
 	}
 	[CCode (cheader_filename = "JavaScriptCore/JavaScript.h", cname = "struct OpaqueJSString", free_function = "JSStringRelease", has_type_id = false)]
 	[Compact]
@@ -72,7 +72,7 @@ namespace JS {
 		[CCode (cname = "JSValueGetType", instance_pos = 1.1)]
 		public JS.Type get_type (JS.Context ctx);
 		[CCode (cname = "JSValueGetTypedArrayType", instance_pos = 1.1)]
-		public JS.TypedArrayType get_typed_array_type (JS.Context ctx);
+		public JS.TypedArrayType get_typed_array_type (JS.Context ctx, out JS.Value? exception = null);
 		[CCode (cname = "JSValueIsArray", instance_pos = 1.1)]
 		public bool is_array (JS.Context ctx);
 		[CCode (cname = "JSValueIsBoolean", instance_pos = 1.1)]
diff --git a/vapi/libusb-1.0.vapi b/vapi/libusb-1.0.vapi
index c7bf78b00..494c87ff5 100644
--- a/vapi/libusb-1.0.vapi
+++ b/vapi/libusb-1.0.vapi
@@ -31,19 +31,33 @@ namespace LibUSB {
 		SS_ENDPOINT_COMPANION
 	}
 
-	[CCode (cprefix = "LIBUSB_DT_")]
 	namespace DescriptorTypeSize {
+		[CCode (cname = "LIBUSB_DT_DEVICE_SIZE")]
 		public const int DEVICE_SIZE;
+		[CCode (cname = "LIBUSB_DT_CONFIG_SIZE")]
 		public const int CONFIG_SIZE;
+		[CCode (cname = "LIBUSB_DT_INTERFACE_SIZE")]
 		public const int INTERFACE_SIZE;
+		[CCode (cname = "LIBUSB_DT_ENDPOINT_SIZE")]
 		public const int ENDPOINT_SIZE;
+		[CCode (cname = "LIBUSB_DT_ENDPOINT_AUDIO_SIZE")]
 		public const int ENDPOINT_AUDIO_SIZE;
+		[CCode (cname = "LIBUSB_DT_HUB_NONVAR_SIZE")]
+		public const int HUB_NONVAR_SIZE;
+		[CCode (cname = "LIBUSB_DT_SS_ENDPOINT_COMPANION_SIZE")]
 		public const int SS_ENDPOINT_COMPANION_SIZE;
+		[CCode (cname = "LIBUSB_DT_BOS_SIZE")]
 		public const int BOS_SIZE;
+		[CCode (cname = "LIBUSB_DT_DEVICE_CAPABILITY_SIZE")]
 		public const int DEVICE_CAPABILITY_SIZE;
+		[CCode (cname = "LIBUSB_BT_USB_2_0_EXTENSION_SIZE")]
 		public const int USB_2_0_EXTENSION_SIZE;
+		[CCode (cname = "LIBUSB_BT_SS_USB_DEVICE_CAPABILITY_SIZE")]
 		public const int SS_USB_DEVICE_CAPABILITY_SIZE;
+		[CCode (cname = "LIBUSB_BT_CONTAINER_ID_SIZE")]
 		public const int CONTAINER_ID_SIZE;
+		[CCode (cname = "LIBUSB_DT_BOS_MAX_SIZE")]
+		public const int BOS_MAX_SIZE;
 	}
 
 	namespace EndpointMask {
@@ -230,7 +244,7 @@ namespace LibUSB {
 		public uint8 bRefresh;
 		public uint8 bSynchAddress;
 		[CCode (array_length_cname = "extra_length")]
-		public uint8[] extra;
+		public unowned uint8[] extra;
 	}
 
 	[CCode (cname = "struct libusb_interface_descriptor", has_type_id = false)]
@@ -245,15 +259,15 @@ namespace LibUSB {
 		public uint8 bInterfaceProtocol;
 		public uint8 iInterface;
 		[CCode (array_length_cname = "bNumEndpoints", array_length_type = "uint8_t")]
-		public EndpointDescriptor[] endpoint;
+		public unowned EndpointDescriptor[] endpoint;
 		[CCode (array_length_cname = "extra_length")]
-		public uint8[] extra;
+		public unowned uint8[] extra;
 	}
 
 	[CCode (cname = "struct libusb_interface", has_type_id = false)]
 	public struct Interface {
 		[CCode (array_length_cname = "num_altsetting")]
-		public InterfaceDescriptor[] altsetting;
+		public unowned InterfaceDescriptor[] altsetting;
 	}
 
 	[CCode (cname = "struct libusb_config_descriptor", free_function = "libusb_free_config_descriptor")]
@@ -288,7 +302,7 @@ namespace LibUSB {
 		public uint8 bLength;
 		public uint8 bDescriptorType;
 		public uint8 bDevCapabilityType;
-		public uint8 dev_capability_data;
+		public uint8 dev_capability_data[0];
 	}
 
 	[CCode (cname = "struct libusb_bos_descriptor", free_function = "libusb_free_bos_descriptor")]
@@ -297,8 +311,8 @@ namespace LibUSB {
 		public uint8 bLength;
 		public uint8 bDescriptorType;
 		public uint16 wTotalLength;
-		[CCode (array_length_cname = "bNumDeviceCaps", array_length_type = "uint8_t")]
-		public BosDevCapabilityDescriptor[] dev_capability;
+		public uint8 bNumDeviceCaps;
+		public BosDevCapabilityDescriptor dev_capability[0];
 	}
 
 	[CCode (cname = "struct libusb_usb_2_0_extension_descriptor", free_function = "libusb_free_usb_2_0_extension_descriptor")]
@@ -336,10 +350,11 @@ namespace LibUSB {
 	[CCode (cname = "libusb_device_handle", cprefix = "libusb_", free_function = "libusb_close")]
 	[Compact]
 	public class DeviceHandle {
-		[CCode (cname = "_vala_libusb_device_handle_new")]
-		public DeviceHandle (Device device) {
+		[CCode (cname = "_vala_libusb_device_handle_from_device")]
+		public DeviceHandle from_device (Device device) {
 			DeviceHandle handle;
-			device.open(out handle);
+			device.open (out handle);
+			return handle;
 		}
 
 		[CCode (cname = "libusb_open_device_with_vid_pid")]
@@ -373,7 +388,7 @@ namespace LibUSB {
 	public class Device {
 		public uint8 get_bus_number ();
 		public uint8 get_port_number ();
-		public int get_port_numbers (out uint8[] port_numbers);
+		public int get_port_numbers (uint8[] port_numbers);
 		public uint8 get_device_address ();
 		public int get_max_packet_size (uint8 endpoint);
 		public int get_max_iso_packet_size (uint8 endpoint);
@@ -425,7 +440,7 @@ namespace LibUSB {
 		public LibUSB.Error handle_events_timeout (Posix.timeval tv);
 		public LibUSB.Error handle_events_timeout_completed (Posix.timeval tv, out int completed);
 		public LibUSB.Error handle_events ();
-		public LibUSB.Error handle_events_completed (Posix.timeval tv, out int completed);
+		public LibUSB.Error handle_events_completed (out int completed);
 		public LibUSB.Error handle_events_locked (Posix.timeval tv);
 		public LibUSB.Error pollfds_handle_timeouts ();
 		public LibUSB.Error get_next_timeout (out Posix.timeval tv);
@@ -441,7 +456,9 @@ namespace LibUSB {
 		public LibUSB.Error hotplug_deregister_callback (HotCallbackHandle callback_handle);
 	}
 
+	[CCode (cname = "libusb_le16_to_cpu")]
 	public static uint16 le16_to_cpu (uint16 n);
+	[CCode (cname = "libusb_cpu_to_le16")]
 	public static uint16 cpu_to_le16 (uint16 n);
 
 	[CCode (cname = "struct libusb_control_setup")]
@@ -527,7 +544,7 @@ namespace LibUSB {
 		public LibUSB.Error submit ();
 		[CCode (cname = "libusb_cancel_transfer")]
 		public LibUSB.Error cancel ();
-		[CCode (cname = "libusb_contrel_transfer_get_data", array_length = false)]
+		[CCode (cname = "libusb_control_transfer_get_data", array_length = false)]
 		public unowned char[] control_get_data ();
 		[CCode (cname = "libusb_control_transfer_get_setup")]
 		public unowned ControlSetup control_get_setup ();
@@ -537,7 +554,7 @@ namespace LibUSB {
 		public void fill_bulk_transfer (DeviceHandle dev_handle, uint8 endpoint, uint8[] buffer, TransferCb @callback, uint timeout);
 		public void fill_interrupt_transfer (DeviceHandle dev_handle, uint8 endpoint, uint8[] buffer, TransferCb @callback, uint timeout);
 		public void fill_iso_transfer (DeviceHandle dev_handle, uint8 endpoint, uint8[] buffer, int num_iso_packets, TransferCb @callback, uint timeout);
-		public void set_packet_lengths (uint length);
+		public void set_iso_packet_lengths (uint length);
 		[CCode (array_length = false)]
 		public unowned uint8[] get_iso_packet_buffer (uint packet);
 		[CCode (array_length = false)]
@@ -559,5 +576,6 @@ namespace LibUSB {
 		public short events;
 	}
 
+	[CCode (cname = "libusb_has_capability")]
 	public static int has_capability (Capability capability);
 }
diff --git a/vapi/libusb.vapi b/vapi/libusb.vapi
index 8438cb199..c34e4a414 100644
--- a/vapi/libusb.vapi
+++ b/vapi/libusb.vapi
@@ -126,7 +126,7 @@ namespace USB {
 		public InterfaceDescriptor[] altsetting;
 	}
 
-	[Compact, CCode (cname = "struct usd_config_descriptor")]
+	[Compact, CCode (cname = "struct usb_config_descriptor")]
 	public class ConfigDescriptor {
 		public uint8 bLength;
 		public uint8 bDescriptorType;
@@ -200,7 +200,7 @@ namespace USB {
 		public int bulk_read (int ep, [CCode (array_length = false)] char[] bytes, int size, int timeout);
 		public int interrupt_write (int ep, [CCode (array_length = false)] char[] bytes, int size, int timeout);
 		public int interrupt_read (int ep, [CCode (array_length = false)] char[] bytes, int size, int timeout);
-		public int control_msg (int requesttype, int request, int value, int index, char[] bytes, int size, int timeout);
+		public int control_msg (int requesttype, int request, int value, int index, [CCode (array_length = false)] char[] bytes, int size, int timeout);
 		public int set_configuration (int configuration);
 		public int claim_interface (int @interface);
 		public int release_interface (int @interface);
diff --git a/vapi/metadata/Gio-2.0.metadata b/vapi/metadata/Gio-2.0.metadata
index 2da6f7838..26eec0e38 100644
--- a/vapi/metadata/Gio-2.0.metadata
+++ b/vapi/metadata/Gio-2.0.metadata
@@ -246,7 +246,6 @@ Task
   .report_new_error skip
   .return_new_error skip=false printf_format
 TlsPassword
-  .get_value array array_length_idx=0
   .set_value#virtual_method.value owned
   .set_value#virtual_method.destroy default=GLib.free
 Vfs
diff --git a/vapi/metadata/Gtk-3.0.metadata b/vapi/metadata/Gtk-3.0.metadata
index 17c199cae..64019301b 100644
--- a/vapi/metadata/Gtk-3.0.metadata
+++ b/vapi/metadata/Gtk-3.0.metadata
@@ -691,6 +691,7 @@ Widget
 
 // Sure
 binding_set_by_class.object_class type="GLib.ObjectClass"
+ModuleInitFunc.argv ref unowned
 *.ref unowned
 
 // These delegate types don't have targets in the typedefs, but they
diff --git a/vapi/metadata/JavaScriptCore-4.0-custom.vala b/vapi/metadata/JavaScriptCore-4.0-custom.vala
index 0ba392d63..be2114816 100644
--- a/vapi/metadata/JavaScriptCore-4.0-custom.vala
+++ b/vapi/metadata/JavaScriptCore-4.0-custom.vala
@@ -46,7 +46,7 @@ namespace JS {
 		[CCode (cname = "JSObjectHasProperty", instance_pos = 1.1)]
 		public bool has_property (JS.Context ctx, JS.String property_name);
 		[CCode (cname = "JSObjectMakeFunction")]
-		public Object.make_function (JS.String? name, [CCode (array_length_pos = 1.5)] JS.String[]? parameter_names, JS.String body, JS.String? source_url, int starting_line_number, out JS.Value? exception);
+		public Object.make_function (JS.Context ctx, JS.String? name, [CCode (array_length_pos = 2.5)] JS.String[]? parameter_names, JS.String body, JS.String? source_url, int starting_line_number, out JS.Value? exception);
 	}
 	[CCode (cheader_filename = "JavaScriptCore/JavaScript.h", cname = "struct OpaqueJSString", free_function = "JSStringRelease", has_type_id = false)]
 	[Compact]
@@ -76,7 +76,7 @@ namespace JS {
 		public JS.Type get_type (JS.Context ctx);
 
 		[CCode (cname = "JSValueGetTypedArrayType", instance_pos = 1.1)]
-		public JS.TypedArrayType get_typed_array_type (JS.Context ctx);
+		public JS.TypedArrayType get_typed_array_type (JS.Context ctx, out JS.Value? exception = null);
 
 		[CCode (cname = "JSValueIsArray", instance_pos = 1.1)]
 		public bool is_array (JS.Context ctx);
diff --git a/vapi/metadata/Rest-0.7.metadata b/vapi/metadata/Rest-0.7.metadata
index c734a223e..ae9989ca3 100644
--- a/vapi/metadata/Rest-0.7.metadata
+++ b/vapi/metadata/Rest-0.7.metadata
@@ -34,7 +34,7 @@ XmlNode cheader_filename="rest/rest-xml-node.h"
   .unref skip=false
 XmlParser cheader_filename="rest/rest-xml-parser.h"
 
-OAuthProxyAuthCallback cheader_filename="rest/oauth-proxy.h"
+OAuthProxyAuthCallback cheader_filename="rest/oauth-proxy.h" cname="OAuthProxyAuthCallback"
 	.error nullable=true
 	.weak_object nullable=true
 	.userdata closure=3
diff --git a/vapi/metadata/WebKit2WebExtension-4.0-custom.vala b/vapi/metadata/WebKit2WebExtension-4.0-custom.vala
index a994a774e..11875102e 100644
--- a/vapi/metadata/WebKit2WebExtension-4.0-custom.vala
+++ b/vapi/metadata/WebKit2WebExtension-4.0-custom.vala
@@ -1,5 +1,6 @@
 namespace WebKit {
 	namespace DOM {
+		[CCode (has_typedef = false)]
 		public delegate void EventTargetFunc (WebKit.DOM.EventTarget target, WebKit.DOM.Event event);
 	}
 }
diff --git a/vapi/pixman-1.vapi b/vapi/pixman-1.vapi
index 66437e02d..ecccc0113 100644
--- a/vapi/pixman-1.vapi
+++ b/vapi/pixman-1.vapi
@@ -8,10 +8,11 @@ namespace Pixman {
 		[CCode (cname = "PIXMAN_VERSION")]
 		public const int INT;
 
+		[CCode (cname = "PIXMAN_VERSION_ENCODE")]
 		public static int encode (int major, int minor, int micro);
 		[CCode (cname = "pixman_version")]
 		public static int library_int ();
-		[CCode (cname = "pixman_string")]
+		[CCode (cname = "pixman_version_string")]
 		public static unowned string library_string ();
 	}
 
@@ -32,11 +33,13 @@ namespace Pixman {
 		public Fixed ceil ();
 		public Fixed fraction ();
 		public Fixed mod_2 ();
+		[CCode (cname = "pixman_sample_ceil_y")]
 		public Fixed sample_ceil_y (int bpp);
+		[CCode (cname = "pixman_sample_floor_y")]
 		public Fixed sample_floor_y (int bpp);
 	}
 
-	[CCode (cname = "struct pixman_color", has_type_id = false)]
+	[CCode (cname = "pixman_color_t", has_type_id = false)]
 	public struct Color {
 		public uint16 red;
 		public uint16 green;
@@ -44,31 +47,31 @@ namespace Pixman {
 		public uint16 alpha;
 	}
 
-	[CCode (cname = "struct pixman_point_fixed", has_type_id = false)]
+	[CCode (cname = "pixman_point_fixed_t", has_type_id = false)]
 	public struct PointFixed {
 		public Pixman.Fixed x;
 		public Pixman.Fixed y;
 	}
 
-	[CCode (cname = "struct pixman_line_fixed", has_type_id = false)]
+	[CCode (cname = "pixman_line_fixed_t", has_type_id = false)]
 	public struct LineFixed {
 		public Pixman.PointFixed p1;
 		public Pixman.PointFixed p2;
 	}
 
-	[CCode (cname = "struct pixman_vector", has_type_id = false)]
+	[CCode (cname = "pixman_vector_t", has_type_id = false)]
 	public struct Vector {
 		public Pixman.Fixed vector[3];
 	}
 
-	[CCode (cname = "struct pixman_transform", has_type_id = false)]
+	[CCode (cname = "pixman_transform_t", has_type_id = false)]
 	public struct Transform {
 		public Pixman.Fixed matrix[9];
 
 		[CCode (cname = "pixman_transform_init_identity")]
 		public Transform.identity ();
 		public bool point_3d (Pixman.Vector vector);
-		public bool point ();
+		public bool point (Pixman.Vector vector);
 		public bool multiply (Pixman.Transform l, Pixman.Transform r);
 		[CCode (cname = "pixman_transform_init_scale")]
 		public Transform.init_scale (Pixman.Fixed sx, Pixman.Fixed sy);
@@ -76,7 +79,7 @@ namespace Pixman {
 		[CCode (cname = "pixman_transform_init_rotate")]
 		public Transform.init_rotate (Pixman.Fixed cos, Pixman.Fixed sin);
 		public bool rotate (Pixman.Transform reverse, Pixman.Fixed c, Pixman.Fixed s);
-		[CCode (cname = "pixman_transform_rotate")]
+		[CCode (cname = "pixman_transform_init_translate")]
 		public Transform.init_translate (Pixman.Fixed tx, Pixman.Fixed ty);
 		public bool translate (Pixman.Transform reverse, Pixman.Fixed tx, Pixman.Fixed ty);
 		public bool bounds (Pixman.Box16 b);
@@ -86,7 +89,7 @@ namespace Pixman {
 		public bool is_inverse (Pixman.Transform b);
 	}
 
-	[CCode (cprefix = "PIXMAN_REGION_", has_type_id = false)]
+	[CCode (cname = "pixman_region_overlap_t", cprefix = "PIXMAN_REGION_", has_type_id = false)]
 	public enum RegionOverlap {
 		OUT,
 		IN,
@@ -136,7 +139,10 @@ namespace Pixman {
 
 	[CCode (cname = "pixman_rectangle16_t", has_type_id = false)]
 	public struct Rectangle16 {
-		public Pixman.Box16 extents;
+		public int16 x;
+		public int16 y;
+		public uint16 width;
+		public uint16 height;
 	}
 
 	[CCode (cname = "pixman_region32_t", has_type_id = false, destroy_function = "pixman_region32_fini")]
@@ -170,6 +176,7 @@ namespace Pixman {
 		public bool equal (Pixman.Region32 region2);
 		public bool selfcheck ();
 		public void reset (Pixman.Box32 box);
+		public void clear ();
 	}
 
 	[CCode (cname = "pixman_box32_t", has_type_id = false)]
@@ -182,7 +189,10 @@ namespace Pixman {
 
 	[CCode (cname = "pixman_rectangle32_t", has_type_id = false)]
 	public struct Rectangle32 {
-		public Pixman.Box32 extents;
+		public int32 x;
+		public int32 y;
+		public uint32 width;
+		public uint32 height;
 	}
 
 	public static bool blt ([CCode (array_length = false, type = "uint32_t*")] uint8[] src_bits, [CCode (array_length = false, type = "uint32_t*")] uint8[] dst_bits, int src_stride, int dst_stride, int src_bpp, int dst_bpp, int src_x, int src_y, int dst_x, int dst_y, int width, int height);
@@ -292,7 +302,7 @@ namespace Pixman {
 		ABGR,
 		COLOR,
 		GRAY,
-		YUV2,
+		YUY2,
 		YV12,
 		BGRA;
 
@@ -448,6 +458,7 @@ namespace Pixman {
 		[CCode (instance_pos = 1.1)]
 		public bool fill_rectangles (Pixman.Operation op, Pixman.Color color, [CCode (array_length_pos = 2.1)] Pixman.Rectangle16[] rects);
 
+		[CCode (cname = "pixman_compute_composite_region")]
 		public static bool compute_composite_region (Pixman.Region16 region, Pixman.Image src_image, Pixman.Image? mask_image, Pixman.Image dst_image, int src_x, int src_y, int mask_x, int mask_y, int dest_x, int dest_y, int width, int height);
 		public static void composite (Pixman.Operation op, Pixman.Image src, Pixman.Image? mask, Pixman.Image dest, int16 src_x, int16 src_y, int16 mask_x, int16 mask_y, int16 dest_x, int16 dest_y, uint16 width, uint16 height);
 
@@ -456,12 +467,18 @@ namespace Pixman {
 		[CCode (cname = "pixman_add_traps")]
 		public void add_traps (int16 x_off, int16 y_off, [CCode (array_length_pos = 2.9)] Pixman.Trap[] traps);
 		[CCode (cname = "pixman_add_trapezoids")]
-		public void add_trapezoids (int16 x_off, int y_off, [CCode (array_length_pos = 2.9)] Pixman.Trap[] traps);
+		public void add_trapezoids (int16 x_off, int y_off, [CCode (array_length_pos = 2.9)] Pixman.Trapezoid[] traps);
 		[CCode (cname = "pixman_rasterize_trapezoid")]
 		public void rasterize_trapezoid (Pixman.Trapezoid trap, int x_off, int y_off);
+		[CCode (cname = "pixman_composite_trapezoids")]
+		public static bool composite_trapezoids (Pixman.Operation op, Pixman.Image src, Pixman.Image dst, Pixman.Format mask_format, int x_src, int y_src, int x_dst, int y_dst, [CCode (array_length_pos = 8.9)] Pixman.Trapezoid[] traps);
+		[CCode (cname = "pixman_composite_triangles")]
+		public static bool composite_triangles (Pixman.Operation op, Pixman.Image src, Pixman.Image dst, Pixman.Format mask_format, int x_src, int y_src, int x_dst, int y_dst, [CCode (array_length_pos = 8.9)] Pixman.Triangle[] tries);
+		[CCode (cname = "pixman_add_triangles")]
+		public void add_triangles (int32 x_off, int32 y_off, [CCode (array_length_pos = 2.9)] Pixman.Triangle[] tris);
 	}
 
-	[CCode (cname = "struct pixman_edge", has_type_id = false)]
+	[CCode (cname = "pixman_edge_t", has_type_id = false)]
 	public struct Edge {
 		public Pixman.Fixed x;
 		public Pixman.Fixed e;
@@ -481,7 +498,7 @@ namespace Pixman {
 		public Edge.line_fixed (int bpp, Pixman.Fixed y, Pixman.LineFixed line, int x_off, int y_off);
 	}
 
-	[CCode (cname = "struct pixman_trapezoid", has_type_id = false)]
+	[CCode (cname = "pixman_trapezoid_t", has_type_id = false)]
 	public struct Trapezoid {
 		public Pixman.Fixed top;
 		public Pixman.Fixed bottom;
@@ -491,14 +508,21 @@ namespace Pixman {
 		public bool valid ();
 	}
 
-	[CCode (cname = "struct pixman_span_fix", has_type_id = false)]
+	[CCode (cname = "pixman_triangle_t", has_type_id = false)]
+	public struct Triangle {
+		public Pixman.PointFixed p1;
+		public Pixman.PointFixed p2;
+		public Pixman.PointFixed p3;
+	}
+
+	[CCode (cname = "pixman_span_fix_t", has_type_id = false)]
 	public struct SpanFix {
 		public Pixman.Fixed l;
 		public Pixman.Fixed r;
 		public Pixman.Fixed y;
 	}
 
-	[CCode (cname = "struct pixman_trap", has_type_id = false)]
+	[CCode (cname = "pixman_trap_t", has_type_id = false)]
 	public struct Trap {
 		public Pixman.SpanFix top;
 		public Pixman.SpanFix bot;
diff --git a/vapi/rest-0.7.vapi b/vapi/rest-0.7.vapi
index 4ed7a6149..015fc6880 100644
--- a/vapi/rest-0.7.vapi
+++ b/vapi/rest-0.7.vapi
@@ -253,7 +253,7 @@ namespace Rest {
 		HTTP_HTTP_VERSION_NOT_SUPPORTED;
 		public static GLib.Quark quark ();
 	}
-	[CCode (cheader_filename = "rest/oauth-proxy.h", instance_pos = 3.9)]
+	[CCode (cheader_filename = "rest/oauth-proxy.h", cname = "OAuthProxyAuthCallback", instance_pos = 3.9)]
 	public delegate void OAuthProxyAuthCallback (Rest.OAuthProxy proxy, GLib.Error? error, GLib.Object? weak_object);
 	[CCode (cheader_filename = "rest/rest-proxy-call.h", instance_pos = 3.9)]
 	public delegate void ProxyCallAsyncCallback (Rest.ProxyCall call, GLib.Error? error, GLib.Object? weak_object);
diff --git a/vapi/webkit2gtk-web-extension-4.0.vapi b/vapi/webkit2gtk-web-extension-4.0.vapi
index 893236c56..f28f6f81a 100644
--- a/vapi/webkit2gtk-web-extension-4.0.vapi
+++ b/vapi/webkit2gtk-web-extension-4.0.vapi
@@ -3676,7 +3676,7 @@ namespace WebKit {
 			[Version (deprecated = true, deprecated_since = "2.22")]
 			public abstract string lookup_namespace_uri (string prefix);
 		}
-		[CCode (cheader_filename = "webkit2/webkit-web-extension.h")]
+		[CCode (cheader_filename = "webkit2/webkit-web-extension.h", has_typedef = false)]
 		public delegate void EventTargetFunc (WebKit.DOM.EventTarget target, WebKit.DOM.Event event);
 		[CCode (cheader_filename = "webkit2/webkit-web-extension.h", cname = "WEBKIT_DOM_CSS_RULE_CHARSET_RULE")]
 		[Version (deprecated = true, deprecated_since = "2.22")]
diff --git a/vapi/x11.vapi b/vapi/x11.vapi
index aecc667db..640d413f0 100644
--- a/vapi/x11.vapi
+++ b/vapi/x11.vapi
@@ -135,7 +135,7 @@ namespace X {
 		public string get_atom_name (X.Atom atom);
 
 		[CCode (cname = "XGetAtomNames")]
-		public Status get_atom_names (Atom[] atoms, [CCode (array_length = false)] out string[] names);
+		public Status get_atom_names (Atom[] atoms, [CCode (array_length = false)] string[] names);
 
 		[CCode (cname = "XDeleteProperty")]
 		public int delete_property (Window w, X.Atom property);
@@ -303,7 +303,7 @@ namespace X {
 		public string xserver_vendor_name ();
 
 		[CCode (cname = "XVendorRelease")]
-		public string xserver_vendor_release ();
+		public int xserver_vendor_release ();
 
 		[CCode (cname = "XMoveWindow")]
 		public void move_window (Window window, int x, int y);
@@ -489,9 +489,11 @@ namespace X {
 	[CCode (ref_function = "", unref_function = "")]
 	[Compact]
 	public class Visual {
+		[CCode (cname = "XVisualIDFromVisual")]
 		public VisualID get_visual_id ();
 	}
 
+	[CCode (cname = "XWindowChanges")]
 	public struct WindowChanges {
 		public int x;
 		public int y;
@@ -501,6 +503,8 @@ namespace X {
 		public Window sibling;
 		public int stack_mode;
 	}
+
+	[CCode (cname = "XSizeHints")]
 	public struct SizeHints {
 		public long @flags;
 		public int x;
@@ -973,7 +977,7 @@ namespace X {
 		public ulong serial;
 		public bool send_event;
 		public unowned Display display;
-		public Window window;
+		public Drawable drawable;
 		public int x;
 		public int y;
 		public int width;
@@ -989,8 +993,9 @@ namespace X {
 		public ulong serial;
 		public bool send_event;
 		public unowned Display display;
-		public Window window;
-		public int state;
+		public Drawable drawable;
+		public int major_code;
+		public int minor_code;
 	}
 
 	[CCode (cname = "XVisibilityEvent", has_type_id = false)]
@@ -1226,7 +1231,12 @@ namespace X {
 		public Window window;
 		public Atom message_type;
 		public int format;
-		public ClientMessageEventData data;
+		[CCode (cname = "data.b")]
+		public unowned char b[20];
+		[CCode (cname = "data.s")]
+		public unowned short s[10];
+		[CCode (cname = "data.l")]
+		public unowned long l[5];
 	}
 
 	[CCode (cname = "XMappingEvent", has_type_id = false)]
@@ -1259,7 +1269,7 @@ namespace X {
 		public bool send_event;
 		public unowned Display display;
 		public Window window;
-		public unowned char[] key_vector;
+		public char key_vector[32];
 	}
 
 	[CCode (cname = "XGenericEvent", has_type_id = false)]
@@ -1292,13 +1302,6 @@ namespace X {
 		public short height;
 	}
 
-	// union
-	public struct ClientMessageEventData {
-		public unowned char[] b;
-		public unowned short[] s;
-		public unowned long[] l;
-	}
-
 	[CCode (cprefix = "Queued", has_type_id = false)]
 	public enum QueuedMode {
 		Already,
@@ -1398,7 +1401,7 @@ namespace X {
 		[CCode (cname = "RootWindowOfScreen")]
 		public Window root_window_of_screen ();
 
-		[CCode (cname = "ScreenNumberOfScreen")]
+		[CCode (cname = "XScreenNumberOfScreen")]
 		public int screen_number_of_screen ();
 
 		[CCode (cname = "WhitePixelOfScreen")]
diff --git a/vapi/zlib.vapi b/vapi/zlib.vapi
index 6f76ba941..c9adb8e24 100644
--- a/vapi/zlib.vapi
+++ b/vapi/zlib.vapi
@@ -23,8 +23,6 @@
  * 	Jörn Magens <joernmagens@gmx.de>
  */
 
-using GLib;
-
 [CCode (lower_case_cprefix = "", cheader_filename = "zlib.h")]
 namespace ZLib {
 	[CCode (cname="int", cprefix="Z_", has_type_id = false)]
@@ -141,8 +139,11 @@ namespace ZLib {
 		public int set_dictionary ([CCode (array_length_type = "guint")] uint8[] dictionary);
 		[CCode (cname = "inflateSync")]
 		public int sync ();
+		[CCode (cname = "inflateReset")]
 		public int reset ();
+		[CCode (cname = "inflatePrime")]
 		public int prime (int bits, int value);
+		[CCode (cname = "inflateGetHeader")]
 		public int get_header (out GZHeader head);
 	}
 	[CCode (lower_case_cprefix = "", cheader_filename = "zlib.h")]
@@ -162,17 +163,17 @@ namespace ZLib {
 		public int xflags;
 		public int os;
 		[CCode (array_length_cname = "extra_len", array_length_type = "guint")]
-		public uint8[] extra;
+		public unowned uint8[] extra;
 		public uint extra_max;
-		public string? name;
+		public unowned string? name;
 		public uint name_max;
-		public string comment;
+		public unowned string comment;
 		[CCode (cname = "comm_max")]
 		public uint comment_max;
 		public int hcrc;
 		public int done;
 	}
-	[CCode (cname = "gzFile", cprefix = "gz", free_function = "gzclose")]
+	[CCode (cname = "struct gzFile_s", cprefix = "gz", free_function = "gzclose")]
 	[Compact]
 	public class GZFileStream {
 		public static GZFileStream open (string path, string mode = "rb");

--- End Message ---
--- Begin Message ---
On 2021-04-13 09:12:48, Rico Tzschichholz wrote:
> Superseded by https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=986869

Okay, closing this unblock requiest.

Cheers
-- 
Sebastian Ramacher

--- End Message ---

Reply to: