**** Merged r40513 from MCS ****
authorMartin Baulig <martin@novell.com>
Tue, 12 Apr 2005 12:06:44 +0000 (12:06 -0000)
committerMartin Baulig <martin@novell.com>
Tue, 12 Apr 2005 12:06:44 +0000 (12:06 -0000)
svn path=/trunk/mcs/; revision=42824

mcs/gmcs/ChangeLog
mcs/gmcs/expression.cs

index 1b4c0a52eeff5eff1e4c8e2cc8f9f06f9b95f43a..f19092d60fdcbfff9930070c40779c2b4c99c6e5 100644 (file)
@@ -1,5 +1,11 @@
 2005-02-11  Miguel de Icaza  <miguel@novell.com>
 
+       * expression.cs (Cast): Overload DoResolveLValue so we can pass
+       resolve our casted expression as an LValue.  This triggers the
+       proper LValue processing that is later required by Assign.
+
+       This fixes 72347.
+
        * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
 
 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
index 61c49a610cadea2ffd7190564027fe984cd3d456..eeabd94944c4d4f7795da3f6a5c44956e2395711 100644 (file)
@@ -1804,12 +1804,26 @@ namespace Mono.CSharp {
                        return null;
                }
                
+               public override Expression DoResolveLValue (EmitContext ec, Expression right_side)
+               {
+                       expr = expr.DoResolveLValue (ec, right_side);
+                       if (expr == null)
+                               return null;
+
+                       return ResolveRest (ec);
+               }
+
                public override Expression DoResolve (EmitContext ec)
                {
                        expr = expr.Resolve (ec);
                        if (expr == null)
                                return null;
 
+                       return ResolveRest (ec);
+               }
+
+               Expression ResolveRest (EmitContext ec)
+               {
                        TypeExpr target = target_type.ResolveAsTypeTerminal (ec);
                        if (target == null)
                                return null;
@@ -1839,7 +1853,7 @@ namespace Mono.CSharp {
                        expr = Convert.ExplicitConversion (ec, expr, type, loc);
                        return expr;
                }
-
+               
                public override void Emit (EmitContext ec)
                {
                        //