private void CheckCompatibilityWithParameters(Alias alias, AliasDefinition aliasDef, string fileName)
        {
            foreach (var parameter in aliasDef.Parameters)
            {
                if (parameter.Name == "_") //Default parameter
                {
                    if (!parameter.IsValueNode)
                    {
                        if (alias.Entities.All(e => e is Comment) && alias.ValueType != ValueType.Object)
                        {
                            ReportErrorInsideChoice(() => CompilerErrorFactory.DefaultBlockArgumentIsMissing(alias,
                                                                                                             fileName));
                        }
                    }
                    else
                    {
                        if (parameter.HasValue())
                        {
                            continue;                       //if parameter has default value then skip check
                        }
                        if (!alias.HasValue())
                        {
                            ReportErrorInsideChoice(() => CompilerErrorFactory.DefaultValueArgumentIsMissing(alias,
                                                                                                             fileName));
                        }
                    }
                    continue;
                }

                //Non default parameter
                var argument = alias.Arguments.FirstOrDefault(a => a.Name == parameter.Name);
                if (argument == null)
                {
                    //Report Error if argument is missing and there is no default value for the parameter
                    if (parameter.Value == null && parameter.Entities.Count == 0 && parameter.ValueType != ValueType.Object)
                    {
                        ReportErrorInsideChoice(() => CompilerErrorFactory.ArgumentIsMissing(alias, parameter.Name,
                                                                                             fileName));
                    }

                    continue;
                }

                //Report error if type of argument (value/block) mismatch the type of parameter
                if (((Argument)argument).IsValueNode != parameter.IsValueNode)
                {
                    ReportErrorInsideChoice(() => parameter.IsValueNode
                        ? CompilerErrorFactory.ValueArgumentIsExpected((Argument)argument,
                                                                       fileName)
                        : CompilerErrorFactory.BlockArgumentIsExpected((Argument)argument,
                                                                       fileName));
                }
            }
        }
Esempio n. 2
0
        private void ValidateParameter(Parameter parameter, Alias alias, string moduleFileName)
        {
            if (parameter.Name == "_") //Default parameter
            {
                if (!parameter.IsValueNode)
                {
                    if (alias.Entities.All(e => e is Comment) && !alias.Assignment.IsObjectAssignment())
                    {
                        ReportErrorInsideChoice(() => CompilerErrorFactory.DefaultBlockArgumentIsMissing(alias,
                                                                                                         moduleFileName));
                    }
                }
                else
                {
                    if (parameter.HasValue())
                    {
                        return;                       //if parameter has default value then skip check
                    }
                    if (!alias.HasValue())
                    {
                        ReportErrorInsideChoice(() => CompilerErrorFactory.DefaultValueArgumentIsMissing(alias,
                                                                                                         moduleFileName));
                    }
                }
                return;
            }

            //Non default parameter
            var argument = alias.Arguments.FirstOrDefault(a => a.Name == parameter.Name);

            if (argument == null)
            {
                //Report Error if argument is missing and there is no default value for the parameter
                if (parameter.Value == null && parameter.Entities.Count == 0 && !parameter.Assignment.IsObjectAssignment())
                {
                    ReportErrorInsideChoice(() => CompilerErrorFactory.ArgumentIsMissing(alias, parameter.Name,
                                                                                         moduleFileName));
                }
                return;
            }

            //Report error if type of argument (value/block) mismatch the type of parameter
            if (((Argument)argument).IsValueNode != parameter.IsValueNode)
            {
                ReportErrorInsideChoice(() => parameter.IsValueNode
                    ? CompilerErrorFactory.ValueArgumentIsExpected((Argument)argument,
                                                                   moduleFileName)
                    : CompilerErrorFactory.BlockArgumentIsExpected((Argument)argument,
                                                                   moduleFileName));
            }
        }