// File: /workspace/github_cpp_makefile_star2_O3/AgathokakologicalBit[P]wit/src/parsing/parsing.cpp
// Function: akbit::system::parsing::(anonymous namespace)::parse_statement_condition(akbit::system::parsing::ParserState&)
std::shared_ptr<Node> parse_statement_condition(ParserState &state)
    {
      state.consume(TokenSubType::t_identifier, "if");
      if (state.is_failed()) return nullptr;
      auto container = std::make_shared<Node>(Node::condition_t{});
      auto &cc = std::get<Node::condition_t>(container->value);
      cc.expression = parse_statement(state);
      if (state.is_failed()) return container;
      state.consume(TokenSubType::t_identifier, "then");
      if (state.is_failed()) return container;
      cc.clause_true = parse_statement(state);
      if (state.is_failed()) return container;

      state.save();
      state.consume(TokenSubType::t_identifier, "else");
      if (state.is_failed())
      {
        state.restore();
        return container;
      }
      state.drop();
      cc.clause_false = parse_statement(state);
      return container;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x90(%rsp), %r15
movq %r15, -0x10(%r15)
movw $0x6669, (%r15)         # imm = 0x6669
movq $0x2, -0x8(%r15)
movb $0x0, 0x2(%r15)
leaq 0x110(%rsp), %rdi
leaq 0x80(%rsp), %rcx
movl $0x3, %edx
callq 0x900a
leaq 0x130(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa260
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0xa27d
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0xa28f
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0xa4ca
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, 0x20(%rdx)
movaps %xmm0, 0x10(%rdx)
movaps %xmm0, (%rdx)
leaq 0xf(%rsp), %rsi
movq %rbx, %rdi
callq 0xd852
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0xa2be
callq 0x6d78
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa2cd
callq 0x6d78
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa2dc
callq 0x6d78
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xd940
movq %rax, %r15
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9984
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x8(%r15), %rdi
movups %xmm0, (%r15)
testq %rdi, %rdi
je 0xa326
callq 0x6d78
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa326
callq 0x6d78
cmpl $0x0, 0x10(%r14)
jne 0xa4ca
leaq 0x70(%rsp), %r12
movq %r12, -0x10(%r12)
movl $0x6e656874, (%r12)     # imm = 0x6E656874
movq $0x4, -0x8(%r12)
movb $0x0, 0x4(%r12)
leaq 0xd8(%rsp), %rdi
leaq 0x60(%rsp), %rcx
movq %r14, %rsi
movl $0x3, %edx
callq 0x900a
leaq 0xf8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa38d
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0xa3a4
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
jne 0xa4ca
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9984
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x18(%r15), %rdi
movups %xmm0, 0x10(%r15)
testq %rdi, %rdi
je 0xa3eb
callq 0x6d78
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa3eb
callq 0x6d78
cmpl $0x0, 0x10(%r14)
jne 0xa4ca
movq 0x40(%r14), %rsi
cmpq 0x48(%r14), %rsi
je 0xa411
movq 0x8(%r14), %rax
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x40(%r14)
jmp 0xa41e
leaq 0x8(%r14), %rdx
leaq 0x38(%r14), %rdi
callq 0xd04a
leaq 0x50(%rsp), %r12
movq %r12, -0x10(%r12)
movl $0x65736c65, (%r12)     # imm = 0x65736C65
movq $0x4, -0x8(%r12)
movb $0x0, 0x4(%r12)
leaq 0xa0(%rsp), %rdi
leaq 0x40(%rsp), %rcx
movq %r14, %rsi
movl $0x3, %edx
callq 0x900a
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa47a
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x40(%rsp), %rdi
cmpq %r12, %rdi
je 0xa491
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0xa4d9
movq 0x20(%r14), %rdx
movq 0x40(%r14), %rax
movq -0x8(%rax), %rax
movq %rax, 0x8(%r14)
movl $0x0, 0x10(%r14)
leaq 0x18(%r14), %rdi
leaq 0xae66(%rip), %rcx      # 0x15321
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x32d0
addq $-0x8, 0x40(%r14)
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r14
popq %r15
retq
addq $-0x8, 0x40(%r14)
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9984
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x28(%r15), %rdi
movups %xmm0, 0x20(%r15)
testq %rdi, %rdi
je 0xa4ca
callq 0x6d78
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa4ca
callq 0x6d78
jmp 0xa4ca
jmp 0xa561
movq %rax, %r14
movq 0x40(%rsp), %rdi
cmpq %r12, %rdi
je 0xa564
movq 0x50(%rsp), %rsi
jmp 0xa546
jmp 0xa561
movq %rax, %r14
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0xa564
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
jmp 0xa564
jmp 0xa561
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0xc65c
jmp 0xa594
movq %rax, %r14
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0xa594
callq 0x6d78
jmp 0xa594
movq %rax, %r14
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0xa594
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
movq %r14, %rdi
callq 0x3350