static bool SubscriptParametersMatch(FunctionDeclaration getter, FunctionDeclaration setter)
        {
            if (getter.ParameterLists.Count != 2 || setter.ParameterLists.Count != 2)
            {
                return(false);
            }
            TypeSpec returnType = getter.ReturnTypeSpec;

            if (getter.ParameterLists [1].Count != setter.ParameterLists [1].Count - 1)
            {
                return(false);
            }
            if (!returnType.Equals(setter.ParameterLists [1] [0].TypeSpec))
            {
                return(false);
            }

            return(ParameterItem.AreEqualIgnoreNamesReferencesInvariant(getter, getter.ParameterLists [1],
                                                                        setter, setter.ParameterLists [1].Skip(1).ToList(), true));
        }
        public bool MatchesSignature(FunctionDeclaration other, bool ignoreFirstParameterListIfPresent)
        {
            if (!TypeSpec.BothNullOrEqual(this.ReturnTypeSpec, other.ReturnTypeSpec))
            {
                return(false);
            }
            if (this.ParameterLists.Count != other.ParameterLists.Count)
            {
                return(false);
            }
            int startIndex = ignoreFirstParameterListIfPresent && this.ParameterLists.Count > 1 ? 1 : 0;

            for (int i = startIndex; i < this.ParameterLists.Count; i++)
            {
                if (!ParameterItem.AreEqualIgnoreNamesReferencesInvariant(this, this.ParameterLists [i], other, other.ParameterLists [i], true))
                {
                    return(false);
                }
            }
            return(true);
        }