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_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_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;
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;
}
list_add_tail(&stmts->list, &stmt->list);
}
-struct grub2_word *create_word(struct grub2_parser *parser, const char *text,
- bool expand, bool split)
+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->expand = expand;
+ 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;
}
void word_append(struct grub2_word *w1, struct grub2_word *w2)
{
- w1->next = w2;
+ w1->last->next = w2;
+ w1->last = w2;
}