// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::expression_helper<double>::match_type_sequence(exprtk::expression<double> const&, std::vector<exprtk::expression_helper<double>::node_types, std::allocator<exprtk::expression_helper<double>::node_types>> const&)
static inline bool match_type_sequence(const expression<T>& expr, const std::vector<node_types>& type_seq)
      {
         if ((0 == expr.control_block_) || !is_vararg(expr))
         {
            return false;
         }

         typedef details::vararg_node<T, exprtk::details::vararg_multi_op<T> > mo_vararg_t;

         mo_vararg_t* vnode = dynamic_cast<mo_vararg_t*>(expr.control_block_->expr);

         if (
              (0 == vnode) ||
              type_seq.empty() ||
              (vnode->size() < type_seq.size())
            )
         {
            return false;
         }

         for (std::size_t i = 0; i < type_seq.size(); ++i)
         {
            assert((*vnode)[i]);

            switch (type_seq[i])
            {
               case e_literal  : { if (details::is_literal_node         ((*vnode)[i])) continue; } break;
               case e_variable : { if (details::is_variable_node        ((*vnode)[i])) continue; } break;
               case e_string   : { if (details::is_generally_string_node((*vnode)[i])) continue; } break;
               case e_unary    : { if (details::is_unary_node           ((*vnode)[i])) continue; } break;
               case e_binary   : { if (details::is_binary_node          ((*vnode)[i])) continue; } break;
               case e_function : { if (details::is_function             ((*vnode)[i])) continue; } break;
               case e_null     : { if (details::is_null_node            ((*vnode)[i])) continue; } break;
               case e_assert   : { if (details::is_assert_node          ((*vnode)[i])) continue; } break;
               case e_sf3ext   : { if (details::is_sf3ext_node          ((*vnode)[i])) continue; } break;
               case e_sf4ext   : { if (details::is_sf4ext_node          ((*vnode)[i])) continue; } break;
               case e_vararg   : break;
            }

            return false;
         }

         return true;
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq (%rdi), %rax
testq %rax, %rax
je 0x3889a9
movq %rdi, %r14
movq 0x8(%rax), %rdi
testq %rdi, %rdi
je 0x3889a9
movq %rsi, %rbx
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x8, %eax
jne 0x3889a9
movq (%r14), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
je 0x3889a9
leaq 0x17f56c(%rip), %rax    # 0x507f10
cmpq %rax, (%r14)
je 0x3889ba
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rbx), %rcx
movq 0x8(%rbx), %rax
cmpq %rax, %rcx
je 0x3889a9
movq 0x28(%r14), %rdx
subq 0x20(%r14), %rdx
sarq $0x4, %rdx
subq %rcx, %rax
sarq $0x2, %rax
cmpq %rax, %rdx
jb 0x3889a9
xorl %r15d, %r15d
leaq 0x514c(%rip), %r12      # 0x38db34
movabsq $0x388fc0000, %r13      # imm = 0x388FC0000
xorl %ebp, %ebp
movl (%rcx,%rbp,4), %ecx
xorl %eax, %eax
cmpq $0xa, %rcx
ja 0x3889ab
movslq (%r12,%rcx,4), %rcx
addq %r12, %rcx
jmpq *%rcx
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x2, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x3, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x21, %eax
ja 0x388a73
movl %eax, %ecx
btq %rcx, %r13
jb 0x388b69
cmpl $0x7b, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x4, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
addl $-0x6a, %eax
cmpl $0x5, %eax
jb 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
addl $-0x6f, %eax
cmpl $0x8, %eax
jbe 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1c, %eax
je 0x388b69
jmp 0x3889a9
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3889a9
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x98, %eax
jne 0x3889a9
incq %rbp
movq (%rbx), %rcx
movq 0x8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
addq $0x10, %r15
movb $0x1, %al
cmpq %rdx, %rbp
jb 0x3889f4
jmp 0x3889ab