Tup.Cobar4Net.Parser.Recognizer.Mysql.Syntax.MySqlDdlParser.IndexOptions C# (CSharp) Method

IndexOptions() private method

private IndexOptions ( ) : IList
return IList
        private IList<IndexOption> IndexOptions()
        {
            IList<IndexOption> list = null;
            for (;;)
            {
                switch (lexer.Token())
                {
                    case MySqlToken.KwUsing:
                    {
                        lexer.NextToken();
                        var indexType = MatchIdentifier("BTREE", "HASH") == 0 ? IndexType.Btree : IndexType.Hash;
                        if (list == null)
                        {
                            list = new List<IndexOption>(1);
                        }
                        list.Add(new IndexOption(indexType));
                        goto main_switch_break;
                    }

                    case MySqlToken.KwWith:
                    {
                        lexer.NextToken();
                        MatchIdentifier("PARSER");
                        var id = Identifier();
                        if (list == null)
                        {
                            list = new List<IndexOption>(1);
                        }
                        list.Add(new IndexOption(id));
                        goto main_switch_break;
                    }

                    case MySqlToken.Identifier:
                    {
                        var si = specialIdentifiers.GetValue(lexer.GetStringValueUppercase());
                        if (si != SpecialIdentifier.None)
                        {
                            switch (si)
                            {
                                case SpecialIdentifier.KeyBlockSize:
                                {
                                    lexer.NextToken();
                                    if (lexer.Token() == MySqlToken.OpEquals)
                                    {
                                        lexer.NextToken();
                                    }
                                    var val = exprParser.Expression();
                                    if (list == null)
                                    {
                                        list = new List<IndexOption>(1);
                                    }
                                    list.Add(new IndexOption(val));
                                    goto main_switch_break;
                                }

                                case SpecialIdentifier.Comment:
                                {
                                    lexer.NextToken();
                                    var @string = (LiteralString)exprParser.Expression();
                                    if (list == null)
                                    {
                                        list = new List<IndexOption>(1);
                                    }
                                    list.Add(new IndexOption(@string));
                                    goto main_switch_break;
                                }
                            }
                        }
                        goto default;
                    }

                    default:
                    {
                        return list;
                    }
                }
                main_switch_break:
                ;
            }
        }