]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add array_length_cname attribute for fields, patch by Andreas Brauchli,
authorJürg Billeter <j@bitron.ch>
Sat, 3 Jan 2009 17:45:49 +0000 (17:45 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 3 Jan 2009 17:45:49 +0000 (17:45 +0000)
2009-01-03  Jürg Billeter  <j@bitron.ch>

* vala/valafield.vala:
* gobject/valaccodearraymodule.vala:

Add array_length_cname attribute for fields,
patch by Andreas Brauchli, fixes bug 565793

svn path=/trunk/; revision=2260

ChangeLog
gobject/valaccodearraymodule.vala
vala/valafield.vala

index a928e850d01de2a22b83542070e3a5134d0a0770..fcf299288bcce241c4b37c0bc0cd44134043bd27 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-01-03  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valafield.vala:
+       * gobject/valaccodearraymodule.vala:
+
+       Add array_length_cname attribute for fields,
+       patch by Andreas Brauchli, fixes bug 565793
+
 2009-01-03  Jürg Billeter  <j@bitron.ch>
 
        * vapi/packages/gstreamer-0.10/:
index 20ffe2338a1c41b1622dbbe3af6f5d677a7ff751..d846d4a5f2d1ced9211545e0b3bf14870bd0888c 100644 (file)
@@ -175,7 +175,12 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                                                var cl = field.parent_symbol as Class;
                                                bool is_gtypeinstance = (cl != null && !cl.is_compact);
 
-                                               var length_cname = get_array_length_cname (field.name, dim);
+                                               string length_cname;
+                                               if (field.has_array_length_cname) {
+                                                       length_cname = field.get_array_length_cname ();
+                                               } else {
+                                                       length_cname = get_array_length_cname (field.name, dim);
+                                               }
                                                CCodeExpression typed_inst = (CCodeExpression) get_ccodenode (ma.inner);
 
                                                CCodeExpression inst;
index 3b642e69590b44be00916359a48f99963f027b11..4c3a58b2efab7c8a322fa12444f406b8f6de7333 100644 (file)
@@ -69,6 +69,15 @@ public class Vala.Field : Member, Lockable {
         */
        public bool no_array_length { get; set; }
 
+       /**
+        * Specifies whether the array length field uses a custom name in C.
+        */
+       public bool has_array_length_cname {
+               get { return (array_length_cname != null); }
+       }
+
+       private string? array_length_cname;
+
        private string cname;
        
        private bool lock_used = false;
@@ -140,6 +149,25 @@ public class Vala.Field : Member, Lockable {
                }
        }
 
+       /**
+        * Returns the name of the array length field as it is used in C code
+        *
+        * @return the name of the array length field to be used in C code
+        */
+       public string? get_array_length_cname () {
+               return this.array_length_cname;
+       }
+
+       /**
+        * Sets the name of the array length field as it is used in C code
+        *
+        * @param array_length_cname the name of the array length field to be
+        * used in C code
+        */
+       public void set_array_length_cname (string? array_length_cname) {
+               this.array_length_cname = array_length_cname;
+       }
+
        private void process_ccode_attribute (Attribute a) {
                if (a.has_argument ("cname")) {
                        set_cname (a.get_string ("cname"));
@@ -150,6 +178,9 @@ public class Vala.Field : Member, Lockable {
                                add_cheader_filename (filename);
                        }
                }
+               if (a.has_argument ("array_length_cname")) {
+                       set_array_length_cname (a.get_string ("array_length_cname"));
+               }
        }
        
        /**