// File: /workspace/github_cpp_makefile_star2_O1/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 0x3b18d1
movq %rdi, %r14
movq 0x8(%rax), %rdi
testq %rdi, %rdi
je 0x3b18d1
movq %rsi, %rbx
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x8, %eax
jne 0x3b18d1
movq (%r14), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
je 0x3b18a5
leaq 0x190298(%rip), %rax    # 0x541b38
cmpq %rax, (%r14)
je 0x3b18a8
xorl %r14d, %r14d
testq %r14, %r14
je 0x3b18d1
movq (%rbx), %rcx
movq 0x8(%rbx), %rax
cmpq %rax, %rcx
je 0x3b18d1
movq 0x28(%r14), %rdx
subq 0x20(%r14), %rdx
sarq $0x4, %rdx
subq %rcx, %rax
sarq $0x2, %rax
cmpq %rax, %rdx
jae 0x3b18e8
xorl %ebp, %ebp
andb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rbx), %rax
cmpq %rax, 0x8(%rbx)
sete %bpl
je 0x3b18d3
xorl %r15d, %r15d
leaq 0x51dd(%rip), %r12      # 0x3b6adc
xorl %r13d, %r13d
movl (%rax,%r13,4), %eax
cmpq $0xa, %rax
ja 0x3b18d3
movslq (%r12,%rax,4), %rax
addq %r12, %rax
jmpq *%rax
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x2, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x3, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x21, %eax
ja 0x3b1983
movl %eax, %ecx
movabsq $0x388fc0000, %rdx      # imm = 0x388FC0000
btq %rcx, %rdx
jb 0x3b1a79
cmpl $0x7b, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x4, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
addl $-0x6a, %eax
cmpl $0x5, %eax
jb 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
addl $-0x6f, %eax
cmpl $0x8, %eax
jbe 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1c, %eax
je 0x3b1a79
jmp 0x3b18d3
movq 0x20(%r14), %rax
movq (%rax,%r15), %rdi
testq %rdi, %rdi
je 0x3b18d3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x98, %eax
jne 0x3b18d3
incq %r13
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
addq $0x10, %r15
cmpq %rcx, %r13
setae %bpl
jb 0x3b1902
jmp 0x3b18d3