simplify cmdblock with cmdlist

This commit is contained in:
BVK Chaitanya 2010-05-05 14:40:20 +05:30
commit fae50860c8
5 changed files with 31 additions and 52 deletions

View file

@ -82,15 +82,6 @@ struct grub_script_cmdline
struct grub_script_arglist *arglist; struct grub_script_arglist *arglist;
}; };
/* A block of commands, this can be used to group commands. */
struct grub_script_cmdblock
{
struct grub_script_cmd cmd;
/* A chain of commands. */
struct grub_script_cmd *cmdlist;
};
/* An if statement. */ /* An if statement. */
struct grub_script_cmdif struct grub_script_cmdif
{ {
@ -234,8 +225,6 @@ grub_script_add_arglist (struct grub_parser_param *state,
struct grub_script_cmd * struct grub_script_cmd *
grub_script_create_cmdline (struct grub_parser_param *state, grub_script_create_cmdline (struct grub_parser_param *state,
struct grub_script_arglist *arglist); struct grub_script_arglist *arglist);
struct grub_script_cmd *
grub_script_create_cmdblock (struct grub_parser_param *state);
struct grub_script_cmd * struct grub_script_cmd *
grub_script_create_cmdif (struct grub_parser_param *state, grub_script_create_cmdif (struct grub_parser_param *state,
@ -262,9 +251,9 @@ grub_script_create_cmdmenu (struct grub_parser_param *state,
int options); int options);
struct grub_script_cmd * struct grub_script_cmd *
grub_script_add_cmd (struct grub_parser_param *state, grub_script_append_cmd (struct grub_parser_param *state,
struct grub_script_cmdblock *cmdblock, struct grub_script_cmd *list,
struct grub_script_cmd *cmd); struct grub_script_cmd *last);
struct grub_script_arg * struct grub_script_arg *
grub_script_arg_add (struct grub_parser_param *state, grub_script_arg_add (struct grub_parser_param *state,
struct grub_script_arg *arg, struct grub_script_arg *arg,
@ -301,7 +290,7 @@ void grub_script_yyerror (struct grub_parser_param *, char const *);
/* Commands to execute, don't use these directly. */ /* Commands to execute, don't use these directly. */
grub_err_t grub_script_execute_cmdline (struct grub_script_cmd *cmd); grub_err_t grub_script_execute_cmdline (struct grub_script_cmd *cmd);
grub_err_t grub_script_execute_cmdblock (struct grub_script_cmd *cmd); grub_err_t grub_script_execute_cmdlist (struct grub_script_cmd *cmd);
grub_err_t grub_script_execute_cmdif (struct grub_script_cmd *cmd); grub_err_t grub_script_execute_cmdif (struct grub_script_cmd *cmd);
grub_err_t grub_script_execute_cmdfor (struct grub_script_cmd *cmd); grub_err_t grub_script_execute_cmdfor (struct grub_script_cmd *cmd);
grub_err_t grub_script_execute_cmdwhile (struct grub_script_cmd *cmd); grub_err_t grub_script_execute_cmdwhile (struct grub_script_cmd *cmd);

View file

@ -269,13 +269,13 @@ grub_script_execute_cmdline (struct grub_script_cmd *cmd)
/* Execute a block of one or more commands. */ /* Execute a block of one or more commands. */
grub_err_t grub_err_t
grub_script_execute_cmdblock (struct grub_script_cmd *cmd) grub_script_execute_cmdlist (struct grub_script_cmd *list)
{ {
int ret = 0; int ret = 0;
struct grub_script_cmdblock *cmdblock = (struct grub_script_cmdblock *) cmd; struct grub_script_cmd *cmd;
/* Loop over every command and execute it. */ /* Loop over every command and execute it. */
for (cmd = cmdblock->cmdlist; cmd; cmd = cmd->next) for (cmd = list->next; cmd; cmd = cmd->next)
ret = grub_script_execute_cmd (cmd); ret = grub_script_execute_cmd (cmd);
return ret; return ret;

View file

@ -96,9 +96,7 @@ script: newlines0
} }
| script statement delimiter newlines0 | script statement delimiter newlines0
{ {
struct grub_script_cmdblock *cmdblock; $$ = grub_script_append_cmd (state, $1, $2);
cmdblock = (struct grub_script_cmdblock *) $1;
$$ = grub_script_add_cmd (state, cmdblock, $2);
} }
| error | error
{ {
@ -183,13 +181,11 @@ command: grubcmd { $$ = $1; }
/* A list of commands. */ /* A list of commands. */
commands1: newlines0 command commands1: newlines0 command
{ {
$$ = grub_script_add_cmd (state, 0, $2); $$ = grub_script_append_cmd (state, 0, $2);
} }
| commands1 delimiters1 command | commands1 delimiters1 command
{ {
struct grub_script_cmdblock *cmdblock; $$ = grub_script_append_cmd (state, $1, $3);
cmdblock = (struct grub_script_cmdblock *) $1;
$$ = grub_script_add_cmd (state, cmdblock, $3);
} }
; ;

View file

@ -291,46 +291,40 @@ grub_script_create_cmdmenu (struct grub_parser_param *state,
return (struct grub_script_cmd *) cmd; return (struct grub_script_cmd *) cmd;
} }
/* Create a block of commands. CMD contains the command that should /* Create a chain of commands. LAST contains the command that should
be added at the end of CMDBLOCK's list. If CMDBLOCK is zero, a new be added at the end of LIST's list. If LIST is zero, a new list
cmdblock will be created. */ will be created. */
struct grub_script_cmd * struct grub_script_cmd *
grub_script_add_cmd (struct grub_parser_param *state, grub_script_append_cmd (struct grub_parser_param *state,
struct grub_script_cmdblock *cmdblock, struct grub_script_cmd *list,
struct grub_script_cmd *cmd) struct grub_script_cmd *last)
{ {
struct grub_script_cmd *ptr; struct grub_script_cmd *ptr;
grub_dprintf ("scripting", "cmdblock\n"); grub_dprintf ("scripting", "append command\n");
if (!cmd) if (! last)
return (struct grub_script_cmd *) cmdblock; return list;
if (!cmdblock) if (! list)
{ {
cmdblock = grub_script_malloc (state, sizeof (*cmdblock)); list = grub_script_malloc (state, sizeof (*list));
if (!cmdblock) if (! list)
return 0; return 0;
cmdblock->cmd.exec = grub_script_execute_cmdblock; list->exec = grub_script_execute_cmdlist;
cmdblock->cmd.next = 0; list->next = last;
cmdblock->cmdlist = cmd;
cmd->next = 0;
} }
else else
{ {
if (!cmdblock->cmdlist) ptr = list;
cmdblock->cmdlist = cmd; while (ptr->next)
else ptr = ptr->next;
{
ptr = cmdblock->cmdlist; ptr->next = last;
while (ptr->next)
ptr = ptr->next;
ptr->next = cmd;
}
} }
return (struct grub_script_cmd *) cmdblock; return list;
} }

View file

@ -70,7 +70,7 @@ grub_script_execute_cmdline (struct grub_script_cmd *cmd __attribute__ ((unused)
} }
grub_err_t grub_err_t
grub_script_execute_cmdblock (struct grub_script_cmd *cmd __attribute__ ((unused))) grub_script_execute_cmdlist (struct grub_script_cmd *cmd __attribute__ ((unused)))
{ {
return 0; return 0;
} }