==================
Simple try expression
==================

fn main() {
    let x = foo()?;
}

---

(source_file
  (function_item
    name: (identifier)
    parameters: (parameters)
    body: (block
      (let_declaration
        pattern: (identifier)
        value: (try_expression
          (call_expression
            function: (identifier)
            arguments: (arguments)))))))

==================
Chained try
==================

fn main() {
    foo()?.bar()?;
}

---

(source_file
  (function_item
    name: (identifier)
    parameters: (parameters)
    body: (block
      (expression_statement
        (try_expression
          (call_expression
            function: (field_expression
              value: (try_expression
                (call_expression
                  function: (identifier)
                  arguments: (arguments)))
              field: (field_identifier))
            arguments: (arguments)))))))

==================
Try on identifier
==================

fn main() {
    let val = result?;
}

---

(source_file
  (function_item
    name: (identifier)
    parameters: (parameters)
    body: (block
      (let_declaration
        pattern: (identifier)
        value: (try_expression
          (identifier))))))

==================
Try with field access
==================

fn main() {
    obj.field?;
}

---

(source_file
  (function_item
    name: (identifier)
    parameters: (parameters)
    body: (block
      (expression_statement
        (try_expression
          (field_expression
            value: (identifier)
            field: (field_identifier)))))))

==================
Try with index
==================

fn main() {
    items[0]?;
}

---

(source_file
  (function_item
    name: (identifier)
    parameters: (parameters)
    body: (block
      (expression_statement
        (try_expression
          (index_expression
            (identifier)
            (integer_literal)))))))
