// File: /workspace/github_cpp_makefile_star2_O1/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 0x8fe6
leaq 0x130(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa237
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0xa254
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0xa266
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0xa4e4
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 0xd862
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0xa295
callq 0x6da4
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa2a4
callq 0x6da4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa2b3
callq 0x6da4
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xd950
movq %rax, %r15
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9941
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x8(%r15), %rdi
movups %xmm0, (%r15)
testq %rdi, %rdi
je 0xa2ee
callq 0x6da4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa2fd
callq 0x6da4
cmpl $0x0, 0x10(%r14)
jne 0xa4e4
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 0x8fe6
leaq 0xf8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa364
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0xa37b
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
jne 0xa4e4
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9941
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x18(%r15), %rdi
movups %xmm0, 0x10(%r15)
testq %rdi, %rdi
je 0xa3b3
callq 0x6da4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa3c2
callq 0x6da4
cmpl $0x0, 0x10(%r14)
jne 0xa4e4
movq 0x40(%r14), %rsi
cmpq 0x48(%r14), %rsi
je 0xa3e8
movq 0x8(%r14), %rax
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x40(%r14)
jmp 0xa3f5
leaq 0x8(%r14), %rdx
leaq 0x38(%r14), %rdi
callq 0xd056
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 0x8fe6
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa451
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x40(%rsp), %rdi
cmpq %r12, %rdi
je 0xa468
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0xa4a3
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 0xae8f(%rip), %rcx      # 0x15321
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x32d0
addq $-0x8, 0x40(%r14)
jmp 0xa4e4
addq $-0x8, 0x40(%r14)
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9941
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x28(%r15), %rdi
movups %xmm0, 0x20(%r15)
testq %rdi, %rdi
je 0xa4d5
callq 0x6da4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa4e4
callq 0x6da4
movq %rbx, %rax
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0xa53b
movq %rax, %r14
movq 0x40(%rsp), %rdi
cmpq %r12, %rdi
je 0xa53e
movq 0x50(%rsp), %rsi
jmp 0xa520
jmp 0xa53b
movq %rax, %r14
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0xa53e
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
jmp 0xa53e
jmp 0xa53b
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0xc5ba
jmp 0xa56e
movq %rax, %r14
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0xa56e
callq 0x6da4
jmp 0xa56e
movq %rax, %r14
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0xa56e
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
movq %r14, %rdi
callq 0x3350