Author: marek
Date: 2008-01-11 05:09:05 -0500 (Fri, 11 Jan 2008)
New Revision: 92657

Modified:
   trunk/mcs/mcs/ChangeLog
   trunk/mcs/mcs/lambda.cs
Log:
2008-01-11  Marek Safar  <[EMAIL PROTECTED]>

        * lambda.cs: Don't use a cast on unknown expression statement.



Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2008-01-11 10:04:50 UTC (rev 92656)
+++ trunk/mcs/mcs/ChangeLog     2008-01-11 10:09:05 UTC (rev 92657)
@@ -1,3 +1,7 @@
+2008-01-11  Marek Safar  <[EMAIL PROTECTED]>
+
+       * lambda.cs: Don't use a cast on unknown expression statement.
+
 2008-01-10  Geoff Norton  <[EMAIL PROTECTED]>
 
        * cs-tokenizer.cs: One more token to distinguish between method and 
lambda

Modified: trunk/mcs/mcs/lambda.cs
===================================================================
--- trunk/mcs/mcs/lambda.cs     2008-01-11 10:04:50 UTC (rev 92656)
+++ trunk/mcs/mcs/lambda.cs     2008-01-11 10:09:05 UTC (rev 92657)
@@ -137,7 +137,7 @@
        // This is a return statement that is prepended lambda expression 
bodies that happen
        // to be expressions.  Depending on the return type of the delegate 
this will behave
        // as either { expr (); return (); } or { return expr (); }
-
+       //
        public class ContextualReturn : Return
        {
                bool statement_return;
@@ -149,14 +149,22 @@
 
                public override void Emit (EmitContext ec)
                {
-                       if (statement_return)
-                               ((ExpressionStatement)Expr).EmitStatement (ec);
-                       else
-                               base.Emit (ec);
+                       if (statement_return) {
+                               ExpressionStatement es = Expr as 
ExpressionStatement;
+                               if (es == null) {
+                                       Expr.Error_InvalidExpressionStatement 
();
+                                       return;
+                               }
+                               
+                               es.EmitStatement (ec);
+                               return;
+                       }
+                       
+                       base.Emit (ec);
                }
 
                public override bool Resolve (EmitContext ec)
-               {
+               {               
                        if (ec.ReturnType == TypeManager.void_type) {
                                statement_return = true;
                                return Expr.Resolve (ec) != null;

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to