From: Jeremy Kerr Date: Mon, 16 Sep 2013 08:58:30 +0000 (+0800) Subject: discover/grub2: Implement 'else' blocks X-Git-Tag: v1.0.0~454 X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=e651a16f85e9df51ed65d96ea32932f69cbf302d;hp=4bf4d14afbc46d6bbf11839b1f8fdc9bf66dd16d discover/grub2: Implement 'else' blocks Signed-off-by: Jeremy Kerr --- 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 {