Merge pull request #487 from mayerwin/patch-1
[mono.git] / mcs / class / System.Core / System.Linq.Expressions / MethodCallExpression.cs
index 24ffd89308344d0694151cb657fba580ada00a2d..7f898689c0a796adb10d6fd09d2bab77d2683f2c 100644 (file)
@@ -1,3 +1,11 @@
+//
+// MethodCallExpression.cs
+//
+// Author:
+//   Jb Evain (jbevain@novell.com)
+//
+// (C) 2008 Novell, Inc. (http://www.novell.com)
+//
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // "Software"), to deal in the Software without restriction, including
 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-//
-// Authors:
-//             Federico Di Gregorio <fog@initd.org>
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Collections.ObjectModel;
 using System.Reflection;
-using System.Text;
+using System.Reflection.Emit;
 
-namespace System.Linq.Expressions
-{
-       public sealed class MethodCallExpression : Expression
-       {
-               #region .ctor
-               internal MethodCallExpression(ExpressionType type, MethodInfo method, Expression obj, ReadOnlyCollection<Expression> arguments)
-                       : base(type, method.ReturnType)
-               {
-                       this.obj = obj;
-                       this.method = method;
-                       this.arguments = arguments;
+namespace System.Linq.Expressions {
+
+       public sealed class MethodCallExpression : Expression {
+
+               Expression obj;
+               MethodInfo method;
+               ReadOnlyCollection<Expression> arguments;
+
+               public Expression Object {
+                       get { return obj; }
                }
-               #endregion
 
-               #region Fields
-               private ReadOnlyCollection<Expression> arguments;
-               private MethodInfo method;
-               private Expression obj;
-               #endregion
+               public MethodInfo Method {
+                       get { return method; }
+               }
 
-               #region Properties
                public ReadOnlyCollection<Expression> Arguments {
                        get { return arguments; }
                }
 
-               public MethodInfo Method {
-                       get { return method; }
+               internal MethodCallExpression (MethodInfo method, ReadOnlyCollection<Expression> arguments)
+                       : base (ExpressionType.Call, method.ReturnType)
+               {
+                       this.method = method;
+                       this.arguments = arguments;
                }
 
-               public Expression Object {
-                       get { return obj; }
+               internal MethodCallExpression (Expression obj, MethodInfo method, ReadOnlyCollection<Expression> arguments)
+                       : base (ExpressionType.Call, method.ReturnType)
+               {
+                       this.obj = obj;
+                       this.method = method;
+                       this.arguments = arguments;
                }
-               #endregion
 
-               #region Internal Methods
-               internal override void BuildString(StringBuilder builder)
+#if !FULL_AOT_RUNTIME
+               internal override void Emit (EmitContext ec)
                {
-                       obj.BuildString(builder);
-                       builder.Append (".").Append (method.Name).Append ("(");
-                       for (int i=0 ; i < arguments.Count ; i++) {
-                               arguments [i].BuildString (builder);
-                               if (i < arguments.Count-1)
-                                       builder.Append (", ");
-                       }
-                       builder.Append(")");
+                       ec.EmitCall (obj, arguments, method);
                }
-               #endregion
+#endif
        }
 }