/// <summary>
        /// Parse an <see cref="EnumMemberDecl"/>.
        /// </summary>
        public static EnumMemberDecl Parse(Parser parser, CodeObject parent, ParseFlags flags)
        {
            // Turn off special callback from EnumDecl used to parse single-identifier enums
            parser.SingleUnusedIdentifierParser = null;

            // Validate that we have an unused identifier token
            if (parser.HasUnusedIdentifier)
            {
                // Parse the first EnumMemberDecl
                EnumMemberDecl enumMemberDecl = new EnumMemberDecl(parser, parent, true);

                // Always create a MultiEnumMemberDecl for enums
                MultiEnumMemberDecl multiEnumMemberDecl = new MultiEnumMemberDecl(enumMemberDecl);
                multiEnumMemberDecl.SetLineCol(enumMemberDecl);

                // Handle additional EnumMemberDecls after any commas
                while (parser.TokenText == Expression.ParseTokenSeparator)
                {
                    Token lastTokenOfLastMember = parser.LastToken;
                    bool  lastCommaFirstOnLine  = parser.Token.IsFirstOnLine;
                    parser.NextToken();  // Move past ','

                    // Associate any EOL comment on the ',' to the last EnumMemberDecl
                    enumMemberDecl.MoveEOLComment(parser.LastToken, false, false);

                    // Parse any comments, doc comments, attributes, compiler directives
                    enumMemberDecl.ParseAnnotations(parser, parent, false, false);

                    // Abort if we had a trailing comma with nothing after it
                    if (parser.TokenText == Block.ParseTokenEnd)
                    {
                        break;
                    }

                    // Parse the next EnumMemberDecl
                    enumMemberDecl = new EnumMemberDecl(parser, null, false);
                    // Get any post comments after the last member and before the comma
                    enumMemberDecl.MoveComments(lastTokenOfLastMember);

                    // Force the EnumMemberDecl to first-on-line if the last comma was (handles special-case
                    // formatting where the commas preceed the list items instead of following them).
                    if (lastCommaFirstOnLine)
                    {
                        enumMemberDecl.IsFirstOnLine = true;
                    }

                    multiEnumMemberDecl.Add(enumMemberDecl);
                }

                // Parse any post compiler directives
                enumMemberDecl.ParseAnnotations(parser, parent, true, false);
                return(multiEnumMemberDecl);
            }
            return(null);
        }
Esempio n. 2
0
 /// <summary>
 /// Add an <see cref="EnumMemberDecl"/> with the specified name.
 /// </summary>
 public void Add(string name)
 {
     MultiEnumMemberDecl.Add(name, null);
 }
Esempio n. 3
0
 /// <summary>
 /// Add an <see cref="EnumMemberDecl"/> with the specified name.
 /// </summary>
 public void Add(string name, Expression initialization)
 {
     MultiEnumMemberDecl.Add(name, initialization);
 }
Esempio n. 4
0
 /// <summary>
 /// Add an <see cref="EnumMemberDecl"/>.
 /// </summary>
 public void Add(EnumMemberDecl enumMemberDecl)
 {
     MultiEnumMemberDecl.Add(enumMemberDecl);
 }