// File: /workspace/github_cpp_makefile_star2_O2/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
cmpq $0x0, (%rdi)
je 0x2ccb3e
movq %rsi, %rbx
movq %rdi, %r14
callq 0x2cd2b4
testb %al, %al
je 0x2ccb3e
movq (%r14), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
je 0x2ccb3e
leaq 0x1b43b7(%rip), %rax    # 0x480ef0
cmpq %rax, (%r14)
je 0x2ccb51
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
cmpq %rcx, %rax
je 0x2ccb3e
movq 0x28(%r14), %rdx
subq 0x20(%r14), %rdx
sarq $0x4, %rdx
movq %rcx, %rsi
subq %rax, %rsi
sarq $0x2, %rsi
cmpq %rsi, %rdx
jb 0x2ccb3e
xorl %r15d, %r15d
leaq 0x6662(%rip), %r12      # 0x2d31e4
xorl %r13d, %r13d
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rcx, %r13
setae %bpl
jae 0x2ccb40
movl (%rax,%r15), %eax
cmpq $0xa, %rax
ja 0x2ccb40
movslq (%r12,%rax,4), %rax
addq %r12, %rax
jmpq *%rax
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x2, %eax
je 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x3, %eax
je 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
callq 0x20b691
testb %al, %al
jne 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x4, %eax
je 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
addl $-0x6a, %eax
cmpl $0x5, %eax
jb 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1, %eax
je 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
addl $-0x6f, %eax
cmpl $0x8, %eax
jbe 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1c, %eax
je 0x2cccf0
jmp 0x2ccb40
movq 0x20(%r14), %rax
movq (%rax,%r15,4), %rdi
testq %rdi, %rdi
je 0x2ccb40
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x98, %eax
jne 0x2ccb40
incq %r13
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
addq $0x4, %r15
jmp 0x2ccb85
nop