Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: ric...@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);
        }

Reply via email to