]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support array length parameters in virtual methods
authorJuerg Billeter <j@bitron.ch>
Mon, 30 Jul 2007 14:40:34 +0000 (14:40 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 30 Jul 2007 14:40:34 +0000 (14:40 +0000)
2007-07-30  Juerg Billeter  <j@bitron.ch>

* gobject/valacodegeneratormethod.vala: support array length parameters
  in virtual methods

svn path=/trunk/; revision=414

ChangeLog
gobject/valacodegeneratormethod.vala

index a02804cd8e794d33690abb607d89795f041ad1aa..a578b74fa230557a5afec5cd6ebce43ebc466b8a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-30  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valacodegeneratormethod.vala: support array length parameters
+         in virtual methods
+
 2007-07-30  Jürg Billeter  <j@bitron.ch>
 
        * vala/valasemanticanalyzer.vala: fix warning when defining abstract
index 455dd6efe50f29140d2894e8885ca604457b9bb9..6c2894514163665d9c14768f0ce814f56bca896b 100644 (file)
@@ -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 {