X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fexpression.cs;h=c7747f014fdee5da31e0b772c45dbdaa148c769c;hb=8dba6fc778ec6dc1d1b17f7abdcd6288676ee37f;hp=db50ba39b8e9b2642e53e57951b1402edd637d4f;hpb=a2ee7a92befd0c89d01ddc020851ed0c6da8457d;p=mono.git diff --git a/mcs/mcs/expression.cs b/mcs/mcs/expression.cs index db50ba39b8e..c7747f014fd 100644 --- a/mcs/mcs/expression.cs +++ b/mcs/mcs/expression.cs @@ -3110,9 +3110,9 @@ namespace Mono.CSharp public override Expression ConvertResult (ResolveContext ec, Binary b) { if (left != null) { - b.left = EmptyCast.Create (b.left, left); + b.left = Convert.UserDefinedConversion (ec, b.left, left, Convert.UserConversionRestriction.ImplicitOnly, b.loc) ?? EmptyCast.Create (b.left, left); } else if (right != null) { - b.right = EmptyCast.Create (b.right, right); + b.right = Convert.UserDefinedConversion (ec, b.right, right, Convert.UserConversionRestriction.ImplicitOnly, b.loc) ?? EmptyCast.Create (b.right, right); } TypeSpec r_type = ReturnType; @@ -3448,7 +3448,7 @@ namespace Mono.CSharp } } - static CSharp.Operator.OpType ConvertBinaryToUserOperator (Operator op) + public static CSharp.Operator.OpType ConvertBinaryToUserOperator (Operator op) { switch (op) { case Operator.Addition: @@ -10952,9 +10952,18 @@ namespace Mono.CSharp #region IBaseMembersProvider Members - IList OverloadResolver.IBaseMembersProvider.GetBaseMembers (TypeSpec baseType) + IList OverloadResolver.IBaseMembersProvider.GetBaseMembers (TypeSpec type) { - return baseType == null ? null : MemberCache.FindMembers (baseType, MemberCache.IndexerNameAlias, false); + var baseType = type.BaseType; + var members = baseType == null ? null : MemberCache.FindMembers (baseType, MemberCache.IndexerNameAlias, false); + + if (members == null && !type.IsInterface) { + var tps = queried_type as TypeParameterSpec; + if (tps != null) + members = MemberCache.FindInterfaceMembers (tps, MemberCache.IndexerNameAlias); + } + + return members; } IParametersMember OverloadResolver.IBaseMembersProvider.GetOverrideMemberParameters (MemberSpec member) @@ -12165,21 +12174,23 @@ namespace Mono.CSharp args); } - protected override Expression DoResolve (ResolveContext ec) + protected override Expression DoResolve (ResolveContext rc) { - Expression e = base.DoResolve (ec); + Expression e = base.DoResolve (rc); if (type == null) return null; if (type.IsDelegate) { - ec.Report.Error (1958, Initializers.Location, + rc.Report.Error (1958, Initializers.Location, "Object and collection initializers cannot be used to instantiate a delegate"); } - Expression previous = ec.CurrentInitializerVariable; - ec.CurrentInitializerVariable = new InitializerTargetExpression (this); - initializers.Resolve (ec); - ec.CurrentInitializerVariable = previous; + Expression previous = rc.CurrentInitializerVariable; + rc.CurrentInitializerVariable = new InitializerTargetExpression (this); + using (rc.With (ResolveContext.Options.DontSetConditionalAccessReceiver, false)) { + initializers.Resolve (rc); + } + rc.CurrentInitializerVariable = previous; dynamic = e as DynamicExpressionStatement; if (dynamic != null)