* lambda.cs, statement.cs: Contextual return may act as a statement.
svn path=/trunk/mcs/; revision=89607
+2007-11-14 Marek Safar <marek.safar@gmail.com>
+
+ * lambda.cs, statement.cs: Contextual return may act as a statement.
+
2007-11-14 Marek Safar <marek.safar@gmail.com>
A fix for a regression cause by #324222
public class ContextualReturn : Return
{
+ bool statement_return;
+
public ContextualReturn (Expression expr)
: base (expr, expr.Location)
{
}
+
+ public override void Emit (EmitContext ec)
+ {
+ if (statement_return)
+ ((ExpressionStatement)Expr).EmitStatement (ec);
+ else
+ base.Emit (ec);
+ }
+
+ public override bool Resolve (EmitContext ec)
+ {
+ if (ec.ReturnType == TypeManager.void_type) {
+ statement_return = true;
+ return Expr.Resolve (ec) != null;
+ }
+
+ return base.Resolve (ec);
+ }
}
}
/// Implements the return statement
/// </summary>
public class Return : Statement {
- Expression Expr;
+ protected Expression Expr;
bool unwind_protect;
public Return (Expression expr, Location l)