]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Implicit GValue cast requires GOBJECT profile ced707301010de6e511d6a8cdfae3bd032c8cd0b
authorRico Tzschichholz <ricotz@ubuntu.com>
Fri, 19 Jul 2019 18:02:26 +0000 (20:02 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Fri, 19 Jul 2019 18:04:52 +0000 (20:04 +0200)
This fixes criticals like
    vala_data_type_get_data_type: assertion 'self != NULL' failed

Regression of 7d771a0c07d63cb7605cbdc28dd8df50719731f8

vala/valabinaryexpression.vala

index f21aa42c002ecc6d3b800e629086ce6a04241486..0578ba93d9447e7bdc924ebffa31f258ebb6775d 100644 (file)
@@ -442,24 +442,26 @@ public class Vala.BinaryExpression : Expression {
                           || operator == BinaryOperator.INEQUALITY) {
                        /* relational operation */
 
-                       // Implicit cast for comparsion expression of GValue with other type
-                       var gvalue_type = context.analyzer.gvalue_type.data_type;
-                       if ((left.target_type.data_type == gvalue_type && right.target_type.data_type != gvalue_type)
-                           || (left.target_type.data_type != gvalue_type && right.target_type.data_type == gvalue_type)) {
-                               Expression gvalue_expr;
-                               DataType target_type;
-                               if (left.target_type.data_type == gvalue_type) {
-                                       gvalue_expr = left;
-                                       target_type = right.target_type;
-                               } else {
-                                       gvalue_expr = right;
-                                       target_type = left.target_type;
-                               }
+                       if (context.profile == Profile.GOBJECT) {
+                               // Implicit cast for comparsion expression of GValue with other type
+                               var gvalue_type = context.analyzer.gvalue_type.data_type;
+                               if ((left.target_type.data_type == gvalue_type && right.target_type.data_type != gvalue_type)
+                                       || (left.target_type.data_type != gvalue_type && right.target_type.data_type == gvalue_type)) {
+                                       Expression gvalue_expr;
+                                       DataType target_type;
+                                       if (left.target_type.data_type == gvalue_type) {
+                                               gvalue_expr = left;
+                                               target_type = right.target_type;
+                                       } else {
+                                               gvalue_expr = right;
+                                               target_type = left.target_type;
+                                       }
 
-                               var cast_expr = new CastExpression (gvalue_expr, target_type, gvalue_expr.source_reference);
-                               replace_expression (gvalue_expr, cast_expr);
-                               checked = false;
-                               return check (context);
+                                       var cast_expr = new CastExpression (gvalue_expr, target_type, gvalue_expr.source_reference);
+                                       replace_expression (gvalue_expr, cast_expr);
+                                       checked = false;
+                                       return check (context);
+                               }
                        }
 
                        if (!right.value_type.compatible (left.value_type)