2009-10-30 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Fri, 30 Oct 2009 13:31:06 +0000 (13:31 -0000)
committerMarek Safar <marek.safar@gmail.com>
Fri, 30 Oct 2009 13:31:06 +0000 (13:31 -0000)
* CSharpBinder.cs, CSharpInvokeMemberBinder.cs,
CSharpSetIndexBinder.cs: Simple member binder.

svn path=/trunk/mcs/; revision=145089

mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinder.cs
mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeMemberBinder.cs
mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetIndexBinder.cs
mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/ChangeLog

index 984fbc49cd8577dd789fe6e6960a2dc19f799499..f6074ef72918699dd7cd3a5e4a81b72a9081b9f8 100644 (file)
@@ -104,7 +104,8 @@ namespace Microsoft.CSharp.RuntimeBinder
                                if (value.LimitType == typeof (object))
                                        return new Compiler.NullLiteral (Compiler.Location.Null);
 
-                               return new Compiler.NullConstant (value.LimitType, Compiler.Location.Null);
+                               InitializeCompiler (null);
+                               return Compiler.Constant.CreateConstant (value.LimitType, null, Compiler.Location.Null);
                        }
 
                        if (info != null) {
@@ -124,6 +125,8 @@ namespace Microsoft.CSharp.RuntimeBinder
                {
                        var res = new Compiler.Arguments (args.Length);
                        int pos = 0;
+
+                       // enumerates over args
                        foreach (var item in info) {
                                var expr = CreateCompilerExpression (item, args [pos++]);
                                if (item.IsNamed) {
@@ -131,6 +134,9 @@ namespace Microsoft.CSharp.RuntimeBinder
                                } else {
                                        res.Add (new Compiler.Argument (expr, item.ArgumentModifier));
                                }
+
+                               if (pos == args.Length)
+                                       break;
                        }
 
                        return res;
@@ -190,20 +196,5 @@ namespace Microsoft.CSharp.RuntimeBinder
                                Compiler.TypeManager.InitOptionalCoreTypes (ctx);
                        }
                }
-
-               public static DynamicMetaObject Bind (DynamicMetaObject target, DynamicMetaObject errorSuggestion, DynamicMetaObject[] args)
-               {
-                       return Bind (target, errorSuggestion);
-               }
-
-               public static DynamicMetaObject Bind (DynamicMetaObject target, DynamicMetaObject errorSuggestion)
-               {
-                       return errorSuggestion ??
-                                  new DynamicMetaObject (
-                                                  Expression.Constant (new object ()),
-                                                  target.Restrictions.Merge (
-                                                          BindingRestrictions.GetTypeRestriction (
-                                                                  target.Expression, target.LimitType)));
-               }
        }
 }
index 28fe285ec3956ca35978c6a715171822e5ce4d41..f792461af07740125a171171f8a866257dff2517 100644 (file)
@@ -60,12 +60,13 @@ namespace Microsoft.CSharp.RuntimeBinder
                
                public override DynamicMetaObject FallbackInvokeMember (DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion)
                {
-                       return CSharpBinder.Bind (target, errorSuggestion, args);
-/*
-                       var expr = CSharpBinder.CreateCompilerExpression (argumentInfo[0], target);
+                       var expr = CSharpBinder.CreateCompilerExpression (argumentInfo [0], target);
                        var c_args = CSharpBinder.CreateCompilerArguments (argumentInfo.Skip (1), args);
+                       var t_args = typeArguments == null ?
+                               null :
+                               new Compiler.TypeArguments (typeArguments.Select (l => new Compiler.TypeExpression (l, Compiler.Location.Null)).ToArray ());
 
-                       expr = new Compiler.MemberAccess (expr, Name, null, Compiler.Location.Null);
+                       expr = new Compiler.MemberAccess (expr, Name, t_args, Compiler.Location.Null);
                        expr = new Compiler.Invocation (expr, c_args);
 
                        if ((flags & CSharpBinderFlags.ResultDiscarded) == 0)
@@ -75,7 +76,6 @@ namespace Microsoft.CSharp.RuntimeBinder
                                CSharpBinder.CreateRestrictionsOnTarget (args));
 
                        return CSharpBinder.Bind (this, expr, callingContext, restrictions, errorSuggestion);
-*/
                }
        }
 }
index 553d3a0dbc8dbab771404327b8415443e577479c..b8449f127d8707c4648f647526b1119e6e558c5f 100644 (file)
@@ -56,10 +56,10 @@ namespace Microsoft.CSharp.RuntimeBinder
                        }
 
                        var expr = CSharpBinder.CreateCompilerExpression (argumentInfo [0], target);
-                       var args = CSharpBinder.CreateCompilerArguments (argumentInfo.Skip (2), indexes);
+                       var args = CSharpBinder.CreateCompilerArguments (argumentInfo.Skip (1), indexes);
                        expr = new Compiler.ElementAccess (expr, args);
 
-                       var source = CSharpBinder.CreateCompilerExpression (argumentInfo[1], value);
+                       var source = CSharpBinder.CreateCompilerExpression (argumentInfo [indexes.Length + 1], value);
                        expr = new Compiler.SimpleAssign (expr, source);
                        expr = new Compiler.Cast (new Compiler.TypeExpression (ReturnType, Compiler.Location.Null), expr);
 
index 9201bc4a1516f94c7e4f959b5331a565b364e71b..c0a4c3faa8769d7f4c14446d179dafb7ea074f31 100644 (file)
@@ -1,3 +1,8 @@
+2009-10-30  Marek Safar  <marek.safar@gmail.com>
+
+       * CSharpBinder.cs, CSharpInvokeMemberBinder.cs,
+       CSharpSetIndexBinder.cs: Simple member binder.
+
 2009-10-23  Marek Safar  <marek.safar@gmail.com>
 
        * RuntimeBinderContext.cs, Extensions.cs, CSharpBinder.cs: More