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; | ||||
| 
 | ||||
|   /* Parsed block argument.  */ | ||||
|   struct grub_script_cmd *block; | ||||
|   struct grub_script block; | ||||
| 
 | ||||
|   /* Next argument part.  */ | ||||
|   struct grub_script_arg *next; | ||||
|  |  | |||
|  | @ -33,7 +33,10 @@ | |||
|   struct grub_script_arglist *arglist; | ||||
|   struct grub_script_arg *arg; | ||||
|   char *string; | ||||
|   unsigned offset; | ||||
|   struct { | ||||
|     unsigned offset; | ||||
|     struct grub_script_mem *memory; | ||||
|   }; | ||||
| } | ||||
| 
 | ||||
| %token GRUB_PARSER_TOKEN_BAD | ||||
|  | @ -147,24 +150,30 @@ argument : "case"      { $$ = grub_script_add_arglist (state, 0, $1); } | |||
|          | word { $$ = $1; } | ||||
| ; | ||||
| 
 | ||||
| block: "{"  | ||||
| block: "{" | ||||
|        { | ||||
|          grub_script_lexer_ref (state->lexerstate); | ||||
|          $<offset>$ = grub_script_lexer_record_start (state); | ||||
| 	 $<memory>$ = grub_script_mem_record (state); | ||||
|        } | ||||
|        commands1 delimiters0 "}" | ||||
|        { | ||||
|          char *p; | ||||
|          struct grub_script_arg *arg; | ||||
| 	 struct grub_script_mem *memory; | ||||
| 
 | ||||
|          grub_script_lexer_deref (state->lexerstate); | ||||
|          if (p = grub_script_lexer_record_stop (state, $<offset>2)) | ||||
| 	 memory = grub_script_mem_record_stop (state, $<memory>2); | ||||
|          if ((p = grub_script_lexer_record_stop (state, $<offset>2))) | ||||
| 	   *grub_strrchr (p, '}') = '\0'; | ||||
| 
 | ||||
|          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_lexer_deref (state->lexerstate); | ||||
|        } | ||||
| ; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue