================== Catch value sources ================== recover func() void { a :: fail() catch |err| handle(err) b :: fail() catch |err| match err { .bad: 1 else: 2 } c :: fail() catch { yield 3 } d :: fail() catch if true { yield 4 } else { yield 5 } } --- (source_file (function_declaration (identifier) (parameter_list) (type (builtin_type)) (block (statement (constant_declaration (identifier) (expression (catch_expression (expression (call_expression (expression (identifier)) (argument_list))) (error_capture (identifier)) (expression (call_expression (expression (identifier)) (argument_list (expression (identifier))))))))) (statement (constant_declaration (identifier) (expression (catch_expression (expression (call_expression (expression (identifier)) (argument_list))) (error_capture (identifier)) (match_statement (expression (identifier)) (match_arm (expression (enum_literal (identifier))) (statement (expression_statement (expression (integer))))) (match_arm (statement (expression_statement (expression (integer)))))))))) (statement (constant_declaration (identifier) (expression (catch_expression (expression (call_expression (expression (identifier)) (argument_list))) (block (statement (yield_statement (expression (integer))))))))) (statement (constant_declaration (identifier) (expression (catch_expression (expression (call_expression (expression (identifier)) (argument_list))) (if_statement (expression (boolean)) (statement (block (statement (yield_statement (expression (integer)))))) (statement (block (statement (yield_statement (expression (integer))))))))))))))