From: Jeremy Kerr Date: Mon, 16 Sep 2013 06:22:27 +0000 (+0800) Subject: discover/grub2: Move parser-api definitions to parser.y X-Git-Tag: v1.0.0~461 X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=5c6263a12dd7f859daa0feba8b58a0558f0ff21c;hp=e492b596187d283cfbd65a098fe1b2d0dafa311e discover/grub2: Move parser-api definitions to parser.y No need for a separate file here. Signed-off-by: Jeremy Kerr --- diff --git a/discover/grub2/parser-api.c b/discover/grub2/parser-api.c deleted file mode 100644 index aa59978..0000000 --- a/discover/grub2/parser-api.c +++ /dev/null @@ -1,111 +0,0 @@ - -#include - -#include "grub2.h" - -struct grub2_statements *create_statements(struct grub2_parser *parser) -{ - struct grub2_statements *stmts = talloc(parser, - struct grub2_statements); - list_init(&stmts->list); - return stmts; -} - -struct grub2_statement *create_statement_simple(struct grub2_parser *parser, - struct grub2_argv *argv) -{ - struct grub2_statement_simple *stmt = - talloc(parser, struct grub2_statement_simple); - stmt->st.type = STMT_TYPE_SIMPLE; - stmt->st.exec = statement_simple_execute; - stmt->argv = argv; - return &stmt->st; -} - -struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser, - struct grub2_argv *argv, struct grub2_statements *stmts) -{ - struct grub2_statement_menuentry *stmt = - talloc(parser, struct grub2_statement_menuentry); - stmt->st.type = STMT_TYPE_MENUENTRY; - stmt->st.exec = statement_menuentry_execute; - stmt->argv = argv; - stmt->statements = stmts; - return &stmt->st; -} - -struct grub2_statement *create_statement_if(struct grub2_parser *parser, - struct grub2_statement *condition, - struct grub2_statements *true_case, - struct grub2_statements *false_case) -{ - struct grub2_statement_if *stmt = - talloc(parser, struct grub2_statement_if); - stmt->st.type = STMT_TYPE_IF; - stmt->st.exec = statement_if_execute; - stmt->condition = condition; - stmt->true_case = true_case; - stmt->false_case = false_case; - return &stmt->st; -} - -struct grub2_statement *create_statement_block(struct grub2_parser *parser, - struct grub2_statements *stmts) -{ - struct grub2_statement_block *stmt = - talloc(parser, struct grub2_statement_block); - stmt->st.type = STMT_TYPE_BLOCK; - stmt->st.exec = NULL; - stmt->statements = stmts; - return &stmt->st; -} - -void statement_append(struct grub2_statements *stmts, - struct grub2_statement *stmt) -{ - if (!stmt) - return; - list_add_tail(&stmts->list, &stmt->list); -} - -struct grub2_word *create_word_text(struct grub2_parser *parser, - const char *text) -{ - struct grub2_word *word = talloc(parser, struct grub2_word); - word->type = GRUB2_WORD_TEXT; - word->split = false; - word->text = talloc_strdup(word, text); - word->next = NULL; - word->last = word; - return word; -} - -struct grub2_word *create_word_var(struct grub2_parser *parser, - const char *name, bool split) -{ - struct grub2_word *word = talloc(parser, struct grub2_word); - word->type = GRUB2_WORD_VAR; - word->name = talloc_strdup(word, name); - word->split = split; - word->next = NULL; - word->last = word; - return word; -} - -struct grub2_argv *create_argv(struct grub2_parser *parser) -{ - struct grub2_argv *argv = talloc(parser, struct grub2_argv); - list_init(&argv->words); - return argv; -} - -void argv_append(struct grub2_argv *argv, struct grub2_word *word) -{ - list_add_tail(&argv->words, &word->argv_list); -} - -void word_append(struct grub2_word *w1, struct grub2_word *w2) -{ - w1->last->next = w2; - w1->last = w2; -} diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y index eb61f55..0d02bc1 100644 --- a/discover/grub2/parser.y +++ b/discover/grub2/parser.y @@ -4,6 +4,8 @@ %parse-param { struct grub2_parser *parser } %{ +#include + #include "grub2.h" #include "parser.h" #include "lexer.h" @@ -111,3 +113,110 @@ void yyerror(struct grub2_parser *parser, char const *s) yyget_lineno(parser->scanner), s, yyget_text(parser->scanner)); } + +struct grub2_statements *create_statements(struct grub2_parser *parser) +{ + struct grub2_statements *stmts = talloc(parser, + struct grub2_statements); + list_init(&stmts->list); + return stmts; +} + +struct grub2_statement *create_statement_simple(struct grub2_parser *parser, + struct grub2_argv *argv) +{ + struct grub2_statement_simple *stmt = + talloc(parser, struct grub2_statement_simple); + stmt->st.type = STMT_TYPE_SIMPLE; + stmt->st.exec = statement_simple_execute; + stmt->argv = argv; + return &stmt->st; +} + +struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser, + struct grub2_argv *argv, struct grub2_statements *stmts) +{ + struct grub2_statement_menuentry *stmt = + talloc(parser, struct grub2_statement_menuentry); + stmt->st.type = STMT_TYPE_MENUENTRY; + stmt->st.exec = statement_menuentry_execute; + stmt->argv = argv; + stmt->statements = stmts; + return &stmt->st; +} + +struct grub2_statement *create_statement_if(struct grub2_parser *parser, + struct grub2_statement *condition, + struct grub2_statements *true_case, + struct grub2_statements *false_case) +{ + struct grub2_statement_if *stmt = + talloc(parser, struct grub2_statement_if); + stmt->st.type = STMT_TYPE_IF; + stmt->st.exec = statement_if_execute; + stmt->condition = condition; + stmt->true_case = true_case; + stmt->false_case = false_case; + return &stmt->st; +} + +struct grub2_statement *create_statement_block(struct grub2_parser *parser, + struct grub2_statements *stmts) +{ + struct grub2_statement_block *stmt = + talloc(parser, struct grub2_statement_block); + stmt->st.type = STMT_TYPE_BLOCK; + stmt->st.exec = NULL; + stmt->statements = stmts; + return &stmt->st; +} + +void statement_append(struct grub2_statements *stmts, + struct grub2_statement *stmt) +{ + if (!stmt) + return; + list_add_tail(&stmts->list, &stmt->list); +} + +struct grub2_word *create_word_text(struct grub2_parser *parser, + const char *text) +{ + struct grub2_word *word = talloc(parser, struct grub2_word); + word->type = GRUB2_WORD_TEXT; + word->split = false; + word->text = talloc_strdup(word, text); + word->next = NULL; + word->last = word; + return word; +} + +struct grub2_word *create_word_var(struct grub2_parser *parser, + const char *name, bool split) +{ + struct grub2_word *word = talloc(parser, struct grub2_word); + word->type = GRUB2_WORD_VAR; + word->name = talloc_strdup(word, name); + word->split = split; + word->next = NULL; + word->last = word; + return word; +} + +struct grub2_argv *create_argv(struct grub2_parser *parser) +{ + struct grub2_argv *argv = talloc(parser, struct grub2_argv); + list_init(&argv->words); + return argv; +} + +void argv_append(struct grub2_argv *argv, struct grub2_word *word) +{ + list_add_tail(&argv->words, &word->argv_list); +} + +void word_append(struct grub2_word *w1, struct grub2_word *w2) +{ + w1->last->next = w2; + w1->last = w2; +}