--- bash-2.05b/parse.y 2002-05-21 17:57:30.000000000 +0200 +++ hush-bash-2.05b/parse.y 2004-10-05 23:12:52.000000000 +0200 @@ -287,7 +287,8 @@ in the case that they are preceded by a list_terminator. Members of the second group are for [[...]] commands. Members of the third group are recognized only under special circumstances. */ -%token IF THEN ELSE ELIF FI CASE ESAC FOR SELECT WHILE UNTIL DO DONE FUNCTION + +%token IF THEN ELSE ELIF FI CASE ESAC FOR SELECT WHILE UNTIL DO DONE FUNCTION ON TRANSLATE WITH %token COND_START COND_END COND_ERROR %token IN BANG TIME TIMEOPT @@ -315,6 +316,8 @@ %type word_list pattern %type pattern_list case_clause_sequence case_clause %type timespec +%type on_command translate_command + %start inputunit @@ -598,8 +601,26 @@ { $$ = $1; } | arith_for_command { $$ = $1; } + | on_command + { $$ = $1; } + | translate_command + { $$ = $1; } ; + +on_command : ON WORD newline_list WITH WORD newline_list DO compound_list DONE + { $$ = (COMMAND *) make_on_command ($2, $5, $8); } + | ON WORD ';' newline_list WITH WORD ';' newline_list DO compound_list DONE + { $$ = (COMMAND *) make_on_command ($2, $6, $10); } + ; + + +translate_command : TRANSLATE + { $$ = (COMMAND *) make_translate_command (); } + ; + + + for_command: FOR WORD newline_list DO compound_list DONE { $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5); } | FOR WORD newline_list '{' compound_list '}' @@ -1646,6 +1667,11 @@ { "done", DONE }, { "in", IN }, { "function", FUNCTION }, +#ifdef HUSH + { "on", ON}, + { "translate", TRANSLATE }, + { "with" , WITH }, +#endif /* HUSH */ #if defined (COMMAND_TIMING) { "time", TIME }, #endif