• Masahiro Yamada's avatar
    kconfig: allow only 'config', 'comment', and 'if' inside 'choice' · 09d5873e
    Masahiro Yamada authored
    The code block surrounded by 'if' ... 'endif' is reduced into if_stmt,
    which is accepted in the 'choice' context. Therefore, you can write any
    statements within a choice block by wrapping 'if y' ... 'end'.
    
    For example, you can create a menu inside a choice, like follows:
    
    ---------------->8----------------
      choice
              prompt "choice"
    
      config A
              bool "A"
    
      config B
              bool "B"
    
      if y
    
      menu "strange menu"
    
      config C
              bool "C"
    
      endmenu
    
      endif
    
      endchoice
    ---------------->8----------------
    
    I want to change such a weird structure into a syntax error.
    
    In fact, the USB gadget Kconfig had used nested 'choice' for no good
    reason until commit df8df5e4 ("usb: get rid of 'choice' for
    legacy gadget drivers") killed it.
    
    I think the 'source' inside 'choice' is on the fence. It is at least
    gramatically sensible as long as the included file contains only
    bool/tristate configs. However, it makes the code unreadable, and people
    tend to forget the fact that the file is included from the choice
    block. Commit 10e5e6c2 ("usb: gadget: move choice ... endchoice to
    legacy/Kconfig") got rid of the only usecase.
    
    Going forward, you can only use 'config', 'comment', and 'if' inside
    'choice'. This also recursively applies to 'if' blocks inside 'choice'.
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    09d5873e
parser.y 15.3 KB