From: Jeremy Kerr Date: Thu, 12 Sep 2013 07:03:05 +0000 (+0800) Subject: discover/grub2: Implement statement blocks X-Git-Tag: v1.0.0~474 X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=42e3b424841bb6d8e52802924204f41bd1def070;hp=ce2275ed4fa099035af123c25a1a7657f1ea6e78;ds=sidebyside discover/grub2: Implement statement blocks Signed-off-by: Jeremy Kerr --- diff --git a/discover/grub2/grub2.h b/discover/grub2/grub2.h index 2c7951a..cc817ff 100644 --- a/discover/grub2/grub2.h +++ b/discover/grub2/grub2.h @@ -33,17 +33,23 @@ struct grub2_statement_if { struct grub2_statements *false_case; }; +struct grub2_statement_block { + struct grub2_statements *statements; +}; + struct grub2_statement { struct list_item list; enum { STMT_TYPE_SIMPLE, STMT_TYPE_MENUENTRY, STMT_TYPE_IF, + STMT_TYPE_BLOCK, } type; union { struct grub2_statement_simple simple; struct grub2_statement_menuentry menuentry; struct grub2_statement_if ifstmt; + struct grub2_statement_block block; }; }; @@ -69,6 +75,9 @@ struct grub2_statement *create_statement_if(struct grub2_parser *parser, struct grub2_statements *true_case, struct grub2_statements *false_case); +struct grub2_statement *create_statement_block(struct grub2_parser *parser, + struct grub2_statements *stmts); + struct grub2_word *create_word(struct grub2_parser *parser, const char *text, bool expand, bool split); diff --git a/discover/grub2/parser-api.c b/discover/grub2/parser-api.c index 6e05ecf..37c88a2 100644 --- a/discover/grub2/parser-api.c +++ b/discover/grub2/parser-api.c @@ -42,6 +42,16 @@ struct grub2_statement *create_statement_if(struct grub2_parser *parser, stmt->ifstmt.false_case = false_case; return stmt; } + +struct grub2_statement *create_statement_block(struct grub2_parser *parser, + struct grub2_statements *stmts) +{ + struct grub2_statement *stmt = talloc(parser, struct grub2_statement); + stmt->type = STMT_TYPE_BLOCK; + stmt->block.statements = stmts; + return stmt; +} + void statement_append(struct grub2_statements *stmts, struct grub2_statement *stmt) { diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y index a8c02e2..d57c732 100644 --- a/discover/grub2/parser.y +++ b/discover/grub2/parser.y @@ -73,7 +73,9 @@ statement: TOKEN_EOL { | words TOKEN_EOL { $$ = create_statement_simple(parser, $1); } - | '{' statements '}' { $$ = NULL; } + | '{' statements '}' { + $$ = create_statement_block(parser, $2); + } | "if" TOKEN_DELIM statement "then" TOKEN_EOL statements