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); } }
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)); } } }
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)); } }