+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:
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);
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;
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"));
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"));
+ }
}
/**