// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_igeneric_function_params(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::vector<exprtk::details::expression_node<double>*, std::allocator<exprtk::details::expression_node<double>*>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, exprtk::igeneric_function<double>*, exprtk::parser<double>::type_checker const&)
inline bool parse_igeneric_function_params(std::string& param_type_list,
                                                 std::vector<expression_node_ptr>& arg_list,
                                                 const std::string& function_name,
                                                 igeneric_function<T>* function,
                                                 const type_checker& tc)
      {
         if (token_is(token_t::e_lbracket))
         {
            if (token_is(token_t::e_rbracket))
            {
               if (
                    !function->allow_zero_parameters() &&
                    !tc       .allow_zero_parameters()
                  )
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR141 - Zero parameter call to generic function: "
                     + function_name + " not allowed",
                     exprtk_error_location));

                  return false;
               }
            }
            else
            {
               for ( ; ; )
               {
                  expression_node_ptr arg = parse_expression();

                  if (0 == arg)
                     return false;

                  if (is_ivector_node(arg))
                     param_type_list += 'V';
                  else if (is_generally_string_node(arg))
                     param_type_list += 'S';
                  else // Everything else is a scalar returning expression
                     param_type_list += 'T';

                  arg_list.push_back(arg);

                  if (token_is(token_t::e_rbracket))
                     break;
                  else if (!token_is(token_t::e_comma))
                  {
                     set_error(make_error(
                        parser_error::e_syntax,
                        current_token(),
                        "ERR142 - Expected ',' for call to string function: " + function_name,
                        exprtk_error_location));

                     return false;
                  }
               }
            }

            return true;
         }
         else
            return false;
      }

// Assembly:
subq $0x2b8, %rsp            # imm = 0x2B8
movq %rdi, 0x2a8(%rsp)
movq %rsi, 0x2a0(%rsp)
movq %rdx, 0x298(%rsp)
movq %rcx, 0x290(%rsp)
movq %r8, 0x288(%rsp)
movq %r9, 0x280(%rsp)
movq 0x2a8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
movl $0x28, 0x27c(%rsp)
leaq 0x27c(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
testb $0x1, %al
jne 0x55507a
jmp 0x5554ec
movq 0x20(%rsp), %rdi
movl $0x29, 0x278(%rsp)
leaq 0x278(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
testb $0x1, %al
jne 0x5550a5
jmp 0x555296
movq 0x288(%rsp), %rdi
addq $0x8, %rdi
callq 0x54e740
testb $0x1, (%rax)
jne 0x555291
movq 0x280(%rsp), %rdi
callq 0x54f3d0
testb $0x1, %al
jne 0x555291
movq 0x20(%rsp), %rdi
callq 0x373e90
movq %rax, 0x10(%rsp)
movq 0x290(%rsp), %rdx
leaq 0x55dba(%rip), %rsi     # 0x5aaeac
leaq 0x190(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x3784f0
movq 0x18(%rsp), %rsi
leaq 0x53e63(%rip), %rdx     # 0x5a8f73
leaq 0x1b0(%rsp), %rdi
callq 0x29dc30
jmp 0x55511f
leaq 0x140(%rsp), %rdi
movl $0x70a5, %esi           # imm = 0x70A5
callq 0x371f20
jmp 0x555133
leaq 0x51dd9(%rip), %rsi     # 0x5a6f13
leaq 0x160(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x29dd70
jmp 0x555151
movq 0x10(%rsp), %rdx
leaq 0x1d0(%rsp), %rdi
movl $0x1, %esi
leaq 0x1b0(%rsp), %rcx
leaq 0x160(%rsp), %r8
callq 0x3741e0
jmp 0x55517a
movq 0x20(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x371e40
jmp 0x55518e
leaq 0x1d0(%rsp), %rdi
callq 0x371330
leaq 0x160(%rsp), %rdi
callq 0x11b838
leaq 0x140(%rsp), %rdi
callq 0x11b838
leaq 0x1b0(%rsp), %rdi
callq 0x11b838
leaq 0x190(%rsp), %rdi
callq 0x11b838
movb $0x0, 0x2b7(%rsp)
jmp 0x5554f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x55527f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x555272
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x555265
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x555258
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x1d0(%rsp), %rdi
callq 0x371330
leaq 0x160(%rsp), %rdi
callq 0x11b838
leaq 0x140(%rsp), %rdi
callq 0x11b838
leaq 0x1b0(%rsp), %rdi
callq 0x11b838
leaq 0x190(%rsp), %rdi
callq 0x11b838
jmp 0x555505
jmp 0x5554e2
jmp 0x555298
movq 0x20(%rsp), %rdi
xorl %esi, %esi
callq 0x379940
movq %rax, 0x138(%rsp)
xorl %eax, %eax
cmpq 0x138(%rsp), %rax
jne 0x5552c5
movb $0x0, 0x2b7(%rsp)
jmp 0x5554f4
movq 0x138(%rsp), %rdi
callq 0x39f460
testb $0x1, %al
jne 0x5552d8
jmp 0x5552ec
movq 0x2a0(%rsp), %rdi
movl $0x56, %esi
callq 0x11b510
jmp 0x555327
movq 0x138(%rsp), %rdi
callq 0x3a7600
testb $0x1, %al
jne 0x5552ff
jmp 0x555313
movq 0x2a0(%rsp), %rdi
movl $0x53, %esi
callq 0x11b510
jmp 0x555325
movq 0x2a0(%rsp), %rdi
movl $0x54, %esi
callq 0x11b510
jmp 0x555327
movq 0x298(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x37d3b0
movq 0x20(%rsp), %rdi
movl $0x29, 0x134(%rsp)
leaq 0x134(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
testb $0x1, %al
jne 0x555364
jmp 0x555369
jmp 0x5554e0
movq 0x20(%rsp), %rdi
movl $0x2c, 0x130(%rsp)
leaq 0x130(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
xorb $-0x1, %al
testb $0x1, %al
jne 0x555396
jmp 0x5554d9
movq 0x20(%rsp), %rdi
callq 0x373e90
movq %rax, 0x8(%rsp)
movq 0x290(%rsp), %rdx
leaq 0x55b2b(%rip), %rsi     # 0x5aaedf
leaq 0x68(%rsp), %rdi
callq 0x3784f0
leaq 0x28(%rsp), %rdi
movl $0x70c4, %esi           # imm = 0x70C4
callq 0x371f20
jmp 0x5553cf
leaq 0x51b3d(%rip), %rsi     # 0x5a6f13
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rdx
callq 0x29dd70
jmp 0x5553e7
movq 0x8(%rsp), %rdx
leaq 0x88(%rsp), %rdi
movl $0x1, %esi
leaq 0x68(%rsp), %rcx
leaq 0x48(%rsp), %r8
callq 0x3741e0
jmp 0x55540a
movq 0x20(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x371e40
jmp 0x55541e
leaq 0x88(%rsp), %rdi
callq 0x371330
leaq 0x48(%rsp), %rdi
callq 0x11b838
leaq 0x28(%rsp), %rdi
callq 0x11b838
leaq 0x68(%rsp), %rdi
callq 0x11b838
movb $0x0, 0x2b7(%rsp)
jmp 0x5554f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x5554cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x5554c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x5554b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x371330
leaq 0x48(%rsp), %rdi
callq 0x11b838
leaq 0x28(%rsp), %rdi
callq 0x11b838
leaq 0x68(%rsp), %rdi
callq 0x11b838
jmp 0x555505
jmp 0x5554db
jmp 0x555298
jmp 0x5554e2
movb $0x1, 0x2b7(%rsp)
jmp 0x5554f4
movb $0x0, 0x2b7(%rsp)
movb 0x2b7(%rsp), %al
andb $0x1, %al
addq $0x2b8, %rsp            # imm = 0x2B8
retq
movq 0x188(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nopl (%rax)