================================================================================
Simple if expression
================================================================================
if true {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (if_expression
      (literal
        (true))
      (block))))

================================================================================
Simple if expression with braces
================================================================================
if (true) {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (if_expression
      (parenthesized_expression
        (literal
          (true)))
      (block))))

================================================================================
Simple if expression with else
================================================================================
if true {} else {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (if_expression
      (literal
        (true))
      (block)
      (else_branch
        (block)))))

================================================================================
Simple if expression with else if
================================================================================
if true {} else if false {} else {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (if_expression
      (literal
        (true))
      (block)
      (else_branch
        (if_expression
          (literal
            (false))
          (block)
          (else_branch
            (block)))))))

================================================================================
If guard
================================================================================
if a := foo() {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (if_expression
      (var_declaration
        (expression_list
          (reference_expression
            (identifier)))
        (expression_list
          (call_expression
            (reference_expression
              (identifier))
            (argument_list))))
      (block))))

================================================================================
Compile-time if expression
================================================================================
$if macos {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (compile_time_if_expression
      (reference_expression
        (identifier))
      (block))))

================================================================================
Compile-time if expression with else
================================================================================
$if macos {} $else {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (compile_time_if_expression
      (reference_expression
        (identifier))
      (block)
      (block))))

================================================================================
Compile-time if expression with else if
================================================================================
$if macos {
    println(1)
} $else $if linux {
    println(1)
} $else {
    println(1)
}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (compile_time_if_expression
      (reference_expression
        (identifier))
      (block
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list
              (argument
                (literal
                  (int_literal)))))))
      (compile_time_if_expression
        (reference_expression
          (identifier))
        (block
          (simple_statement
            (call_expression
              (reference_expression
                (identifier))
              (argument_list
                (argument
                  (literal
                    (int_literal)))))))
        (block
          (simple_statement
            (call_expression
              (reference_expression
                (identifier))
              (argument_list
                (argument
                  (literal
                    (int_literal)))))))))))

================================================================================
Compile-time if expression with ?
================================================================================
$if some_define ? {}
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (compile_time_if_expression
      (option_propagation_expression
        (reference_expression
          (identifier)))
      (block))))

================================================================================
Simple block
================================================================================
if true { f();g();h(); }
if true { f()
g()
  h(); }
--------------------------------------------------------------------------------

(source_file
  (simple_statement
    (if_expression
      (literal
        (true))
      (block
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list)))
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list)))
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list))))))
  (simple_statement
    (if_expression
      (literal
        (true))
      (block
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list)))
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list)))
        (simple_statement
          (call_expression
            (reference_expression
              (identifier))
            (argument_list)))))))
