block params are grub_script with independent memory
This commit is contained in:
parent
19dd394f56
commit
6c9aa3df16
2 changed files with 15 additions and 6 deletions
|
@ -61,7 +61,7 @@ struct grub_script_arg
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
/* Parsed block argument. */
|
/* Parsed block argument. */
|
||||||
struct grub_script_cmd *block;
|
struct grub_script block;
|
||||||
|
|
||||||
/* Next argument part. */
|
/* Next argument part. */
|
||||||
struct grub_script_arg *next;
|
struct grub_script_arg *next;
|
||||||
|
|
|
@ -33,7 +33,10 @@
|
||||||
struct grub_script_arglist *arglist;
|
struct grub_script_arglist *arglist;
|
||||||
struct grub_script_arg *arg;
|
struct grub_script_arg *arg;
|
||||||
char *string;
|
char *string;
|
||||||
unsigned offset;
|
struct {
|
||||||
|
unsigned offset;
|
||||||
|
struct grub_script_mem *memory;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
%token GRUB_PARSER_TOKEN_BAD
|
%token GRUB_PARSER_TOKEN_BAD
|
||||||
|
@ -151,20 +154,26 @@ block: "{"
|
||||||
{
|
{
|
||||||
grub_script_lexer_ref (state->lexerstate);
|
grub_script_lexer_ref (state->lexerstate);
|
||||||
$<offset>$ = grub_script_lexer_record_start (state);
|
$<offset>$ = grub_script_lexer_record_start (state);
|
||||||
|
$<memory>$ = grub_script_mem_record (state);
|
||||||
}
|
}
|
||||||
commands1 delimiters0 "}"
|
commands1 delimiters0 "}"
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
struct grub_script_arg *arg;
|
struct grub_script_arg *arg;
|
||||||
|
struct grub_script_mem *memory;
|
||||||
|
|
||||||
grub_script_lexer_deref (state->lexerstate);
|
memory = grub_script_mem_record_stop (state, $<memory>2);
|
||||||
if (p = grub_script_lexer_record_stop (state, $<offset>2))
|
if ((p = grub_script_lexer_record_stop (state, $<offset>2)))
|
||||||
*grub_strrchr (p, '}') = '\0';
|
*grub_strrchr (p, '}') = '\0';
|
||||||
|
|
||||||
if (arg = grub_script_arg_add (state, 0, GRUB_SCRIPT_ARG_TYPE_BLOCK, p))
|
if (arg = grub_script_arg_add (state, 0, GRUB_SCRIPT_ARG_TYPE_BLOCK, p))
|
||||||
arg->block = $3;
|
{
|
||||||
|
arg->block.cmd = $3;
|
||||||
|
arg->block.mem = memory;
|
||||||
|
}
|
||||||
|
|
||||||
$$ = grub_script_add_arglist (state, 0, arg);
|
$$ = grub_script_add_arglist (state, 0, arg);
|
||||||
|
grub_script_lexer_deref (state->lexerstate);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue