summaryrefslogtreecommitdiffstats
path: root/discover/grub2/parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'discover/grub2/parser.y')
-rw-r--r--discover/grub2/parser.y19
1 files changed, 19 insertions, 0 deletions
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)
{
OpenPOWER on IntegriCloud