// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::expression_generator<double>::synthesize_expression<exprtk::details::function_N_node<double, exprtk::ifunction<double>, 1ul>, 1ul>(exprtk::ifunction<double>*, exprtk::details::expression_node<double>* (&) [1ul])
inline expression_node_ptr synthesize_expression(F* f, expression_node_ptr (&branch)[N])
         {
            if (!details::all_nodes_valid<N>(branch))
            {
               free_all_nodes(*node_allocator_,branch);

               return error_node();
            }

            typedef typename details::function_N_node<T,ifunction_t,N> function_N_node_t;

            // Attempt simple constant folding optimisation.

            expression_node_ptr expression_point = node_allocator_->allocate<NodeType>(f);
            function_N_node_t* func_node_ptr = dynamic_cast<function_N_node_t*>(expression_point);

            if (0 == func_node_ptr)
            {
               free_all_nodes(*node_allocator_,branch);

               return error_node();
            }
            else
               func_node_ptr->init_branches(branch);

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

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

            parser_->state_.activate_side_effect("synthesize_expression(function<NT,N>)");

            return expression_point;
         }

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x88(%rsp)
movq %rsi, 0x80(%rsp)
movq %rdx, 0x78(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x78(%rsp), %rdi
callq 0x3b0db0
testb $0x1, %al
jne 0x53d6dc
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x78(%rsp), %rsi
callq 0x3b0d60
callq 0x2821f0
movq %rax, 0x90(%rsp)
jmp 0x53d86e
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x80(%rsp), %rsi
callq 0x53d9a0
movq %rax, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, %rax
je 0x53d72a
movq 0x18(%rsp), %rdi
leaq 0x22cacd(%rip), %rsi    # 0x76a1e0
leaq 0x291686(%rip), %rdx    # 0x7ceda0
xorl %eax, %eax
movl %eax, %ecx
callq 0x11b6d0
movq %rax, 0x10(%rsp)
jmp 0x53d733
xorl %eax, %eax
movq %rax, 0x10(%rsp)
jmp 0x53d733
movq 0x10(%rsp), %rax
movq %rax, 0x68(%rsp)
xorl %eax, %eax
cmpq 0x68(%rsp), %rax
jne 0x53d76b
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x78(%rsp), %rsi
callq 0x3b0d60
callq 0x2821f0
movq %rax, 0x90(%rsp)
jmp 0x53d86e
movq 0x68(%rsp), %rdi
movq 0x78(%rsp), %rsi
callq 0x53d890
movq 0x20(%rsp), %rdi
movq 0x78(%rsp), %rsi
callq 0x3b0e50
testb $0x1, %al
jne 0x53d78f
jmp 0x53d7e9
movq 0x80(%rsp), %rdi
addq $0x8, %rdi
callq 0x237b00
testb $0x1, (%rax)
jne 0x53d7e9
movq 0x70(%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq 0x20(%rsp), %rax
movsd %xmm0, 0x60(%rsp)
movq 0x8(%rax), %rdi
leaq 0x70(%rsp), %rsi
callq 0x284bd0
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x60(%rsp), %rsi
callq 0x53da20
movq %rax, 0x90(%rsp)
jmp 0x53d86e
movq 0x20(%rsp), %rax
movq 0x68(%rax), %rax
addq $0x3a8, %rax            # imm = 0x3A8
movq %rax, (%rsp)
leaq 0x3f(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x11b6f0
movq 0x8(%rsp), %rdx
leaq 0x6d17b(%rip), %rsi     # 0x5aa992
leaq 0x40(%rsp), %rdi
callq 0x134520
jmp 0x53d823
movq (%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x3eb500
leaq 0x40(%rsp), %rdi
callq 0x11b838
leaq 0x3f(%rsp), %rdi
callq 0x11b820
movq 0x70(%rsp), %rax
movq %rax, 0x90(%rsp)
jmp 0x53d86e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
leaq 0x3f(%rsp), %rdi
callq 0x11b820
jmp 0x53d87e
movq 0x90(%rsp), %rax
addq $0x98, %rsp
retq
movq 0x30(%rsp), %rdi
callq 0x11b4e0
nopl (%rax,%rax)