X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Fparser.y;h=23bf4276818932613b3df07e14a9392861a1e2eb;hp=0beddd6fc3e28252af96acb74cd12a34a0186ebd;hb=1b272c7d47390077eee0a0638329b1a7df521329;hpb=e1b713b0c862a93cd3e8cea59070f469510d3c39 diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y index 0beddd6..23bf427 100644 --- a/discover/grub2/parser.y +++ b/discover/grub2/parser.y @@ -130,6 +130,12 @@ statement: /* we just flatten everything */ $$ = create_statement_block(parser, $6); } + | "for" TOKEN_DELIM word TOKEN_DELIM "in" TOKEN_DELIM words TOKEN_EOL + "do" sep + statements + "done" { + $$ = create_statement_for(parser, $3, $7, $11); + } words: word { $$ = create_argv(parser); @@ -243,6 +249,19 @@ struct grub2_statement *create_statement_function(struct grub2_parser *parser, return &stmt->st; } +struct grub2_statement *create_statement_for(struct grub2_parser *parser, + struct grub2_word *var, struct grub2_argv *list, + struct grub2_statements *body) +{ + struct grub2_statement_for *stmt = + talloc(parser, struct grub2_statement_for); + stmt->st.exec = statement_for_execute; + stmt->var = var; + stmt->list = list; + stmt->body = body; + return &stmt->st; +} + void statement_append(struct grub2_statements *stmts, struct grub2_statement *stmt) {