// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::function_compositor<double>::base_func::setup(exprtk::expression<double>&)
inline function_t& setup(expression_t& expr)
         {
            expression = expr;

            typedef typename expression_t::control_block  ctrlblk_t;
            typedef typename ctrlblk_t::local_data_list_t ldl_t;
            typedef typename ctrlblk_t::data_type         data_t;
            typedef typename ldl_t::value_type            ldl_value_type;

            const ldl_t ldl = expr.local_data_list();

            std::vector<std::pair<std::size_t,data_t> > index_list;

            for (std::size_t i = 0; i < ldl.size(); ++i)
            {
               exprtk_debug(("base_func::setup() - element[%02d] type: %s size: %d\n",
                             static_cast<int>(i),
                             expression_t::control_block::to_str(ldl[i].type).c_str(),
                             static_cast<int>(ldl[i].size)));

               switch (ldl[i].type)
               {
                  case ctrlblk_t::e_unknown   : continue;
                  case ctrlblk_t::e_expr      : continue;
                  case ctrlblk_t::e_vecholder : continue;
                  default                     : break;
               }

               if (ldl[i].size)
               {
                  index_list.push_back(std::make_pair(i,ldl[i].type));
               }
            }

            std::size_t input_param_count = 0;

            for (std::size_t i = 0; i < index_list.size(); ++i)
            {
               const std::size_t index         = index_list[i].first;
               const ldl_value_type& local_var = ldl[index];

               assert(local_var.pointer);

               if (i < (index_list.size() - v.size()))
               {
                  if (local_var.type == ctrlblk_t::e_string)
                  {
                     local_str_vars.push_back(
                        reinterpret_cast<std::string*>(local_var.pointer));
                  }
                  else if (
                            (local_var.type == ctrlblk_t::e_data   ) ||
                            (local_var.type == ctrlblk_t::e_vecdata)
                          )
                  {
                     local_vars.push_back(std::make_pair(
                        reinterpret_cast<T*>(local_var.pointer),
                        local_var.size));

                     local_var_stack_size += local_var.size;
                  }
               }
               else
               {
                  v[input_param_count++] = reinterpret_cast<T*>(local_var.pointer);
               }
            }

            clear_stack();

            return (*this);
         }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rsi, %r14
movq %rdi, %rbx
addq $0x28, %rdi
callq 0x2c8544
movq %r14, %rdi
callq 0x2cb0a0
leaq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x2cb112
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %r14
movaps %xmm0, (%r14)
andq $0x0, 0x10(%r14)
pushq $0x10
popq %r12
xorl %r13d, %r13d
pushq $0x18
popq %rbp
movq %rsp, %r15
movq 0x18(%rsp), %rcx
movq 0x20(%rsp), %rax
subq %rcx, %rax
cqto
idivq %rbp
cmpq %rax, %r13
jae 0x2c7b76
movl -0x8(%rcx,%r12), %eax
cmpl $0x3, %eax
jb 0x2c7b6d
cmpq $0x0, (%rcx,%r12)
je 0x2c7b6d
movq %r13, (%rsp)
movl %eax, 0x8(%rsp)
movq %r14, %rdi
movq %r15, %rsi
callq 0x2cb1c0
incq %r13
addq $0x18, %r12
jmp 0x2c7b32
leaq 0x60(%rbx), %r14
leaq 0x78(%rbx), %rax
movq %rax, 0x10(%rsp)
xorl %r13d, %r13d
xorl %ebp, %ebp
xorl %r15d, %r15d
movq 0x30(%rsp), %rcx
movq 0x38(%rsp), %rax
subq %rcx, %rax
sarq $0x4, %rax
cmpq %rax, %r15
jae 0x2c7c31
imulq $0x18, (%rcx,%r13), %r12
addq 0x18(%rsp), %r12
movq 0x48(%rbx), %rcx
movq 0x50(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
subq %rdx, %rax
cmpq %rax, %r15
jae 0x2c7bfe
movl 0x8(%r12), %eax
leal -0x3(%rax), %ecx
cmpl $0x2, %ecx
jae 0x2c7c15
movq (%r12), %rax
movq 0x10(%r12), %rcx
movq %rax, (%rsp)
movq %rcx, 0x8(%rsp)
movq %r14, %rdi
movq %rsp, %rsi
callq 0x2cb4a2
movq 0x10(%r12), %rax
addq %rax, 0x90(%rbx)
jmp 0x2c7c09
movq (%r12), %rax
movq %rax, (%rcx,%rbp,8)
incq %rbp
incq %r15
addq $0x10, %r13
jmp 0x2c7b8b
cmpl $0x5, %eax
jne 0x2c7c09
movq (%r12), %rax
movq %rax, (%rsp)
movq 0x10(%rsp), %rdi
movq %rsp, %rsi
callq 0x2cb356
jmp 0x2c7c09
movq %rbx, %rdi
callq 0x2cb172
leaq 0x30(%rsp), %rdi
callq 0x2cb622
leaq 0x18(%rsp), %rdi
callq 0x198de4
movq %rbx, %rax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2c7c63
jmp 0x2c7c63
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x2cb622
leaq 0x18(%rsp), %rdi
callq 0x198de4
movq %rbx, %rdi
callq 0x118360