==================
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))))))))))))))
