Esempio n. 1
0
        /// <summary>
        /// Compares two assignment arguments.
        /// </summary>
        /// <param name="argument1">The first argument.</param>
        /// <param name="argument2">The second argument.</param>
        public static bool IsAssignmentArgumentEqual(IAssignmentArgument argument1, IAssignmentArgument argument2)
        {
            if (argument1 == null)
            {
                throw new ArgumentNullException(nameof(argument1));
            }
            if (argument2 == null)
            {
                throw new ArgumentNullException(nameof(argument2));
            }

            bool Result = true;

            Result &= argument1.ParameterList.Count != argument2.ParameterList.Count;

            for (int i = 0; i < argument1.ParameterList.Count && i < argument2.ParameterList.Count; i++)
            {
                IIdentifier Parameter1 = argument1.ParameterList[i];
                IIdentifier Parameter2 = argument2.ParameterList[i];

                Result &= Parameter1.ValidText.Item == Parameter2.ValidText.Item;
            }

            Result &= Expression.IsExpressionEqual((IExpression)argument1.Source, (IExpression)argument2.Source);

            return(Result);
        }
Esempio n. 2
0
        private static bool ValidateAssignmentStyle(IList <IArgument> argumentList, List <IExpressionType> mergedArgumentList, IErrorList errorList)
        {
            ISealableDictionary <string, IArgument> DuplicateNameTable = new SealableDictionary <string, IArgument>();

            for (int i = 0; i < argumentList.Count; i++)
            {
                IAssignmentArgument Argument = argumentList[i] as IAssignmentArgument;
                Debug.Assert(Argument != null);
                IExpression         Source        = (IExpression)Argument.Source;
                IList <IIdentifier> ParameterList = Argument.ParameterList;

                if (ParameterList.Count > 1 && Argument.ResolvedResult.Item.Count == 1)
                {
                    IExpressionType Item = Argument.ResolvedResult.Item.At(0);

                    for (int j = 0; j < ParameterList.Count; j++)
                    {
                        IExpressionType ItemJ = new ExpressionType(Item.ValueTypeName, Item.ValueType, ParameterList[j].ValidText.Item);
                        ItemJ.SetSource(Source, 0);
                        mergedArgumentList.Add(ItemJ);
                    }
                }
                else
                {
                    for (int j = 0; j < Argument.ResolvedResult.Item.Count; j++)
                    {
                        IExpressionType Item = Argument.ResolvedResult.Item.At(j);
                        Item.SetName(ParameterList[j].ValidText.Item);

                        if (mergedArgumentList.Exists((IExpressionType other) => { return(Item.Name == other.Name); }))
                        {
                            if (!DuplicateNameTable.ContainsKey(Item.Name))
                            {
                                DuplicateNameTable.Add(Item.Name, Argument);
                            }
                        }

                        Item.SetSource(Source, j);
                        mergedArgumentList.Add(Item);
                    }
                }
            }

            if (DuplicateNameTable.Count > 0)
            {
                foreach (KeyValuePair <string, IArgument> Entry in DuplicateNameTable)
                {
                    errorList.AddError(new ErrorDuplicateName(Entry.Value, Entry.Key));
                }

                return(false);
            }

            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CSharpAssignmentArgument"/> class.
        /// </summary>
        /// <param name="context">The creation context.</param>
        /// <param name="source">The Easly argument from which the C# argument is created.</param>
        protected CSharpAssignmentArgument(ICSharpContext context, IAssignmentArgument source)
            : base(context, source)
        {
            IExpression ArgumentSource = (IExpression)source.Source;

            SourceExpression = CSharpExpression.Create(context, ArgumentSource);

            foreach (IIdentifier Item in source.ParameterList)
            {
                ParameterNameList.Add(Item.ValidText.Item);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Compares two expressions.
        /// </summary>
        /// <param name="other">The other expression.</param>
        protected bool IsExpressionEqual(IInitializedObjectExpression other)
        {
            Debug.Assert(other != null);

            bool Result = true;

            Result &= AssignmentList.Count == other.AssignmentList.Count;

            for (int i = 0; i < AssignmentList.Count && i < other.AssignmentList.Count; i++)
            {
                IAssignmentArgument InitializationAssignment1 = AssignmentList[i];
                IAssignmentArgument InitializationAssignment2 = other.AssignmentList[i];

                Result &= AssignmentArgument.IsAssignmentArgumentEqual(InitializationAssignment1, InitializationAssignment2);
            }

            return(Result);
        }
Esempio n. 5
0
 /// <summary>
 /// Creates a new C# argument.
 /// </summary>
 /// <param name="context">The creation context.</param>
 /// <param name="source">The Easly argument from which the C# argument is created.</param>
 public static ICSharpAssignmentArgument Create(ICSharpContext context, IAssignmentArgument source)
 {
     return(new CSharpAssignmentArgument(context, source));
 }