From: Jeremy Kerr Date: Tue, 17 Sep 2013 03:14:18 +0000 (+0800) Subject: discover/grub2: Implement submenu X-Git-Tag: v1.0.0~451 X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=a77e8d42cd7b983d9fa5746f07e66a6fe04b6a0d discover/grub2: Implement submenu Just recurse into the submenu items, as we flatten everything into the one menu. Signed-off-by: Jeremy Kerr --- diff --git a/discover/grub2/lexer.l b/discover/grub2/lexer.l index 6c0a456..6ed12ce 100644 --- a/discover/grub2/lexer.l +++ b/discover/grub2/lexer.l @@ -47,6 +47,7 @@ VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) "in" return TOKEN_IN; "menuentry" return TOKEN_MENUENTRY; "select" return TOKEN_SELECT; +"submenu" return TOKEN_SUBMENU; "then" return TOKEN_THEN; "time" return TOKEN_TIME; "until" return TOKEN_UTIL; diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y index bcf5935..859eba3 100644 --- a/discover/grub2/parser.y +++ b/discover/grub2/parser.y @@ -39,6 +39,7 @@ static void yyerror(struct grub2_parser *, char const *s); %token TOKEN_IN "in" %token TOKEN_MENUENTRY "menuentry" %token TOKEN_SELECT "select" +%token TOKEN_SUBMENU "submenu" %token TOKEN_THEN "then" %token TOKEN_TIME "time" %token TOKEN_UTIL "until" @@ -103,6 +104,12 @@ statement: TOKEN_EOL { TOKEN_EOL { $$ = create_statement_menuentry(parser, $3, $6); } + | "submenu" TOKEN_DELIM words TOKEN_DELIM + '{' statements '}' + TOKEN_EOL { + /* we just flatten everything */ + $$ = create_statement_block(parser, $6); + } words: word { $$ = create_argv(parser);