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