From: Rico Tzschichholz Date: Thu, 22 Nov 2018 11:40:23 +0000 (+0100) Subject: vala: Don't replace assignments for local variables with non-null simple-types X-Git-Tag: 0.43.1~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e701142da4601ece5ca71cc4484728b08969c74e;p=thirdparty%2Fvala.git vala: Don't replace assignments for local variables with non-null simple-types --- diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index 81a7139ba..a6bb74f96 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -220,13 +220,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; @@ -256,9 +256,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; diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala index 1e2f2c4cf..09209a7fd 100644 --- a/vala/valadatatype.vala +++ b/vala/valadatatype.vala @@ -432,7 +432,7 @@ public abstract class Vala.DataType : CodeNode { return is_real_struct_type () && !nullable; } - bool is_non_null_simple_type () { + public bool is_non_null_simple_type () { unowned Struct s = data_type as Struct; if (s != null && s.is_simple_type ()) { return !nullable;