@@ -85,6 +85,7 @@ KEYWORD_SUDO = 'sudo' ;
8585KEYWORD_SUCCEEDED = ' succeeded' ;
8686KEYWORD_THEN = ' then' ;
8787KEYWORD_TRUST = ' trust' ;
88+ KEYWORD_EXITED = ' exited' ;
8889KEYWORD_UNSAFE = ' unsafe' ;
8990KEYWORD_WHILE = ' while' ;
9091
@@ -127,7 +128,7 @@ list = empty_list | full_list ;
127128command_modifier = [ KEYWORD_SILENT ], [ KEYWORD_TRUST ], [ KEYWORD_SUDO ] ;
128129command_modifier_block = command_modifier , multiline_block ;
129130command_base = ' $' , { ANY_CHAR | interpolation }, ' $' ;
130- command = command_modifier , command_base , [ failure_handler | success_handler ] ;
131+ command = command_modifier , command_base , [ handler ] ;
131132
132133(* Operations *)
133134binary_operation = expression , BINARY_OP , expression ;
@@ -138,13 +139,20 @@ parentheses = '(', expression, ')' ;
138139
139140(* Failure handler *)
140141failure_propagation = ' ?' ;
141- failure_block = KEYWORD_FAILED , block ;
142+ failure_block = KEYWORD_FAILED , { ' ( ' , identifier , ' ) ' }, block ;
142143failure_handler = failure_propagation | failure_block ;
143144
144145(* Success handler *)
145146success_block = KEYWORD_SUCCEEDED , block ;
146147success_handler = success_block ;
147148
149+ (* Exited handler *)
150+ exited_block = KEYWORD_EXITED , {' (' , identifier , ' )' }, block ;
151+ exited_handler = exited_block ;
152+
153+ (* All handlers combined *)
154+ handler = success_handler | failure_handler | exited_handler ;
155+
148156(* Variable *)
149157variable_index = ' [' , expression , ' ]' ;
150158variable_init_mut = KEYWORD_LET , identifier , ' =' , expression ;
@@ -154,7 +162,7 @@ variable_set = identifier, variable_index?, '=', expression ;
154162
155163(* Function *)
156164function_call = command_modifier , identifier , ' (' , [ expression , { ' ,' , expression } ], ' )' ;
157- function_call_failed = function_call , [ failure_handler | success_handler ] ;
165+ function_call_failed = function_call , [ handler ] ;
158166function_def = [ VISIBILITY ], KEYWORD_FUN , identifier , ' (' , [ identifier , { ' ,' , identifier } ], ' )' , block ;
159167function_def_typed = [ VISIBILITY ], KEYWORD_FUN , identifier , ' (' ,
160168 [ identifier , ' :' , TYPE , { ' ,' , identifier , ' :' , TYPE } ], ' )' , ' :' , TYPE , block ;
0 commit comments