Fix delegates with array parameters, fixes bug 519928
authorJürg Billeter <j@bitron.ch>
Sat, 31 May 2008 09:26:58 +0000 (09:26 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 31 May 2008 09:26:58 +0000 (09:26 +0000)
2008-05-31  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala:

Fix delegates with array parameters, fixes bug 519928

svn path=/trunk/; revision=1511

ChangeLog
gobject/valaccodegenerator.vala

index 3006e41..cd02c96 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2008-05-31  Jürg Billeter  <j@bitron.ch>
 
+       * gobject/valaccodegenerator.vala:
+
+       Fix delegates with array parameters, fixes bug 519928
+
+2008-05-31  Jürg Billeter  <j@bitron.ch>
+
        * vapi/packages/gstreamer-0.10/:
 
        Fix gst_structure_get_value binding, fixes bug 530817
index d4f4a63..a6faac6 100644 (file)
@@ -438,6 +438,21 @@ public class Vala.CCodeGenerator : CodeGenerator {
                var cfundecl = new CCodeFunctionDeclarator (d.get_cname ());
                foreach (FormalParameter param in d.get_parameters ()) {
                        cfundecl.add_parameter ((CCodeFormalParameter) param.ccodenode);
+
+                       // handle array parameters
+                       if (!param.no_array_length && param.parameter_type is ArrayType) {
+                               var array_type = (ArrayType) param.parameter_type;
+                               
+                               var length_ctype = "int";
+                               if (param.direction != ParameterDirection.IN) {
+                                       length_ctype = "int*";
+                               }
+                               
+                               for (int dim = 1; dim <= array_type.rank; dim++) {
+                                       var cparam = new CCodeFormalParameter (get_array_length_cname (param.name, dim), length_ctype);
+                                       cfundecl.add_parameter (cparam);
+                               }
+                       }
                }
                if (d.has_target) {
                        var cparam = new CCodeFormalParameter ("user_data", "void*");