2009-11-26 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / mcs / lambda.cs
index 5be0f68a67e47a3de22f89ffb3bf693cadf32c44..363b4bc8cac3a83826ed7d0826b3aecf17c59641 100644 (file)
@@ -32,7 +32,10 @@ namespace Mono.CSharp {
                        if (ec.IsInProbingMode)
                                return this;
 
-                       BlockContext bc = new BlockContext (ec.MemberContext, ec.CurrentBlock.Explicit, TypeManager.void_type);
+                       BlockContext bc = new BlockContext (ec.MemberContext, ec.CurrentBlock.Explicit, TypeManager.void_type) {
+                               CurrentAnonymousMethod = ec.CurrentAnonymousMethod
+                       };
+
                        Expression args = Parameters.CreateExpressionTree (bc, loc);
                        Expression expr = Block.CreateExpressionTree (ec);
                        if (expr == null)
@@ -41,7 +44,7 @@ namespace Mono.CSharp {
                        Arguments arguments = new Arguments (2);
                        arguments.Add (new Argument (expr));
                        arguments.Add (new Argument (args));
-                       return CreateExpressionFactoryCall ("Lambda",
+                       return CreateExpressionFactoryCall (ec, "Lambda",
                                new TypeArguments (new TypeExpression (delegate_type, loc)),
                                arguments);
                }
@@ -57,10 +60,10 @@ namespace Mono.CSharp {
                        if (!TypeManager.IsDelegateType (delegateType))
                                return null;
 
-                       AParametersCollection d_params = TypeManager.GetDelegateParameters (delegateType);
+                       AParametersCollection d_params = TypeManager.GetDelegateParameters (ec, delegateType);
 
                        if (HasExplicitParameters) {
-                               if (!VerifyExplicitParameters (delegateType, d_params, ec.IsInProbingMode))
+                               if (!VerifyExplicitParameters (ec, delegateType, d_params))
                                        return null;
 
                                return Parameters;
@@ -70,7 +73,7 @@ namespace Mono.CSharp {
                        // If L has an implicitly typed parameter list we make implicit parameters explicit
                        // Set each parameter of L is given the type of the corresponding parameter in D
                        //
-                       if (!VerifyParameterCompatibility (delegateType, d_params, ec.IsInProbingMode))
+                       if (!VerifyParameterCompatibility (ec, delegateType, d_params, ec.IsInProbingMode))
                                return null;
 
                        Type [] ptypes = new Type [Parameters.Count];
@@ -101,7 +104,7 @@ namespace Mono.CSharp {
                        return Parameters;
                }
 
-               public override Expression DoResolve (ResolveContext ec)
+               protected override Expression DoResolve (ResolveContext ec)
                {
                        //
                        // Only explicit parameters can be resolved at this point
@@ -158,7 +161,7 @@ namespace Mono.CSharp {
                        Arguments arguments = new Arguments (2);
                        arguments.Add (new Argument (expr));
                        arguments.Add (new Argument (args));
-                       return CreateExpressionFactoryCall ("Lambda",
+                       return CreateExpressionFactoryCall (ec, "Lambda",
                                new TypeArguments (new TypeExpression (type, loc)),
                                arguments);
                }
@@ -206,7 +209,7 @@ namespace Mono.CSharp {
 
                                statement = Expr as ExpressionStatement;
                                if (statement == null)
-                                       Expr.Error_InvalidExpressionStatement ();
+                                       Expr.Error_InvalidExpressionStatement (ec);
 
                                return true;
                        }