// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_function_invocation(exprtk::ifunction<double>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
inline expression_node_ptr parse_function_invocation(ifunction<T>* function, const std::string& function_name)
      {
         expression_node_ptr func_node = reinterpret_cast<expression_node_ptr>(0);

         switch (function->param_count)
         {
            case  0 : func_node = parse_function_call_0  (function,function_name); break;
            case  1 : func_node = parse_function_call< 1>(function,function_name); break;
            case  2 : func_node = parse_function_call< 2>(function,function_name); break;
            case  3 : func_node = parse_function_call< 3>(function,function_name); break;
            case  4 : func_node = parse_function_call< 4>(function,function_name); break;
            case  5 : func_node = parse_function_call< 5>(function,function_name); break;
            case  6 : func_node = parse_function_call< 6>(function,function_name); break;
            case  7 : func_node = parse_function_call< 7>(function,function_name); break;
            case  8 : func_node = parse_function_call< 8>(function,function_name); break;
            case  9 : func_node = parse_function_call< 9>(function,function_name); break;
            case 10 : func_node = parse_function_call<10>(function,function_name); break;
            case 11 : func_node = parse_function_call<11>(function,function_name); break;
            case 12 : func_node = parse_function_call<12>(function,function_name); break;
            case 13 : func_node = parse_function_call<13>(function,function_name); break;
            case 14 : func_node = parse_function_call<14>(function,function_name); break;
            case 15 : func_node = parse_function_call<15>(function,function_name); break;
            case 16 : func_node = parse_function_call<16>(function,function_name); break;
            case 17 : func_node = parse_function_call<17>(function,function_name); break;
            case 18 : func_node = parse_function_call<18>(function,function_name); break;
            case 19 : func_node = parse_function_call<19>(function,function_name); break;
            case 20 : func_node = parse_function_call<20>(function,function_name); break;
            default : {
                         set_error(make_error(
                           parser_error::e_syntax,
                           current_token(),
                           "ERR021 - Invalid number of parameters for function: '" + function_name + "'",
                           exprtk_error_location));

                         return error_node();
                      }
         }

         if (func_node)
            return func_node;
         else
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR022 - Failed to generate call to function: '" + function_name + "'",
               exprtk_error_location));

            return error_node();
         }
      }

// Assembly:
subq $0x2b8, %rsp            # imm = 0x2B8
movq %rdi, 0x2a8(%rsp)
movq %rsi, 0x2a0(%rsp)
movq %rdx, 0x298(%rsp)
movq 0x2a8(%rsp), %rax
movq %rax, 0x20(%rsp)
movq $0x0, 0x290(%rsp)
movq 0x2a0(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x28(%rsp)
subq $0x14, %rax
ja 0x52a12b
movq 0x28(%rsp), %rax
leaq 0x76525(%rip), %rcx     # 0x5a0314
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x52fa40
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x52fce0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x530770
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x531200
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x531c90
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x532720
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x5331b0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x533c40
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x5346d0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x535160
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x535bf0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x536680
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x537110
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x537ba0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x538630
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x5390c0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x539b50
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x53a5e0
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x53b070
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x53bb00
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
movq 0x2a0(%rsp), %rsi
movq 0x298(%rsp), %rdx
callq 0x53c590
movq %rax, 0x290(%rsp)
jmp 0x52a2ed
movq 0x20(%rsp), %rdi
callq 0x373e90
movq %rax, 0x10(%rsp)
movq 0x298(%rsp), %rdx
leaq 0x806b8(%rip), %rsi     # 0x5aa801
leaq 0x1a8(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x3784f0
movq 0x18(%rsp), %rsi
leaq 0x7f94a(%rip), %rdx     # 0x5a9ab1
leaq 0x1c8(%rsp), %rdi
callq 0x29dc30
jmp 0x52a176
leaq 0x158(%rsp), %rdi
movl $0x64e6, %esi           # imm = 0x64E6
callq 0x371f20
jmp 0x52a18a
leaq 0x7cd82(%rip), %rsi     # 0x5a6f13
leaq 0x178(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x29dd70
jmp 0x52a1a8
movq 0x10(%rsp), %rdx
leaq 0x1e8(%rsp), %rdi
movl $0x1, %esi
leaq 0x1c8(%rsp), %rcx
leaq 0x178(%rsp), %r8
callq 0x3741e0
jmp 0x52a1d1
movq 0x20(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x371e40
jmp 0x52a1e5
leaq 0x1e8(%rsp), %rdi
callq 0x371330
leaq 0x178(%rsp), %rdi
callq 0x11b838
leaq 0x158(%rsp), %rdi
callq 0x11b838
leaq 0x1c8(%rsp), %rdi
callq 0x11b838
leaq 0x1a8(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x2b0(%rsp)
jmp 0x52a4a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a2db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a2ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a2c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a2b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0x371330
leaq 0x178(%rsp), %rdi
callq 0x11b838
leaq 0x158(%rsp), %rdi
callq 0x11b838
leaq 0x1c8(%rsp), %rdi
callq 0x11b838
leaq 0x1a8(%rsp), %rdi
callq 0x11b838
jmp 0x52a4b9
cmpq $0x0, 0x290(%rsp)
je 0x52a30d
movq 0x290(%rsp), %rax
movq %rax, 0x2b0(%rsp)
jmp 0x52a4a9
movq 0x20(%rsp), %rdi
callq 0x373e90
movq %rax, (%rsp)
movq 0x298(%rsp), %rdx
leaq 0x8050d(%rip), %rsi     # 0x5aa837
leaq 0x70(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x3784f0
movq 0x8(%rsp), %rsi
leaq 0x7f76c(%rip), %rdx     # 0x5a9ab1
leaq 0x90(%rsp), %rdi
callq 0x29dc30
jmp 0x52a354
leaq 0x30(%rsp), %rdi
movl $0x64f4, %esi           # imm = 0x64F4
callq 0x371f20
jmp 0x52a365
leaq 0x7cba7(%rip), %rsi     # 0x5a6f13
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x29dd70
jmp 0x52a37d
movq (%rsp), %rdx
leaq 0xb0(%rsp), %rdi
movl $0x1, %esi
leaq 0x90(%rsp), %rcx
leaq 0x50(%rsp), %r8
callq 0x3741e0
jmp 0x52a3a2
movq 0x20(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x371e40
jmp 0x52a3b6
leaq 0xb0(%rsp), %rdi
callq 0x371330
leaq 0x50(%rsp), %rdi
callq 0x11b838
leaq 0x30(%rsp), %rdi
callq 0x11b838
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0x70(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x2b0(%rsp)
jmp 0x52a4a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a49d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a490
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a486
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
jmp 0x52a47c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1a0(%rsp)
movl %eax, 0x19c(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x371330
leaq 0x50(%rsp), %rdi
callq 0x11b838
leaq 0x30(%rsp), %rdi
callq 0x11b838
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0x70(%rsp), %rdi
callq 0x11b838
jmp 0x52a4b9
movq 0x2b0(%rsp), %rax
addq $0x2b8, %rsp            # imm = 0x2B8
retq
movq 0x1a0(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)