[vala/wip/attributes: 39/119] Add helper functions for attributes in CodeNode
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/attributes: 39/119] Add helper functions for attributes in CodeNode
- Date: Mon, 4 Jul 2011 10:25:22 +0000 (UTC)
commit 21683afbc5d664fee95971fb83f07554ed2d8cde
Author: Luca Bruno <lucabru src gnome org>
Date: Tue Jun 28 23:14:47 2011 +0200
Add helper functions for attributes in CodeNode
codegen/valaccodebasemodule.vala | 16 +---
codegen/valaccodedelegatemodule.vala | 7 +--
codegen/valagdbusmodule.vala | 22 +----
codegen/valagdbusservermodule.vala | 10 +--
codegen/valagvariantmodule.vala | 30 ++-----
vala/valaclass.vala | 5 +-
vala/valacodenode.vala | 165 ++++++++++++++++++++++++++++++++-
vala/valacreationmethod.vala | 6 +-
vala/valaenum.vala | 5 +-
vala/valafield.vala | 13 +---
vala/valagirparser.vala | 2 +-
vala/valainterface.vala | 5 +-
vala/valastruct.vala | 9 +--
vapigen/valagidlparser.vala | 2 +-
14 files changed, 194 insertions(+), 103 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 2a87565..2072327 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -5674,9 +5674,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
public static string get_ccode_type_check_function (TypeSymbol sym) {
var cl = sym as Class;
- var a = sym.get_attribute ("CCode");
- if (cl != null && a != null && a.has_argument ("type_check_function")) {
- return a.get_string ("type_check_function");
+ var a = sym.get_attribute_string ("CCode", "type_check_function");
+ if (cl != null && a != null) {
+ return a;
} else if ((cl != null && cl.is_compact) || sym is Struct || sym is Enum || sym is Delegate) {
return null;
} else {
@@ -5690,7 +5690,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
public static bool get_ccode_has_copy_function (Struct st) {
var a = st.get_attribute ("CCode");
- return a != null && a.get_bool ("has_copy_function");
if (a != null && a.has_argument ("has_copy_function")) {
return a.get_bool ("has_copy_function");
}
@@ -5769,16 +5768,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public static string? get_ccode_type (CodeNode node) {
- var a = node.get_attribute ("CCode");
- if (a != null) {
- return a.get_string ("type");
- }
- return null;
+ return node.get_attribute_string ("CCode", "type");
}
public static bool get_ccode_simple_generics (Method m) {
- var a = node.get_attribute ("CCode");
- return a != null && a.get_bool ("simple_generics");
+ return node.get_attribute_bool ("CCode", "simple_generics");
}
public static string get_ccode_vfunc_name (Method m) {
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index 52eca76..cdce4e2 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -225,12 +225,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
&& param.variable_type is ArrayType
&& ((ArrayType) param.variable_type).element_type.data_type == string_type.data_type) {
// use null-terminated string arrays for dynamic signals for compatibility reasons
- var a = param.get_attribute ("CCode");
- if (a == null) {
- a = new Attribute ("CCode", param.source_reference);
- param.attributes.append (a);
- }
- a.add_argument ("array_length", "false");
+ param.set_attribute_bool ("CCode", "array_length", false);
param.array_null_terminated = true;
}
diff --git a/codegen/valagdbusmodule.vala b/codegen/valagdbusmodule.vala
index 095340d..4189abf 100644
--- a/codegen/valagdbusmodule.vala
+++ b/codegen/valagdbusmodule.vala
@@ -22,32 +22,20 @@
public class Vala.GDBusModule : GVariantModule {
public static string? get_dbus_name (TypeSymbol symbol) {
- var dbus = symbol.get_attribute ("DBus");
- if (dbus == null) {
- return null;
- }
-
- return dbus.get_string ("name");
+ return symbol.get_attribute_string ("DBus", "name");
}
public static string get_dbus_name_for_member (Symbol symbol) {
- var dbus = symbol.get_attribute ("DBus");
- if (dbus != null && dbus.has_argument ("name")) {
- return dbus.get_string ("name");
+ var dbus_name = symbol.get_attribute_string ("DBus", "name");
+ if (dbus_name = null) {
+ return dbus_name;
}
return Symbol.lower_case_to_camel_case (symbol.name);
}
public static bool is_dbus_no_reply (Method m) {
- var dbus_attribute = m.get_attribute ("DBus");
- if (dbus_attribute != null
- && dbus_attribute.has_argument ("no_reply")
- && dbus_attribute.get_bool ("no_reply")) {
- return true;
- }
-
- return false;
+ return m.get_attribute_bool ("DBus", "no_reply");
}
public override void visit_error_domain (ErrorDomain edomain) {
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
index f07753d..f4b971c 100644
--- a/codegen/valagdbusservermodule.vala
+++ b/codegen/valagdbusservermodule.vala
@@ -33,13 +33,9 @@ public class Vala.GDBusServerModule : GDBusClientModule {
}
public static string dbus_result_name (Method m) {
- var dbus_attribute = m.get_attribute ("DBus");
- if (dbus_attribute != null
- && dbus_attribute.has_argument ("result")) {
- var result_name = dbus_attribute.get_string ("result");
- if (result_name != null && result_name != "") {
- return result_name;
- }
+ var dbus_name = m.get_attribute_string ("DBus", "result");
+ if (dbus_name != null && dbus_name != "") {
+ return dbus_name;
}
return "result";
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index 859d49d..d6e02fb 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -44,32 +44,21 @@ public class Vala.GVariantModule : GAsyncModule {
static bool is_string_marshalled_enum (TypeSymbol? symbol) {
if (symbol != null && symbol is Enum) {
- var dbus = symbol.get_attribute ("DBus");
- return dbus != null && dbus.get_bool ("use_string_marshalling");
+ return symbol.get_attribute_bool ("DBus", "use_string_marshalling");
}
return false;
}
string get_dbus_value (EnumValue value, string default_value) {
- var dbus = value.get_attribute ("DBus");
- if (dbus == null) {
- return default_value;
+ var dbus_value = value.get_attribute_string ("DBus", "value");
+ if (dbus_value != null) {
+ return dbus_value;;
}
-
- string dbus_value = dbus.get_string ("value");
- if (dbus_value == null) {
- return default_value;
- }
- return dbus_value;
+ return default_value;
}
public static string? get_dbus_signature (Symbol symbol) {
- var dbus = symbol.get_attribute ("DBus");
- if (dbus == null) {
- return null;
- }
-
- return dbus.get_string ("signature");
+ return symbol.get_attribute_string ("DBus", "signature");
}
bool get_basic_type_info (string signature, out BasicTypeInfo basic_type) {
@@ -104,12 +93,7 @@ public class Vala.GVariantModule : GAsyncModule {
} else if (is_string_marshalled_enum (datatype.data_type)) {
return "s";
} else if (datatype.data_type != null) {
- string sig = null;
-
- var ccode = datatype.data_type.get_attribute ("CCode");
- if (ccode != null) {
- sig = ccode.get_string ("type_signature");
- }
+ string sig = datatype.data_type.get_attribute_string ("CCode", "type_signature");
var st = datatype.data_type as Struct;
var en = datatype.data_type as Enum;
diff --git a/vala/valaclass.vala b/vala/valaclass.vala
index 2b30864..d25b49e 100644
--- a/vala/valaclass.vala
+++ b/vala/valaclass.vala
@@ -590,10 +590,7 @@ public class Vala.Class : ObjectTypeSymbol {
}
if (cname == null) {
- var attr = get_attribute ("CCode");
- if (attr != null) {
- cname = attr.get_string ("cname");
- }
+ cname = attr.get_attribute_string ("CCode", "cname");
if (cname == null) {
cname = get_default_cname ();
}
diff --git a/vala/valacodenode.vala b/vala/valacodenode.vala
index 40728a1..5b94886 100644
--- a/vala/valacodenode.vala
+++ b/vala/valacodenode.vala
@@ -154,6 +154,108 @@ public abstract class Vala.CodeNode {
}
/**
+ * Adds the specified named attribute.
+ *
+ * @param name attribute name
+ */
+ public void add_attribute (string name, SourceReference? source_reference = null) {
+ var a = get_attribute (name);
+ if (a == null) {
+ a = new Attribute (name, source_refernce);
+ attributes.append (a);
+ }
+ return a;
+ }
+
+ /**
+ * Remove the specified named attribute.
+ *
+ * @param name attribute name
+ */
+ public void remove_attribute (string name) {
+ var a = get_attribute (name);
+ if (a != null) {
+ attributes.remove (a);
+ }
+ }
+
+ /**
+ * Remove the specified named attribute argument
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ */
+ public void remove_attribute_argument (string attribute, string argument) {
+ var a = get_attribute (name);
+ if (a != null) {
+ a.attrs.remove (argument);
+ if (a.attrs.size == 0) {
+ attributes.remove (a);
+ }
+ }
+ }
+
+ /**
+ * Returns the string value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @return string value
+ */
+ public string? get_attribute_string (string attribute, string argument) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ return null;
+ }
+ return a.get_string (argument);
+ }
+
+ /**
+ * Returns the integer value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @return integer value
+ */
+ public int get_attribute_integer (string attribute, string argument) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ return null;
+ }
+ return a.get_integer (argument);
+ }
+
+ /**
+ * Returns the double value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @return double value
+ */
+ public double get_attribute_double (string attribute, string argument) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ return null;
+ }
+ return a.get_double (argument);
+ }
+
+ /**
+ * Returns the bool value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @return bool value
+ */
+ public bool get_attribute_bool (string attribute, string argument) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ return null;
+ }
+ return a.get_bool (argument);
+ }
+
+ /**
* Sets the string value of the specified attribute argument.
*
* @param attribute attribute name
@@ -161,14 +263,60 @@ public abstract class Vala.CodeNode {
* @param value string value
*/
public void set_attribute_string (string attribute, string argument, string value, SourceReference? source_reference = null) {
- var attr = get_attribute (attribute);
+ var a = get_attribute (attribute);
+ if (a == null) {
+ a = new Attribute (attribute, source_reference);
+ attributes.append (a);
+ }
+ a.add_argument (argument, "\"%s\"".printf (value));
+ }
- if (attr == null) {
- attr = new Attribute (attribute, source_reference);
- attributes.append (attr);
+ /**
+ * Sets the integer value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @param value integer value
+ */
+ public void set_attribute_integer (string attribute, string argument, int value, SourceReference? source_reference = null) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ a = new Attribute (attribute, source_reference);
+ attributes.append (a);
+ }
+ a.add_argument (argument, value.to_string ());
+ }
+
+ /**
+ * Sets the integer value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @param value double value
+ */
+ public void set_attribute_double (string attribute, string argument, double value, SourceReference? source_reference = null) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ a = new Attribute (attribute, source_reference);
+ attributes.append (a);
}
+ a.add_argument (argument, value.to_string ());
+ }
- attr.add_argument (argument, "\"%s\"".printf (value));
+ /**
+ * Sets the integer value of the specified attribute argument.
+ *
+ * @param attribute attribute name
+ * @param argument argument name
+ * @param value bool value
+ */
+ public void set_attribute_bool (string attribute, string argument, int value, SourceReference? source_reference = null) {
+ var a = get_attribute (attribute);
+ if (a == null) {
+ a = new Attribute (attribute, source_reference);
+ attributes.append (a);
+ }
+ a.add_argument (argument, value.to_string ());
}
/**
@@ -195,6 +343,13 @@ public abstract class Vala.CodeNode {
attribute_caches.resize (hash * 2 + 1);
}
attribute_caches[hash] = cache;
+=======
+ var a = get_attribute (attribute);
+ if (a == null) {
+ a = new Attribute (attribute, source_reference);
+ attributes.append (a);
+ }
+ a.add_argument (argument, "\"%s\"".printf (value));
}
/**
diff --git a/vala/valacreationmethod.vala b/vala/valacreationmethod.vala
index 7ece293..27ce3c6 100644
--- a/vala/valacreationmethod.vala
+++ b/vala/valacreationmethod.vala
@@ -107,9 +107,9 @@ public class Vala.CreationMethod : Method {
}
public override string get_real_cname () {
- var ccode_attribute = get_attribute ("CCode");
- if (ccode_attribute != null && ccode_attribute.has_argument ("construct_function")) {
- return ccode_attribute.get_string ("construct_function");
+ var func = get_attribute_string ("CCode", "construct_function");
+ if (func != null) {
+ return func;
}
return get_default_construct_function ();
diff --git a/vala/valaenum.vala b/vala/valaenum.vala
index 0acf6f9..4f7721c 100644
--- a/vala/valaenum.vala
+++ b/vala/valaenum.vala
@@ -155,10 +155,7 @@ public class Vala.Enum : TypeSymbol {
public override string get_cname (bool const_type = false) {
if (cname == null) {
- var attr = get_attribute ("CCode");
- if (attr != null) {
- cname = attr.get_string ("cname");
- }
+ cname = get_attribute_string ("CCode", "cname");
if (cname == null) {
cname = get_default_cname ();
}
diff --git a/vala/valafield.vala b/vala/valafield.vala
index 27eb95a..5c0cfa7 100644
--- a/vala/valafield.vala
+++ b/vala/valafield.vala
@@ -145,20 +145,11 @@ public class Vala.Field : Variable, Lockable {
}
public string? get_ctype () {
- var attr = get_attribute ("CCode");
- if (attr == null) {
- return null;
- }
- return attr.get_string ("type");
+ return get_attribute_string ("CCode", "type");
}
public void set_ctype (string ctype) {
- var attr = get_attribute ("CCode");
- if (attr == null) {
- attr = new Attribute ("CCode");
- attributes.append (attr);
- }
- attr.add_argument ("type", "\"%s\"".printf (ctype));
+ set_attribute_string ("CCode", "type", ctype);
}
public override bool check (CodeContext context) {
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index a64f41c..1234225 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -2831,7 +2831,7 @@ public class Vala.GirParser : CodeVisitor {
st.set_cname (cname);
}
if (simple_type) {
- st.set_simple_type (true);
+ st.set_simple_type ();
}
alias.symbol = st;
} else if (type_sym is Class) {
diff --git a/vala/valainterface.vala b/vala/valainterface.vala
index b56755b..f9ecc1e 100644
--- a/vala/valainterface.vala
+++ b/vala/valainterface.vala
@@ -282,10 +282,7 @@ public class Vala.Interface : ObjectTypeSymbol {
public override string get_cname (bool const_type = false) {
if (cname == null) {
- var attr = get_attribute ("CCode");
- if (attr != null) {
- cname = attr.get_string ("cname");
- }
+ cname = attr.get_attribute_string ("CCode", "cname");
if (cname == null) {
cname = "%s%s".printf (parent_symbol.get_cprefix (), name);
}
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index ecff5ce..1f458c8 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -277,10 +277,7 @@ public class Vala.Struct : TypeSymbol {
}
if (cname == null) {
- var attr = get_attribute ("CCode");
- if (attr != null) {
- cname = attr.get_string ("cname");
- }
+ cname = attr.get_attribute_string ("CCode", "cname");
if (cname == null) {
cname = get_default_cname ();
}
@@ -706,8 +703,8 @@ public class Vala.Struct : TypeSymbol {
* Marks this struct as simple type, i.e. instances will be passed by
* value.
*/
- public void set_simple_type (bool simple_type) {
- attributes.append (new Attribute ("SimpleType"));
+ public void set_simple_type () {
+ add_attribute ("SimpleType");
}
public override void replace_type (DataType old_type, DataType new_type) {
diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala
index a25f478..a31f0f3 100644
--- a/vapigen/valagidlparser.vala
+++ b/vapigen/valagidlparser.vala
@@ -675,7 +675,7 @@ public class Vala.GIdlParser : CodeVisitor {
st.set_rank (int.parse (eval (nv[1])));
} else if (nv[0] == "simple_type") {
if (eval (nv[1]) == "1") {
- st.set_simple_type (true);
+ st.set_simple_type ();
}
} else if (nv[0] == "immutable") {
if (eval (nv[1]) == "1") {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]