summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-09-16 16:58:30 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-09-24 13:14:59 +0800
commite651a16f85e9df51ed65d96ea32932f69cbf302d (patch)
tree6d50658e630a0e5afb8b38507faf333af15440df /discover
parent4bf4d14afbc46d6bbf11839b1f8fdc9bf66dd16d (diff)
downloadtalos-petitboot-e651a16f85e9df51ed65d96ea32932f69cbf302d.tar.gz
talos-petitboot-e651a16f85e9df51ed65d96ea32932f69cbf302d.zip
discover/grub2: Implement 'else' blocks
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.y9
2 files changed, 10 insertions, 0 deletions
diff --git a/discover/grub2/lexer.l b/discover/grub2/lexer.l
index 5a4447b..3e1f9fa 100644
--- a/discover/grub2/lexer.l
+++ b/discover/grub2/lexer.l
@@ -37,6 +37,7 @@ VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#])
"do" return TOKEN_DO;
"done" return TOKEN_DONE;
"elif" return TOKEN_ELIF;
+"else" return TOKEN_ELSE;
"esac" return TOKEN_ESAC;
"fi" return TOKEN_FI;
"for" return TOKEN_FOR;
diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y
index 2b229b8..e13cd72 100644
--- a/discover/grub2/parser.y
+++ b/discover/grub2/parser.y
@@ -29,6 +29,7 @@ static void yyerror(struct grub2_parser *, char const *s);
%token TOKEN_DO "do"
%token TOKEN_DONE "done"
%token TOKEN_ELIF "elif"
+%token TOKEN_ELSE "else"
%token TOKEN_ESAC "esac"
%token TOKEN_FI "fi"
%token TOKEN_FOR "for"
@@ -85,6 +86,14 @@ statement: TOKEN_EOL {
"fi" TOKEN_EOL {
$$ = create_statement_if(parser, $3, $6, NULL);
}
+ | "if" TOKEN_DELIM statement
+ "then" TOKEN_EOL
+ statements
+ "else" TOKEN_EOL
+ statements
+ "fi" TOKEN_EOL {
+ $$ = create_statement_if(parser, $3, $6, $9);
+ }
| "menuentry" TOKEN_DELIM words TOKEN_DELIM
'{' statements '}'
TOKEN_EOL {
OpenPOWER on IntegriCloud