Boo.Lang.Compiler.Steps.ProcessMethodBodies.AssertParameterTypes C# (CSharp) Метод

AssertParameterTypes() приватный Метод

private AssertParameterTypes ( ICallableType method, Boo.Lang.Compiler.Ast.ExpressionCollection args, int count, bool reportErrors ) : bool
method ICallableType
args Boo.Lang.Compiler.Ast.ExpressionCollection
count int
reportErrors bool
Результат bool
        bool AssertParameterTypes(ICallableType method, ExpressionCollection args, int count, bool reportErrors)
        {
            IParameter[] parameters = method.GetSignature().Parameters;
            for (int i=0; i<count; ++i)
            {
                IParameter param = parameters[i];
                IType parameterType = param.Type;
                IType argumentType = GetExpressionType(args[i]);
                if (param.IsByRef)
                {
                    if (!(args[i] is ReferenceExpression
                        || args[i] is SlicingExpression
                        || (args[i] is SelfLiteralExpression && argumentType.IsValueType)))
                    {
                        if (reportErrors)
                            Error(CompilerErrorFactory.RefArgTakesLValue(args[i]));
                        return false;
                    }
                    if (!CallableResolutionService.IsValidByRefArg(param, parameterType, argumentType, args[i]))
                    {
                        return false;
                    }
                }
                else
                {
                    if (!CanBeReachedFrom(args[i], parameterType, argumentType))
                        return false;
                }
            }
            return true;
        }
ProcessMethodBodies