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;
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;
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;