/// <summary> /// Creates a new BindingTarget when the method binding has succeeded. /// </summary> internal BindingTarget(string name, int actualArgumentCount, MethodTarget target, NarrowingLevel level, RestrictionInfo restrictedArgs) { _name = name; _target = target; _restrictedArgs = restrictedArgs; _level = level; _actualArgs = actualArgumentCount; }
internal static Candidate GetPreferredCandidate(MethodCandidate one, MethodCandidate two, CallTypes callType, MetaObject[] actualTypes) { Candidate cmpParams = ParameterWrapper.GetPreferredParameters(one.Parameters, two.Parameters, actualTypes); if (cmpParams.Chosen()) { return(cmpParams); } Candidate ret = MethodTarget.CompareEquivalentParameters(one.Target, two.Target); if (ret.Chosen()) { return(ret); } if (CompilerHelpers.IsStatic(one.Target.Method) && !CompilerHelpers.IsStatic(two.Target.Method)) { return(callType == CallTypes.ImplicitInstance ? Candidate.Two : Candidate.One); } else if (!CompilerHelpers.IsStatic(one.Target.Method) && CompilerHelpers.IsStatic(two.Target.Method)) { return(callType == CallTypes.ImplicitInstance ? Candidate.One : Candidate.Two); } return(Candidate.Equivalent); }
private readonly int _actualArgs; // gets the actual number of arguments provided /// <summary> /// Creates a new BindingTarget when the method binding has succeeded. /// /// OBSOLETE /// </summary> internal BindingTarget(string name, int actualArgumentCount, MethodTarget target, NarrowingLevel level, Type[] argTests) { _name = name; _target = target; _argTests = argTests; _level = level; _actualArgs = actualArgumentCount; }
/// <summary> /// Creates a new BindingTarget when the method binding has succeeded /// </summary> internal BindingTarget(string name, int actualArgumentCount, MethodTarget target, NarrowingLevel level, MetaObject[] restrictedArgs) { _name = name; _target = target; _restrictedArgs = restrictedArgs; _level = level; _actualArgs = actualArgumentCount; }
private readonly int _actualArgs; // gets the actual number of arguments provided /// <summary> /// Creates a new BindingTarget when the method binding has succeeded /// </summary> internal BindingTarget(string name, int actualArgumentCount, MethodTarget target, NarrowingLevel level, Type[] argTests) { _name = name; _target = target; _argTests = argTests; _level = level; _actualArgs = actualArgumentCount; }
internal static Candidate CompareEquivalentParameters(MethodTarget one, MethodTarget two) { // Prefer normal methods over explicit interface implementations if (two.Method.IsPrivate && !one.Method.IsPrivate) { return(Candidate.One); } if (one.Method.IsPrivate && !two.Method.IsPrivate) { return(Candidate.Two); } // Prefer non-generic methods over generic methods if (one.Method.IsGenericMethod) { if (!two.Method.IsGenericMethod) { return(Candidate.Two); } else { //!!! Need to support selecting least generic method here return(Candidate.Equivalent); } } else if (two.Method.IsGenericMethod) { return(Candidate.One); } //prefer methods without out params over those with them switch (Compare(one._returnBuilder.CountOutParams, two._returnBuilder.CountOutParams)) { case 1: return(Candidate.Two); case -1: return(Candidate.One); } //prefer methods using earlier conversions rules to later ones for (int i = Int32.MaxValue; i >= 0;) { int maxPriorityThis = FindMaxPriority(one._argBuilders, i); int maxPriorityOther = FindMaxPriority(two._argBuilders, i); if (maxPriorityThis < maxPriorityOther) { return(Candidate.One); } if (maxPriorityOther < maxPriorityThis) { return(Candidate.Two); } i = maxPriorityThis - 1; } return(Candidate.Equivalent); }
internal MethodCandidate(MethodTarget target, List <ParameterWrapper> parameters) { Debug.Assert(target != null); _target = target; _parameters = parameters; _narrowingLevel = NarrowingLevel.None; parameters.TrimExcess(); }
internal CallFailure(MethodTarget target, SymbolId[] keywordArgs, bool unassignable) { _reason = unassignable ? CallFailureReason.UnassignableKeyword : CallFailureReason.DuplicateKeyword; _target = target; _keywordArgs = keywordArgs; }
internal CallFailure(MethodTarget target, ConversionResult[] results) { _target = target; _results = results; _reason = CallFailureReason.ConversionFailure; }
internal CallFailure(MethodTarget target, string[] keywordArgs, bool unassignable) { _reason = unassignable ? CallFailureReason.UnassignableKeyword : CallFailureReason.DuplicateKeyword; _target = target; _keywordArgs = keywordArgs; }
/// <summary> /// Creates a new BindingTarget when the match was ambiguous /// </summary> internal BindingTarget(string name, int actualArgumentCount, MethodTarget[] ambiguousMatches) { _name = name; _result = BindingResult.AmbiguousMatch; _ambiguousMatches = ambiguousMatches; _actualArgs = actualArgumentCount; }
internal MethodCandidate(MethodCandidate previous, NarrowingLevel narrowingLevel) { this._target = previous.Target; this._parameters = previous._parameters; _narrowingLevel = narrowingLevel; }