21 struct grub2_word *next;
22 struct grub2_word *last;
23 struct list_item argv_list;
30 struct grub2_statements {
34 struct grub2_statement {
35 struct list_item list;
42 int (*exec)(struct grub2_script *,
43 struct grub2_statement *);
46 struct grub2_statement_simple {
47 struct grub2_statement st;
48 struct grub2_argv *argv;
51 struct grub2_statement_menuentry {
52 struct grub2_statement st;
53 struct grub2_argv *argv;
54 struct grub2_statements *statements;
57 struct grub2_statement_if {
58 struct grub2_statement st;
59 struct grub2_statement *condition;
60 struct grub2_statements *true_case;
61 struct grub2_statements *false_case;
64 struct grub2_statement_block {
65 struct grub2_statement st;
66 struct grub2_statements *statements;
70 struct grub2_statements *statements;
71 struct list environment;
76 struct grub2_script *script;
79 struct grub2_statements *create_statements(struct grub2_parser *parser);
81 struct grub2_statement *create_statement_simple(struct grub2_parser *parser,
82 struct grub2_argv *argv);
84 struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
85 struct grub2_argv *argv, struct grub2_statements *stmts);
87 struct grub2_statement *create_statement_if(struct grub2_parser *parser,
88 struct grub2_statement *condition,
89 struct grub2_statements *true_case,
90 struct grub2_statements *false_case);
92 struct grub2_statement *create_statement_block(struct grub2_parser *parser,
93 struct grub2_statements *stmts);
95 struct grub2_word *create_word_text(struct grub2_parser *parser,
98 struct grub2_word *create_word_var(struct grub2_parser *parser,
99 const char *name, bool split);
101 struct grub2_argv *create_argv(struct grub2_parser *parser);
103 void statement_append(struct grub2_statements *stmts,
104 struct grub2_statement *stmt);
106 void argv_append(struct grub2_argv *argv, struct grub2_word *word);
108 void word_append(struct grub2_word *w1, struct grub2_word *w2);
110 /* script interface */
111 void script_execute(struct grub2_script *script);
113 int statement_simple_execute(struct grub2_script *script,
114 struct grub2_statement *statement);
115 int statement_if_execute(struct grub2_script *script,
116 struct grub2_statement *statement);
118 struct grub2_script *create_script(void *ctx);