// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::expression_generator<double>::switch_statement<std::allocator<exprtk::details::expression_node<double>*>, std::vector>(std::vector<exprtk::details::expression_node<double>*, std::allocator<exprtk::details::expression_node<double>*>>&, bool)
inline expression_node_ptr switch_statement(Sequence<expression_node_ptr,Allocator>& arg_list, const bool default_statement_present)
         {
            if (arg_list.empty())
               return error_node();
            else if (
                      !all_nodes_valid(arg_list) ||
                      (!default_statement_present && (arg_list.size() < 2))
                    )
            {
               details::free_all_nodes(*node_allocator_,arg_list);

               return error_node();
            }
            else if (is_constant_foldable(arg_list))
               return const_optimise_switch(arg_list);

            switch ((arg_list.size() - 1) / 2)
            {
               #define case_stmt(N)                                                       \
               case N :                                                                   \
                  return node_allocator_->                                                \
                            allocate<details::switch_n_node                               \
                              <Type,typename switch_nodes::switch_impl_##N > >(arg_list); \

               case_stmt(1)
               case_stmt(2)
               case_stmt(3)
               case_stmt(4)
               case_stmt(5)
               case_stmt(6)
               case_stmt(7)
               #undef case_stmt

               default : return node_allocator_->allocate<details::switch_node<Type> >(arg_list);
            }
         }

// Assembly:
subq $0x38, %rsp
movb %dl, %al
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
andb $0x1, %al
movb %al, 0x1f(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x20(%rsp), %rdi
callq 0x37d750
testb $0x1, %al
jne 0x4ebf80
jmp 0x4ebf8f
callq 0x2821f0
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x20(%rsp), %rdi
callq 0x39cd40
testb $0x1, %al
jne 0x4ebf9f
jmp 0x4ebfb6
testb $0x1, 0x1f(%rsp)
jne 0x4ebfd8
movq 0x20(%rsp), %rdi
callq 0x39d0d0
cmpq $0x2, %rax
jae 0x4ebfd8
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x39cdc0
callq 0x2821f0
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x39ce40
testb $0x1, %al
jne 0x4ebfed
jmp 0x4ec006
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ec810
movq %rax, 0x30(%rsp)
jmp 0x4ec118
jmp 0x4ec008
jmp 0x4ec00a
movq 0x20(%rsp), %rdi
callq 0x39d0d0
decq %rax
shrq %rax
decq %rax
movq %rax, 0x8(%rsp)
subq $0x6, %rax
ja 0x4ec100
movq 0x8(%rsp), %rax
leaq 0xb3e00(%rip), %rcx     # 0x59fe38
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ec970
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ec9f0
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4eca70
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ecaf0
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ecb70
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ecbf0
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4ecc70
movq %rax, 0x30(%rsp)
jmp 0x4ec118
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x4eccf0
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)