// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::expression_generator<double>::synthesize_expression<exprtk::details::unary_node<double>, 1ul>(exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [1ul])
inline expression_node_ptr synthesize_expression(const details::operator_type& operation, expression_node_ptr (&branch)[N])
         {
            if (
                 (details::e_in    == operation) ||
                 (details::e_like  == operation) ||
                 (details::e_ilike == operation)
               )
            {
               free_all_nodes(*node_allocator_,branch);

               return error_node();
            }
            else if (!details::all_nodes_valid<N>(branch))
            {
               free_all_nodes(*node_allocator_,branch);

               return error_node();
            }
            else if ((details::e_default != operation))
            {
               // Attempt simple constant folding optimisation.
               expression_node_ptr expression_point = node_allocator_->allocate<NodeType>(operation,branch);

               if (is_constant_foldable<N>(branch))
               {
                  const Type v = expression_point->value();
                  details::free_node(*node_allocator_,expression_point);

                  return node_allocator_->allocate<literal_node_t>(v);
               }

               if (expression_point && expression_point->valid())
               {
                  return expression_point;
               }

               parser_->set_error(parser_error::make_error(
                  parser_error::e_parser,
                  token_t(),
                  "ERR281 - Failed to synthesize node: NodeType",
                  exprtk_error_location));

               details::free_node(*node_allocator_, expression_point);
            }

            return error_node();
         }

// Assembly:
subq $0x198, %rsp            # imm = 0x198
movq %rdi, 0x188(%rsp)
movq %rsi, 0x180(%rsp)
movq %rdx, 0x178(%rsp)
movq 0x188(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x180(%rsp), %rcx
movl $0x57, %eax
cmpl (%rcx), %eax
je 0x3af73f
movq 0x180(%rsp), %rcx
movl $0x58, %eax
cmpl (%rcx), %eax
je 0x3af73f
movq 0x180(%rsp), %rcx
movl $0x59, %eax
cmpl (%rcx), %eax
jne 0x3af767
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x178(%rsp), %rsi
callq 0x3b0d60
callq 0x2821f0
movq %rax, 0x190(%rsp)
jmp 0x3afa17
movq 0x178(%rsp), %rdi
callq 0x3b0db0
testb $0x1, %al
jne 0x3af7a0
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x178(%rsp), %rsi
callq 0x3b0d60
callq 0x2821f0
movq %rax, 0x190(%rsp)
jmp 0x3afa17
movq 0x180(%rsp), %rcx
xorl %eax, %eax
cmpl (%rcx), %eax
je 0x3afa06
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x180(%rsp), %rsi
movq 0x178(%rsp), %rdx
callq 0x3b0e00
movq 0x10(%rsp), %rdi
movq %rax, 0x170(%rsp)
movq 0x178(%rsp), %rsi
callq 0x3b0e50
testb $0x1, %al
jne 0x3af7f0
jmp 0x3af840
movq 0x170(%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq 0x10(%rsp), %rax
movsd %xmm0, 0x168(%rsp)
movq 0x8(%rax), %rdi
leaq 0x170(%rsp), %rsi
callq 0x284bd0
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x168(%rsp), %rsi
callq 0x285670
movq %rax, 0x190(%rsp)
jmp 0x3afa17
cmpq $0x0, 0x170(%rsp)
je 0x3af874
movq 0x170(%rsp), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
testb $0x1, %al
jne 0x3af85f
jmp 0x3af874
movq 0x170(%rsp), %rax
movq %rax, 0x190(%rsp)
jmp 0x3afa17
movq 0x10(%rsp), %rax
movq 0x68(%rax), %rax
movq %rax, (%rsp)
leaq 0x90(%rsp), %rdi
callq 0x251250
leaq 0x6f(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x11b6f0
movq 0x8(%rsp), %rdx
leaq 0x1f8130(%rip), %rsi    # 0x5a79d9
leaq 0x70(%rsp), %rdi
callq 0x134520
jmp 0x3af8b5
leaq 0x18(%rsp), %rdi
movl $0xa27d, %esi           # imm = 0xA27D
callq 0x371f20
jmp 0x3af8c6
leaq 0x1f7646(%rip), %rsi    # 0x5a6f13
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rdx
callq 0x29dd70
jmp 0x3af8de
leaq 0xc0(%rsp), %rdi
movl $0x9, %esi
leaq 0x90(%rsp), %rdx
leaq 0x70(%rsp), %rcx
leaq 0x38(%rsp), %r8
callq 0x3741e0
jmp 0x3af904
movq (%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x371e40
jmp 0x3af917
leaq 0xc0(%rsp), %rdi
callq 0x371330
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x18(%rsp), %rdi
callq 0x11b838
leaq 0x70(%rsp), %rdi
callq 0x11b838
leaq 0x6f(%rsp), %rdi
callq 0x11b820
leaq 0x90(%rsp), %rdi
callq 0x2512e0
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x170(%rsp), %rsi
callq 0x284bd0
jmp 0x3afa06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
jmp 0x3af9ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
jmp 0x3af9e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
jmp 0x3af9d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
jmp 0x3af9cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x371330
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x18(%rsp), %rdi
callq 0x11b838
leaq 0x70(%rsp), %rdi
callq 0x11b838
leaq 0x6f(%rsp), %rdi
callq 0x11b820
leaq 0x90(%rsp), %rdi
callq 0x2512e0
jmp 0x3afa27
jmp 0x3afa08
jmp 0x3afa0a
callq 0x2821f0
movq %rax, 0x190(%rsp)
movq 0x190(%rsp), %rax
addq $0x198, %rsp            # imm = 0x198
retq
movq 0x60(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)