// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::repeat_until_loop(exprtk::details::expression_node<double>*&, exprtk::details::expression_node<double>*&, bool) const
inline expression_node_ptr repeat_until_loop(expression_node_ptr& condition,
                                                      expression_node_ptr& branch,
                                                      const bool break_continue_present = false) const
         {
            if (!break_continue_present && details::is_constant_node(condition))
            {
               if (
                    details::is_true(condition) &&
                    details::is_constant_node(branch)
                  )
               {
                  free_node(*node_allocator_,condition);

                  return branch;
               }

               details::free_node(*node_allocator_, condition);
               details::free_node(*node_allocator_, branch   );

               return error_node();
            }
            else if (details::is_null_node(condition))
            {
               details::free_node(*node_allocator_,condition);

               return branch;
            }

            loop_runtime_check_ptr rtc = get_loop_runtime_check(loop_runtime_check::e_repeat_until_loop);

            if (!break_continue_present)
            {
               if (rtc)
                  return node_allocator_->allocate<repeat_until_loop_rtc_node_t>
                           (condition, branch,  rtc);
               else
                  return node_allocator_->allocate<repeat_until_loop_node_t>
                           (condition, branch);
            }
            #ifndef exprtk_disable_break_continue
            else
            {
               if (rtc)
                  return node_allocator_->allocate<repeat_until_loop_bc_rtc_node_t>
                           (condition, branch, rtc);
               else
                  return node_allocator_->allocate<repeat_until_loop_bc_node_t>
                           (condition, branch);
            }
            #else
               return error_node();
            #endif
         }

// Assembly:
subq $0x38, %rsp
movb %cl, %al
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
movq %rdx, 0x18(%rsp)
andb $0x1, %al
movb %al, 0x17(%rsp)
movq 0x28(%rsp), %rax
movq %rax, (%rsp)
testb $0x1, 0x17(%rsp)
jne 0x4e76af
movq 0x20(%rsp), %rax
movq (%rax), %rdi
callq 0x39cbf0
testb $0x1, %al
jne 0x4e7632
jmp 0x4e76af
movq 0x20(%rsp), %rax
movq (%rax), %rdi
callq 0x39d260
testb $0x1, %al
jne 0x4e7645
jmp 0x4e767c
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0x39cbf0
testb $0x1, %al
jne 0x4e7658
jmp 0x4e767c
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x284bd0
movq 0x18(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0x4e7792
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x284bd0
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x18(%rsp), %rsi
callq 0x284bd0
callq 0x2821f0
movq %rax, 0x30(%rsp)
jmp 0x4e7792
movq 0x20(%rsp), %rax
movq (%rax), %rdi
callq 0x3af620
testb $0x1, %al
jne 0x4e76c2
jmp 0x4e76e6
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x284bd0
movq 0x18(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0x4e7792
jmp 0x4e76e8
movq (%rsp), %rdi
movl $0x4, %esi
callq 0x4e6830
movq %rax, 0x8(%rsp)
testb $0x1, 0x17(%rsp)
jne 0x4e774b
cmpq $0x0, 0x8(%rsp)
je 0x4e772d
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
leaq 0x8(%rsp), %rcx
callq 0x4e77a0
movq %rax, 0x30(%rsp)
jmp 0x4e7792
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
callq 0x4e7840
movq %rax, 0x30(%rsp)
jmp 0x4e7792
cmpq $0x0, 0x8(%rsp)
je 0x4e7776
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
leaq 0x8(%rsp), %rcx
callq 0x4e78d0
movq %rax, 0x30(%rsp)
jmp 0x4e7792
movq (%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
callq 0x4e7970
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nopl (%rax)