Merge pull request #498 from Unroll-Me/master
[mono.git] / mcs / class / System.Core / System.Linq.Expressions / LambdaExpression.cs
index 3b456ab5574ffe20f667b2269cff9182f9f0e681..92a40c6d4b7f220bf1591ba48ff3b976b833fd00 100644 (file)
@@ -55,6 +55,7 @@ namespace System.Linq.Expressions {
                        this.parameters = parameters;
                }
 
+#if !FULL_AOT_RUNTIME
                void EmitPopIfNeeded (EmitContext ec)
                {
                        if (GetReturnType () == typeof (void) && body.Type != typeof (void))
@@ -62,28 +63,39 @@ namespace System.Linq.Expressions {
                }
 
                internal override void Emit (EmitContext ec)
+               {
+                       ec.EmitCreateDelegate (this);
+               }
+
+               internal void EmitBody (EmitContext ec)
                {
                        body.Emit (ec);
                        EmitPopIfNeeded (ec);
                        ec.ig.Emit (OpCodes.Ret);
                }
+#endif
 
                internal Type GetReturnType ()
                {
-                       return this.Type.GetMethod ("Invoke").ReturnType;
+                       return this.Type.GetInvokeMethod ().ReturnType;
                }
 
                public Delegate Compile ()
                {
-#if TARGET_JVM
-                       System.Linq.jvm.Interpreter inter =
-                               new System.Linq.jvm.Interpreter (this);
-                       inter.Validate ();
-                       return inter.CreateDelegate ();
+#if TARGET_JVM || MONOTOUCH
+                       return new System.Linq.jvm.Runner (this).CreateDelegate ();
 #else
-                       var context = EmitContext.Create (this);
+                       var context = new CompilationContext ();
+                       context.AddCompilationUnit (this);
                        return context.CreateDelegate ();
 #endif
                }
+
+#if TARGET_JVM || MONOTOUCH
+               internal Delegate Compile (System.Linq.jvm.ExpressionInterpreter interpreter)
+               {
+                       return new System.Linq.jvm.Runner (this, interpreter).CreateDelegate ();
+               }
+#endif
        }
 }