// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::parse_function_call<3ul>(exprtk::ifunction<double>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
inline expression_node_ptr parse_function_call(ifunction<T>* function, const std::string& function_name)
      {
         #ifdef _MSC_VER
            #pragma warning(push)
            #pragma warning(disable: 4127)
         #endif
         if (0 == NumberofParameters)
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR023 - Expecting ifunction '" + function_name + "' to have non-zero parameter count",
               exprtk_error_location));

            return error_node();
         }
         #ifdef _MSC_VER
            #pragma warning(pop)
         #endif

         expression_node_ptr branch[NumberofParameters];
         expression_node_ptr result  = error_node();

         std::fill_n(branch, NumberofParameters, reinterpret_cast<expression_node_ptr>(0));

         scoped_delete<expression_node_t,NumberofParameters> sd((*this),branch);

         next_token();

         if (!token_is(token_t::e_lbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR024 - Expecting argument list for function: '" + function_name + "'",
               exprtk_error_location));

            return error_node();
         }

         for (int i = 0; i < static_cast<int>(NumberofParameters); ++i)
         {
            branch[i] = parse_expression();

            if (0 == branch[i])
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR025 - Failed to parse argument " + details::to_str(i) + " for function: '" + function_name + "'",
                  exprtk_error_location));

               return error_node();
            }
            else if (i < static_cast<int>(NumberofParameters - 1))
            {
               if (!token_is(token_t::e_comma))
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR026 - Invalid number of arguments for function: '" + function_name + "'",
                     exprtk_error_location));

                  return error_node();
               }
            }
         }

         if (!token_is(token_t::e_rbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR027 - Invalid number of arguments for function: '" + function_name + "'",
               exprtk_error_location));

            return error_node();
         }
         else
            result = expression_generator_.function(function,branch);

         sd.delete_ptr = (0 == result);

         return result;
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
xorl %eax, %eax
cmpq $0x18, %rax
je 0x2a761d
andq $0x0, 0xa0(%rsp,%rax)
addq $0x8, %rax
jmp 0x2a7608
movb $0x1, 0x88(%rsp)
movq %rbx, 0x90(%rsp)
leaq 0xa0(%rsp), %rax
movq %rax, 0x98(%rsp)
movq %rbx, %rdi
callq 0x1f6d68
leaq 0x120(%rsp), %rsi
movl $0x28, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x2a76c0
xorl %r12d, %r12d
leaq 0x120(%rsp), %r13
pushq $0x1
popq %rbp
cmpq $0x3, %r12
je 0x2a7779
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0xa0(%rsp,%r12,8)
testq %rax, %rax
je 0x2a77c7
cmpq $0x2, %r12
je 0x2a76bb
movl $0x2c, 0x120(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
movl %ebp, %edx
callq 0x1fae6e
testb %al, %al
je 0x2a799d
incq %r12
jmp 0x2a7670
leaq 0x35e98(%rip), %rsi     # 0x2dd55f
leaq 0x48(%rsp), %rdi
movq %r14, %rdx
callq 0x1f8aab
leaq 0x35097(%rip), %rdx     # 0x2dc772
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x1b42c3
leaq 0x8(%rsp), %rdi
movl $0x651e, %esi           # imm = 0x651E
callq 0x1f7a3c
leaq 0x324fb(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x68(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x68(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
jmp 0x2a78eb
leaq 0x120(%rsp), %rsi
movl $0x29, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x2a7914
addq $0x220, %rbx            # imm = 0x220
leaq 0xa0(%rsp), %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2adf80
movq %rax, %rbx
testq %rax, %rax
sete 0x88(%rsp)
jmp 0x2a78f2
leaq 0x100(%rsp), %rdi
movl %r12d, %esi
callq 0x1f7a3c
leaq 0x35db2(%rip), %rsi     # 0x2dd590
leaq 0x8(%rsp), %rdi
leaq 0x100(%rsp), %rdx
callq 0x1b4349
leaq 0x35971(%rip), %rdx     # 0x2dd168
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1b42c3
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
movq %r14, %rdx
callq 0x1f8a54
leaq 0x34f53(%rip), %rdx     # 0x2dc772
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x1b42c3
leaq 0xc0(%rsp), %rdi
movl $0x652d, %esi           # imm = 0x652D
callq 0x1f7a3c
leaq 0x323b4(%rip), %rsi     # 0x2d9bfb
leaq 0xe0(%rsp), %rdi
leaq 0xc0(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x68(%rsp), %rcx
leaq 0xe0(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
leaq 0xe0(%rsp), %rdi
callq 0x118648
leaq 0xc0(%rsp), %rdi
callq 0x118648
leaq 0x68(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x100(%rsp), %rdi
callq 0x118648
xorl %ebx, %ebx
leaq 0x88(%rsp), %rdi
callq 0x28fa38
movq %rbx, %rax
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x35ccd(%rip), %rsi     # 0x2dd5e8
leaq 0x48(%rsp), %rdi
movq %r14, %rdx
callq 0x1f8aab
leaq 0x34e43(%rip), %rdx     # 0x2dc772
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x1b42c3
leaq 0x8(%rsp), %rdi
movl $0x6546, %esi           # imm = 0x6546
callq 0x1f7a3c
leaq 0x322a7(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x68(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2a7744
leaq 0x35c0f(%rip), %rsi     # 0x2dd5b3
leaq 0x48(%rsp), %rdi
movq %r14, %rdx
callq 0x1f8aab
leaq 0x34dba(%rip), %rdx     # 0x2dc772
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x1b42c3
leaq 0x8(%rsp), %rdi
movl $0x6539, %esi           # imm = 0x6539
callq 0x1f7a3c
leaq 0x3221e(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x68(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2a7744
jmp 0x2a7ae5
jmp 0x2a7af7
jmp 0x2a7b06
jmp 0x2a7b15
jmp 0x2a7b24
jmp 0x2a7b3b
jmp 0x2a7ae5
jmp 0x2a7af7
jmp 0x2a7b06
jmp 0x2a7b15
jmp 0x2a7b24
jmp 0x2a7b3b
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2a7a77
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x118648
jmp 0x2a7a89
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x118648
jmp 0x2a7a9b
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x118648
jmp 0x2a7aaa
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x100(%rsp), %rdi
jmp 0x2a7b2c
movq %rax, %rbx
jmp 0x2a7ab4
movq %rax, %rbx
jmp 0x2a7abe
movq %rax, %rbx
jmp 0x2a7ac8
jmp 0x2a7b3b
jmp 0x2a7b3b
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2a7afa
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x2a7b09
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x2a7b18
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x118648
jmp 0x2a7b27
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
jmp 0x2a7b3e
jmp 0x2a7b3b
jmp 0x2a7b3b
jmp 0x2a7b3b
jmp 0x2a7b3b
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x28fa38
movq %rbx, %rdi
callq 0x118360
nop