[vala/wip/attributes: 92/100] Drop array stuff from variable



commit 1458d4858474f71b495d026285dee1a57cf6370e
Author: Luca Bruno <lucabru src gnome org>
Date:   Sat Jul 2 09:58:21 2011 +0200

    Drop array stuff from variable

 codegen/valaccodearraymodule.vala        |    4 +-
 codegen/valaccodebasemodule.vala         |   10 ++++
 codegen/valaccodedelegatemodule.vala     |    2 +-
 codegen/valaccodememberaccessmodule.vala |   20 ++++----
 codegen/valaccodestructmodule.vala       |    4 +-
 codegen/valagtypemodule.vala             |    8 ++--
 vala/valagirparser.vala                  |   12 +++--
 vala/valavariable.vala                   |   79 ------------------------------
 vapigen/valagidlparser.vala              |    2 +-
 9 files changed, 37 insertions(+), 104 deletions(-)
---
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index 9de2446..cba18ec 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -127,8 +127,8 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 	}
 
 	public override string get_parameter_array_length_cname (Parameter param, int dim) {
-		if (param.has_array_length_cname) {
-			return param.get_array_length_cname ();
+		if (get_ccode_array_length_name (param) != null) {
+			return get_ccode_array_length_name (param);
 		} else {
 			return get_array_length_cname (get_variable_cname (param.name), dim);
 		}
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 82b55ba..35e020a 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -5745,6 +5745,14 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		return get_ccode_attribute(node).array_null_terminated;
 	}
 
+	public static string? get_ccode_array_length_name (CodeNode node) {
+		return get_ccode_attribute(node).array_length_name;
+	}
+
+	public static string? get_ccode_array_length_expr (CodeNode node) {
+		return get_ccode_attribute(node).array_length_expr;
+	}
+
 	public static double get_ccode_array_length_pos (CodeNode node) {
 		var a = node.get_attribute ("CCode");
 		if (a != null && a.has_argument ("array_length_pos")) {
@@ -6473,6 +6481,8 @@ public class Vala.CCodeAttribute : AttributeCache {
 	public bool no_array_length { get; private set; }
 	public string? array_length_type { get; private set; }
 	public bool array_null_terminated { get; private set; }
+	public string? array_length_name { get; private set; }
+	public string? array_length_expr { get; private set; }
 
 	private string _name;
 	private string _const_name;
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index 7567c02..088b42c 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -323,7 +323,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				var array_type = (ArrayType) param.variable_type;
 				for (int dim = 1; dim <= array_type.rank; dim++) {
 					CCodeExpression clength;
-					if (d_params.get (i).array_null_terminated) {
+					if (get_ccode_array_null_terminated (d_params.get (i))) {
 						requires_array_length = true;
 						var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
 						len_call.add_argument (new CCodeIdentifier (d_params.get (i).name));
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 5a728ee..35bd4e4 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -399,8 +399,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 	public override TargetValue get_parameter_cvalue (Parameter param) {
 		var result = new GLibValue (param.variable_type.copy ());
 		result.array_null_terminated = get_ccode_array_null_terminated (param);
-		if (param.has_array_length_cexpr) {
-			result.array_length_cexpr = new CCodeConstant (param.get_array_length_cexpr ());
+		if (get_ccode_array_length_expr (param) != null) {
+			result.array_length_cexpr = new CCodeConstant (get_ccode_array_length_expr (param));
 		}
 		result.ctype = get_ccode_type (param);
 
@@ -519,8 +519,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 
 		var result = new GLibValue (value_type);
 		result.array_null_terminated = get_ccode_array_null_terminated (field);
-		if (field.has_array_length_cexpr) {
-			result.array_length_cexpr = new CCodeConstant (field.get_array_length_cexpr ());
+		if (get_ccode_array_length_expr (field) != null) {
+			result.array_length_cexpr = new CCodeConstant (get_ccode_array_length_expr (field));
 		}
 		result.ctype = get_ccode_type (field);
 
@@ -558,8 +558,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					CCodeExpression length_expr = null;
 
 					string length_cname;
-					if (field.has_array_length_cname) {
-						length_cname = field.get_array_length_cname ();
+					if (get_ccode_array_length_name (field) != null) {
+						length_cname = get_ccode_array_length_name (field);
 					} else {
 						length_cname = get_array_length_cname (field.name, dim);
 					}
@@ -636,8 +636,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 			if (array_type != null && !get_ccode_no_array_length (field)) {
 				for (int dim = 1; dim <= array_type.rank; dim++) {
 					string length_cname;
-					if (field.has_array_length_cname) {
-						length_cname = field.get_array_length_cname ();
+					if (get_ccode_array_length_name (field) != null) {
+						length_cname = get_ccode_array_length_name (field);
 					} else {
 						length_cname = get_array_length_cname (get_ccode_name (field), dim);
 					}
@@ -673,8 +673,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 
 				result.array_length_cvalues = null;
 				result.append_array_length_cvalue (len_call);
-			} else if (variable.has_array_length_cexpr) {
-				var length_expr = new CCodeConstant (variable.get_array_length_cexpr ());
+			} else if (get_ccode_array_length_expr (variable) != null) {
+				var length_expr = new CCodeConstant (get_ccode_array_length_expr (variable));
 
 				result.array_length_cvalues = null;
 				result.append_array_length_cvalue (length_expr);
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index 0c115bd..a8c6a84 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -74,8 +74,8 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 
 						for (int dim = 1; dim <= array_type.rank; dim++) {
 							string length_cname;
-							if (f.has_array_length_cname) {
-								length_cname = f.get_array_length_cname ();
+							if (get_ccode_array_length_name (f) != null) {
+								length_cname = get_ccode_array_length_name (f);
 							} else {
 								length_cname = get_array_length_cname (f.name, dim);
 							}
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 039f768..65637b5 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -322,8 +322,8 @@ public class Vala.GTypeModule : GErrorModule {
 
 							for (int dim = 1; dim <= array_type.rank; dim++) {
 								string length_cname;
-								if (f.has_array_length_cname) {
-									length_cname = f.get_array_length_cname ();
+								if (get_ccode_array_length_name (f) != null) {
+									length_cname = get_ccode_array_length_name (f);
 								} else {
 									length_cname = get_array_length_cname (f.name, dim);
 								}
@@ -428,8 +428,8 @@ public class Vala.GTypeModule : GErrorModule {
 						if (!array_type.fixed_length) {
 							for (int dim = 1; dim <= array_type.rank; dim++) {
 								string length_cname;
-								if (f.has_array_length_cname) {
-									length_cname = f.get_array_length_cname ();
+								if (get_ccode_array_length_name (f) != null) {
+									length_cname = get_ccode_array_length_name (f);
 								} else {
 									length_cname = get_array_length_cname (f.name, dim);
 								}
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 8f54984..016c904 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -791,7 +791,7 @@ public class Vala.GirParser : CodeVisitor {
 						if (array_length != null && array_length.symbol is Field) {
 							var length_field = (Field) array_length.symbol;
 							// array has length
-							field.set_array_length_cname (length_field.name);
+							field.set_attribute_string ("CCode", "array_length_cname", length_field.name);
 							var length_type = length_field.variable_type.to_qualified_string ();
 							if (length_type != "int") {
 								var st = parser.root.lookup (length_type);
@@ -800,7 +800,7 @@ public class Vala.GirParser : CodeVisitor {
 								}
 							}
 							field.remove_attribute_argument ("CCode", "array_length");
-							field.array_null_terminated = false;
+							field.remove_attribute_argument ("CCode", "array_null_terminated");
 						}
 					}
 				} else if (symbol is Signal || symbol is Delegate) {
@@ -1449,7 +1449,7 @@ public class Vala.GirParser : CodeVisitor {
 					m.set_attribute_string ("CCode", "array_length_type", st.get_cname ());
 				} else {
 					var param = (Parameter) sym;
-					param.array_length_type = st.get_cname ();
+					param.set_attribute_string ("CCode", "array_length_type", st.get_cname ());
 				}
 			}
 		}
@@ -1935,7 +1935,9 @@ public class Vala.GirParser : CodeVisitor {
 				if (no_array_length) {
 					param.set_attribute_bool ("CCode", "array_length", false);
 				}
-				param.array_null_terminated = array_null_terminated;
+				if (array_null_terminated) {
+					param.set_attribute_bool ("CCode", "array_null_terminated", array_null_terminated);
+				}
 			}
 			param.initializer = metadata.get_expression (ArgumentType.DEFAULT);
 		}
@@ -2319,7 +2321,7 @@ public class Vala.GirParser : CodeVisitor {
 		if (no_array_length) {
 			field.set_attribute_bool ("CCode", "array_length", false);
 		}
-		field.array_null_terminated = true;
+		field.set_attribute_bool ("CCode", "array_null_terminated", true);
 		if (allow_none == "1") {
 			type.nullable = true;
 		}
diff --git a/vala/valavariable.vala b/vala/valavariable.vala
index 646cd91..43c525a 100644
--- a/vala/valavariable.vala
+++ b/vala/valavariable.vala
@@ -55,95 +55,16 @@ public class Vala.Variable : Symbol {
 	 */
 	public bool no_delegate_target { get; set; }
 
-	/**
-	 * Specifies whether the array is null terminated.
-	 */
-	public bool array_null_terminated { 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); }
-	}
-
-	/**
-	 * Specifies whether the array uses a custom C expression as length.
-	 */
-	public bool has_array_length_cexpr {
-		get { return (array_length_cexpr != null); }
-	}
-
-	/**
-	 * Specifies a custom type for the array length.
-	 */
-	public string? array_length_type { get; set; default = null; }
-
 	Expression? _initializer;
 	DataType? _variable_type;
 
-	private string? array_length_cname;
-
-	private string? array_length_cexpr;
-
 	public Variable (DataType? variable_type, string? name, Expression? initializer = null, SourceReference? source_reference = null, Comment? comment = null) {
 		base (name, source_reference, comment);
 		this.variable_type = variable_type;
 		this.initializer = initializer;
 	}
 
-	/**
-	 * Returns the name of the array length variable as it is used in C code
-	 *
-	 * @return the name of the array length variable to be used in C code
-	 */
-	public string? get_array_length_cname () {
-		return this.array_length_cname;
-	}
-
-	/**
-	 * Sets the name of the array length variable as it is used in C code
-	 *
-	 * @param array_length_cname the name of the array length variable to be
-	 * used in C code
-	 */
-	public void set_array_length_cname (string? array_length_cname) {
-		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;
-	}
-
 	void process_ccode_attribute (Attribute a) {
-		if (a.has_argument ("array_null_terminated")) {
-			array_null_terminated = a.get_bool ("array_null_terminated");
-		}
-		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"));
-		}
-		if (a.has_argument ("array_length_type")) {
-			array_length_type = a.get_string ("array_length_type");
-		}
 		if (a.has_argument ("delegate_target")) {
 			no_delegate_target = !a.get_bool ("delegate_target");
 		}
diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala
index 1c64964..14245c8 100644
--- a/vapigen/valagidlparser.vala
+++ b/vapigen/valagidlparser.vala
@@ -2792,7 +2792,7 @@ public class Vala.GIdlParser : CodeVisitor {
 
 		if (array_length_cname != null || array_length_type != null) {
 			if (array_length_cname != null) {
-				field.set_array_length_cname (array_length_cname);
+				field.set_attribute_string ("CCode", "array_length_cname", array_length_cname);
 			}
 			if (array_length_type != null) {
 				field.set_attribute_string ("CCode", "array_length_type", array_length_type);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]