]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Don't replace assignments for local variables with non-null simple-types
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 22 Nov 2018 11:40:23 +0000 (12:40 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 26 Mar 2019 12:08:40 +0000 (13:08 +0100)
Reintroduce e701142da4601ece5ca71cc4484728b08969c74e

See https://gitlab.gnome.org/GNOME/vala/issues/755

vala/valaassignment.vala

index 0b6fbc9adafb19c31efe0f803ead5f14eefdc87e..183ea57be17695bedb8538c05c2fa1682ee7661b 100644 (file)
@@ -224,13 +224,13 @@ public class Vala.Assignment : Expression {
                        return false;
                }
 
-               if (operator != AssignmentOperator.SIMPLE && left is MemberAccess) {
+               unowned MemberAccess? ma = left as MemberAccess;
+               if (operator != AssignmentOperator.SIMPLE && ma != null
+                   && !(left.value_type.is_non_null_simple_type () && ma.symbol_reference is LocalVariable)) {
                        // transform into simple assignment
                        // FIXME: only do this if the backend doesn't support
                        // the assignment natively
 
-                       var ma = (MemberAccess) left;
-
                        var old_value = new MemberAccess (ma.inner, ma.member_name);
 
                        BinaryOperator bop;
@@ -260,9 +260,7 @@ public class Vala.Assignment : Expression {
                        operator = AssignmentOperator.SIMPLE;
                }
 
-               if (left is MemberAccess) {
-                       var ma = (MemberAccess) left;
-
+               if (ma != null) {
                        if (ma.symbol_reference is Property) {
                                var prop = (Property) ma.symbol_reference;