/// <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); }
/// <summary> /// Add an <see cref="EnumMemberDecl"/> with the specified name. /// </summary> public void Add(string name) { MultiEnumMemberDecl.Add(name, null); }
/// <summary> /// Add an <see cref="EnumMemberDecl"/> with the specified name. /// </summary> public void Add(string name, Expression initialization) { MultiEnumMemberDecl.Add(name, initialization); }
/// <summary> /// Add an <see cref="EnumMemberDecl"/>. /// </summary> public void Add(EnumMemberDecl enumMemberDecl) { MultiEnumMemberDecl.Add(enumMemberDecl); }