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

         bool result = true;

         next_token();

         if (!token_is(token_t::e_lbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR064 - Expected '(' at start of while-loop condition statement",
               exprtk_error_location));

            return error_node();
         }
         else if (0 == (condition = parse_expression()))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR065 - Failed to parse condition for while-loop",
               exprtk_error_location));

            return error_node();
         }
         else if (!token_is(token_t::e_rbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR066 - Expected ')' at end of while-loop condition statement",
               exprtk_error_location));

            result = false;
         }

         brkcnt_list_.push_front(false);

         if (result)
         {
            scoped_inc_dec sid(state_.parsing_loop_stmt_count);

            if (0 == (branch = parse_multi_sequence("while-loop", true)))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR067 - Failed to parse body of while-loop"));
               result = false;
            }
            else if (0 == (result_node = expression_generator_.while_loop(condition,
                                                                          branch,
                                                                          brkcnt_list_.front())))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR068 - Failed to synthesize while-loop",
                  exprtk_error_location));

               result = false;
            }
         }

         handle_brkcnt_scope_exit();

         if (!result)
         {
            free_node(node_allocator_, branch     );
            free_node(node_allocator_, condition  );
            free_node(node_allocator_, result_node);

            return error_node();
         }

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

         set_error(make_error(
            parser_error::e_synthesis,
            current_token(),
            "ERR069 - Failed to synthesize 'valid' while-loop",
            exprtk_error_location));

         free_node(node_allocator_, result_node);

         return error_node();
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
andq $0x0, 0x78(%rsp)
andq $0x0, 0x70(%rsp)
movq %rdi, %rbx
andq $0x0, 0x68(%rsp)
callq 0x1f6d68
leaq 0x80(%rsp), %rsi
movl $0x28, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1ff413
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x78(%rsp)
testq %rax, %rax
je 0x1ff485
leaq 0x80(%rsp), %rsi
movl $0x29, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
movb $0x1, %bpl
testb %al, %al
jne 0x1ff2e0
leaq 0xdc159(%rip), %rsi     # 0x2db3a6
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x48(%rsp), %rdi
movl $0x6841, %esi           # imm = 0x6841
callq 0x1f7a3c
leaq 0xda989(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x80(%rsp), %rsi
callq 0x1f76ce
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
xorl %ebp, %ebp
leaq 0x358(%rbx), %r14
leaq 0x80(%rsp), %rsi
movb $0x0, (%rsi)
movq %r14, %rdi
callq 0x28bc7c
testb %bpl, %bpl
je 0x1ff525
incq 0x3c0(%rbx)
leaq 0xdc14f(%rip), %rsi     # 0x2db460
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x127016
leaq 0x80(%rsp), %rsi
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x206ecc
movq %rax, %r15
movq %rax, 0x70(%rsp)
leaq 0x80(%rsp), %rdi
callq 0x118648
testq %r15, %r15
je 0x1ff52d
leaq 0x220(%rbx), %rdi
movq 0x368(%rbx), %rax
movzbl (%rax), %ecx
leaq 0x78(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0x28ba48
movq %rax, %r15
movq %rax, 0x68(%rsp)
testq %rax, %rax
jne 0x1ff5b1
leaq 0xdc085(%rip), %rsi     # 0x2db411
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x48(%rsp), %rdi
movl $0x685c, %esi           # imm = 0x685C
callq 0x1f7a3c
leaq 0xda84a(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x80(%rsp), %rsi
callq 0x1f76ce
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
jmp 0x1ff59d
leaq 0xdbf19(%rip), %rsi     # 0x2db333
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x48(%rsp), %rdi
movl $0x682d, %esi           # imm = 0x682D
callq 0x1f7a3c
leaq 0xda7bc(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x80(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x1ff4f5
leaq 0xdbee8(%rip), %rsi     # 0x2db374
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x48(%rsp), %rdi
movl $0x6837, %esi           # imm = 0x6837
callq 0x1f7a3c
leaq 0xda74a(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x80(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x1ff6b3
xorl %r15d, %r15d
jmp 0x1ff5b8
leaq 0xdbeb1(%rip), %rsi     # 0x2db3e5
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x127016
leaq 0xe93bf(%rip), %rsi     # 0x2e8909
leaq 0x28(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x80(%rsp), %rsi
callq 0x1f76ce
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
xorl %r15d, %r15d
xorl %ebp, %ebp
decq 0x3c0(%rbx)
movq %r14, %rdi
callq 0x28c3ea
testb %bpl, %bpl
je 0x1ff5e1
testq %r15, %r15
je 0x1ff607
movq (%r15), %rax
movq %r15, %rdi
callq *0x30(%rax)
testb %al, %al
je 0x1ff607
movq 0x68(%rsp), %rax
jmp 0x1ff6b5
addq $0x290, %rbx            # imm = 0x290
leaq 0x70(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
leaq 0x78(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
jmp 0x1ff6a6
leaq 0xdbe2c(%rip), %rsi     # 0x2db43a
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x48(%rsp), %rdi
movl $0x6876, %esi           # imm = 0x6876
callq 0x1f7a3c
leaq 0xda5c8(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x7
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x80(%rsp), %rsi
callq 0x1f76ce
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
leaq 0x68(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
xorl %eax, %eax
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1ff6d8
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x1ff6e7
movq %rax, %r14
leaq 0x48(%rsp), %rdi
jmp 0x1ff70c
jmp 0x1ff713
jmp 0x1ff741
movq %rax, %r14
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1ff707
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x1ff716
movq %rax, %r14
leaq 0x8(%rsp), %rdi
jmp 0x1ff738
jmp 0x1ff741
jmp 0x1ff741
jmp 0x1ff75d
jmp 0x1ff76f
jmp 0x1ff77e
jmp 0x1ff78d
jmp 0x1ff79c
jmp 0x1ff75d
movq %rax, %r14
leaq 0x80(%rsp), %rdi
callq 0x118648
jmp 0x1ff744
jmp 0x1ff76f
movq %rax, %r14
decq 0x3c0(%rbx)
jmp 0x1ff79f
jmp 0x1ff77e
jmp 0x1ff78d
jmp 0x1ff79c
jmp 0x1ff75d
jmp 0x1ff76f
jmp 0x1ff77e
jmp 0x1ff78d
jmp 0x1ff79c
movq %rax, %r14
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1ff772
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x1ff781
movq %rax, %r14
leaq 0x48(%rsp), %rdi
callq 0x118648
jmp 0x1ff790
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x1ff79f
movq %rax, %r14
movq %r14, %rdi
callq 0x118360
nop