Bug#986869: unblock: vala/0.48.17-1
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: ricotz@ubuntu.com
Please unblock package vala
Vala 0.48.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 <joernmagens@gmx.de>
*/
-using GLib;
-
[CCode (lower_case_cprefix = "", cheader_filename = "zlib.h")]
namespace ZLib {
[CCode (cname="int", cprefix="Z_", has_type_id = false)]
@@ -141,8 +139,11 @@ namespace ZLib {
public int set_dictionary ([CCode (array_length_type = "guint")] uint8[] dictionary);
[CCode (cname = "inflateSync")]
public int sync ();
+ [CCode (cname = "inflateReset")]
public int reset ();
+ [CCode (cname = "inflatePrime")]
public int prime (int bits, int value);
+ [CCode (cname = "inflateGetHeader")]
public int get_header (out GZHeader head);
}
[CCode (lower_case_cprefix = "", cheader_filename = "zlib.h")]
@@ -162,17 +163,17 @@ namespace ZLib {
public int xflags;
public int os;
[CCode (array_length_cname = "extra_len", array_length_type = "guint")]
- public uint8[] extra;
+ public unowned uint8[] extra;
public uint extra_max;
- public string? name;
+ public unowned string? name;
public uint name_max;
- public string comment;
+ public unowned string comment;
[CCode (cname = "comm_max")]
public uint comment_max;
public int hcrc;
public int done;
}
- [CCode (cname = "gzFile", cprefix = "gz", free_function = "gzclose")]
+ [CCode (cname = "struct gzFile_s", cprefix = "gz", free_function = "gzclose")]
[Compact]
public class GZFileStream {
public static GZFileStream open (string path, string mode = "rb");
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);
Reply to: