X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;ds=sidebyside;f=discover%2Fgrub2%2Fparser.y;h=e13cd72a8f72e6358e7dfa7ab7387000b384efc4;hb=e651a16f85e9df51ed65d96ea32932f69cbf302d;hp=f49cecdc3382cb630817b00d071d4ff00dfeaa59;hpb=2ea5eb23b027519372dd20fbe8f958c06ac2aa6c;p=petitboot diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y index f49cecd..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 { @@ -221,13 +230,13 @@ void word_append(struct grub2_word *w1, struct grub2_word *w2) w1->last = w2; } -struct grub2_parser *grub2_parser_create(void *ctx) +struct grub2_parser *grub2_parser_create(struct discover_context *ctx) { struct grub2_parser *parser; parser = talloc(ctx, struct grub2_parser); yylex_init_extra(parser, &parser->scanner); - parser->script = create_script(parser); + parser->script = create_script(parser, ctx); return parser; }