[vala/wip/attributes: 92/100] Drop array stuff from variable
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/attributes: 92/100] Drop array stuff from variable
- Date: Sat, 2 Jul 2011 12:33:01 +0000 (UTC)
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]