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); }