]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add array_length_cexpr CCode attribute for fields with constant array
authorJürg Billeter <j@bitron.ch>
Fri, 16 Jan 2009 16:16:32 +0000 (16:16 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 16 Jan 2009 16:16:32 +0000 (16:16 +0000)
2009-01-16  Jürg Billeter  <j@bitron.ch>

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

Add array_length_cexpr CCode attribute for fields with constant
array length, patch by Andreas Brauchli, fixes bug 567301

svn path=/trunk/; revision=2355

ChangeLog
gobject/valaccodearraymodule.vala
vala/valafield.vala

index 3b9048f8ce55de452dd3695a0cb3ca0e1a395d1c..b5021f8853bedc39c73db97ed323e874c9197502 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-01-16  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valafield.vala:
+       * gobject/valaccodearraymodule.vala:
+
+       Add array_length_cexpr CCode attribute for fields with constant
+       array length, patch by Andreas Brauchli, fixes bug 567301
+
 2009-01-16  Jürg Billeter  <j@bitron.ch>
 
        * vala/valacodewriter.vala:
index 24746629cf25adf41e6805a93a0c98cf28a54b54..ffcfaf93a325e977200b491de2a9ac8b7d25f997 100644 (file)
@@ -208,7 +208,9 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 
                                        CCodeExpression length_expr = null;
 
-                                       if (field.binding == MemberBinding.INSTANCE) {
+                                       if (field.has_array_length_cexpr) {
+                                               length_expr = new CCodeConstant (field.get_array_length_cexpr ());
+                                       } else if (field.binding == MemberBinding.INSTANCE) {
                                                var cl = field.parent_symbol as Class;
                                                bool is_gtypeinstance = (cl != null && !cl.is_compact);
 
index fed7e26e6419d5e84bbedc1eb385c4e1ca04c075..61ed7d33a50cf8265561c48a337f8c7015d4bc3e 100644 (file)
@@ -81,8 +81,17 @@ public class Vala.Field : Member, Lockable {
                get { return (array_length_cname != null); }
        }
 
+       /**
+        * Specifies whether the array uses a custom C expression as length.
+        */
+       public bool has_array_length_cexpr {
+               get { return (array_length_cexpr != null); }
+       }
+
        private string? array_length_cname;
 
+       private string? array_length_cexpr;
+
        private string cname;
        
        private bool lock_used = false;
@@ -173,6 +182,26 @@ public class Vala.Field : Member, Lockable {
                this.array_length_cname = array_length_cname;
        }
 
+       /**
+        * Returns the array length expression as it is used in C code
+        *
+        * @return the array length expression to be used in C code
+        */
+       public string? get_array_length_cexpr () {
+               return this.array_length_cexpr;
+       }
+
+
+       /**
+        * Sets the array length expression as it is used in C code
+        *
+        * @param array_length_cexpr the array length expression to be used in C
+        * code
+        */
+       public void set_array_length_cexpr (string? array_length_cexpr) {
+               this.array_length_cexpr = array_length_cexpr;
+       }
+
        private void process_ccode_attribute (Attribute a) {
                if (a.has_argument ("cname")) {
                        set_cname (a.get_string ("cname"));
@@ -192,6 +221,9 @@ public class Vala.Field : Member, Lockable {
                if (a.has_argument ("array_length_cname")) {
                        set_array_length_cname (a.get_string ("array_length_cname"));
                }
+               if (a.has_argument ("array_length_cexpr")) {
+                       set_array_length_cexpr (a.get_string ("array_length_cexpr"));
+               }
        }
        
        /**