// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_vararg_function_call(exprtk::ivararg_function<double>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
inline expression_node_ptr parse_vararg_function_call(ivararg_function<T>* vararg_function, const std::string& vararg_function_name)
      {
         std::vector<expression_node_ptr> arg_list;

         scoped_vec_delete<expression_node_t> svd((*this), arg_list);

         next_token();

         if (token_is(token_t::e_lbracket))
         {
            if (token_is(token_t::e_rbracket))
            {
               if (!vararg_function->allow_zero_parameters())
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR127 - Zero parameter call to vararg function: "
                     + vararg_function_name + " not allowed",
                     exprtk_error_location));

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

                  if (0 == arg)
                     return error_node();
                  else
                     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(),
                        "ERR128 - Expected ',' for call to vararg function: "
                        + vararg_function_name,
                        exprtk_error_location));

                     return error_node();
                  }
               }
            }
         }
         else if (!vararg_function->allow_zero_parameters())
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR129 - Zero parameter call to vararg function: "
               + vararg_function_name + " not allowed",
               exprtk_error_location));

            return error_node();
         }

         if (arg_list.size() < vararg_function->min_num_args())
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR130 - Invalid number of parameters to call to vararg function: "
               + vararg_function_name + ", require at least "
               + details::to_str(static_cast<int>(vararg_function->min_num_args())) + " parameters",
               exprtk_error_location));

            return error_node();
         }
         else if (arg_list.size() > vararg_function->max_num_args())
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR131 - Invalid number of parameters to call to vararg function: "
               + vararg_function_name + ", require no more than "
               + details::to_str(static_cast<int>(vararg_function->max_num_args())) + " parameters",
               exprtk_error_location));

            return error_node();
         }

         expression_node_ptr result = expression_generator_.vararg_function_call(vararg_function,arg_list);

         svd.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, %r15
movq %rsi, %r14
movq %rdi, %rbx
xorps %xmm0, %xmm0
leaq 0x90(%rsp), %rax
andq $0x0, 0x10(%rax)
movaps %xmm0, (%rax)
movb $0x1, 0x108(%rsp)
movq %rdi, 0x110(%rsp)
movq %rax, 0x118(%rsp)
callq 0x1f6d68
leaq 0x120(%rsp), %rsi
movl $0x28, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x2a4882
leaq 0x120(%rsp), %rsi
movl $0x29, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x2a4946
cmpb $0x0, 0x8(%r14)
jne 0x2a4a6e
leaq 0x38e79(%rip), %rsi     # 0x2dd679
leaq 0x28(%rsp), %rdi
movq %r15, %rdx
callq 0x1f8aab
leaq 0x37420(%rip), %rdx     # 0x2dbc34
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1b42c3
leaq 0x68(%rsp), %rdi
movl $0x6ec5, %esi           # imm = 0x6EC5
callq 0x1f7a3c
leaq 0x353c2(%rip), %rsi     # 0x2d9bfb
leaq 0x8(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x8(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2a4911
cmpb $0x0, 0x8(%r14)
jne 0x2a4a6e
leaq 0x38e4b(%rip), %rsi     # 0x2dd6df
leaq 0x28(%rsp), %rdi
movq %r15, %rdx
callq 0x1f8aab
leaq 0x3738c(%rip), %rdx     # 0x2dbc34
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1b42c3
leaq 0x68(%rsp), %rdi
movl $0x6eec, %esi           # imm = 0x6EEC
callq 0x1f7a3c
leaq 0x3532e(%rip), %rsi     # 0x2d9bfb
leaq 0x8(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x8(%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 0x8(%rsp), %rdi
callq 0x118648
leaq 0x68(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
jmp 0x2a4c8e
movq %r15, 0x88(%rsp)
leaq 0x90(%rsp), %r12
leaq 0x68(%rsp), %r13
leaq 0x120(%rsp), %rbp
pushq $0x1
popq %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x68(%rsp)
testq %rax, %rax
je 0x2a4c93
movq %r12, %rdi
movq %r13, %rsi
callq 0x1fadc0
movl $0x29, 0x120(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
movl %r15d, %edx
callq 0x1fae6e
testb %al, %al
jne 0x2a4a66
movl $0x2c, 0x120(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
movl %r15d, %edx
callq 0x1fae6e
testb %al, %al
jne 0x2a4967
leaq 0x38cdc(%rip), %rsi     # 0x2dd6ab
leaq 0x48(%rsp), %rdi
movq 0x88(%rsp), %rdx
callq 0x1f8aab
leaq 0x8(%rsp), %rdi
movl $0x6ede, %esi           # imm = 0x6EDE
callq 0x1f7a3c
leaq 0x35204(%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 0x48(%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 0x48(%rsp), %rdi
jmp 0x2a4c8e
movq 0x88(%rsp), %r15
movq 0x98(%rsp), %rax
subq 0x90(%rsp), %rax
sarq $0x3, %rax
cmpq 0x10(%r14), %rax
jae 0x2a4b5f
leaq 0x38c7e(%rip), %rsi     # 0x2dd711
leaq 0x68(%rsp), %rdi
movq %r15, %rdx
callq 0x1f8aab
leaq 0x38cad(%rip), %rdx     # 0x2dd754
leaq 0x8(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x1b42c3
movl 0x10(%r14), %esi
leaq 0xe8(%rsp), %rdi
callq 0x1f7a3c
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x1b42e2
leaq 0x38c83(%rip), %rdx     # 0x2dd768
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1b42c3
leaq 0xa8(%rsp), %rdi
movl $0x6ef9, %esi           # imm = 0x6EF9
callq 0x1f7a3c
leaq 0x350ee(%rip), %rsi     # 0x2d9bfb
leaq 0xc8(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0xc8(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2a4c37
cmpq 0x18(%r14), %rax
jbe 0x2a4cc4
leaq 0x38c04(%rip), %rsi     # 0x2dd774
leaq 0x68(%rsp), %rdi
movq %r15, %rdx
callq 0x1f8aab
leaq 0x38c33(%rip), %rdx     # 0x2dd7b7
leaq 0x8(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x1b42c3
movl 0x18(%r14), %esi
leaq 0xe8(%rsp), %rdi
callq 0x1f7a3c
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x1b42e2
leaq 0x38ba6(%rip), %rdx     # 0x2dd768
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1b42c3
leaq 0xa8(%rsp), %rdi
movl $0x6f05, %esi           # imm = 0x6F05
callq 0x1f7a3c
leaq 0x35011(%rip), %rsi     # 0x2d9bfb
leaq 0xc8(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x120(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0xc8(%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 0xc8(%rsp), %rdi
callq 0x118648
leaq 0xa8(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0xe8(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x68(%rsp), %rdi
callq 0x118648
xorl %ebx, %ebx
leaq 0x108(%rsp), %rdi
callq 0x1fb1b8
leaq 0x90(%rsp), %rdi
callq 0x29e264
movq %rbx, %rax
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
addq $0x220, %rbx            # imm = 0x220
leaq 0x90(%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2b53f0
movq %rax, %rbx
testq %rax, %rax
sete 0x108(%rsp)
jmp 0x2a4c95
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2a4d03
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x2a4d12
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x2a4d21
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
jmp 0x2a4e39
jmp 0x2a4e4c
jmp 0x2a4d71
jmp 0x2a4d83
jmp 0x2a4d95
jmp 0x2a4da7
jmp 0x2a4db6
jmp 0x2a4de1
jmp 0x2a4de6
jmp 0x2a4deb
jmp 0x2a4e4c
jmp 0x2a4e4c
jmp 0x2a4df2
jmp 0x2a4e04
jmp 0x2a4e13
jmp 0x2a4e22
jmp 0x2a4e31
jmp 0x2a4e4c
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2a4d86
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
callq 0x118648
jmp 0x2a4d98
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x118648
jmp 0x2a4daa
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
jmp 0x2a4db9
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0xe8(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x68(%rsp), %rdi
jmp 0x2a4e39
movq %rax, %rbx
jmp 0x2a4dc3
movq %rax, %rbx
jmp 0x2a4dd0
movq %rax, %rbx
jmp 0x2a4dda
jmp 0x2a4e4c
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2a4e07
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x2a4e16
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x118648
jmp 0x2a4e25
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
jmp 0x2a4e34
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x2a4e4f
jmp 0x2a4e4c
jmp 0x2a4e4c
jmp 0x2a4e4c
jmp 0x2a4e4c
jmp 0x2a4e4c
jmp 0x2a4e4c
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
callq 0x1fb1b8
leaq 0x90(%rsp), %rdi
callq 0x29e264
movq %rbx, %rdi
callq 0x118360
nop