From: Jürg Billeter Date: Fri, 16 Jan 2009 16:16:32 +0000 (+0000) Subject: Add array_length_cexpr CCode attribute for fields with constant array X-Git-Tag: VALA_0_5_6~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a7da75f73b18fdbab806df66ee27b3275239178;p=thirdparty%2Fvala.git Add array_length_cexpr CCode attribute for fields with constant array 2009-01-16 Jürg Billeter * 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 --- diff --git a/ChangeLog b/ChangeLog index 3b9048f8c..b5021f885 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-01-16 Jürg Billeter + + * 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 * vala/valacodewriter.vala: diff --git a/gobject/valaccodearraymodule.vala b/gobject/valaccodearraymodule.vala index 24746629c..ffcfaf93a 100644 --- a/gobject/valaccodearraymodule.vala +++ b/gobject/valaccodearraymodule.vala @@ -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); diff --git a/vala/valafield.vala b/vala/valafield.vala index fed7e26e6..61ed7d33a 100644 --- a/vala/valafield.vala +++ b/vala/valafield.vala @@ -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")); + } } /**