// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::type_checker::is_valid_token(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, exprtk::parser<double>::type_checker::function_prototype_t&) const
inline bool is_valid_token(std::string param_seq,
                                    function_prototype_t& funcproto) const
         {
            // Determine return type
            funcproto.return_type = default_return_type_;

            if (param_seq.size() > 2)
            {
               if (':' == param_seq[1])
               {
                  // Note: Only overloaded igeneric functions can have return
                  // type definitions.
                  if (type_checker::e_overload != default_return_type_)
                     return false;

                  switch (param_seq[0])
                  {
                     case 'T' : funcproto.return_type = type_checker::e_numeric;
                                break;

                     case 'S' : funcproto.return_type = type_checker::e_string;
                                break;

                     default  : return false;
                  }

                  param_seq.erase(0,2);
               }
            }

            if (
                 (std::string::npos != param_seq.find("?*")) ||
                 (std::string::npos != param_seq.find("**"))
               )
            {
               return false;
            }
            else if (
                      (std::string::npos == param_seq.find_first_not_of("STV*?|")) ||
                      ("Z" == param_seq)
                    )
            {
               funcproto.param_seq = param_seq;
               return true;
            }

            return false;
         }

// Assembly:
subq $0x48, %rsp
movq %rsi, 0x10(%rsp)
movq %rdi, %rax
movq 0x10(%rsp), %rdi
movq %rdi, 0x18(%rsp)
movq %rax, 0x38(%rsp)
movq %rdi, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x20(%rsp)
movl 0x30(%rax), %ecx
movq 0x28(%rsp), %rax
movl %ecx, (%rax)
callq 0x11b270
cmpq $0x2, %rax
jbe 0x55127c
movq 0x18(%rsp), %rdi
movl $0x1, %esi
callq 0x11b7a0
movsbl (%rax), %ecx
movl $0x3a, %eax
cmpl %ecx, %eax
jne 0x55127a
movq 0x20(%rsp), %rcx
movl $0x20, %eax
cmpl 0x30(%rcx), %eax
je 0x55121c
movb $0x0, 0x47(%rsp)
jmp 0x551327
movq 0x18(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x11b7a0
movsbl (%rax), %eax
movl %eax, 0xc(%rsp)
subl $0x53, %eax
je 0x551250
jmp 0x551238
movl 0xc(%rsp), %eax
subl $0x54, %eax
jne 0x55125d
jmp 0x551243
movq 0x28(%rsp), %rax
movl $0x54, (%rax)
jmp 0x551267
movq 0x28(%rsp), %rax
movl $0x53, (%rax)
jmp 0x551267
movb $0x0, 0x47(%rsp)
jmp 0x551327
movq 0x18(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x2, %edx
callq 0x11b520
jmp 0x55127c
movq 0x18(%rsp), %rdi
leaq 0x63ad9(%rip), %rsi     # 0x5b4d61
xorl %eax, %eax
movl %eax, %edx
callq 0x11b030
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
jne 0x5512c4
movq 0x18(%rsp), %rdi
leaq 0x63a8d(%rip), %rsi     # 0x5b4d39
xorl %eax, %eax
movl %eax, %edx
callq 0x11b030
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
je 0x5512cb
movb $0x0, 0x47(%rsp)
jmp 0x551327
movq 0x18(%rsp), %rdi
leaq 0x59a59(%rip), %rsi     # 0x5aad30
xorl %eax, %eax
movl %eax, %edx
callq 0x11b650
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
je 0x551306
movq 0x18(%rsp), %rsi
leaq 0x5f994(%rip), %rdi     # 0x5b0c8f
callq 0x551c00
testb $0x1, %al
jne 0x551306
jmp 0x551320
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdi
addq $0x8, %rdi
callq 0x11b7c0
movb $0x1, 0x47(%rsp)
jmp 0x551327
jmp 0x551322
movb $0x0, 0x47(%rsp)
movb 0x47(%rsp), %al
andb $0x1, %al
addq $0x48, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)