[vala/staging: 4/5] codegen: Use g_enum/flags_to_string while targeting glib >= 2.54
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging: 4/5] codegen: Use g_enum/flags_to_string while targeting glib >= 2.54
- Date: Thu, 4 Jan 2018 13:06:05 +0000 (UTC)
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]