From e701142da4601ece5ca71cc4484728b08969c74e Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Thu, 22 Nov 2018 12:40:23 +0100 Subject: [PATCH] vala: Don't replace assignments for local variables with non-null simple-types --- vala/valaassignment.vala | 10 ++++------ vala/valadatatype.vala | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) 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; -- 2.47.2