=======
typeset
=======

typeset Timer {
    function Action (Handle timer, Handle hndl);
    function Action (Handle timer);
}

---

(source_file
  (typeset
    name: (identifier)
    (typedef_expression
      returnType: (type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
    (typedef_expression
      returnType: (type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
  )
)


=============================
typeset with ending semicolon
=============================

typeset Timer {
    function Action (Handle timer, Handle hndl);
    function Action (Handle timer);
};

---

(source_file
  (typeset
    name: (identifier)
    (typedef_expression
      returnType: (type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
    (typedef_expression
      returnType: (type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
  )
)


=================================
typeset with wrapping parenthesis
=================================

typeset Timer {
    (function Action (Handle timer, Handle hndl));
    (function Action (Handle timer));
};

---

(source_file
  (typeset
    name: (identifier)
    (typedef_expression
      returnType: (type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
    (typedef_expression
      returnType: (type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
  )
)


========
funcenum
========

funcenum Timer {
  Action:public(Handle:Timer, Handle:hndl),
  Action:public(Handle:timer),
}

---

(source_file
  (funcenum
    name: (identifier)
    (funcenum_member
      returnType: (old_type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
    (funcenum_member
      returnType: (old_type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
  )
)


=======================
funcenum with semicolon
=======================

funcenum Timer {
  Action:public(Handle:Timer, Handle:hndl),
  Action:public(Handle:timer),
};

---

(source_file
  (funcenum
    name: (identifier)
    (funcenum_member
      returnType: (old_type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
    (funcenum_member
      returnType: (old_type
        (identifier)
      )
      parameters: (parameter_declarations
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
  )
)


=======================
funcenum no return type
=======================

funcenum Timer {
  public(Handle:Timer, Handle:hndl),
  public(Handle:timer),
}

---

(source_file
  (funcenum
    name: (identifier)
    (funcenum_member
      parameters: (parameter_declarations
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
    (funcenum_member
      parameters: (parameter_declarations
        (parameter_declaration
          type: (old_type
            (identifier)
          )
          name: (identifier)
        )
      )
    )
  )
)
