====================================================== 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) ) ) ) ================================ 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) ) ) )