// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::synthesize_string_expression(exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [2])
inline expression_node_ptr synthesize_string_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2])
         {
            if ((0 == branch[0]) || (0 == branch[1]))
            {
               details::free_all_nodes(*node_allocator_,branch);

               return error_node();
            }

            const bool b0_is_s   = details::is_string_node            (branch[0]);
            const bool b0_is_cs  = details::is_const_string_node      (branch[0]);
            const bool b0_is_sr  = details::is_string_range_node      (branch[0]);
            const bool b0_is_csr = details::is_const_string_range_node(branch[0]);

            const bool b1_is_s   = details::is_string_node            (branch[1]);
            const bool b1_is_cs  = details::is_const_string_node      (branch[1]);
            const bool b1_is_sr  = details::is_string_range_node      (branch[1]);
            const bool b1_is_csr = details::is_const_string_range_node(branch[1]);

            const bool b0_is_gen = details::is_string_assignment_node (branch[0]) ||
                                   details::is_genricstring_range_node(branch[0]) ||
                                   details::is_string_concat_node     (branch[0]) ||
                                   details::is_string_function_node   (branch[0]) ||
                                   details::is_string_condition_node  (branch[0]) ||
                                   details::is_string_ccondition_node (branch[0]) ||
                                   details::is_string_vararg_node     (branch[0]) ;

            const bool b1_is_gen = details::is_string_assignment_node (branch[1]) ||
                                   details::is_genricstring_range_node(branch[1]) ||
                                   details::is_string_concat_node     (branch[1]) ||
                                   details::is_string_function_node   (branch[1]) ||
                                   details::is_string_condition_node  (branch[1]) ||
                                   details::is_string_ccondition_node (branch[1]) ||
                                   details::is_string_vararg_node     (branch[1]) ;

            if (details::e_add == opr)
            {
               if (!b0_is_cs || !b1_is_cs)
               {
                  return synthesize_expression<string_concat_node_t,2>(opr,branch);
               }
            }

            if (b0_is_gen || b1_is_gen)
            {
               return synthesize_strogen_expression(opr,branch);
            }
            else if (b0_is_s)
            {
               if      (b1_is_s  ) return synthesize_sos_expression   (opr,branch);
               else if (b1_is_cs ) return synthesize_socs_expression  (opr,branch);
               else if (b1_is_sr ) return synthesize_sosr_expression  (opr,branch);
               else if (b1_is_csr) return synthesize_socsr_expression (opr,branch);
            }
            else if (b0_is_cs)
            {
               if      (b1_is_s  ) return synthesize_csos_expression  (opr,branch);
               else if (b1_is_cs ) return synthesize_csocs_expression (opr,branch);
               else if (b1_is_sr ) return synthesize_csosr_expression (opr,branch);
               else if (b1_is_csr) return synthesize_csocsr_expression(opr,branch);
            }
            else if (b0_is_sr)
            {
               if      (b1_is_s  ) return synthesize_sros_expression  (opr,branch);
               else if (b1_is_sr ) return synthesize_srosr_expression (opr,branch);
               else if (b1_is_cs ) return synthesize_srocs_expression (opr,branch);
               else if (b1_is_csr) return synthesize_srocsr_expression(opr,branch);
            }
            else if (b0_is_csr)
            {
               if      (b1_is_s  ) return synthesize_csros_expression  (opr,branch);
               else if (b1_is_sr ) return synthesize_csrosr_expression (opr,branch);
               else if (b1_is_cs ) return synthesize_csrocs_expression (opr,branch);
               else if (b1_is_csr) return synthesize_csrocsr_expression(opr,branch);
            }

            return error_node();
         }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdx, %rbx
movq %rdi, %r15
movq (%rdx), %rdi
testq %rdi, %rdi
je 0x29b094
cmpq $0x0, 0x8(%rbx)
je 0x29b094
movq %rsi, %r14
movq (%rdi), %rax
callq *0x28(%rax)
movl %eax, 0x24(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b0ef
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
sete %al
movl %eax, 0x20(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b101
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x14, %eax
sete %al
movl %eax, 0x1c(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b109
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x15, %eax
sete %al
movl %eax, 0x18(%rsp)
jmp 0x29b111
movb $0x1, %bpl
xorl %r14d, %r14d
movq (%rbx,%r14,8), %rdi
testq %rdi, %rdi
je 0x29b0cd
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x29b0cd
leaq (%rbx,%r14,8), %r14
movq (%r14), %rdi
testq %rdi, %rdi
je 0x29b0c5
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x29b0cd
movq %r14, %rdi
callq 0x1ea63e
movl $0x1, %r14d
xorl %eax, %eax
testb $0x1, %bpl
movl $0x0, %ebp
jne 0x29b09a
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x0, 0x1c(%rsp)
movl $0x0, 0x20(%rsp)
jmp 0x29b109
movl $0x0, 0x1c(%rsp)
movl $0x0, 0x18(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b178
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
sete %al
movl %eax, 0x14(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b18a
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
sete %r13b
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b377
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x14, %eax
sete %al
movl %eax, 0x10(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b195
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x15, %eax
sete %al
movl %eax, 0xc(%rsp)
jmp 0x29b19d
movl $0x0, 0x10(%rsp)
movl $0x0, 0x14(%rsp)
jmp 0x29b192
movl $0x0, 0x10(%rsp)
xorl %r13d, %r13d
movl $0x0, 0xc(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x7b, %eax
je 0x29b22f
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x16, %eax
je 0x29b22f
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x17, %eax
je 0x29b22f
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1f, %eax
je 0x29b22f
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x20, %eax
je 0x29b22f
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x21, %eax
je 0x29b22f
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29b22d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1b, %eax
sete %bpl
jmp 0x29b22f
xorl %ebp, %ebp
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %r12b
cmpl $0x7b, %eax
je 0x29b2c9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x16, %eax
je 0x29b2c9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x17, %eax
je 0x29b2c9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1f, %eax
je 0x29b2c9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x20, %eax
je 0x29b2c9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x21, %eax
je 0x29b2c9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2c6
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1b, %eax
sete %r12b
jmp 0x29b2c9
xorl %r12d, %r12d
movl (%r14), %ecx
cmpl $0x2, %ecx
setne %al
movl 0x20(%rsp), %esi
movl %esi, %edx
andb %r13b, %dl
orb %al, %dl
je 0x29b304
orb %r12b, %bpl
cmpb $0x1, %bpl
jne 0x29b320
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d14c8
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d0ee6
cmpl $0x12, 0x24(%rsp)
jne 0x29b384
cmpb $0x0, 0x14(%rsp)
je 0x29b3ac
movq (%rbx), %rax
movq 0x8(%rbx), %rdx
movq 0x30(%rax), %rbx
movq 0x30(%rdx), %r14
xorl %eax, %eax
cmpl $0x56, %ecx
jg 0x29b479
addl $-0xe, %ecx
cmpl $0x7, %ecx
ja 0x29b0e0
leaq 0xf0461(%rip), %rdx     # 0x38b7bc
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
leaq 0x27ab8d(%rip), %r15    # 0x515ef8
leaq 0x27ab36(%rip), %r12    # 0x515ea8
jmp 0x29b5fd
movl $0x0, 0x10(%rsp)
jmp 0x29b195
testb %sil, %sil
je 0x29b3cd
cmpb $0x0, 0x14(%rsp)
je 0x29b3fb
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d1ab8
testb %r13b, %r13b
je 0x29b420
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d173a
cmpb $0x0, 0x1c(%rsp)
je 0x29b447
cmpb $0x0, 0x14(%rsp)
je 0x29b4a7
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d25fa
testb %r13b, %r13b
je 0x29b4ce
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d1bd8
cmpb $0x0, 0x10(%rsp)
je 0x29b4f5
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d185e
cmpb $0x0, 0x18(%rsp)
je 0x29b68e
cmpb $0x0, 0x14(%rsp)
je 0x29b51c
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d2c02
cmpl $0x57, %ecx
je 0x29b5df
cmpl $0x58, %ecx
je 0x29b5ef
cmpl $0x59, %ecx
jne 0x29b0e0
leaq 0x27aef5(%rip), %r15    # 0x516390
leaq 0x27ae9e(%rip), %r12    # 0x516340
jmp 0x29b5fd
cmpb $0x0, 0x10(%rsp)
je 0x29b543
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d26bc
cmpb $0x0, 0x10(%rsp)
je 0x29b568
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d21b8
cmpb $0x0, 0xc(%rsp)
je 0x29b68e
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d1926
cmpb $0x0, 0x10(%rsp)
je 0x29b627
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d2d8e
testb %r13b, %r13b
je 0x29b648
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d280e
cmpb $0x0, 0xc(%rsp)
je 0x29b68e
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d236e
leaq 0x27ab2a(%rip), %r15    # 0x5160c0
leaq 0x27aad3(%rip), %r12    # 0x516070
jmp 0x29b5fd
leaq 0x27abaa(%rip), %r15    # 0x516150
leaq 0x27ab53(%rip), %r12    # 0x516100
jmp 0x29b5fd
leaq 0x27ac2a(%rip), %r15    # 0x5161e0
leaq 0x27abd3(%rip), %r12    # 0x516190
jmp 0x29b5fd
leaq 0x27a9da(%rip), %r15    # 0x515fa0
leaq 0x27a983(%rip), %r12    # 0x515f50
jmp 0x29b5fd
leaq 0x27aa5a(%rip), %r15    # 0x516030
leaq 0x27aa03(%rip), %r12    # 0x515fe0
jmp 0x29b5fd
leaq 0x27ac8a(%rip), %r15    # 0x516270
leaq 0x27ac33(%rip), %r12    # 0x516220
jmp 0x29b5fd
leaq 0x27ad0a(%rip), %r15    # 0x516300
leaq 0x27acb3(%rip), %r12    # 0x5162b0
movl $0x30, %edi
callq 0x11e0f0
movb $0x0, 0x10(%rax)
movq $0x0, 0x18(%rax)
movq %r12, (%rax)
movq %r15, 0x8(%rax)
movq %rbx, 0x20(%rax)
movq %r14, 0x28(%rax)
jmp 0x29b0e0
testb %r13b, %r13b
je 0x29b66b
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d2fc6
cmpb $0x0, 0xc(%rsp)
je 0x29b68e
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d29c8
cmpb $0x0, 0xc(%rsp)
je 0x29b68e
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d324c
xorl %eax, %eax
jmp 0x29b0e0
nop