// File: /workspace/github_cpp_makefile_star2_O2/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 0x22760c
cmpq $0x0, 0x8(%rbx)
je 0x22760c
movq %rsi, %r14
movq (%rdi), %rax
callq *0x28(%rax)
movl %eax, 0x24(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227629
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
sete %al
movl %eax, 0x20(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x22763b
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x14, %eax
sete %al
movl %eax, 0x1c(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227643
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x15, %eax
sete %al
movl %eax, 0x18(%rsp)
jmp 0x22764b
movq 0x8(%r15), %rdi
movq %rbx, %rsi
callq 0x22bbb4
xorl %eax, %eax
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 0x227643
movl $0x0, 0x1c(%rsp)
movl $0x0, 0x18(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2276b2
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
sete %al
movl %eax, 0x14(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2276c4
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
sete %r13b
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x22787d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x14, %eax
sete %al
movl %eax, 0x10(%rsp)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x2276cf
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x15, %eax
sete %al
movl %eax, 0xc(%rsp)
jmp 0x2276d7
movl $0x0, 0x10(%rsp)
movl $0x0, 0x14(%rsp)
jmp 0x2276cc
movl $0x0, 0x10(%rsp)
xorl %r13d, %r13d
movl $0x0, 0xc(%rsp)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %bpl
cmpl $0x7b, %eax
je 0x227769
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x16, %eax
je 0x227769
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x17, %eax
je 0x227769
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1f, %eax
je 0x227769
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x20, %eax
je 0x227769
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x21, %eax
je 0x227769
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x227767
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1b, %eax
sete %bpl
jmp 0x227769
xorl %ebp, %ebp
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
movb $0x1, %r12b
cmpl $0x7b, %eax
je 0x227803
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x16, %eax
je 0x227803
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x17, %eax
je 0x227803
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1f, %eax
je 0x227803
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x20, %eax
je 0x227803
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x21, %eax
je 0x227803
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x227800
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x1b, %eax
sete %r12b
jmp 0x227803
xorl %r12d, %r12d
movl 0x20(%rsp), %eax
testb %r13b, %al
jne 0x22782e
cmpl $0x2, (%r14)
jne 0x22782e
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 0x2515a8
orb %r12b, %bpl
cmpb $0x1, %bpl
jne 0x227853
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 0x251784
cmpl $0x12, 0x24(%rsp)
jne 0x22788a
cmpb $0x0, 0x14(%rsp)
je 0x2278b1
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 0x25187e
movl $0x0, 0x10(%rsp)
jmp 0x2276cf
testb %al, %al
je 0x2278d2
cmpb $0x0, 0x14(%rsp)
je 0x227900
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 0x251a9e
testb %r13b, %r13b
je 0x227925
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 0x251892
cmpb $0x0, 0x1c(%rsp)
je 0x22794c
cmpb $0x0, 0x14(%rsp)
je 0x22797e
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 0x251f9a
testb %r13b, %r13b
je 0x2279a5
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 0x251b44
cmpb $0x0, 0x10(%rsp)
je 0x2279cc
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 0x251938
cmpb $0x0, 0x18(%rsp)
je 0x227618
cmpb $0x0, 0x14(%rsp)
je 0x2279f3
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 0x25232e
cmpb $0x0, 0x10(%rsp)
je 0x227a16
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 0x25201e
cmpb $0x0, 0x10(%rsp)
je 0x227a37
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 0x251d5e
cmpb $0x0, 0xc(%rsp)
je 0x227618
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 0x2519bc
cmpb $0x0, 0x10(%rsp)
je 0x227a5e
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 0x25240c
testb %r13b, %r13b
je 0x227a7f
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 0x2520f8
cmpb $0x0, 0xc(%rsp)
je 0x227618
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 0x251e48
testb %r13b, %r13b
je 0x227aa6
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 0x252554
cmpb $0x0, 0xc(%rsp)
je 0x227618
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 0x2521e6
cmpb $0x0, 0xc(%rsp)
je 0x227618
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 0x252692
nop