From: Juerg Billeter Date: Mon, 30 Jul 2007 14:40:34 +0000 (+0000) Subject: support array length parameters in virtual methods X-Git-Tag: VALA_0_1_3~140 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=361d217983852211268d08e83ea561230eefc089;p=thirdparty%2Fvala.git support array length parameters in virtual methods 2007-07-30 Juerg Billeter * gobject/valacodegeneratormethod.vala: support array length parameters in virtual methods svn path=/trunk/; revision=414 --- diff --git a/ChangeLog b/ChangeLog index a02804cd8..a578b74fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-07-30 Jürg Billeter + + * gobject/valacodegeneratormethod.vala: support array length parameters + in virtual methods + 2007-07-30 Jürg Billeter * vala/valasemanticanalyzer.vala: fix warning when defining abstract diff --git a/gobject/valacodegeneratormethod.vala b/gobject/valacodegeneratormethod.vala index 455dd6efe..6c2894514 100644 --- a/gobject/valacodegeneratormethod.vala +++ b/gobject/valacodegeneratormethod.vala @@ -337,10 +337,36 @@ public class Vala.CodeGenerator { var params = m.get_parameters (); foreach (FormalParameter param in params) { + if (!param.no_array_length && param.type_reference.data_type is Array) { + var arr = (Array) param.type_reference.data_type; + + var length_ctype = "int"; + if (param.type_reference.is_out) { + length_ctype = "int*"; + } + + for (int dim = 1; dim <= arr.rank; dim++) { + var cparam = new CCodeFormalParameter (get_array_length_cname (param.name, dim), length_ctype); + vfunc.add_parameter (cparam); + vcall.add_argument (new CCodeIdentifier (cparam.name)); + } + } + vfunc.add_parameter ((CCodeFormalParameter) param.ccodenode); vcall.add_argument (new CCodeIdentifier (param.name)); } + // return array length if appropriate + if (!m.no_array_length && m.return_type.data_type is Array) { + var arr = (Array) m.return_type.data_type; + + for (int dim = 1; dim <= arr.rank; dim++) { + var cparam = new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*"); + vfunc.add_parameter (cparam); + vcall.add_argument (new CCodeIdentifier (cparam.name)); + } + } + if (m.return_type.data_type == null) { vblock.add_statement (new CCodeExpressionStatement (vcall)); } else {