Merge remote-tracking branch 'public/master'
[mono.git] / mcs / class / Microsoft.CSharp / Microsoft.CSharp.RuntimeBinder / CSharpBinaryOperationBinder.cs
index 44d57a8ecc0896393d3d2fc8c3a7a14007e60c52..374eb0d961fed72ceff5c2ef0787de206da91593 100644 (file)
@@ -130,21 +130,22 @@ namespace Microsoft.CSharp.RuntimeBinder
                
                public override DynamicMetaObject FallbackBinaryOperation (DynamicMetaObject target, DynamicMetaObject arg, DynamicMetaObject errorSuggestion)
                {
-                       var left = CSharpBinder.CreateCompilerExpression (argumentInfo [0], target);
-                       var right = CSharpBinder.CreateCompilerExpression (argumentInfo [1], arg);
+                       var ctx = DynamicContext.Create ();
+                       var left = ctx.CreateCompilerExpression (argumentInfo [0], target);
+                       var right = ctx.CreateCompilerExpression (argumentInfo [1], arg);
                        
                        bool is_compound;
                        var oper = GetOperator (out is_compound);
                        Compiler.Expression expr;
 
                        if (is_compound) {
-                               var target_expr = CSharpBinder.CreateCompilerExpression (argumentInfo[0], target);
-                               expr = new Compiler.CompoundAssign (oper, target_expr, right, left, Compiler.Location.Null);
+                               var target_expr = new Compiler.RuntimeValueExpression (target, ctx.ImportType (target.LimitType));
+                               expr = new Compiler.CompoundAssign (oper, target_expr, right, left);
                        } else {
-                               expr = new Compiler.Binary (oper, left, right, Compiler.Location.Null);
+                               expr = new Compiler.Binary (oper, left, right);
                        }
 
-                       expr = new Compiler.Cast (new Compiler.TypeExpression (TypeImporter.Import (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null);
+                       expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null);
                        
                        if ((flags & CSharpBinderFlags.CheckedContext) != 0)
                                expr = new Compiler.CheckedExpr (expr, Compiler.Location.Null);
@@ -153,7 +154,7 @@ namespace Microsoft.CSharp.RuntimeBinder
                        binder.AddRestrictions (target);
                        binder.AddRestrictions (arg);
 
-                       return binder.Bind (context);
+                       return binder.Bind (ctx, context);
                }
        }
 }