Boo.Lang.Compiler.TypeSystem.GenericParameterInferrer.InferCallableType C# (CSharp) Method

InferCallableType() private method

private InferCallableType ( ICallableType formalType, IType actualType, Inference inference ) : bool
formalType ICallableType
actualType IType
inference Inference
return bool
        private bool InferCallableType(ICallableType formalType, IType actualType, Inference inference)
        {
            ICallableType callableActualType = actualType as ICallableType;
            if (callableActualType == null) return false;

            CallableSignature formalSignature = formalType.GetSignature();
            CallableSignature actualSignature = callableActualType.GetSignature();

            // TODO: expand actual signature when it involves varargs?
            if (formalSignature.Parameters.Length != actualSignature.Parameters.Length) return false;

            // Infer return type, maintaining inference direction
            if (!Infer(formalSignature.ReturnType, actualSignature.ReturnType, inference))
            {
                return false;
            }

            // Infer parameter types, inverting inference direction
            for (int i = 0; i < formalSignature.Parameters.Length; ++i)
            {
                bool inferenceSuccessful = Infer(
                    formalSignature.Parameters[i].Type,
                    actualSignature.Parameters[i].Type,
                    Invert(inference));

                if (!inferenceSuccessful) return false;
            }
            return true;
        }