# File kwartz.rb, line 3536
        def parse_stmt_macro
            Kwartz::assert() unless token() == :macro || token() == :elem
            scan()
            _syntaxerr("':macro' requires '('.") unless token() == '('
            scan()
            name_expr = parse_expression()
            _syntaxerr("':macro(' is not closed.") unless token() == ')'
            scan()
            _syntaxerr("':macro' requires a name.") unless name_expr.token == :variable
            name = name_expr.left
            nodelist = parse_stmt_list()
            _syntaxerr("':macro' is not closed by ':end'.") unless token() == :end
            scan()
            return MacroStmtNode.new(:macro, name, nodelist)
        end