// File: /workspace/github_cpp_makefile_star2_O1/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 $0x18, %rsp
movq %rdx, %rbx
movq %rdi, %r15
movq (%rdx), %rdi
testq %rdi, %rdi
je 0x2b7f9d
cmpq $0x0, 0x8(%rbx)
je 0x2b7f9d
movq %rsi, %r14
movq (%rdi), %rax
callq *0x28(%rax)
movl %eax, 0x14(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b7fee
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
sete %r12b
jmp 0x2b7ff1
xorl %r15d, %r15d
movq (%rbx,%r15), %rdi
testq %rdi, %rdi
je 0x2b7fd3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x2b7fd3
leaq (%rbx,%r15), %r14
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2b7fcb
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x2b7fd3
movq %r14, %rdi
callq 0x1f1690
addq $0x8, %r15
cmpq $0x8, %r15
je 0x2b7fa0
xorl %eax, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %r12d, %r12d
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b800b
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x14, %eax
sete %al
movl %eax, 0x10(%rsp)
jmp 0x2b8013
movl $0x0, 0x10(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b802d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x15, %eax
sete %al
movl %eax, 0xc(%rsp)
jmp 0x2b8035
movl $0x0, 0xc(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b8050
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
sete %al
movl %eax, 0x8(%rsp)
jmp 0x2b8058
movl $0x0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b8070
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
sete %r13b
jmp 0x2b8073
xorl %r13d, %r13d
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b808e
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x14, %eax
sete %al
movl %eax, 0x4(%rsp)
jmp 0x2b8096
movl $0x0, 0x4(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b80b0
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x15, %eax
sete %al
movl %eax, (%rsp)
jmp 0x2b80b7
movl $0x0, (%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b80d1
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x7b, %eax
je 0x2b8158
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b80e7
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x16, %eax
je 0x2b8158
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b80fd
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x17, %eax
je 0x2b8158
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b8113
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x1f, %eax
je 0x2b8158
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b8129
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x20, %eax
je 0x2b8158
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b813f
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x21, %eax
je 0x2b8158
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b8156
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1b, %eax
sete %bpl
jmp 0x2b8158
xorl %ebp, %ebp
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b8172
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x7b, %eax
je 0x2b81f9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b8188
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x16, %eax
je 0x2b81f9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b819e
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x17, %eax
je 0x2b81f9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b81b4
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x1f, %eax
je 0x2b81f9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b81ca
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x20, %eax
je 0x2b81f9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b81e0
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x21, %eax
je 0x2b81f9
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2b81f7
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1b, %eax
sete %cl
jmp 0x2b81f9
xorl %ecx, %ecx
testb %r13b, %r12b
jne 0x2b8220
cmpl $0x2, (%r14)
jne 0x2b8220
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ebfc6
orb %cl, %bpl
cmpb $0x1, %bpl
jne 0x2b8245
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ec5dc
cmpl $0x12, 0x14(%rsp)
jne 0x2b827b
cmpb $0x0, 0x8(%rsp)
je 0x2b82a3
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
movq 0x30(%rax), %rdx
movq 0x30(%rcx), %rcx
movq %r15, %rdi
movq %r14, %rsi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2f14b0
testb %r12b, %r12b
je 0x2b82c4
cmpb $0x0, 0x8(%rsp)
je 0x2b82f2
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ecbcc
testb %r13b, %r13b
je 0x2b8317
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ec84e
cmpb $0x0, 0x10(%rsp)
je 0x2b833e
cmpb $0x0, 0x8(%rsp)
je 0x2b8370
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ed73c
testb %r13b, %r13b
je 0x2b8397
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2eccec
cmpb $0x0, 0x4(%rsp)
je 0x2b83be
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ec972
cmpb $0x0, 0xc(%rsp)
je 0x2b7fdd
cmpb $0x0, 0x8(%rsp)
je 0x2b83e4
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2edd44
cmpb $0x0, 0x4(%rsp)
je 0x2b8407
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ed7fe
cmpb $0x0, 0x4(%rsp)
je 0x2b8428
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ed2fa
cmpb $0x0, (%rsp)
je 0x2b7fdd
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2eca3a
cmpb $0x0, 0x4(%rsp)
je 0x2b844e
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2eded0
testb %r13b, %r13b
je 0x2b846f
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ed950
cmpb $0x0, (%rsp)
je 0x2b7fdd
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ed4b0
testb %r13b, %r13b
je 0x2b8495
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ee108
cmpb $0x0, (%rsp)
je 0x2b7fdd
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2edb0a
cmpb $0x0, (%rsp)
je 0x2b7fdd
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ee382
nop