// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::expression_generator<double>::const_optimise_varargfunc<std::allocator<exprtk::details::expression_node<double>*>, std::vector>(exprtk::details::operator_type const&, std::vector<exprtk::details::expression_node<double>*, std::allocator<exprtk::details::expression_node<double>*>>&)
inline expression_node_ptr const_optimise_varargfunc(const details::operator_type& operation, Sequence<expression_node_ptr,Allocator>& arg_list)
         {
            expression_node_ptr temp_node = error_node();

            switch (operation)
            {
               #define case_stmt(op0, op1)                                                \
               case op0 : temp_node = node_allocator_->                                   \
                                         allocate<details::vararg_node<Type,op1<Type> > > \
                                            (arg_list);                                   \
                          break;                                                          \

               case_stmt(details::e_sum   , details::vararg_add_op  )
               case_stmt(details::e_prod  , details::vararg_mul_op  )
               case_stmt(details::e_avg   , details::vararg_avg_op  )
               case_stmt(details::e_min   , details::vararg_min_op  )
               case_stmt(details::e_max   , details::vararg_max_op  )
               case_stmt(details::e_mand  , details::vararg_mand_op )
               case_stmt(details::e_mor   , details::vararg_mor_op  )
               case_stmt(details::e_multi , details::vararg_multi_op)
               #undef case_stmt
               default : return error_node();
            }

            const T v = temp_node->value();

            details::free_node(*node_allocator_,temp_node);

            return node_allocator_->allocate<literal_node_t>(v);
         }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movq %rsi, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x8(%rsp)
callq 0x2821f0
movq %rax, 0x20(%rsp)
movq 0x30(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x14(%rsp)
subl $0x9, %eax
je 0x39f388
jmp 0x39f2cd
movl 0x14(%rsp), %eax
subl $0xa, %eax
je 0x39f3a2
jmp 0x39f2dc
movl 0x14(%rsp), %eax
subl $0xb, %eax
je 0x39f36b
jmp 0x39f2eb
movl 0x14(%rsp), %eax
subl $0xc, %eax
je 0x39f331
jmp 0x39f2f6
movl 0x14(%rsp), %eax
subl $0xd, %eax
je 0x39f34e
jmp 0x39f301
movl 0x14(%rsp), %eax
subl $0x1c, %eax
je 0x39f3bc
jmp 0x39f310
movl 0x14(%rsp), %eax
subl $0x1d, %eax
je 0x39f3d6
jmp 0x39f31f
movl 0x14(%rsp), %eax
subl $0x5a, %eax
je 0x39f3f0
jmp 0x39f40a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39f990
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fa10
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fa90
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fb10
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fb90
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fc10
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fc90
movq %rax, 0x20(%rsp)
jmp 0x39f416
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x28(%rsp), %rsi
callq 0x39fd10
movq %rax, 0x20(%rsp)
jmp 0x39f416
callq 0x2821f0
movq %rax, 0x40(%rsp)
jmp 0x39f452
movq 0x20(%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq 0x8(%rsp), %rax
movsd %xmm0, 0x18(%rsp)
movq 0x8(%rax), %rdi
leaq 0x20(%rsp), %rsi
callq 0x284bd0
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x18(%rsp), %rsi
callq 0x285670
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
addq $0x48, %rsp
retq
nopl (%rax)