[vala/staging: 4/5] codegen: Use g_enum/flags_to_string while targeting glib >= 2.54



commit 118937ce8aab1ab8a6f189118c89b139911e7ba2
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Wed Jan 3 20:44:08 2018 +0100

    codegen: Use g_enum/flags_to_string while targeting glib >= 2.54

 codegen/valagtypemodule.vala |   32 ++++++++++++++++++++------------
 1 files changed, 20 insertions(+), 12 deletions(-)
---
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index c282f2c..0d7b060 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -2246,18 +2246,26 @@ public class Vala.GTypeModule : GErrorModule {
                bool is_flags = ((Enum) ((EnumValueType) ma.inner.value_type).type_symbol).is_flags;
 
                push_line (expr.source_reference);
-               var temp_var = get_temp_variable (new CType (is_flags ? "GFlagsValue*" : "GEnumValue*"), 
false, expr, false);
-               emit_temp_var (temp_var);
-
-               var class_ref = new CCodeFunctionCall (new CCodeIdentifier ("g_type_class_ref"));
-               class_ref.add_argument (new CCodeIdentifier (get_ccode_type_id (ma.inner.value_type)));
-               var get_value = new CCodeFunctionCall (new CCodeIdentifier (is_flags ? 
"g_flags_get_first_value" : "g_enum_get_value"));
-               get_value.add_argument (class_ref);
-               get_value.add_argument ((CCodeExpression) get_ccodenode (((MemberAccess) expr.call).inner));
-
-               ccode.add_assignment (get_variable_cexpression (temp_var.name), get_value);
-               var is_null_value = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, 
get_variable_cexpression (temp_var.name), new CCodeIdentifier ("NULL"));
-               set_cvalue (expr, new CCodeConditionalExpression (is_null_value, new 
CCodeMemberAccess.pointer (get_variable_cexpression (temp_var.name), "value_name"), new CCodeIdentifier 
("NULL")));
+               if (context.require_glib_version (2, 54)) {
+                       var to_string = new CCodeFunctionCall (new CCodeIdentifier ((is_flags ? 
"g_flags_to_string" : "g_enum_to_string")));
+                       to_string.add_argument (new CCodeIdentifier (get_ccode_type_id 
(ma.inner.value_type)));
+                       to_string.add_argument ((CCodeExpression) get_ccodenode (((MemberAccess) 
expr.call).inner));
+                       expr.value_type.value_owned = true;
+                       set_cvalue (expr, to_string);
+               } else {
+                       var temp_var = get_temp_variable (new CType (is_flags ? "GFlagsValue*" : 
"GEnumValue*"), false, expr, false);
+                       emit_temp_var (temp_var);
+
+                       var class_ref = new CCodeFunctionCall (new CCodeIdentifier ("g_type_class_ref"));
+                       class_ref.add_argument (new CCodeIdentifier (get_ccode_type_id 
(ma.inner.value_type)));
+                       var get_value = new CCodeFunctionCall (new CCodeIdentifier (is_flags ? 
"g_flags_get_first_value" : "g_enum_get_value"));
+                       get_value.add_argument (class_ref);
+                       get_value.add_argument ((CCodeExpression) get_ccodenode (((MemberAccess) 
expr.call).inner));
+
+                       ccode.add_assignment (get_variable_cexpression (temp_var.name), get_value);
+                       var is_null_value = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, 
get_variable_cexpression (temp_var.name), new CCodeIdentifier ("NULL"));
+                       set_cvalue (expr, new CCodeConditionalExpression (is_null_value, new 
CCodeMemberAccess.pointer (get_variable_cexpression (temp_var.name), "value_name"), new CCodeIdentifier 
("NULL")));
+               }
                pop_line ();
        }
 


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