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

Bug#989939: marked as done (unblock: vala/0.48.18-1)



Your message dated Tue, 27 Jul 2021 16:12:59 +0200
with message-id <6cf98035-3cf7-3796-db12-704f3fb41e9f@debian.org>
and subject line Re: Bug#989939: unblock: vala/0.48.18-1
has caused the Debian Bug report #989939,
regarding unblock: vala/0.48.18-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.)


-- 
989939: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=989939
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

Vala 0.48.18
============
 * Various improvements and bug fixes:
  - codegen:
    + GArray, GByteArray and GPtrArray are reference counted
    + Replace wrongly hard coded usage of G_OBJECT_GET_CLASS
    + Mark entry point method implementation "_vala_main" as static
    + Improve check for GLib.Source derived classes
  - vala: Parameter following params-array parameter is not allowed

 * Bindings:
  - Update GLib bindings to 2.66 - Sync GLib symbol additions with 0.50.9
  - glib-2.0: Add missing has_typedef attributes on SourceFuncs delegates
  - pango: Mark language parameter of AttrIterator.get_font() as out

 * Various improvements and bug fixes:
  - codegen:
    + Apply gconstpointer to gpointer cast to GenericType only
    + Fix access to captured generics in async method of interfaces (2)
    + Use if-clause for is_in_destructor() condition to be more clear
    + Add missing "_return" label and "_inner_error*_" declaration in dtors
    + Don't use G_GNUC_INTERNAL on implicit type specific fields
  - vala:
    + length-type of arrays must not be nullable
    + Report a warning for unhandled errors in destructors
  - parser:
    + Minor semantic checks to improve error messages
    + Allow empty member-initializer and accept trailing comma
    + Include INTERR token in source_reference of parsed types

[ Reason ]
Vala 0.48.x series is a Long-Term support version and receives important bug
fixes and binding fixes.

https://gitlab.gnome.org/GNOME/vala/-/issues/537
https://gitlab.gnome.org/GNOME/vala/-/issues/1176
https://gitlab.gnome.org/GNOME/vala/-/issues/1178

[ Impact ]
Vala 0.48.x gained updated bindings for glib 2.66 which were backported from
0.50.9.
Currently vala 0.48.17-1 provides bindings for glib 2.64 only.

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

[ Risks ]
Vala is a compiler and affects every reverse-dependency.

[ Checklist ]
  [X] all changes are documented in the d/changelog
  [X] I reviewed all changes and I approve them
  [X] There are no packaging changes other than the changelog itself
  [X] attach debdiff against the package in testing

[ Other info ]
https://gitlab.gnome.org/GNOME/vala/-/compare/7a59191b7fc5d4c7b77f42ab0e7806011a5c71dd...5587fe63a9489cdcb2fdd91a820c34e54ddbe3e0

unblock vala/0.48.18-1
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 7d06fde1f..e24394863 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -1113,8 +1113,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 			if (f.is_private_symbol ()) {
 				flock.modifiers = CCodeModifiers.STATIC;
-			} else if (context.hide_internal && f.is_internal_symbol ()) {
-				flock.modifiers = CCodeModifiers.INTERNAL;
 			} else {
 				flock.modifiers = CCodeModifiers.EXTERN;
 			}
@@ -1132,8 +1130,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 					cdecl.add_declarator (new CCodeVariableDeclarator (get_variable_array_length_cname (f, dim)));
 					if (f.is_private_symbol ()) {
 						cdecl.modifiers = CCodeModifiers.STATIC;
-					} else if (context.hide_internal && f.is_internal_symbol ()) {
-						cdecl.modifiers = CCodeModifiers.INTERNAL;
 					} else {
 						cdecl.modifiers = CCodeModifiers.EXTERN;
 					}
@@ -1149,8 +1145,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				cdecl.add_declarator (new CCodeVariableDeclarator (get_ccode_delegate_target_name (f)));
 				if (f.is_private_symbol ()) {
 					cdecl.modifiers = CCodeModifiers.STATIC;
-				} else if (context.hide_internal && f.is_internal_symbol ()) {
-					cdecl.modifiers = CCodeModifiers.INTERNAL;
 				} else {
 					cdecl.modifiers = CCodeModifiers.EXTERN;
 				}
@@ -1161,8 +1155,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 					cdecl.add_declarator (new CCodeVariableDeclarator (get_ccode_delegate_target_destroy_notify_name (f)));
 					if (f.is_private_symbol ()) {
 						cdecl.modifiers = CCodeModifiers.STATIC;
-					} else if (context.hide_internal && f.is_internal_symbol ()) {
-						cdecl.modifiers = CCodeModifiers.INTERNAL;
 					} else {
 						cdecl.modifiers = CCodeModifiers.EXTERN;
 					}
@@ -2166,11 +2158,15 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				unowned DataType? this_type = get_this_type ();
 				if (this_type != null && (!in_creation_method_with_chainup || current_method.body != b)) {
-					var ref_call = new CCodeFunctionCall (get_dup_func_expression (this_type, b.source_reference));
-					ref_call.add_argument (get_this_cexpression ());
-
-					// never increase reference count for self in finalizers to avoid infinite recursion on following unref
-					var instance = (is_in_destructor () ? (CCodeExpression) new CCodeIdentifier ("self") : (CCodeExpression) ref_call);
+					CCodeExpression instance;
+					if (is_in_destructor ()) {
+						// never increase reference count for self in finalizers to avoid infinite recursion on following unref
+						instance = new CCodeIdentifier ("self");
+					} else {
+						var ref_call = new CCodeFunctionCall (get_dup_func_expression (this_type, b.source_reference));
+						ref_call.add_argument (get_this_cexpression ());
+						instance = ref_call;
+					}
 
 					ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), "self"), instance);
 				}
@@ -2912,9 +2908,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				string method_name = "get_%s_dup_func".printf (type_parameter.name.ascii_down ());
 				var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface)));
-				cast_self.add_argument (new CCodeIdentifier ("self"));
+				cast_self.add_argument (get_this_cexpression ());
 				var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name));
-				function_call.add_argument (new CCodeIdentifier ("self"));
+				function_call.add_argument (get_this_cexpression ());
 				return function_call;
 			}
 
@@ -3759,11 +3755,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		var ccomma = new CCodeCommaExpression ();
 
 		if (context.profile == Profile.GOBJECT
-		    && type.type_symbol != null && !is_reference_counting (type.type_symbol) &&
-		    (type.type_symbol.is_subtype_of (gstringbuilder_type)
-		     || type.type_symbol.is_subtype_of (garray_type)
-		     || type.type_symbol.is_subtype_of (gbytearray_type)
-		     || type.type_symbol.is_subtype_of (gptrarray_type))) {
+		    && type.type_symbol != null && !is_reference_counting (type.type_symbol)
+		    && type.type_symbol.is_subtype_of (gstringbuilder_type)) {
 			ccall.add_argument (new CCodeConstant ("TRUE"));
 		} else if (context.profile == Profile.GOBJECT
 		    && type.type_symbol == gthreadpool_type) {
@@ -4191,7 +4184,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			CCodeExpression klass;
 
 			if (get_this_type () != null) {
-				var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS"));
+				var k = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function ((Class) parent)));
 				k.add_argument (new CCodeIdentifier ("self"));
 				klass = k;
 			} else {
@@ -4708,15 +4701,17 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			}
 
 			CCodeExpression cifnull;
-			if (type.type_symbol != null) {
-				cifnull = new CCodeConstant ("NULL");
-			} else {
+			if (type is GenericType) {
 				// the value might be non-null even when the dup function is null,
 				// so we may not just use NULL for type parameters
 
 				// cast from gconstpointer to gpointer as methods in
 				// generic classes may not return gconstpointer
 				cifnull = new CCodeCastExpression (cexpr, get_ccode_name (pointer_type));
+			} else if (type.type_symbol != null) {
+				cifnull = new CCodeConstant ("NULL");
+			} else {
+				cifnull = cexpr;
 			}
 
 			if (is_ref_function_void (type)) {
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 7b22c9f23..e18e4cb79 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -715,13 +715,13 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					klass = new CCodeIdentifier ("klass");
 				} else {
 					// Accessing the field from within an instance method
-					var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS"));
+					var k = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (cl)));
 					k.add_argument (new CCodeIdentifier ("self"));
 					klass = k;
 				}
 			} else {
 				// Accessing the field of an instance
-				var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS"));
+				var k = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (cl)));
 				k.add_argument (get_cvalue_ (instance));
 				klass = k;
 			}
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 42a7fcaa0..3b4d03b24 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -202,7 +202,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 						type_param_index++;
 					}
 				}
-			} else if (current_class.base_class == gsource_type) {
+			} else if (current_class.is_subtype_of (gsource_type)) {
 				// g_source_new
 
 				string class_prefix = get_ccode_lower_case_name (current_class);
@@ -289,13 +289,13 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 					klass = new CCodeIdentifier ("klass");
 				} else {
 					// Accessing the method from within an instance method
-					var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS"));
+					var k = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (cl)));
 					k.add_argument (get_this_cexpression ());
 					klass = k;
 				}
 			} else {
 				// Accessing the method of an instance
-				var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS"));
+				var k = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (cl)));
 				k.add_argument (get_cvalue (ma.inner));
 				klass = k;
 			}
@@ -979,7 +979,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 			}
 		}
 
-		if (m is CreationMethod && m.parent_symbol is Class && ((current_class.is_compact && current_class.base_class != null) || current_class.base_class == gsource_type)) {
+		if (m is CreationMethod && m.parent_symbol is Class && ((current_class.is_compact && current_class.base_class != null) || current_class.is_subtype_of (gsource_type))) {
 			var cinitcall = new CCodeFunctionCall (new CCodeIdentifier ("%s_instance_init".printf (get_ccode_lower_case_name (current_class, null))));
 			cinitcall.add_argument (get_this_cexpression ());
 			if (!current_class.is_compact) {
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index f29463ea4..bb0a96684 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -177,6 +177,10 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 			function.modifiers |= CCodeModifiers.INTERNAL;
 		}
 
+		if (m.entry_point) {
+			function.modifiers |= CCodeModifiers.STATIC;
+		}
+
 		if (m.version.deprecated) {
 			if (context.profile == Profile.GOBJECT) {
 				decl_space.add_include ("glib.h");
@@ -423,6 +427,10 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 			function.modifiers |= CCodeModifiers.INLINE;
 		}
 
+		if (m.entry_point) {
+			function.modifiers |= CCodeModifiers.STATIC;
+		}
+
 		var cparam_map = new HashMap<int,CCodeParameter> (direct_hash, direct_equal);
 
 		generate_cparameters (m, cfile, cparam_map, function);
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 5c79f1ef4..43e6e153e 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -63,7 +63,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 		bool is_gtypeinstance = !cl.is_compact;
 		bool is_fundamental = is_gtypeinstance && cl.base_class == null;
-		bool is_gsource = cl.base_class == gsource_type;
+		bool is_gsource = cl.is_subtype_of (gsource_type);
 
 		if (is_gtypeinstance) {
 			decl_space.add_include ("glib-object.h");
@@ -628,7 +628,7 @@ public class Vala.GTypeModule : GErrorModule {
 			begin_class_finalize_function (cl);
 			begin_finalize_function (cl);
 		} else {
-			if (cl.is_compact || cl.base_class == null || cl.base_class == gsource_type) {
+			if (cl.is_compact || cl.base_class == null || cl.is_subtype_of (gsource_type)) {
 				begin_instance_init_function (cl);
 				begin_finalize_function (cl);
 			}
@@ -768,7 +768,7 @@ public class Vala.GTypeModule : GErrorModule {
 				cfile.add_function (unref_fun);
 			}
 		} else {
-			if (cl.is_compact || cl.base_class == null || cl.base_class == gsource_type) {
+			if (cl.is_compact || cl.base_class == null || cl.is_subtype_of (gsource_type)) {
 				add_instance_init_function (cl);
 				add_finalize_function (cl);
 			}
@@ -1610,7 +1610,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 		push_function (func);
 
-		bool is_gsource = cl.base_class == gsource_type;
+		bool is_gsource = cl.is_subtype_of (gsource_type);
 
 		if (cl.is_compact) {
 			// Add declaration, since the instance_init function is explicitly called
@@ -1696,6 +1696,16 @@ public class Vala.GTypeModule : GErrorModule {
 
 		if (cl.static_destructor != null) {
 			cl.static_destructor.body.emit (this);
+
+			if (current_method_inner_error) {
+				ccode.add_declaration ("GError*", new CCodeVariableDeclarator.zero ("_inner_error%d_".printf (current_inner_error_id), new CCodeConstant ("NULL")));
+			}
+
+			if (current_method_return) {
+				// support return statements in destructors
+				ccode.add_label ("_return");
+				ccode.add_statement (new CCodeEmptyStatement ());
+			}
 		}
 
 		pop_context ();
@@ -1719,6 +1729,16 @@ public class Vala.GTypeModule : GErrorModule {
 
 		if (cl.class_destructor != null) {
 			cl.class_destructor.body.emit (this);
+
+			if (current_method_inner_error) {
+				ccode.add_declaration ("GError*", new CCodeVariableDeclarator.zero ("_inner_error%d_".printf (current_inner_error_id), new CCodeConstant ("NULL")));
+			}
+
+			if (current_method_return) {
+				// support return statements in destructors
+				ccode.add_label ("_return");
+				ccode.add_statement (new CCodeEmptyStatement ());
+			}
 		}
 
 		pop_context ();
@@ -1736,7 +1756,7 @@ public class Vala.GTypeModule : GErrorModule {
 	private void begin_finalize_function (Class cl) {
 		push_context (instance_finalize_context);
 
-		bool is_gsource = cl.base_class == gsource_type;
+		bool is_gsource = cl.is_subtype_of (gsource_type);
 
 		if (!cl.is_compact || is_gsource) {
 			var fundamental_class = cl;
@@ -1830,7 +1850,7 @@ public class Vala.GTypeModule : GErrorModule {
 			pop_context ();
 
 			cfile.add_function (instance_finalize_context.ccode);
-		} else if (cl.base_class == gsource_type) {
+		} else if (cl.is_subtype_of (gsource_type)) {
 			cfile.add_function (instance_finalize_context.ccode);
 		}
 	}
diff --git a/vala/valaarraycreationexpression.vala b/vala/valaarraycreationexpression.vala
index 5e0f46172..c16808c61 100644
--- a/vala/valaarraycreationexpression.vala
+++ b/vala/valaarraycreationexpression.vala
@@ -258,7 +258,7 @@ public class Vala.ArrayCreationExpression : Expression {
 			length_type = context.analyzer.int_type.copy ();
 		} else {
 			length_type.check (context);
-			if (!(length_type is IntegerType)) {
+			if (!(length_type is IntegerType) || length_type.nullable) {
 				error = true;
 				Report.error (length_type.source_reference, "Expected integer type as length type of array");
 			}
diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
index 7fff66b04..50f40721b 100644
--- a/vala/valaarraytype.vala
+++ b/vala/valaarraytype.vala
@@ -317,7 +317,7 @@ public class Vala.ArrayType : ReferenceType {
 			length_type = context.analyzer.int_type.copy ();
 		} else {
 			length_type.check (context);
-			if (!(length_type is IntegerType)) {
+			if (!(length_type is IntegerType) || length_type.nullable) {
 				error = true;
 				Report.error (length_type.source_reference, "Expected integer type as length type of array");
 				return false;
diff --git a/vala/valaclass.vala b/vala/valaclass.vala
index 3fffdb352..f6ee91e59 100644
--- a/vala/valaclass.vala
+++ b/vala/valaclass.vala
@@ -702,7 +702,7 @@ public class Vala.Class : ObjectTypeSymbol {
 				}
 			}
 
-			if (!external && !external_package && base_class != null && base_class != context.analyzer.gsource_type) {
+			if (!external && !external_package && base_class != null && !base_class.is_subtype_of (context.analyzer.gsource_type)) {
 				foreach (Field f in get_fields ()) {
 					if (f.binding == MemberBinding.INSTANCE) {
 						error = true;
diff --git a/vala/valadestructor.vala b/vala/valadestructor.vala
index 61797ea22..a04849673 100644
--- a/vala/valadestructor.vala
+++ b/vala/valadestructor.vala
@@ -77,6 +77,16 @@ public class Vala.Destructor : Subroutine {
 			body.check (context);
 		}
 
+		if (body != null && !body.error) {
+			var body_errors = new ArrayList<DataType> ();
+			body.get_error_types (body_errors);
+			foreach (DataType body_error_type in body_errors) {
+				if (!((ErrorType) body_error_type).dynamic_error) {
+					Report.warning (body_error_type.source_reference, "unhandled error `%s'".printf (body_error_type.to_string()));
+				}
+			}
+		}
+
 		context.analyzer.current_symbol = parent_symbol;
 
 		return !error;
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index 0bed502b9..9c34c7ad0 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -841,6 +841,7 @@ public class Vala.Method : Subroutine, Callable {
 		}
 
 		var optional_param = false;
+		var params_array_param = false;
 		foreach (Parameter param in parameters) {
 			if (!param.check (context)) {
 				error = true;
@@ -865,6 +866,11 @@ public class Vala.Method : Subroutine, Callable {
 				optional_param = true;
 			}
 
+			if (params_array_param) {
+				Report.error (param.source_reference, "parameter follows params-array parameter");
+			} else if (param.params_array) {
+				params_array_param = true;
+			}
 			// Add local variable to provide access to params arrays which will be constructed out of the given va-args
 			if (param.params_array && body != null) {
 				if (params_array_var != null) {
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index e64591c73..1424d3e2c 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -538,6 +538,7 @@ public class Vala.Parser : CodeVisitor {
 
 			if (!(type is PointerType)) {
 				type.nullable = accept (TokenType.INTERR);
+				type.source_reference = get_src (begin);
 			}
 		}
 
@@ -1038,9 +1039,13 @@ public class Vala.Parser : CodeVisitor {
 	List<MemberInitializer> parse_object_initializer () throws ParseError {
 		var list = new ArrayList<MemberInitializer> ();
 		if (accept (TokenType.OPEN_BRACE)) {
-			do {
+			while (current () != TokenType.CLOSE_BRACE) {
 				list.add (parse_member_initializer ());
-			} while (accept (TokenType.COMMA));
+
+				if (!accept (TokenType.COMMA)) {
+					break;
+				}
+			}
 			expect (TokenType.CLOSE_BRACE);
 		}
 		return list;
@@ -2384,12 +2389,18 @@ public class Vala.Parser : CodeVisitor {
 		case TokenType.CONSTRUCT:
 			if (context.profile == Profile.GOBJECT) {
 				rollback (begin);
+				if (!(parent is TypeSymbol)) {
+					throw new ParseError.SYNTAX ("unexpected `construct' declaration");
+				}
 				parse_constructor_declaration (parent, attrs);
 				return;
 			}
 			break;
 		case TokenType.TILDE:
 			rollback (begin);
+			if (!(parent is TypeSymbol)) {
+				throw new ParseError.SYNTAX ("unexpected `destructor' declaration");
+			}
 			parse_destructor_declaration (parent, attrs);
 			return;
 		case TokenType.OPEN_BRACE:
@@ -2468,6 +2479,9 @@ public class Vala.Parser : CodeVisitor {
 				break;
 			case TokenType.OPEN_PARENS:
 				rollback (begin);
+				if (!(parent is TypeSymbol)) {
+					throw new ParseError.SYNTAX ("unexpected `constructor' declaration");
+				}
 				parse_creation_method_declaration (parent, attrs);
 				return;
 			default:
@@ -2480,6 +2494,9 @@ public class Vala.Parser : CodeVisitor {
 						parse_delegate_declaration (parent, attrs);
 						return;
 					case TokenType.SIGNAL:
+						if (!(parent is ObjectTypeSymbol)) {
+							throw new ParseError.SYNTAX ("unexpected `signal' declaration");
+						}
 						parse_signal_declaration (parent, attrs);
 						return;
 					default:
@@ -2500,6 +2517,9 @@ public class Vala.Parser : CodeVisitor {
 				case TokenType.OPEN_BRACE:
 				case TokenType.THROWS:
 					rollback (begin);
+					if (!(parent is TypeSymbol)) {
+						throw new ParseError.SYNTAX ("unexpected `property' declaration");
+					}
 					parse_property_declaration (parent, attrs);
 					return;
 				default:
diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi
index 0c60a0a0c..2a30d4ff0 100644
--- a/vapi/gio-2.0.vapi
+++ b/vapi/gio-2.0.vapi
@@ -3020,6 +3020,9 @@ namespace GLib {
 		protected TlsConnection ();
 		public bool emit_accept_certificate (GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors);
 		public unowned GLib.TlsCertificate? get_certificate ();
+		[CCode (vfunc_name = "get_binding_data")]
+		[Version (since = "2.66")]
+		public virtual bool get_channel_binding_data (GLib.TlsChannelBindingType type, out unowned GLib.ByteArray data) throws GLib.TlsChannelBindingError;
 		[Version (since = "2.30")]
 		public unowned GLib.TlsDatabase? get_database ();
 		[Version (since = "2.30")]
@@ -3515,6 +3518,9 @@ namespace GLib {
 		public async bool close_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool emit_accept_certificate (GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors);
 		public unowned GLib.TlsCertificate? get_certificate ();
+		[CCode (vfunc_name = "get_binding_data")]
+		[Version (since = "2.66")]
+		public virtual bool get_channel_binding_data (GLib.TlsChannelBindingType type, out unowned GLib.ByteArray data) throws GLib.TlsChannelBindingError;
 		public unowned GLib.TlsDatabase? get_database ();
 		public unowned GLib.TlsInteraction? get_interaction ();
 		[Version (since = "2.60")]
@@ -4148,7 +4154,8 @@ namespace GLib {
 		FREEBSD_CMSGCRED,
 		OPENBSD_SOCKPEERCRED,
 		SOLARIS_UCRED,
-		NETBSD_UNPCBID
+		NETBSD_UNPCBID,
+		APPLE_XUCRED
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_DBUS_CALL_FLAGS_", type_id = "g_dbus_call_flags_get_type ()")]
 	[Flags]
@@ -4627,6 +4634,12 @@ namespace GLib {
 	public enum TlsCertificateRequestFlags {
 		NONE
 	}
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_CHANNEL_BINDING_TLS_", type_id = "g_tls_channel_binding_type_get_type ()")]
+	[Version (since = "2.66")]
+	public enum TlsChannelBindingType {
+		UNIQUE,
+		SERVER_END_POINT
+	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_DATABASE_LOOKUP_", type_id = "g_tls_database_lookup_flags_get_type ()")]
 	[Version (since = "2.30")]
 	public enum TlsDatabaseLookupFlags {
@@ -4828,6 +4841,15 @@ namespace GLib {
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static GLib.Quark quark ();
 	}
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_CHANNEL_BINDING_ERROR_")]
+	[Version (since = "2.66")]
+	public errordomain TlsChannelBindingError {
+		NOT_IMPLEMENTED,
+		INVALID_STATE,
+		NOT_AVAILABLE,
+		NOT_SUPPORTED,
+		GENERAL_ERROR
+	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_ERROR_")]
 	[Version (since = "2.28")]
 	public errordomain TlsError {
diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi
index f389d2916..125d57805 100644
--- a/vapi/glib-2.0.vapi
+++ b/vapi/glib-2.0.vapi
@@ -2085,13 +2085,13 @@ namespace GLib {
 	[CCode (has_target = false)]
 	public delegate void SourceDummyMarshal ();
 
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate bool SourcePrepareFunc (Source source, out int timeout_);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate bool SourceCheckFunc (Source source);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate bool SourceDispatchFunc (Source source, SourceFunc? _callback);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void SourceFinalizeFunc (Source source);
 
 	[CCode (has_type_id = false)]
@@ -3863,6 +3863,8 @@ namespace GLib {
 		public static bool get_contents (string filename, out string contents, out size_t length = null) throws FileError;
 		[Version (since = "2.8")]
 		public static bool set_contents (string filename, string contents, ssize_t length = -1) throws FileError;
+		[Version (since = "2.66")]
+		public static bool set_contents_full (string filename, string contents, ssize_t length = -1, FileSetContentsFlags flags = 0, int mode = 0666) throws FileError;
 		[CCode (cname = "g_file_get_contents")]
 		public static bool get_data (string filename, [CCode (type = "gchar**", array_length_type = "size_t")] out uint8[] contents) throws FileError;
 		[CCode (cname = "g_file_set_contents")]
@@ -3904,6 +3906,16 @@ namespace GLib {
 		public static bool close_checked (int fd) throws FileError;
 	}
 
+	[Flags]
+	[Version (since = "2.66")]
+	[CCode (cprefix = "G_FILE_SET_CONTENTS_", has_type_id = false)]
+	public enum FileSetContentsFlags {
+		NONE,
+		CONSISTENT,
+		DURABLE,
+		ONLY_EXISTING
+	}
+
 	[CCode (cname = "GStatBuf", cheader_filename = "glib/gstdio.h", has_type_id = false)]
 	public struct Stat {
 		public time_t st_atime;
@@ -3967,26 +3979,146 @@ namespace GLib {
 
 	/* URI Functions */
 
-	namespace Uri {
+	[Compact]
+	[CCode (ref_function = "g_uri_ref", unref_function = "g_uri_unref", type_id = "G_TYPE_URI")]
+	public class Uri {
+		[Version (since = "2.16")]
 		public const string RESERVED_CHARS_ALLOWED_IN_PATH;
+		[Version (since = "2.16")]
 		public const string RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT;
+		[Version (since = "2.16")]
 		public const string RESERVED_CHARS_ALLOWED_IN_USERINFO;
+		[Version (since = "2.16")]
 		public const string RESERVED_CHARS_GENERIC_DELIMITERS;
+		[Version (since = "2.16")]
 		public const string RESERVED_CHARS_SUBCOMPONENT_DELIMITERS;
 
+		[Version (since = "2.66")]
+		public static bool split (string uri_string, UriFlags flags, out string? scheme, out string? userinfo, out string? host, out int port, out string? path, out string? query, out string? fragment) throws UriError;
+		[Version (since = "2.66")]
+		public static bool split_with_user (string uri_string, UriFlags flags, out string? scheme, out string? user, out string? password, out string? auth_params, out string? host, out int port, out string? path, out string? query, out string? fragment) throws UriError;
+		[Version (since = "2.66")]
+		public static bool split_network (string uri_string, UriFlags flags, out string? scheme, out string? host, out int port) throws UriError;
+		[Version (since = "2.66")]
+		public static bool is_valid (string uri_string, UriFlags flags) throws UriError;
+		[Version (since = "2.66")]
+		public static string join (UriFlags flags, string scheme, string? userinfo, string? host, int port, string path, string? query, string? fragment);
+		[Version (since = "2.66")]
+		public static string join_with_user (UriFlags flags, string scheme, string? user, string? password, string? auth_params, string? host, int port, string path, string? query, string? fragment);
+
+		[Version (since = "2.66")]
+		public static Uri parse (string uri_string, UriFlags flags) throws UriError;
+		[Version (since = "2.66")]
+		public static Uri parse_relative (Uri? base_uri, string uri_string, UriFlags flags) throws UriError;
+		[Version (since = "2.66")]
+		public static string resolve_relative (string base_uri_string, string uri_string, UriFlags flags) throws UriError;
+		[Version (since = "2.66")]
+		public static Uri build (UriFlags flags, string scheme, string? userinfo, string? host, int port, string path, string? query, string? fragment);
+		[Version (since = "2.66")]
+		public static Uri build_with_user (UriFlags flags, string scheme, string? user, string? password, string? auth_params, string? host, int port, string path, string? query, string? fragment);
+
+		[Version (since = "2.66")]
+		public unowned string get_scheme ();
+		[Version (since = "2.66")]
+		public unowned string? get_userinfo ();
+		[Version (since = "2.66")]
+		public unowned string? get_user ();
+		[Version (since = "2.66")]
+		public unowned string? get_password ();
+		[Version (since = "2.66")]
+		public unowned string? get_auth_params ();
+		[Version (since = "2.66")]
+		public unowned string? get_host ();
+		[Version (since = "2.66")]
+		public int get_port ();
+		[Version (since = "2.66")]
+		public unowned string get_path ();
+		[Version (since = "2.66")]
+		public unowned string? get_query ();
+		[Version (since = "2.66")]
+		public unowned string? get_fragment ();
+		[Version (since = "2.66")]
+		public UriFlags get_flags ();
+
+		[Version (since = "2.66")]
+		public static HashTable<string,string> parse_params (string uri, size_t length = -1, string separators = "&;", UriParamsFlags flags = 0) throws UriError;
 		[Version (since = "2.16")]
 		public static string? parse_scheme (string uri);
+		[Version (since = "2.66")]
+		public static unowned string? peek_scheme (string uri);
 		[Version (since = "2.16")]
 		public static string escape_string (string unescaped, string? reserved_chars_allowed = null, bool allow_utf8 = true);
 		[Version (since = "2.16")]
 		public static string? unescape_string (string escaped_string, string? illegal_characters = null);
 		[Version (since = "2.16")]
 		public static string? unescape_segment (string? escaped_string, string? escaped_string_end, string? illegal_characters = null);
+		[Version (since = "2.66")]
+		public static Bytes? unescape_bytes (string escaped_string, size_t length = -1, string? illegal_characters = null) throws UriError;
+		[Version (since = "2.66")]
+		public static string? escape_bytes ([CCode (array_length_type = "gsize")] uint8[] unescaped, string? reserved_chars_allowed = null);
 		[Version (since = "2.6")]
 		[CCode (array_length = false, array_null_terminated = true)]
 		public static string[] list_extract_uris (string uri_list);
 	}
 
+	[Version (since = "2.66")]
+	public errordomain UriError {
+		FAILED,
+		BAD_SCHEME,
+		BAD_USER,
+		BAD_PASSWORD,
+		BAD_AUTH_PARAMS,
+		BAD_HOST,
+		BAD_PORT,
+		BAD_PATH,
+		BAD_QUERY,
+		BAD_FRAGMENT;
+		public static GLib.Quark quark ();
+	}
+
+	[Flags]
+	[Version (since = "2.66")]
+	[CCode (cprefix = "G_URI_FLAGS_", has_type_id = false)]
+	public enum UriFlags {
+		NONE,
+		PARSE_RELAXED,
+		HAS_PASSWORD,
+		HAS_AUTH_PARAMS,
+		ENCODED,
+		NON_DNS,
+		ENCODED_QUERY,
+		ENCODED_PATH,
+		ENCODED_FRAGMENT
+	}
+
+	[Flags]
+	[Version (since = "2.66")]
+	[CCode (cprefix = "G_URI_HIDE_", has_type_id = false)]
+	public enum UriHideFlags {
+		NONE,
+		USERINFO,
+		PASSWORD,
+		AUTH_PARAMS,
+		QUERY,
+		FRAGMENT
+	}
+
+	[Version (since = "2.66")]
+	public struct UriParamsIter {
+		public UriParamsIter (string @params, int length = -1, string separators = "&;", UriParamsFlags flags = 0);
+		public bool next (out string attribute = null, out string @value = null) throws Error;
+	}
+
+	[Flags]
+	[Version (since = "2.66")]
+	[CCode (cprefix = "G_URI_PARAMS_", has_type_id = false)]
+	public enum UriParamsFlags {
+		NONE,
+		CASE_INSENSITIVE,
+		WWW_FORM,
+		PARSE_RELAXED
+	}
+
 	/* Shell-related Utilities */
 
 	public errordomain ShellError {
@@ -4511,24 +4643,48 @@ namespace GLib {
 		public string get_mime_type (string uri) throws BookmarkFileError;
 		public bool get_is_private (string uri) throws BookmarkFileError;
 		public bool get_icon (string uri, out string href, out string mime_type) throws BookmarkFileError;
+		[Version (deprecated_since = "2.66", replacement = "get_added_date_time")]
 		public time_t get_added (string uri) throws BookmarkFileError;
+		[Version (since = "2.66")]
+		public unowned DateTime get_added_date_time (string uri) throws BookmarkFileError;
+		[Version (deprecated_since = "2.66", replacement = "get_modified_date_time")]
 		public time_t get_modified (string uri) throws BookmarkFileError;
+		[Version (since = "2.66")]
+		public unowned DateTime get_modified_date_time (string uri) throws BookmarkFileError;
+		[Version (deprecated_since = "2.66", replacement = "get_visited_date_time")]
 		public time_t get_visited (string uri) throws BookmarkFileError;
+		[Version (since = "2.66")]
+		public unowned DateTime get_visited_date_time (string uri) throws BookmarkFileError;
 		[CCode (array_length_type = "gsize")]
 		public string[] get_groups (string uri) throws BookmarkFileError;
 		[CCode (array_length_type = "gsize")]
 		public string[] get_applications (string uri) throws BookmarkFileError;
+		[Version (deprecated_since = "2.66", replacement = "get_application_info")]
 		public bool get_app_info (string uri, string name, out string exec, out uint count, out time_t stamp) throws BookmarkFileError;
+		[Version (since = "2.66")]
+		public bool get_application_info (string uri, string name, out string exec, out uint count, out unowned DateTime? stamp) throws BookmarkFileError;
 		public void set_title (string uri, string title);
 		public void set_description (string uri, string description);
 		public void set_mime_type (string uri, string mime_type);
 		public void set_is_private (string uri, bool is_private);
 		public void set_icon (string uri, string href, string mime_type);
+		[Version (deprecated_since = "2.66", replacement = "set_added_date_time")]
 		public void set_added (string uri, time_t added);
+		[Version (since = "2.66")]
+		public void set_added_date_time (string uri, DateTime added);
 		public void set_groups (string uri, string[] groups);
+		[Version (deprecated_since = "2.66", replacement = "set_modified_date_time")]
 		public void set_modified (string uri, time_t modified);
+		[Version (since = "2.66")]
+		public void set_modified_date_time (string uri, DateTime modified);
+		[Version (deprecated_since = "2.66", replacement = "set_visited_date_time")]
 		public void set_visited (string uri, time_t visited);
+		[Version (since = "2.66")]
+		public void set_visited_date_time (string uri, DateTime visited);
+		[Version (deprecated_since = "2.66", replacement = "set_application_info")]
 		public bool set_app_info (string uri, string name, string exec, int count, time_t stamp) throws BookmarkFileError;
+		[Version (since = "2.66")]
+		public bool set_application_info (string uri, string name, string exec, int count, DateTime? stamp) throws BookmarkFileError;
 		public void add_group (string uri, string group);
 		public void add_application (string uri, string name, string exec);
 		public bool remove_group (string uri, string group) throws BookmarkFileError;
@@ -5731,6 +5887,7 @@ namespace GLib {
 		public const uint @2_60;
 		public const uint @2_62;
 		public const uint @2_64;
+		public const uint @2_66;
 
 		[CCode (cname = "glib_binary_age")]
 		public const uint binary_age;
@@ -6322,7 +6479,13 @@ namespace GLib {
 		ELYMAIC,                /* Elym */
 		NANDINAGARI,            /* Nand */
 		NYIAKENG_PUACHUE_HMONG, /* Rohg */
-		WANCHO;                 /* Wcho */
+		WANCHO,                 /* Wcho */
+
+		/* Unicode 13.0 additions */
+		CHORASMIAN,             /* Chrs */
+		DIVES_AKURU,            /* Diak */
+		KHITAN_SMALL_SCRIPT,    /* Kits */
+		YEZIDI;                 /* Yezi */
 
 		[CCode (cname = "g_unicode_script_to_iso15924")]
 		public uint32 to_iso15924 ();
diff --git a/vapi/gobject-2.0.vapi b/vapi/gobject-2.0.vapi
index e3b2dca5e..c7e3716c1 100644
--- a/vapi/gobject-2.0.vapi
+++ b/vapi/gobject-2.0.vapi
@@ -252,6 +252,8 @@ namespace GLib {
 		public unowned GLib.ParamSpec get_redirect_target ();
 		[CCode (cname = "g_param_spec_internal")]
 		public ParamSpec.@internal (GLib.Type param_type, string name, string nick, string blurb, GLib.ParamFlags flags);
+		[Version (since = "2.66")]
+		public static bool is_valid_name (string name);
 		public unowned GLib.ParamSpec @ref ();
 		public unowned GLib.ParamSpec ref_sink ();
 		public void set_qdata (GLib.Quark quark, void* data);
@@ -567,6 +569,8 @@ namespace GLib {
 		public static void emit_by_name (void* instance, string detailed_signal, ...);
 		public static unowned GLib.SignalInvocationHint? get_invocation_hint (void* instance);
 		public static bool has_handler_pending (void* instance, uint signal_id, GLib.Quark detail, bool may_be_blocked);
+		[Version (since = "2.66")]
+		public static bool is_valid_name (string name);
 		[CCode (array_length_type = "guint")]
 		public static uint[] list_ids (GLib.Type itype);
 		public static uint lookup (string name, GLib.Type itype);
@@ -770,6 +774,8 @@ namespace GLib {
 		public void set_instance (void* instance);
 		public void set_int (int v_int);
 		public void set_int64 (int64 v_int64);
+		[Version (since = "2.66")]
+		public void set_interned_string (string? v_string);
 		public void set_long (long v_long);
 		public void set_object (GLib.Object? v_object);
 		public void set_param (GLib.ParamSpec? param);
diff --git a/vapi/metadata/Gio-2.0.metadata b/vapi/metadata/Gio-2.0.metadata
index 26eec0e38..510cfd2b5 100644
--- a/vapi/metadata/Gio-2.0.metadata
+++ b/vapi/metadata/Gio-2.0.metadata
@@ -224,6 +224,9 @@ Socket
   .condition_wait throws="GLib.IOError"
   .connection_factory_create_connection parent="GLib.SocketConnection" name="factory_create_connection" symbol_type="function"
   .create_source skip=false type="GLib.SocketSource"
+  .receive.buffer out=false
+  .receive_from.buffer out=false
+  .receive_with_blocking.buffer out=false
 SocketControlMessage
   .serialize.data type="uint8[]"
 SocketListener
@@ -375,6 +378,8 @@ Application
 Converter
   .convert.inbuf nullable=false
 DBusSubtreeVTable.enumerate skip=false
+DtlsConnection
+  .get_channel_binding_data#method virtual vfunc_name="get_binding_data" throws="GLib.TlsChannelBindingError"
 File
   .measure_disk_usage* skip=false
   .measure_disk_usage*.* default=()
@@ -394,5 +399,7 @@ TlsBackend
   .get_client_connection_type abstract
   .get_file_database_type abstract
   .get_server_connection_type abstract
+TlsConnection
+  .get_channel_binding_data#method virtual vfunc_name="get_binding_data" throws="GLib.TlsChannelBindingError"
 IOStream
   .splice_async finish_instance=false
diff --git a/vapi/metadata/Pango-1.0.metadata b/vapi/metadata/Pango-1.0.metadata
index 03745c299..3489f74c4 100644
--- a/vapi/metadata/Pango-1.0.metadata
+++ b/vapi/metadata/Pango-1.0.metadata
@@ -77,6 +77,7 @@ Attribute
   .destroy destroys_instance
 AttrIterator
   .destroy destroys_instance
+  .get_font.language out
 Coverage
   .unref destroys_instance=false
 Item
diff --git a/vapi/pango.vapi b/vapi/pango.vapi
index f96714851..0290766da 100644
--- a/vapi/pango.vapi
+++ b/vapi/pango.vapi
@@ -66,7 +66,7 @@ namespace Pango {
 		public unowned Pango.Attribute? @get (Pango.AttrType type);
 		[Version (since = "1.2")]
 		public GLib.SList<Pango.Attribute> get_attrs ();
-		public void get_font (Pango.FontDescription desc, Pango.Language? language, owned GLib.SList<Pango.Attribute>? extra_attrs);
+		public void get_font (Pango.FontDescription desc, out unowned Pango.Language? language, owned GLib.SList<Pango.Attribute>? extra_attrs);
 		public bool next ();
 		public void range (out int start, out int end);
 	}

--- End Message ---
--- Begin Message ---
Hi Rico,

On 16-06-2021 13:22, Rico Tzschichholz wrote:> Please unblock package vala
NACK.

I'm going to defer to our FAQ [1] for most part but will add one
additional note: Our transition and (build-)essential freeze is meant to
stabilize our toolchain. Compilers should refrain from uploading early
in our freeze process exactly because they already influence packages in
testing without migrating themselves. We already let in one new upload
early in the freeze, but now it's too late in my opinion. Please, next
time upload to experimental and ask for a pre-approval if your working
on compilers.

Paul

[1] https://release.debian.org/bullseye/FAQ.html

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


--- End Message ---

Reply to: