// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::parse_function_call<1ul>(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:
subq $0x5d8, %rsp            # imm = 0x5D8
movq %rdi, 0x5c8(%rsp)
movq %rsi, 0x5c0(%rsp)
movq %rdx, 0x5b8(%rsp)
movq 0x5c8(%rsp), %rax
movq %rax, 0x58(%rsp)
callq 0x2821f0
movq %rax, 0x5a8(%rsp)
movq $0x0, 0x5a0(%rsp)
leaq 0x5b0(%rsp), %rdi
movq %rdi, 0x50(%rsp)
movl $0x1, %esi
leaq 0x5a0(%rsp), %rdx
callq 0x3af2d0
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rsi
leaq 0x588(%rsp), %rdi
callq 0x53d220
movq 0x58(%rsp), %rdi
callq 0x373690
jmp 0x52fd67
movq 0x58(%rsp), %rdi
movl $0x28, 0x578(%rsp)
leaq 0x578(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x4f(%rsp)
jmp 0x52fd8f
movb 0x4f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x52fd9e
jmp 0x52ff86
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x40(%rsp)
jmp 0x52fdaf
movq 0x5b8(%rsp), %rdx
leaq 0x7aae0(%rip), %rsi     # 0x5aa89e
leaq 0x490(%rsp), %rdi
callq 0x3784f0
jmp 0x52fdcd
leaq 0x79cdd(%rip), %rdx     # 0x5a9ab1
leaq 0x4b0(%rsp), %rdi
leaq 0x490(%rsp), %rsi
callq 0x29dc30
jmp 0x52fdeb
leaq 0x450(%rsp), %rdi
movl $0x651e, %esi           # imm = 0x651E
callq 0x371f20
jmp 0x52fdff
leaq 0x7710d(%rip), %rsi     # 0x5a6f13
leaq 0x470(%rsp), %rdi
leaq 0x450(%rsp), %rdx
callq 0x29dd70
jmp 0x52fe1d
movq 0x40(%rsp), %rdx
leaq 0x4d0(%rsp), %rdi
movl $0x1, %esi
leaq 0x4b0(%rsp), %rcx
leaq 0x470(%rsp), %r8
callq 0x3741e0
jmp 0x52fe46
movq 0x58(%rsp), %rdi
leaq 0x4d0(%rsp), %rsi
callq 0x371e40
jmp 0x52fe5a
leaq 0x4d0(%rsp), %rdi
callq 0x371330
leaq 0x470(%rsp), %rdi
callq 0x11b838
leaq 0x450(%rsp), %rdi
callq 0x11b838
leaq 0x4b0(%rsp), %rdi
callq 0x11b838
leaq 0x490(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x5d0(%rsp)
movl $0x1, 0x44c(%rsp)
jmp 0x53072a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530747
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x52ff74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x52ff67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x52ff5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x52ff4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
leaq 0x4d0(%rsp), %rdi
callq 0x371330
leaq 0x470(%rsp), %rdi
callq 0x11b838
leaq 0x450(%rsp), %rdi
callq 0x11b838
leaq 0x4b0(%rsp), %rdi
callq 0x11b838
leaq 0x490(%rsp), %rdi
callq 0x11b838
jmp 0x530747
movl $0x0, 0x448(%rsp)
cmpl $0x1, 0x448(%rsp)
jge 0x5304ca
movq 0x58(%rsp), %rdi
xorl %esi, %esi
callq 0x379940
movq %rax, 0x38(%rsp)
jmp 0x52ffb2
movq 0x38(%rsp), %rcx
movslq 0x448(%rsp), %rax
movq %rcx, 0x5b0(%rsp,%rax,8)
movslq 0x448(%rsp), %rcx
xorl %eax, %eax
cmpq 0x5b0(%rsp,%rcx,8), %rax
jne 0x53029a
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x30(%rsp)
jmp 0x52fff0
movl 0x448(%rsp), %esi
leaq 0x300(%rsp), %rdi
callq 0x371f20
jmp 0x530006
leaq 0x7a8c2(%rip), %rsi     # 0x5aa8cf
leaq 0x320(%rsp), %rdi
leaq 0x300(%rsp), %rdx
callq 0x29dd70
jmp 0x530024
leaq 0x7a47c(%rip), %rdx     # 0x5aa4a7
leaq 0x340(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x29dc30
jmp 0x530042
movq 0x5b8(%rsp), %rdx
leaq 0x360(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x378400
jmp 0x530061
leaq 0x79a49(%rip), %rdx     # 0x5a9ab1
leaq 0x380(%rsp), %rdi
leaq 0x360(%rsp), %rsi
callq 0x29dc30
jmp 0x53007f
leaq 0x2c0(%rsp), %rdi
movl $0x652d, %esi           # imm = 0x652D
callq 0x371f20
jmp 0x530093
leaq 0x76e79(%rip), %rsi     # 0x5a6f13
leaq 0x2e0(%rsp), %rdi
leaq 0x2c0(%rsp), %rdx
callq 0x29dd70
jmp 0x5300b1
movq 0x30(%rsp), %rdx
leaq 0x3a0(%rsp), %rdi
movl $0x1, %esi
leaq 0x380(%rsp), %rcx
leaq 0x2e0(%rsp), %r8
callq 0x3741e0
jmp 0x5300da
movq 0x58(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x371e40
jmp 0x5300ee
leaq 0x3a0(%rsp), %rdi
callq 0x371330
leaq 0x2e0(%rsp), %rdi
callq 0x11b838
leaq 0x2c0(%rsp), %rdi
callq 0x11b838
leaq 0x380(%rsp), %rdi
callq 0x11b838
leaq 0x360(%rsp), %rdi
callq 0x11b838
leaq 0x340(%rsp), %rdi
callq 0x11b838
leaq 0x320(%rsp), %rdi
callq 0x11b838
leaq 0x300(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x5d0(%rsp)
movl $0x1, 0x44c(%rsp)
jmp 0x53072a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530288
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53027b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53026e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530261
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530254
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530247
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53023a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
leaq 0x3a0(%rsp), %rdi
callq 0x371330
leaq 0x2e0(%rsp), %rdi
callq 0x11b838
leaq 0x2c0(%rsp), %rdi
callq 0x11b838
leaq 0x380(%rsp), %rdi
callq 0x11b838
leaq 0x360(%rsp), %rdi
callq 0x11b838
leaq 0x340(%rsp), %rdi
callq 0x11b838
leaq 0x320(%rsp), %rdi
callq 0x11b838
leaq 0x300(%rsp), %rdi
callq 0x11b838
jmp 0x530747
cmpl $0x0, 0x448(%rsp)
jge 0x5304b0
movq 0x58(%rsp), %rdi
movl $0x2c, 0x2bc(%rsp)
leaq 0x2bc(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x2f(%rsp)
jmp 0x5302d0
movb 0x2f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5302df
jmp 0x5304ae
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x20(%rsp)
jmp 0x5302f0
movq 0x5b8(%rsp), %rdx
leaq 0x7a5f3(%rip), %rsi     # 0x5aa8f2
leaq 0x1d0(%rsp), %rdi
callq 0x3784f0
jmp 0x53030e
leaq 0x7979c(%rip), %rdx     # 0x5a9ab1
leaq 0x1f0(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x29dc30
jmp 0x53032c
leaq 0x190(%rsp), %rdi
movl $0x6539, %esi           # imm = 0x6539
callq 0x371f20
jmp 0x530340
leaq 0x76bcc(%rip), %rsi     # 0x5a6f13
leaq 0x1b0(%rsp), %rdi
leaq 0x190(%rsp), %rdx
callq 0x29dd70
jmp 0x53035e
movq 0x20(%rsp), %rdx
leaq 0x210(%rsp), %rdi
movl $0x1, %esi
leaq 0x1f0(%rsp), %rcx
leaq 0x1b0(%rsp), %r8
callq 0x3741e0
jmp 0x530387
movq 0x58(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x371e40
jmp 0x53039b
leaq 0x210(%rsp), %rdi
callq 0x371330
leaq 0x1b0(%rsp), %rdi
callq 0x11b838
leaq 0x190(%rsp), %rdi
callq 0x11b838
leaq 0x1f0(%rsp), %rdi
callq 0x11b838
leaq 0x1d0(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x5d0(%rsp)
movl $0x1, 0x44c(%rsp)
jmp 0x53072a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53049c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53048f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530482
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x530475
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x371330
leaq 0x1b0(%rsp), %rdi
callq 0x11b838
leaq 0x190(%rsp), %rdi
callq 0x11b838
leaq 0x1f0(%rsp), %rdi
callq 0x11b838
leaq 0x1d0(%rsp), %rdi
callq 0x11b838
jmp 0x530747
jmp 0x5304b0
jmp 0x5304b2
jmp 0x5304b4
movl 0x448(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x448(%rsp)
jmp 0x52ff91
movq 0x58(%rsp), %rdi
movl $0x29, 0x18c(%rsp)
leaq 0x18c(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x1f(%rsp)
jmp 0x5304f2
movb 0x1f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x530501
jmp 0x5306c4
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x10(%rsp)
jmp 0x530512
movq 0x5b8(%rsp), %rdx
leaq 0x7a406(%rip), %rsi     # 0x5aa927
leaq 0xa0(%rsp), %rdi
callq 0x3784f0
jmp 0x530530
leaq 0x7957a(%rip), %rdx     # 0x5a9ab1
leaq 0xc0(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x29dc30
jmp 0x53054e
leaq 0x60(%rsp), %rdi
movl $0x6546, %esi           # imm = 0x6546
callq 0x371f20
jmp 0x53055f
leaq 0x769ad(%rip), %rsi     # 0x5a6f13
leaq 0x80(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x29dd70
jmp 0x53057a
movq 0x10(%rsp), %rdx
leaq 0xe0(%rsp), %rdi
movl $0x1, %esi
leaq 0xc0(%rsp), %rcx
leaq 0x80(%rsp), %r8
callq 0x3741e0
jmp 0x5305a3
movq 0x58(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x371e40
jmp 0x5305b7
leaq 0xe0(%rsp), %rdi
callq 0x371330
leaq 0x80(%rsp), %rdi
callq 0x11b838
leaq 0x60(%rsp), %rdi
callq 0x11b838
leaq 0xc0(%rsp), %rdi
callq 0x11b838
leaq 0xa0(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x5d0(%rsp)
movl $0x1, 0x44c(%rsp)
jmp 0x53072a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x5306b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x5306a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53069b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
jmp 0x53068e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x580(%rsp)
movl %eax, 0x57c(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x371330
leaq 0x80(%rsp), %rdi
callq 0x11b838
leaq 0x60(%rsp), %rdi
callq 0x11b838
leaq 0xc0(%rsp), %rdi
callq 0x11b838
leaq 0xa0(%rsp), %rdi
callq 0x11b838
jmp 0x530747
movq 0x58(%rsp), %rdi
addq $0x220, %rdi            # imm = 0x220
movq 0x5c0(%rsp), %rsi
leaq 0x5b0(%rsp), %rdx
callq 0x53d250
movq %rax, 0x8(%rsp)
jmp 0x5306ec
movq 0x8(%rsp), %rax
movq %rax, 0x5a8(%rsp)
xorl %eax, %eax
cmpq 0x5a8(%rsp), %rax
sete %al
andb $0x1, %al
movb %al, 0x588(%rsp)
movq 0x5a8(%rsp), %rax
movq %rax, 0x5d0(%rsp)
movl $0x1, 0x44c(%rsp)
leaq 0x588(%rsp), %rdi
callq 0x53d610
movq 0x5d0(%rsp), %rax
addq $0x5d8, %rsp            # imm = 0x5D8
retq
leaq 0x588(%rsp), %rdi
callq 0x53d610
movq 0x580(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)