summaryrefslogtreecommitdiff
path: root/codegen/valaccodemethodmodule.vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2021-01-28 12:12:53 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2021-01-28 13:00:24 +0100
commit932965b4e630e78ebff50bad95dcff6494832a19 (patch)
treee050e8037a80d66635b815574f6e2d695a1b113d /codegen/valaccodemethodmodule.vala
parent2e798fc3f8e9af25a4c231c2561894d9f0a0be50 (diff)
downloadvala-932965b4e630e78ebff50bad95dcff6494832a19.tar.gz
Add further support for params arrays in constructors
In addition to 98ab3da89640b8b8a6c67044b4df1194672774bb See https://gitlab.gnome.org/GNOME/vala/issues/128
Diffstat (limited to 'codegen/valaccodemethodmodule.vala')
-rw-r--r--codegen/valaccodemethodmodule.vala17
1 files changed, 14 insertions, 3 deletions
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index c14d76120..ae05c917a 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -539,7 +539,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
foreach (Parameter param in m.get_parameters ()) {
if (param.ellipsis || param.params_array) {
if (param.params_array) {
- append_params_array (m.params_array_var);
+ append_params_array (m);
}
break;
}
@@ -885,6 +885,8 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
cparam.modifiers = CCodeModifiers.FORMAT_ARG;
}
} else {
+ var va_list_name = "_vala_va_list";
+
// Add _first_* parameter for the params array parameter
if (param.params_array) {
var param_type = ((ArrayType) param.variable_type).element_type;
@@ -908,10 +910,12 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
cparam = new CCodeParameter ("_first_%s".printf (get_ccode_name (param)), ctypename);
cparam_map.set (get_param_pos (get_ccode_pos (param), false), cparam);
+
+ va_list_name = "_va_list_%s".printf (get_ccode_name (param));
}
if (ellipses_to_valist) {
- cparam = new CCodeParameter ("_vala_va_list", "va_list");
+ cparam = new CCodeParameter (va_list_name, "va_list");
} else {
cparam = new CCodeParameter.with_ellipsis ();
}
@@ -1287,9 +1291,16 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
}
}
+ var carg = carg_map.get (second_last_pos);
+ if (carg == null) {
+ // params arrays have an implicit first argument, refer to the cparameter name
+ carg = new CCodeIdentifier (cparam_map.get (second_last_pos).name);
+ vcall.add_argument (carg);
+ }
+
var va_start = new CCodeFunctionCall (new CCodeIdentifier ("va_start"));
va_start.add_argument (new CCodeIdentifier ("_vala_va_list_obj"));
- va_start.add_argument (carg_map.get (second_last_pos));
+ va_start.add_argument (carg);
ccode.add_declaration ("va_list", new CCodeVariableDeclarator ("_vala_va_list_obj"));
ccode.add_expression (va_start);