======================================================
Function definition with no arguments [block_commands]
======================================================

function(fn)
endfunction()

---

(source_file
  (function_def
    (function_command
      (function)
      (argument_list
        (argument
          (unquoted_argument))))
    (body)
    (endfunction_command
      (endfunction))))

========================================================
Function definition with many arguments [block_commands]
========================================================

function(fn arg1 arg2 arg3)
endfunction()

---

(source_file
  (function_def
    (function_command
      (function)
      (argument_list
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))))
    (body)
    (endfunction_command
      (endfunction))))

===================================================
Macro definition with no arguments [block_commands]
===================================================

macro(fn)
endmacro()

---

(source_file
  (macro_def
    (macro_command
      (macro)
      (argument_list
        (argument
          (unquoted_argument))))
    (body)
    (endmacro_command
      (endmacro))))

========================================================
macro definition with many arguments [block_commands]
========================================================

macro(fn arg1 arg2 arg3)
endmacro()

---

(source_file
  (macro_def
    (macro_command
      (macro)
      (argument_list
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))))
    (body)
    (endmacro_command
      (endmacro))))

============================
Block scope [block_commands]
============================

block(SCOPE_FOR POLICIES VARIABLES PROPAGATE var)
endblock()

---

(source_file
  (block_def
    (block_command
      (block)
      (argument_list
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))
        (argument
          (unquoted_argument))))
    (body)
    (endblock_command
      (endblock))))

========================================
Block with no arguments [block_commands]
========================================

block()
endblock()

---

(source_file
  (block_def
    (block_command
      (block))
    (body)
    (endblock_command
      (endblock))))

================================
Nested function [block_commands]
================================
function(a)
  function(b)
  endfunction()
endfunction()

---

(source_file
  (function_def
    (function_command
      (function)
      (argument_list
        (argument
          (unquoted_argument))))
    (body
      (function_def
        (function_command
          (function)
          (argument_list
            (argument
              (unquoted_argument))))
        (body)
        (endfunction_command
          (endfunction))))
    (endfunction_command
      (endfunction))))
