From: Rico Tzschichholz Date: Wed, 3 Jan 2018 19:44:08 +0000 (+0100) Subject: codegen: Use g_enum/flags_to_string while targeting glib >= 2.54 X-Git-Tag: 0.39.4~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=118937ce8aab1ab8a6f189118c89b139911e7ba2;p=thirdparty%2Fvala.git codegen: Use g_enum/flags_to_string while targeting glib >= 2.54 --- diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index c282f2c3a..0d7b0603c 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 (); }