// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_base_operation()
inline expression_node_ptr parse_base_operation()
      {
         typedef std::pair<base_ops_map_t::iterator,base_ops_map_t::iterator> map_range_t;

         const std::string operation_name   = current_token().value;
         const token_t     diagnostic_token = current_token();

         map_range_t itr_range = base_ops_map_.equal_range(operation_name);

         if (0 == std::distance(itr_range.first,itr_range.second))
         {
            set_error(make_error(
               parser_error::e_syntax,
               diagnostic_token,
               "ERR033 - No entry found for base operation: " + operation_name,
               exprtk_error_location));

            return error_node();
         }

         static const std::size_t MaxNumberofParameters = 4;
         expression_node_ptr param_list[MaxNumberofParameters] = {0};

         const std::size_t parameter_count = parse_base_function_call(param_list, operation_name);

         if ((parameter_count > 0) && (parameter_count <= MaxNumberofParameters))
         {
            for (base_ops_map_t::iterator itr = itr_range.first; itr != itr_range.second; ++itr)
            {
               const details::base_operation_t& operation = itr->second;

               if (operation.num_params == parameter_count)
               {
                  switch (parameter_count)
                  {
                     #define base_opr_case(N)                                         \
                     case N : {                                                       \
                                 expression_node_ptr pl##N[N] = {0};                  \
                                 std::copy(param_list, param_list + N, pl##N);        \
                                 lodge_symbol(operation_name, e_st_function);         \
                                 return expression_generator_(operation.type, pl##N); \
                              }                                                       \

                     base_opr_case(1)
                     base_opr_case(2)
                     base_opr_case(3)
                     base_opr_case(4)
                     #undef base_opr_case
                  }
               }
            }
         }

         for (std::size_t i = 0; i < MaxNumberofParameters; ++i)
         {
            free_node(node_allocator_, param_list[i]);
         }

         set_error(make_error(
            parser_error::e_syntax,
            diagnostic_token,
            "ERR034 - Invalid number of input parameters for call to function: '" + operation_name + "'",
            exprtk_error_location));

         return error_node();
      }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, %rbx
leaq 0x70(%rdi), %r14
leaq 0x78(%rdi), %rsi
leaq 0x20(%rsp), %rdi
callq 0x1182f0
leaq 0x170(%rsp), %rdi
movq %r14, %rsi
callq 0x19f4e6
leaq 0x3f0(%rbx), %rdi
leaq 0x20(%rsp), %rsi
callq 0x20e764
movq %rax, %r14
movq %rdx, %r15
movq %rax, %rdi
movq %rdx, %rsi
callq 0x20e8a3
testq %rax, %rax
je 0x1fea2f
xorps %xmm0, %xmm0
movq %rsp, %rsi
movaps %xmm0, 0x10(%rsi)
movaps %xmm0, (%rsi)
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x20d712
movq %rax, %r12
leaq -0x1(%rax), %r13
cmpq $0x3, %r13
ja 0x1fe93c
cmpq %r15, %r14
je 0x1fe93c
movl 0x44(%r14), %eax
cmpq %rax, %r12
je 0x1feaf5
movq %r14, %rdi
callq 0x118520
movq %rax, %r14
jmp 0x1fe91d
leaq 0x290(%rbx), %r14
xorl %r15d, %r15d
cmpq $0x20, %r15
je 0x1fe95e
leaq (%rsp,%r15), %rsi
movq %r14, %rdi
callq 0x1ad9c8
addq $0x8, %r15
jmp 0x1fe946
leaq 0xdbc01(%rip), %rsi     # 0x2da566
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0x1f8aab
leaq 0xdddf7(%rip), %rdx     # 0x2dc772
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x1b42c3
leaq 0x80(%rsp), %rdi
movl $0x65f4, %esi           # imm = 0x65F4
callq 0x1f7a3c
leaq 0xdb258(%rip), %rsi     # 0x2d9bfb
leaq 0xa0(%rsp), %rdi
leaq 0x80(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x170(%rsp), %rdx
leaq 0x60(%rsp), %rcx
leaq 0xa0(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
leaq 0xa0(%rsp), %rdi
callq 0x118648
leaq 0x80(%rsp), %rdi
callq 0x118648
leaq 0x60(%rsp), %rdi
callq 0x118648
leaq 0x40(%rsp), %rdi
jmp 0x1feac3
leaq 0xdbb03(%rip), %rsi     # 0x2da539
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
callq 0x1f8aab
leaq 0x40(%rsp), %rdi
movl $0x65c5, %esi           # imm = 0x65C5
callq 0x1f7a3c
leaq 0xdb1a2(%rip), %rsi     # 0x2d9bfb
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x170(%rsp), %rdx
movq %rsp, %rcx
leaq 0x60(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x60(%rsp), %rdi
callq 0x118648
leaq 0x40(%rsp), %rdi
callq 0x118648
movq %rsp, %rdi
callq 0x118648
xorl %ebx, %ebx
leaq 0x178(%rsp), %rdi
callq 0x118648
leaq 0x20(%rsp), %rdi
callq 0x118648
movq %rbx, %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
addq $0x40, %r14
leaq 0xd0f50(%rip), %rax     # 0x2cfa50
movslq (%rax,%r13,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq (%rsp), %rax
movq %rax, 0xc0(%rsp)
leaq 0x2b0(%rbx), %rdi
leaq 0x20(%rsp), %rsi
pushq $0x5
popq %rdx
callq 0x2089d0
addq $0x220, %rbx            # imm = 0x220
leaq 0xc0(%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x20dc2a
jmp 0x1fec17
movq 0x10(%rsp), %rax
movq %rax, 0xd0(%rsp)
movaps (%rsp), %xmm0
movaps %xmm0, 0xc0(%rsp)
leaq 0x2b0(%rbx), %rdi
leaq 0x20(%rsp), %rsi
pushq $0x5
popq %rdx
callq 0x2089d0
addq $0x220, %rbx            # imm = 0x220
leaq 0xc0(%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x20e48c
jmp 0x1fec17
movaps (%rsp), %xmm0
movaps 0x10(%rsp), %xmm1
movaps %xmm1, 0xd0(%rsp)
movaps %xmm0, 0xc0(%rsp)
leaq 0x2b0(%rbx), %rdi
leaq 0x20(%rsp), %rsi
pushq $0x5
popq %rdx
callq 0x2089d0
addq $0x220, %rbx            # imm = 0x220
leaq 0xc0(%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x288628
jmp 0x1fec17
movaps (%rsp), %xmm0
movaps %xmm0, 0xc0(%rsp)
leaq 0x2b0(%rbx), %rdi
leaq 0x20(%rsp), %rsi
pushq $0x5
popq %rdx
callq 0x2089d0
addq $0x220, %rbx            # imm = 0x220
leaq 0xc0(%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x20dd4a
movq %rax, %rbx
jmp 0x1feaca
jmp 0x1feccc
jmp 0x1feccc
jmp 0x1feccc
jmp 0x1feccc
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1fec48
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x118648
jmp 0x1fec57
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x118648
jmp 0x1fec66
movq %rax, %rbx
movq %rsp, %rdi
jmp 0x1fecba
jmp 0x1feccc
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1fec82
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x118648
jmp 0x1fec94
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0x118648
jmp 0x1feca6
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x118648
jmp 0x1fecb5
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x118648
jmp 0x1feccf
jmp 0x1feccc
jmp 0x1feccc
jmp 0x1feccc
movq %rax, %rbx
jmp 0x1fecdc
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
callq 0x118648
leaq 0x20(%rsp), %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118360