// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_repeat_until_loop()
inline expression_node_ptr parse_repeat_until_loop()
      {
         // Parse: [repeat][{][expression][}][until][(][test expr][)]
         expression_node_ptr condition = error_node();
         expression_node_ptr branch    = error_node();
         next_token();

         std::vector<expression_node_ptr> arg_list;
         std::vector<bool> side_effect_list;

         scoped_vec_delete<expression_node_t> svd((*this), arg_list);

         brkcnt_list_.push_front(false);

         if (details::imatch(current_token().value,"until"))
         {
            next_token();
            branch = node_allocator_.allocate<details::null_node<T> >();
         }
         else
         {
            const token_t::token_type separator = token_t::e_eof;

            scope_handler sh(*this);

            scoped_bool_or_restorer sbr(state_.side_effect_present);

            scoped_inc_dec sid(state_.parsing_loop_stmt_count);

            for ( ; ; )
            {
               state_.side_effect_present = false;

               expression_node_ptr arg = parse_expression();

               if (0 == arg)
                  return error_node();
               else
               {
                  arg_list.push_back(arg);
                  side_effect_list.push_back(state_.side_effect_present);
               }

               if (details::imatch(current_token().value,"until"))
               {
                  next_token();
                  break;
               }

               const bool is_next_until = peek_token_is(token_t::e_symbol) &&
                                          peek_token_is("until");

               if (!token_is(separator) && is_next_until)
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR070 - Expected '" + token_t::to_str(separator) + "' in body of repeat until loop",
                     exprtk_error_location));

                  return error_node();
               }

               if (details::imatch(current_token().value,"until"))
               {
                  next_token();
                  break;
               }
            }

            branch = simplify(arg_list,side_effect_list);

            svd.delete_ptr = (0 == branch);

            if (svd.delete_ptr)
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR071 - Failed to parse body of repeat until loop",
                  exprtk_error_location));

               return error_node();
            }
         }

         if (!token_is(token_t::e_lbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR072 - Expected '(' before condition statement of repeat until loop",
               exprtk_error_location));

            free_node(node_allocator_, branch);
            return error_node();
         }
         else if (0 == (condition = parse_expression()))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR073 - Failed to parse condition for repeat until loop",
               exprtk_error_location));

            free_node(node_allocator_, branch);
            return error_node();
         }
         else if (!token_is(token_t::e_rbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR074 - Expected ')' after condition of repeat until loop",
               exprtk_error_location));

            free_node(node_allocator_, branch   );
            free_node(node_allocator_, condition);

            return error_node();
         }

         expression_node_ptr result_node =
            expression_generator_
               .repeat_until_loop(
                  condition,
                  branch,
                  brkcnt_list_.front());

         if (0 == result_node)
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR075 - Failed to synthesize repeat until loop",
               exprtk_error_location));

            free_node(node_allocator_, condition);

            return error_node();
         }

         handle_brkcnt_scope_exit();

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

         set_error(make_error(
            parser_error::e_synthesis,
            current_token(),
            "ERR076 - Failed to synthesize 'valid' repeat until loop",
            exprtk_error_location));

         free_node(node_allocator_, result_node);

         return error_node();
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1f8, %rsp            # imm = 0x1F8
andq $0x0, 0x88(%rsp)
movq %rdi, %rbx
andq $0x0, 0x78(%rsp)
callq 0x1f6d68
leaq 0x110(%rsp), %rax
andq $0x0, 0x10(%rax)
andq $0x0, 0xe8(%rsp)
andl $0x0, 0xf0(%rsp)
andq $0x0, 0xf8(%rsp)
andl $0x0, 0x100(%rsp)
andq $0x0, 0x108(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rax)
movb $0x1, 0xd0(%rsp)
movq %rbx, 0xd8(%rsp)
movq %rax, 0xe0(%rsp)
leaq 0x358(%rbx), %r15
leaq 0x130(%rsp), %rsi
movb $0x0, (%rsi)
movq %r15, %rdi
callq 0x28bc7c
leaq 0xd3a0d(%rip), %rsi     # 0x2d3254
leaq 0x130(%rsp), %rdi
leaq 0x18(%rsp), %rdx
callq 0x127016
leaq 0x70(%rbx), %rax
movq %rax, 0x10(%rsp)
leaq 0x78(%rbx), %r12
leaq 0x130(%rsp), %r14
movq %r12, %rdi
movq %r14, %rsi
callq 0x1fbcc5
movl %eax, %ebp
movq %r14, %rdi
callq 0x118648
testb %bpl, %bpl
je 0x1ff8a6
movq %rbx, %rdi
callq 0x1f6d68
leaq 0x290(%rbx), %rdi
callq 0x208182
movq %rax, 0x78(%rsp)
jmp 0x1ffa74
movq %r15, 0xb8(%rsp)
leaq 0x94(%rsp), %rax
movl $0x6, (%rax)
movq %rbx, 0x80(%rsp)
incq 0x3b0(%rbx)
movb 0x3ac(%rbx), %al
movb %al, 0xf(%rsp)
incq 0x3c0(%rbx)
leaq 0x28(%rbx), %rax
movq %rax, 0xc0(%rsp)
leaq 0xd3965(%rip), %r14     # 0x2d3254
leaq 0x130(%rsp), %rbp
leaq 0x18(%rsp), %r15
movb $0x0, 0x3ac(%rbx)
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0xc8(%rsp)
testq %rax, %rax
je 0x1fff36
leaq 0x110(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x1fadc0
movzbl 0x3ac(%rbx), %esi
leaq 0xe8(%rsp), %rdi
callq 0x1fadde
movq %rbp, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x127016
movq %r12, %rdi
movq %rbp, %rsi
callq 0x1fbcc5
movl %eax, %r13d
movq %rbp, %rdi
callq 0x118648
testb %r13b, %r13b
jne 0x1ffa08
movq 0x18(%rbx), %rax
cmpq %rax, 0x8(%rbx)
cmoveq 0xc0(%rsp), %rax
movb $0x1, %r13b
cmpl $0x8, (%rax)
jne 0x1ff9b5
movq %rbp, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x127016
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x28ba22
movl %eax, %r13d
movq %rbp, %rdi
callq 0x118648
xorb $0x1, %r13b
movq %rbx, %rdi
leaq 0x94(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x1fae6e
orb %al, %r13b
je 0x1ffc46
movq %rbp, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x127016
movq %r12, %rdi
movq %rbp, %rsi
callq 0x1fbcc5
movl %eax, %r13d
movq %rbp, %rdi
callq 0x118648
testb %r13b, %r13b
je 0x1ff8fc
movq %rbx, %rdi
callq 0x1f6d68
jmp 0x1ffa10
movq %rbx, %rdi
callq 0x1f6d68
leaq 0x110(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x1faec2
movq 0xb8(%rsp), %r15
movq %rax, 0x78(%rsp)
testq %rax, %rax
sete 0xd0(%rsp)
je 0x1ffe9a
decq 0x3c0(%rbx)
cmpb $0x0, 0x3ac(%rbx)
movzbl 0xf(%rsp), %eax
pushq $0x1
popq %rcx
cmovnel %ecx, %eax
movb %al, 0x3ac(%rbx)
leaq 0x80(%rsp), %rdi
callq 0x208208
leaq 0x130(%rsp), %rsi
movl $0x28, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1ffbd0
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x88(%rsp)
testq %rax, %rax
je 0x1ffd28
leaq 0x130(%rsp), %rsi
movl $0x29, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1ffddd
movq %r15, %r12
leaq 0x220(%rbx), %rdi
movq 0x368(%rbx), %rax
movzbl (%rax), %ecx
leaq 0x88(%rsp), %r14
leaq 0x78(%rsp), %rdx
movq %r14, %rsi
callq 0x28c43e
movq %rax, %r15
movq %rax, 0x98(%rsp)
testq %rax, %rax
je 0x1fffa1
movq %r12, %rdi
callq 0x28c3ea
movq (%r15), %rax
movq %r15, %rdi
callq *0x30(%rax)
testb %al, %al
jne 0x1fff65
leaq 0xdbae5(%rip), %rsi     # 0x2db613
leaq 0x18(%rsp), %rdi
leaq 0x1d8(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x6916, %esi           # imm = 0x6916
callq 0x1f7a3c
leaq 0xda0a5(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x7
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x118648
leaq 0x18(%rsp), %rdi
callq 0x118648
leaq 0x98(%rsp), %r14
jmp 0x20003d
leaq 0xdb952(%rip), %rsi     # 0x2db529
leaq 0x18(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x68d9, %esi           # imm = 0x68D9
callq 0x1f7a3c
leaq 0xd9ffc(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
jmp 0x1ffd99
leaq 0x38(%rsp), %rdi
pushq $0x6
popq %rsi
callq 0x207f72
leaq 0xdb869(%rip), %rsi     # 0x2db4c3
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0xdb867(%rip), %rdx     # 0x2db4d7
leaq 0x18(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x1b42c3
leaq 0x1d8(%rsp), %rdi
movl $0x68b7, %esi           # imm = 0x68B7
callq 0x1f7a3c
leaq 0xd9f63(%rip), %rsi     # 0x2d9bfb
leaq 0x98(%rsp), %rdi
leaq 0x1d8(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x98(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
leaq 0x98(%rsp), %rdi
callq 0x118648
leaq 0x1d8(%rsp), %rdi
callq 0x118648
leaq 0x18(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
jmp 0x1fff31
leaq 0xdb840(%rip), %rsi     # 0x2db56f
leaq 0x18(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x68e4, %esi           # imm = 0x68E4
callq 0x1f7a3c
leaq 0xd9ea4(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x118648
leaq 0x18(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
leaq 0x78(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
jmp 0x1fff62
leaq 0xdb7c4(%rip), %rsi     # 0x2db5a8
leaq 0x18(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x68ef, %esi           # imm = 0x68EF
callq 0x1f7a3c
leaq 0xd9def(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x118648
leaq 0x18(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
leaq 0x78(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
leaq 0x88(%rsp), %rsi
jmp 0x1ffdd0
leaq 0xdb655(%rip), %rsi     # 0x2db4f6
leaq 0x18(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x68cd, %esi           # imm = 0x68CD
callq 0x1f7a3c
leaq 0xd9d32(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x118648
leaq 0x18(%rsp), %rdi
callq 0x118648
decq 0x3c0(%rbx)
cmpb $0x0, 0x3ac(%rbx)
movzbl 0xf(%rsp), %eax
pushq $0x1
popq %rcx
cmovnel %ecx, %eax
movb %al, 0x3ac(%rbx)
leaq 0x80(%rsp), %rdi
callq 0x208208
xorl %r15d, %r15d
leaq 0xd0(%rsp), %rdi
callq 0x1fb1b8
leaq 0xe8(%rsp), %rdi
callq 0x1fb234
leaq 0x110(%rsp), %rdi
callq 0x29e264
movq %r15, %rax
addq $0x1f8, %rsp            # imm = 0x1F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xdb63b(%rip), %rsi     # 0x2db5e3
leaq 0x18(%rsp), %rdi
leaq 0x1d8(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x6904, %esi           # imm = 0x6904
callq 0x1f7a3c
leaq 0xd9c2b(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x130(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x18(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq 0x10(%rsp), %rdx
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1f76ce
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x118648
leaq 0x18(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ad9c8
jmp 0x1fff62
jmp 0x200164
jmp 0x200176
jmp 0x200185
jmp 0x200194
jmp 0x2001bf
jmp 0x200164
jmp 0x200176
jmp 0x200185
jmp 0x200194
jmp 0x2001bf
movq %rax, %r14
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
jmp 0x20009b
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x118648
jmp 0x2000aa
movq %rax, %r14
leaq 0x38(%rsp), %rdi
callq 0x118648
jmp 0x2000b9
movq %rax, %r14
leaq 0x18(%rsp), %rdi
jmp 0x2001b6
jmp 0x2001ca
jmp 0x200164
jmp 0x200176
jmp 0x200185
jmp 0x200194
jmp 0x2001bf
jmp 0x2001ca
jmp 0x200164
jmp 0x200176
jmp 0x200185
jmp 0x200194
jmp 0x2001bf
movq %rax, %r14
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
jmp 0x200111
movq %rax, %r14
leaq 0x98(%rsp), %rdi
callq 0x118648
jmp 0x200123
movq %rax, %r14
leaq 0x1d8(%rsp), %rdi
callq 0x118648
jmp 0x200135
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x118648
jmp 0x200144
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
jmp 0x2001b6
movq %rax, %r14
jmp 0x20014e
jmp 0x2001ca
jmp 0x2001ca
jmp 0x2001bf
jmp 0x2001bf
jmp 0x2001ca
movq %rax, %r14
leaq 0x130(%rsp), %rdi
callq 0x1f5c4c
jmp 0x200179
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x118648
jmp 0x200188
movq %rax, %r14
leaq 0x38(%rsp), %rdi
callq 0x118648
jmp 0x200197
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x118648
jmp 0x2001f9
jmp 0x2001bf
jmp 0x2001bf
jmp 0x2001bf
jmp 0x2001bf
movq %rax, %r14
leaq 0x130(%rsp), %rdi
callq 0x118648
jmp 0x2001cd
jmp 0x2001ca
movq %rax, %r14
jmp 0x2001f9
jmp 0x2001ca
jmp 0x2001ca
jmp 0x2001ca
movq %rax, %r14
decq 0x3c0(%rbx)
cmpb $0x0, 0x3ac(%rbx)
movzbl 0xf(%rsp), %eax
pushq $0x1
popq %rcx
cmovnel %ecx, %eax
movb %al, 0x3ac(%rbx)
leaq 0x80(%rsp), %rdi
callq 0x208208
leaq 0xd0(%rsp), %rdi
callq 0x1fb1b8
leaq 0xe8(%rsp), %rdi
callq 0x1fb234
leaq 0x110(%rsp), %rdi
callq 0x29e264
movq %r14, %rdi
callq 0x118360