[vala] Support to_string for enums
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] Support to_string for enums
- Date: Sat, 9 Jan 2010 11:13:22 +0000 (UTC)
commit 1fbdecd6d5bc61c6347fc1718368a0fbbafec0c9
Author: Jürg Billeter <j bitron ch>
Date: Sat Jan 9 12:12:22 2010 +0100
Support to_string for enums
codegen/valagtypemodule.vala | 19 +++++++++++++++++++
vala/valaenumvaluetype.vala | 8 ++++++++
vapi/gobject-2.0.vapi | 5 +++++
3 files changed, 32 insertions(+), 0 deletions(-)
---
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index a7c69ae..6efc13a 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -1924,4 +1924,23 @@ internal class Vala.GTypeModule : GErrorModule {
source_type_member_definition.append (type_fun.get_definition ());
}
}
+
+ public override void visit_method_call (MethodCall expr) {
+ var ma = expr.call as MemberAccess;
+ var mtype = expr.call.value_type as MethodType;
+ if (mtype == null || mtype.method_symbol.get_full_name () != "GLib.Enum.to_string" ||
+ ma == null || ma.inner.value_type.get_type_id () == null) {
+ base.visit_method_call (expr);
+ return;
+ }
+
+ var class_ref = new CCodeFunctionCall (new CCodeIdentifier ("g_type_class_ref"));
+ class_ref.add_argument (new CCodeIdentifier (ma.inner.value_type.get_type_id ()));
+
+ var get_value = new CCodeFunctionCall (new CCodeIdentifier ("g_enum_get_value"));
+ get_value.add_argument (class_ref);
+ get_value.add_argument ((CCodeExpression) get_ccodenode (((MemberAccess) expr.call).inner));
+ var value_nick = new CCodeMemberAccess.pointer (get_value, "value_nick");
+ expr.ccodenode = value_nick;
+ }
}
diff --git a/vala/valaenumvaluetype.vala b/vala/valaenumvaluetype.vala
index bf138b0..979bfe2 100644
--- a/vala/valaenumvaluetype.vala
+++ b/vala/valaenumvaluetype.vala
@@ -38,4 +38,12 @@ public class Vala.EnumValueType : ValueType {
return result;
}
+
+ public override Symbol? get_member (string member_name) {
+ var result = base.get_member (member_name);
+ if (result == null) {
+ result = CodeContext.get ().root.scope.lookup ("GLib").scope.lookup ("Enum").scope.lookup (member_name);
+ }
+ return result;
+ }
}
diff --git a/vapi/gobject-2.0.vapi b/vapi/gobject-2.0.vapi
index 1fa0088..37c09eb 100644
--- a/vapi/gobject-2.0.vapi
+++ b/vapi/gobject-2.0.vapi
@@ -242,6 +242,11 @@ namespace GLib {
public class InitiallyUnowned : Object {
}
+ [CCode (cname = "int")]
+ public struct Enum : int {
+ public unowned string to_string ();
+ }
+
[CCode (lower_case_csuffix = "enum")]
public class EnumClass : TypeClass {
public weak EnumValue? get_value (int value);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]