X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fassign.cs;h=a07c8c0ef397d1e2d597680f035cf078aa732489;hb=01df432af43ed3dd9a225b13e0ebcce9a8a34a5a;hp=356768d8b74ed13484ade69a1340bdf5238bc9b6;hpb=8b1ca21e8feaabebc9dc3643ebf94b2a99162c8e;p=mono.git diff --git a/mcs/mcs/assign.cs b/mcs/mcs/assign.cs index 356768d8b74..a07c8c0ef39 100644 --- a/mcs/mcs/assign.cs +++ b/mcs/mcs/assign.cs @@ -363,7 +363,6 @@ namespace Mono.CSharp { return this; } -#if NET_4_0 || MOBILE_DYNAMIC public override System.Linq.Expressions.Expression MakeExpression (BuilderContext ctx) { var tassign = target as IDynamicAssign; @@ -391,7 +390,7 @@ namespace Mono.CSharp { return System.Linq.Expressions.Expression.Assign (target_object, source_object); } -#endif + protected virtual Expression ResolveConversions (ResolveContext ec) { source = Convert.ImplicitConversionRequired (ec, source, target.Type, source.Location); @@ -421,7 +420,13 @@ namespace Mono.CSharp { { source.FlowAnalysis (fc); - if (target is ArrayAccess || target is IndexerExpr || target is PropertyExpr) + if (target is ArrayAccess || target is IndexerExpr) { + target.FlowAnalysis (fc); + return; + } + + var pe = target as PropertyExpr; + if (pe != null && !pe.IsAutoPropertyAccess) target.FlowAnalysis (fc); } @@ -491,13 +496,23 @@ namespace Mono.CSharp { fe.SetFieldAssigned (fc); return; } + + var pe = target as PropertyExpr; + if (pe != null) { + pe.SetBackingFieldAssigned (fc); + return; + } + + var td = target as TupleDeconstruct; + if (td != null) { + td.SetGeneratedFieldAssigned (fc); + return; + } } - public override void MarkReachable (Reachability rc) + public override Reachability MarkReachable (Reachability rc) { - var es = source as ExpressionStatement; - if (es != null) - es.MarkReachable (rc); + return source.MarkReachable (rc); } } @@ -645,6 +660,7 @@ namespace Mono.CSharp { public override void FlowAnalysis (FlowAnalysisContext fc) { source.FlowAnalysis (fc); + ((FieldExpr) target).SetFieldAssigned (fc); } public bool IsDefaultInitializer { @@ -708,9 +724,11 @@ namespace Mono.CSharp { this.loc = child.Location; } + public bool RequiresEmitWithAwait { get; set; } + public override bool ContainsEmitWithAwait () { - return child.ContainsEmitWithAwait (); + return RequiresEmitWithAwait || child.ContainsEmitWithAwait (); } public override Expression CreateExpressionTree (ResolveContext ec)