2010-05-27 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / class / Microsoft.CSharp / Microsoft.CSharp.RuntimeBinder / CSharpInvokeBinder.cs
index 8b8f50116de5a1881f8d77d207f4404894d6f2e2..ded455c50b9221aaa746c1e58a217b6ed3a5dae3 100644 (file)
@@ -54,10 +54,16 @@ namespace Microsoft.CSharp.RuntimeBinder
                        var c_args = CSharpBinder.CreateCompilerArguments (argumentInfo.Skip (1), args);
                        expr = new Compiler.Invocation (expr, c_args);
 
-                       var restrictions = CSharpBinder.CreateRestrictionsOnTarget (target).Merge (
-                               CSharpBinder.CreateRestrictionsOnTarget (args));
+                       if ((flags & CSharpBinderFlags.ResultDiscarded) == 0)
+                               expr = new Compiler.Cast (new Compiler.TypeExpression (TypeImporter.Import (ReturnType), Compiler.Location.Null), expr);
+                       else
+                               expr = new Compiler.DynamicResultCast (TypeImporter.Import (ReturnType), expr);
 
-                       return CSharpBinder.Bind (this, expr, callingContext, restrictions, errorSuggestion);
+                       var binder = new CSharpBinder (this, expr, errorSuggestion);
+                       binder.AddRestrictions (target);
+                       binder.AddRestrictions (args);
+
+                       return binder.Bind (callingContext, target);
                }
        }
 }