===
complex match block
===

fn a() {
    match addr_first_bits {
        0 => [],
        1 => [trunc(addr_rest_bits)],
        _ => [trunc(addr_rest_bits)],
    }
}

---

(source_file
  (unit_definition
    (identifier)
    (parameter_list)
    (block
      (match_expression
        (identifier)
        (match_block
          (match_arm
            (int_literal)
            (array_literal))
          (match_arm
            (int_literal)
            (array_literal
              (function_call
                (identifier)
                (argument_list (identifier)))))
          (match_arm
            (identifier)
            (array_literal
              (function_call
                (identifier)
                (argument_list (identifier))))))))))


===
complex match block in let binding
===

fn a() {
    let x = match addr_first_bits {
        0 => [],
        1 => [trunc(addr_rest_bits)],
        _ => [trunc(addr_rest_bits)],
    };
    let x = 0;
    x
}

---

(source_file
  (unit_definition
    (identifier)
    (parameter_list)
    (block
      (let_binding
        (identifier)
        (match_expression
          (identifier)
          (match_block
            (match_arm
              (int_literal)
              (array_literal))
            (match_arm
              (int_literal)
              (array_literal
                (function_call
                  (identifier)
                  (argument_list (identifier)))))
            (match_arm
              (identifier)
              (array_literal
                (function_call
                  (identifier)
                  (argument_list (identifier))))))))
      (let_binding
        (identifier)
        (int_literal))
      (identifier))))


===
Sequential let bindings with match statements
===

fn a() {
    let x = match addr_first_bits {
        0 => [],
        1 => [trunc(addr_rest_bits)],
        _ => [trunc(addr_rest_bits)],
    };

    let we_pattern = match access_width {
    };
    x
}

---

(source_file
  (unit_definition
    (identifier)
    (parameter_list)
    (block
      (let_binding
        (identifier)
        (match_expression
          (identifier)
          (match_block
            (match_arm
              (int_literal)
              (array_literal))
            (match_arm
              (int_literal)
              (array_literal
                (function_call
                  (identifier)
                  (argument_list (identifier)))))
            (match_arm
              (identifier)
              (array_literal
                (function_call
                  (identifier)
                  (argument_list (identifier))))))))
      (let_binding
        (identifier)
        (match_expression
          (identifier)
          (match_block)))
      (identifier))))
