summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-09-17 11:14:18 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-09-24 13:14:59 +0800
commita77e8d42cd7b983d9fa5746f07e66a6fe04b6a0d (patch)
tree8da7723e1c214f7b69c7ff7e37b0e5af97845eac /discover
parente8a50ad2461a8efaa4d71ea19692a1b63a0f9bc2 (diff)
downloadtalos-petitboot-a77e8d42cd7b983d9fa5746f07e66a6fe04b6a0d.tar.gz
talos-petitboot-a77e8d42cd7b983d9fa5746f07e66a6fe04b6a0d.zip
discover/grub2: Implement submenu
Just recurse into the submenu items, as we flatten everything into the one menu. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover')
-rw-r--r--discover/grub2/lexer.l1
-rw-r--r--discover/grub2/parser.y7
2 files changed, 8 insertions, 0 deletions
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);
OpenPOWER on IntegriCloud