]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Use return_temp_access in coalescing expression
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 1 Feb 2014 10:22:18 +0000 (11:22 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 11 Mar 2019 12:52:38 +0000 (13:52 +0100)
codegen/valaccodetransformer.vala
vala/valabinaryexpression.vala

index ee346cec88d98ef228ddf7a8af8743a4a78fee4a..904318f64f7e6050029ac6155017bce95bf67503 100644 (file)
@@ -444,12 +444,13 @@ public class Vala.CCodeTransformer : CodeTransformer {
                        replacement = expression (result);
                } else if (expr.operator == BinaryOperator.COALESCE) {
                        var is_owned = expr.left.value_type.value_owned || expr.right.value_type.value_owned;
-                       var result = b.add_temp_declaration (copy_type (expr.value_type, is_owned, true), expr.left);
+                       var result = b.add_temp_declaration (copy_type (expr.value_type), expr.left);
 
                        b.open_if (expression (@"$result == null"));
                        b.add_assignment (expression (result), expr.right);
                        b.close ();
-                       replacement = expression (result);
+
+                       replacement = return_temp_access (result, expr.value_type, target_type);
                } else if (expr.operator == BinaryOperator.IN && !(expr.left.value_type.compatible (context.analyzer.int_type) && expr.right.value_type.compatible (context.analyzer.int_type)) && !(expr.right.value_type is ArrayType)) {
                        // neither enums nor array, it's contains()
                        var call = new MethodCall (new MemberAccess (expr.right, "contains", expr.source_reference), expr.source_reference);
index 229c44861d2c5549ebb25c31e5022c98adfb06cb..4f6d97b340e70eb6f8679bd0a9c19f33143f3354 100644 (file)
@@ -194,6 +194,8 @@ public class Vala.BinaryExpression : Expression {
 
                if (operator == BinaryOperator.COALESCE) {
                        left.target_type.nullable = true;
+                       left.target_type.value_owned = left.value_type.value_owned || right.value_type.value_owned;
+
                        right.target_type = left.target_type.copy ();
                        value_type = left.target_type.copy ();
                } else if (left.value_type.data_type == context.analyzer.string_type.data_type