21 struct grub2_word *next;
22 struct list_item argv_list;
29 struct grub2_statements {
33 struct grub2_statement {
34 struct list_item list;
41 int (*exec)(struct grub2_script *,
42 struct grub2_statement *);
45 struct grub2_statement_simple {
46 struct grub2_statement st;
47 struct grub2_argv *argv;
50 struct grub2_statement_menuentry {
51 struct grub2_statement st;
52 struct grub2_argv *argv;
53 struct grub2_statements *statements;
56 struct grub2_statement_if {
57 struct grub2_statement st;
58 struct grub2_statement *condition;
59 struct grub2_statements *true_case;
60 struct grub2_statements *false_case;
63 struct grub2_statement_block {
64 struct grub2_statement st;
65 struct grub2_statements *statements;
69 struct grub2_statements *statements;
70 struct list environment;
75 struct grub2_script *script;
78 struct grub2_statements *create_statements(struct grub2_parser *parser);
80 struct grub2_statement *create_statement_simple(struct grub2_parser *parser,
81 struct grub2_argv *argv);
83 struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
84 struct grub2_argv *argv, struct grub2_statements *stmts);
86 struct grub2_statement *create_statement_if(struct grub2_parser *parser,
87 struct grub2_statement *condition,
88 struct grub2_statements *true_case,
89 struct grub2_statements *false_case);
91 struct grub2_statement *create_statement_block(struct grub2_parser *parser,
92 struct grub2_statements *stmts);
94 struct grub2_word *create_word_text(struct grub2_parser *parser,
97 struct grub2_word *create_word_var(struct grub2_parser *parser,
98 const char *name, bool split);
100 struct grub2_argv *create_argv(struct grub2_parser *parser);
102 void statement_append(struct grub2_statements *stmts,
103 struct grub2_statement *stmt);
105 void argv_append(struct grub2_argv *argv, struct grub2_word *word);
107 void word_append(struct grub2_word *w1, struct grub2_word *w2);
109 /* script interface */
110 void script_execute(struct grub2_script *script);
112 int statement_simple_execute(struct grub2_script *script,
113 struct grub2_statement *statement);
114 int statement_if_execute(struct grub2_script *script,
115 struct grub2_statement *statement);
117 struct grub2_script *create_script(void *ctx);