// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: unsigned long exprtk::parser<double>::parse_base_function_call<4ul>(exprtk::details::expression_node<double>* (&) [4ul], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
inline std::size_t parse_base_function_call(expression_node_ptr (&param_list)[MaxNumberofParameters], const std::string& function_name = "")
      {
         std::fill_n(param_list, MaxNumberofParameters, reinterpret_cast<expression_node_ptr>(0));

         scoped_delete<expression_node_t,MaxNumberofParameters> sd((*this),param_list);

         next_token();

         if (!token_is(token_t::e_lbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR029 - Expected a '(' at start of function call to '" + function_name  +
               "', instead got: '" + current_token().value + "'",
               exprtk_error_location));

            return 0;
         }

         if (token_is(token_t::e_rbracket, e_hold))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR030 - Expected at least one input parameter for function call '" + function_name + "'",
               exprtk_error_location));

            return 0;
         }

         std::size_t param_index = 0;

         for (; param_index < MaxNumberofParameters; ++param_index)
         {
            param_list[param_index] = parse_expression();

            if (0 == param_list[param_index])
               return 0;
            else if (token_is(token_t::e_rbracket))
            {
               sd.delete_ptr = false;
               break;
            }
            else if (token_is(token_t::e_comma))
               continue;
            else
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR031 - Expected a ',' between function input parameters, instead got: '" + current_token().value + "'",
                  exprtk_error_location));

               return 0;
            }
         }

         if (sd.delete_ptr)
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR032 - Invalid number of input parameters passed to function '" + function_name  + "'",
               exprtk_error_location));

            return 0;
         }

         return (param_index + 1);
      }

// Assembly:
subq $0x5a8, %rsp            # imm = 0x5A8
movq %rdi, 0x598(%rsp)
movq %rsi, 0x590(%rsp)
movq %rdx, 0x588(%rsp)
movq 0x598(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x590(%rsp), %rdi
movq $0x0, 0x580(%rsp)
movl $0x4, %esi
leaq 0x580(%rsp), %rdx
callq 0x3af2d0
movq 0x58(%rsp), %rsi
movq 0x590(%rsp), %rdx
leaq 0x568(%rsp), %rdi
callq 0x3af330
movq 0x58(%rsp), %rdi
callq 0x373690
jmp 0x3acdf8
movq 0x58(%rsp), %rdi
movl $0x28, 0x558(%rsp)
leaq 0x558(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x57(%rsp)
jmp 0x3ace20
movb 0x57(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x3ace2f
jmp 0x3ad0cb
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x48(%rsp)
jmp 0x3ace40
movq 0x588(%rsp), %rdx
leaq 0x1faa73(%rip), %rsi    # 0x5a78c2
leaq 0x430(%rsp), %rdi
callq 0x3784f0
jmp 0x3ace5e
leaq 0x1faa94(%rip), %rdx    # 0x5a78f9
leaq 0x450(%rsp), %rdi
leaq 0x430(%rsp), %rsi
callq 0x29dc30
jmp 0x3ace7c
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x40(%rsp)
jmp 0x3ace8d
movq 0x40(%rsp), %rdx
addq $0x8, %rdx
leaq 0x470(%rsp), %rdi
leaq 0x450(%rsp), %rsi
callq 0x378400
jmp 0x3acead
leaq 0x1fcbfd(%rip), %rdx    # 0x5a9ab1
leaq 0x490(%rsp), %rdi
leaq 0x470(%rsp), %rsi
callq 0x29dc30
jmp 0x3acecb
leaq 0x3f0(%rsp), %rdi
movl $0x657d, %esi           # imm = 0x657D
callq 0x371f20
jmp 0x3acedf
leaq 0x1fa02d(%rip), %rsi    # 0x5a6f13
leaq 0x410(%rsp), %rdi
leaq 0x3f0(%rsp), %rdx
callq 0x29dd70
jmp 0x3acefd
movq 0x48(%rsp), %rdx
leaq 0x4b0(%rsp), %rdi
movl $0x1, %esi
leaq 0x490(%rsp), %rcx
leaq 0x410(%rsp), %r8
callq 0x3741e0
jmp 0x3acf26
movq 0x58(%rsp), %rdi
leaq 0x4b0(%rsp), %rsi
callq 0x371e40
jmp 0x3acf3a
leaq 0x4b0(%rsp), %rdi
callq 0x371330
leaq 0x410(%rsp), %rdi
callq 0x11b838
leaq 0x3f0(%rsp), %rdi
callq 0x11b838
leaq 0x490(%rsp), %rdi
callq 0x11b838
leaq 0x470(%rsp), %rdi
callq 0x11b838
leaq 0x450(%rsp), %rdi
callq 0x11b838
leaq 0x430(%rsp), %rdi
callq 0x11b838
movq $0x0, 0x5a0(%rsp)
movl $0x1, 0x3ec(%rsp)
jmp 0x3ad7a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad7be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad0b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad0ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad09f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad092
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad085
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad078
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
leaq 0x4b0(%rsp), %rdi
callq 0x371330
leaq 0x410(%rsp), %rdi
callq 0x11b838
leaq 0x3f0(%rsp), %rdi
callq 0x11b838
leaq 0x490(%rsp), %rdi
callq 0x11b838
leaq 0x470(%rsp), %rdi
callq 0x11b838
leaq 0x450(%rsp), %rdi
callq 0x11b838
leaq 0x430(%rsp), %rdi
callq 0x11b838
jmp 0x3ad7be
movq 0x58(%rsp), %rdi
movl $0x29, 0x3e8(%rsp)
leaq 0x3e8(%rsp), %rsi
xorl %edx, %edx
callq 0x37d640
movb %al, 0x3f(%rsp)
jmp 0x3ad0f0
movb 0x3f(%rsp), %al
testb $0x1, %al
jne 0x3ad0fd
jmp 0x3ad2cb
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x30(%rsp)
jmp 0x3ad10e
movq 0x588(%rsp), %rdx
leaq 0x1fa7ee(%rip), %rsi    # 0x5a790b
leaq 0x300(%rsp), %rdi
callq 0x3784f0
jmp 0x3ad12c
leaq 0x1fc97e(%rip), %rdx    # 0x5a9ab1
leaq 0x320(%rsp), %rdi
leaq 0x300(%rsp), %rsi
callq 0x29dc30
jmp 0x3ad14a
leaq 0x2c0(%rsp), %rdi
movl $0x6588, %esi           # imm = 0x6588
callq 0x371f20
jmp 0x3ad15e
leaq 0x1f9dae(%rip), %rsi    # 0x5a6f13
leaq 0x2e0(%rsp), %rdi
leaq 0x2c0(%rsp), %rdx
callq 0x29dd70
jmp 0x3ad17c
movq 0x30(%rsp), %rdx
leaq 0x340(%rsp), %rdi
movl $0x1, %esi
leaq 0x320(%rsp), %rcx
leaq 0x2e0(%rsp), %r8
callq 0x3741e0
jmp 0x3ad1a5
movq 0x58(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x371e40
jmp 0x3ad1b9
leaq 0x340(%rsp), %rdi
callq 0x371330
leaq 0x2e0(%rsp), %rdi
callq 0x11b838
leaq 0x2c0(%rsp), %rdi
callq 0x11b838
leaq 0x320(%rsp), %rdi
callq 0x11b838
leaq 0x300(%rsp), %rdi
callq 0x11b838
movq $0x0, 0x5a0(%rsp)
movl $0x1, 0x3ec(%rsp)
jmp 0x3ad7a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad2b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad2ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad29f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad292
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x371330
leaq 0x2e0(%rsp), %rdi
callq 0x11b838
leaq 0x2c0(%rsp), %rdi
callq 0x11b838
leaq 0x320(%rsp), %rdi
callq 0x11b838
leaq 0x300(%rsp), %rdi
callq 0x11b838
jmp 0x3ad7be
movq $0x0, 0x2b8(%rsp)
cmpq $0x4, 0x2b8(%rsp)
jae 0x3ad5b5
movq 0x58(%rsp), %rdi
xorl %esi, %esi
callq 0x379940
movq %rax, 0x28(%rsp)
jmp 0x3ad2f9
movq 0x28(%rsp), %rdx
movq 0x590(%rsp), %rax
movq 0x2b8(%rsp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x590(%rsp), %rcx
movq 0x2b8(%rsp), %rdx
xorl %eax, %eax
cmpq (%rcx,%rdx,8), %rax
jne 0x3ad346
movq $0x0, 0x5a0(%rsp)
movl $0x1, 0x3ec(%rsp)
jmp 0x3ad7a1
movq 0x58(%rsp), %rdi
movl $0x29, 0x2b4(%rsp)
leaq 0x2b4(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x27(%rsp)
jmp 0x3ad36e
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x3ad378
jmp 0x3ad385
movb $0x0, 0x568(%rsp)
jmp 0x3ad5b5
movq 0x58(%rsp), %rdi
movl $0x2c, 0x2b0(%rsp)
leaq 0x2b0(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x26(%rsp)
jmp 0x3ad3ad
movb 0x26(%rsp), %al
testb $0x1, %al
jne 0x3ad3b7
jmp 0x3ad3bc
jmp 0x3ad59c
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x18(%rsp)
jmp 0x3ad3cd
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x10(%rsp)
jmp 0x3ad3de
movq 0x10(%rsp), %rdx
addq $0x8, %rdx
leaq 0x1fa560(%rip), %rsi    # 0x5a794e
leaq 0x1c8(%rsp), %rdi
callq 0x3784f0
jmp 0x3ad3fd
leaq 0x1fc6ad(%rip), %rdx    # 0x5a9ab1
leaq 0x1e8(%rsp), %rdi
leaq 0x1c8(%rsp), %rsi
callq 0x29dc30
jmp 0x3ad41b
leaq 0x188(%rsp), %rdi
movl $0x65a2, %esi           # imm = 0x65A2
callq 0x371f20
jmp 0x3ad42f
leaq 0x1f9add(%rip), %rsi    # 0x5a6f13
leaq 0x1a8(%rsp), %rdi
leaq 0x188(%rsp), %rdx
callq 0x29dd70
jmp 0x3ad44d
movq 0x18(%rsp), %rdx
leaq 0x208(%rsp), %rdi
movl $0x1, %esi
leaq 0x1e8(%rsp), %rcx
leaq 0x1a8(%rsp), %r8
callq 0x3741e0
jmp 0x3ad476
movq 0x58(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x371e40
jmp 0x3ad48a
leaq 0x208(%rsp), %rdi
callq 0x371330
leaq 0x1a8(%rsp), %rdi
callq 0x11b838
leaq 0x188(%rsp), %rdi
callq 0x11b838
leaq 0x1e8(%rsp), %rdi
callq 0x11b838
leaq 0x1c8(%rsp), %rdi
callq 0x11b838
movq $0x0, 0x5a0(%rsp)
movl $0x1, 0x3ec(%rsp)
jmp 0x3ad7a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad58a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad57d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad570
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad563
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x371330
leaq 0x1a8(%rsp), %rdi
callq 0x11b838
leaq 0x188(%rsp), %rdi
callq 0x11b838
leaq 0x1e8(%rsp), %rdi
callq 0x11b838
leaq 0x1c8(%rsp), %rdi
callq 0x11b838
jmp 0x3ad7be
movq 0x2b8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x2b8(%rsp)
jmp 0x3ad2d7
testb $0x1, 0x568(%rsp)
je 0x3ad782
movq 0x58(%rsp), %rdi
callq 0x373e90
movq %rax, 0x8(%rsp)
jmp 0x3ad5d4
movq 0x588(%rsp), %rdx
leaq 0x1fa3b5(%rip), %rsi    # 0x5a7998
leaq 0xa0(%rsp), %rdi
callq 0x3784f0
jmp 0x3ad5f2
leaq 0x1fc4b8(%rip), %rdx    # 0x5a9ab1
leaq 0xc0(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x29dc30
jmp 0x3ad610
leaq 0x60(%rsp), %rdi
movl $0x65ae, %esi           # imm = 0x65AE
callq 0x371f20
jmp 0x3ad621
leaq 0x1f98eb(%rip), %rsi    # 0x5a6f13
leaq 0x80(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x29dd70
jmp 0x3ad63c
movq 0x8(%rsp), %rdx
leaq 0xe0(%rsp), %rdi
movl $0x1, %esi
leaq 0xc0(%rsp), %rcx
leaq 0x80(%rsp), %r8
callq 0x3741e0
jmp 0x3ad665
movq 0x58(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x371e40
jmp 0x3ad679
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
movq $0x0, 0x5a0(%rsp)
movl $0x1, 0x3ec(%rsp)
jmp 0x3ad7a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad773
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad766
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad75c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%rsp)
jmp 0x3ad74f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x560(%rsp)
movl %eax, 0x55c(%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 0x3ad7be
movq 0x2b8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x5a0(%rsp)
movl $0x1, 0x3ec(%rsp)
leaq 0x568(%rsp), %rdi
callq 0x3af360
movq 0x5a0(%rsp), %rax
addq $0x5a8, %rsp            # imm = 0x5A8
retq
leaq 0x568(%rsp), %rdi
callq 0x3af360
movq 0x560(%rsp), %rdi
callq 0x11b4e0
nopl (%rax,%rax)