示例#1
0
        public static void TryToCastMethodParameters(MethodInvokationExpression method)
        {
            TableMethod tableMethod = GlobalTable.Table.FetchMethod(method.Name, method.GetParametersTypes());

            for (int i = 0; i < tableMethod.ArgCount; i++)
            {
                TryToCastExpression(method.Parameters[i].ParameterInstance, tableMethod.Arguments[i].Type);
            }
        }
示例#2
0
        public static void ResolveMethodsParametersTypes(MethodInvokationExpression method)
        {
            TableMethod tableMethod = GlobalTable.Table.FetchMethod(method.Name, method.GetParametersTypes());

            if (tableMethod == null)
            {
                return;
            }
            for (int i = 0; i < tableMethod.ArgCount; i++)
            {
                TableMethodArgument  tableArgument       = tableMethod.Arguments[i];
                ParameterDeclaration methodParameter     = method.Parameters[i];
                InnerType            methodParameterType = ResolveExpressionType(methodParameter.ParameterInstance);
                if (tableArgument.Type != methodParameterType)
                {
                    ReportError(new IncompatibleMethodParameterType(method.Name, tableArgument.Type, methodParameterType, methodParameter.SourceContext));
                }
            }
        }
示例#3
0
        public static void ResolveMethodInvokation(MethodInvokationExpression method, Table.Table table)
        {
            ResolveMethodParameters(method.Parameters, table);

            if (table.CheckMethod(method.Name, method.GetParametersTypes(), true))
            {
                TableMethod tableMethod = table.FetchMethod(method.Name, method.GetParametersTypes());
                for (int i = 0; i < method.ArgCount; i++)
                {
                    method.Parameters[i].Type = tableMethod.Arguments[i].Type;
                }
                method.ReturnType = tableMethod.ReturnType;
            }
            else
            if (table.IsMethodWithThisNameDeclared(method.Name))
            {
                ReportError(new MethodWithThoseArgumentsIsNotDeclared(method.Name, method.SourceContext));
            }
            else
            {
                ReportError(new MethodIsNotDeclared(method.Name, method.SourceContext));
            }
        }