* MenuAPI.cs: On instance of MenuTracker check if source control is
[mono.git] / mcs / mcs / lambda.cs
index 57109d797958d6aa2ecbf47c05ab8f67f1607ba1..86a14d0f3a2cbb128068c00a50a99daecb49d737 100644 (file)
@@ -34,6 +34,33 @@ namespace Mono.CSharp {
                                explicit_parameters = !(parameters.FixedParameters [0] is ImplicitLambdaParameter);
                }
 
+               public static Expression System_Linq_Expressions;
+               public static Expression System_Linq_Expressions_Expression;
+
+               protected override Expression CreateExpressionTree (EmitContext ec, Type delegate_type)
+               {
+                       System_Linq_Expressions = new MemberAccess (
+                                       new MemberAccess (new SimpleName ("System", loc), "Linq", loc), "Expressions", loc);
+
+                       System_Linq_Expressions_Expression = new MemberAccess (
+                               System_Linq_Expressions, "Expression", loc);
+
+                       MemberAccess lambda = new MemberAccess (System_Linq_Expressions_Expression, "Lambda",
+                               new TypeArguments (loc, new TypeExpression (delegate_type, loc)), loc);
+
+                       Expression args = Parameters.CreateExpressionTree (ec, loc);
+                       Expression expr = Block.CreateExpressionTree (ec);
+                       if (expr == null)
+                               return null;
+
+                       ArrayList arguments = new ArrayList (2);
+                       arguments.Add (new Argument (expr));
+                       arguments.Add (new Argument (args));
+                       Expression invocation = new Invocation (lambda, arguments);
+
+                       return invocation;
+               }
+
                public override bool HasExplicitParameters {
                        get {
                                return explicit_parameters;
@@ -147,6 +174,11 @@ namespace Mono.CSharp {
                {
                }
 
+               public override Expression CreateExpressionTree (EmitContext ec)
+               {
+                       return Expr.CreateExpressionTree (ec);
+               }
+
                public override void Emit (EmitContext ec)
                {
                        if (statement_return) {