================
Binary expressions
================

fn x() -> bool {
    0 + 1
}

fn x() -> bool {
    0 * 2 + 1
}

fn x() -> bool {
    0 + 2 * 1
}

fn x() -> bool {
    -1 * 2
}

fn x() -> bool {
    1 + -2
}

fn x() -> bool {
    1 + 2 == 2 + 3
}

fn x() -> bool {
    1 == 2 > 2 == 3
}

fn x() -> bool {
    1 + 2 >> 3 + 4
}

fn x() -> bool {
    1 == 2 & 3 == 4
}

fn x() -> bool {
    1 & 2 ^ 3 & 4
}

fn x() -> bool {
    1 ^ 2 | 3 ^ 4
}

fn x() -> bool {
    1 | 2 && 3 | 4
}

fn x() -> bool {
    1 && 2 || 3 && 4
}

fn x() -> bool {
    1 || 2 `a` 3 || 4
}

---

(source_file
  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (int_literal)
        (op_add)
        (int_literal))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_mul)
          (int_literal))
        (op_add)
        (int_literal))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (int_literal)
        (op_add)
        (binary_expression
          (int_literal)
          (op_mul)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (unary_expression
          (op_sub)
          (int_literal))
        (op_mul)
        (int_literal))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (int_literal)
        (op_add)
        (unary_expression
          (op_sub)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_add)
          (int_literal))
        (op_equals)
        (binary_expression
          (int_literal)
          (op_add)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_equals)
          (int_literal))
        (op_gt)
        (binary_expression
          (int_literal)
          (op_equals)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_add)
          (int_literal))
        (op_rshift)
        (binary_expression
          (int_literal)
          (op_add)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_equals)
          (int_literal))
        (op_bitwise_and)
        (binary_expression
          (int_literal)
          (op_equals)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_bitwise_and)
          (int_literal))
        (op_bitwise_xor)
        (binary_expression
          (int_literal)
          (op_bitwise_and)
          (int_literal)))))


  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_bitwise_xor)
          (int_literal))
        (op_bitwise_or)
        (binary_expression
          (int_literal)
          (op_bitwise_xor)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_bitwise_or)
          (int_literal))
        (op_logical_and)
        (binary_expression
          (int_literal)
          (op_bitwise_or)
          (int_literal)))))

  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_logical_and)
          (int_literal))
        (op_logical_or)
        (binary_expression
          (int_literal)
          (op_logical_and)
          (int_literal)))))


  (unit_definition
    (identifier)
    (parameter_list)
    (type (builtin_type))
    (block
      (binary_expression
        (binary_expression
          (int_literal)
          (op_logical_or)
          (int_literal))
        (op_custom_infix (identifier))
        (binary_expression
          (int_literal)
          (op_logical_or)
          (int_literal)))))
)

