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