==================
empty struct dec
==================

struct Empty = {}

---

(source_file
  (statement
    (struct_declaration
      (struct_identifier))))


==================
simple struct dec
==================

struct Person = {
	str name,
	int age,
}

---

(source_file
  (statement
    (struct_declaration
      (struct_identifier)
      (struct_field
        (type)
        (identifier))
      (struct_field
        (type)
        (identifier)))))

	
==================
struct var declaration
==================

Person jog = {
	name: "jogua",
	age: 82,
}

---

(source_file
  (statement
    (variable_declaration
      (type
        (struct_identifier))
      (identifier)
      (expression
        (map_literal
          (map_entry
            (expression
              (identifier))
            (expression
              (string_literal)))
          (map_entry
            (expression
              (identifier))
            (expression
              (int_literal))))))))


==================
member access
==================

str name = jog.name

---

(source_file
  (statement
    (variable_declaration
      (type)
      (identifier)
      (expression
        (member_access
          (expression
            (identifier))
          (num_identifier))))))


==================
struct with methods
==================

struct Frog = {
  int position_y,
  int jump_height,
  void() jump = (self) {
    self.position_y += self.jump_height
  }
}

---

(source_file
  (statement
    (struct_declaration
      (struct_identifier)
      (struct_field
        (type)
        (identifier))
      (struct_field
        (type)
        (identifier))
      (struct_method
        (function_type
          (type)
          (parameter_list))
        (identifier)
        (function_literal
          (parameter_declaration
            (identifier))
          (block
            (statement
              (variable_assignment
                (expression
                  (member_access
                    (expression
                      (identifier))
                    (num_identifier)))
                (assignment_operator)
                (expression
                  (member_access
                    (expression
                      (identifier))
                    (num_identifier)))))))))))

