protected void ParseParameters(Parser parser)
        {
            // Parse the parameter declarations
            bool isEndFirstOnLine;

            _parameters      = ParameterDecl.ParseList(parser, this, ParseTokenStart, ParseTokenEnd, false, out isEndFirstOnLine);
            IsEndFirstOnLine = isEndFirstOnLine;
        }
        protected DelegateDecl(Parser parser, CodeObject parent)
            : base(parser, parent)
        {
            MoveComments(parser.LastToken);                                        // Get any comments before 'class'
            parser.NextToken();                                                    // Move past 'delegate'
            SetField(ref _returnType, Expression.Parse(parser, this, true), true); // Parse the return type

            ParseNameTypeParameters(parser);                                       // Parse the name and any optional type parameters

            // Parse the parameter declarations
            bool isEndFirstOnLine;

            _parameters      = ParameterDecl.ParseList(parser, this, ParseTokenStart, ParseTokenEnd, false, out isEndFirstOnLine);
            IsEndFirstOnLine = isEndFirstOnLine;

            ParseModifiersAndAnnotations(parser); // Parse any attributes and/or modifiers
            ParseConstraintClauses(parser);       // Parse any constraint clauses
            ParseTerminator(parser);
            GenerateMethods();                    // Generate invoke methods and constructor
        }
        protected AnonymousMethod(Parser parser, CodeObject parent)
            : base(parser, parent)
        {
            Token startingToken = parser.Token;  // Get the object starting token

            parser.NextToken();                  // Move past 'delegate'

            // Parse the parameter declarations
            bool isEndFirstOnLine;

            _parameters      = ParameterDecl.ParseList(parser, this, ParseTokenStart, ParseTokenEnd, true, out isEndFirstOnLine);
            IsEndFirstOnLine = isEndFirstOnLine;

            // If the body is indented less than the parent object, set the NoIndentation flag to prevent it from
            // being formatted relative to the parent object.
            if (parser.CurrentTokenIndentedLessThan(startingToken))
            {
                SetFormatFlag(FormatFlags.NoIndentation, true);
            }

            new Block(out _body, parser, this, true);  // Parse the body
        }
        protected IndexerDecl(Parser parser, CodeObject parent)
            : base(parser, parent, false)
        {
            // Get the ThisRef or Dot expression.  If it's a Dot, replace the ThisRef with an UnresolvedThisRef,
            // which has an internal name of "Item", but displays as "this".
            Expression expression = parser.RemoveLastUnusedExpression();

            SetField(ref _name, CheckUnresolvedThisRef(expression), false);
            Expression leftExpression = (expression is BinaryOperator ? ((BinaryOperator)expression).Left : expression);

            _lineNumber   = leftExpression.LineNumber;
            _columnNumber = (ushort)leftExpression.ColumnNumber;
            ParseTypeModifiersAnnotations(parser);  // Parse type and any modifiers and/or attributes

            // Parse the parameter declarations
            bool isEndFirstOnLine;

            _parameters      = ParameterDecl.ParseList(parser, this, ParseTokenStart, ParseTokenEnd, false, out isEndFirstOnLine);
            IsEndFirstOnLine = isEndFirstOnLine;

            new Block(out _body, parser, this, true);  // Parse the body
        }