// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0x140, %rsp            # imm = 0x140
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x8b6f(%rip), %rsi      # 0x11805
leaq 0x78(%rsp), %rdi
movq %rsp, %rdx
callq 0x6728
leaq 0x108(%rsp), %rdi
pushq $0x3
popq %rdx
leaq 0x78(%rsp), %rcx
movq %r14, %rsi
callq 0x837c
leaq 0x118(%rsp), %rdi
callq 0x4120
leaq 0x78(%rsp), %rdi
callq 0x4120
cmpl $0x0, 0x10(%r14)
je 0x8ce4
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0x8e3e
xorps %xmm0, %xmm0
movq %rsp, %rsi
movaps %xmm0, 0x20(%rsi)
movaps %xmm0, 0x10(%rsi)
movaps %xmm0, (%rsi)
movq %rbx, %rdi
callq 0xb2f9
movq %rsp, %rdi
callq 0x6aee
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xb40b
movq %rax, %r15
movq %rsp, %rdi
movq %r14, %rsi
callq 0x87ce
movq %rsp, %rsi
movq %r15, %rdi
callq 0xa740
leaq 0x8(%rsp), %rdi
callq 0x69e2
cmpl $0x0, 0x10(%r14)
jne 0x8e3e
leaq 0x8ac2(%rip), %rsi      # 0x11808
leaq 0x58(%rsp), %rdi
movq %rsp, %rdx
callq 0x6728
leaq 0xd0(%rsp), %rdi
pushq $0x3
popq %rdx
leaq 0x58(%rsp), %rcx
movq %r14, %rsi
callq 0x837c
leaq 0xe0(%rsp), %rdi
callq 0x4120
leaq 0x58(%rsp), %rdi
callq 0x4120
cmpl $0x0, 0x10(%r14)
jne 0x8e3e
movq %rsp, %rdi
movq %r14, %rsi
callq 0x87ce
leaq 0x10(%r15), %rdi
movq %rsp, %rsi
callq 0xa740
leaq 0x8(%rsp), %rdi
callq 0x69e2
cmpl $0x0, 0x10(%r14)
jne 0x8e3e
movq %r14, %rdi
callq 0xa7fc
leaq 0x8a45(%rip), %rsi      # 0x1180d
leaq 0x38(%rsp), %rdi
movq %rsp, %rdx
callq 0x6728
leaq 0x98(%rsp), %rdi
pushq $0x3
popq %rdx
leaq 0x38(%rsp), %rcx
movq %r14, %rsi
callq 0x837c
leaq 0xa8(%rsp), %rdi
callq 0x4120
leaq 0x38(%rsp), %rdi
callq 0x4120
cmpl $0x0, 0x10(%r14)
je 0x8e15
movq %r14, %rdi
callq 0xa80c
jmp 0x8e3e
addq $-0x8, 0x40(%r14)
movq %rsp, %rdi
movq %r14, %rsi
callq 0x87ce
addq $0x20, %r15
movq %rsp, %rsi
movq %r15, %rdi
callq 0xa740
leaq 0x8(%rsp), %rdi
callq 0x69e2
movq %rbx, %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbx
popq %r14
popq %r15
retq
jmp 0x8e7e
movq %rax, %r14
leaq 0x38(%rsp), %rdi
jmp 0x8e66
jmp 0x8e7e
jmp 0x8e7e
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x4120
jmp 0x8e81
jmp 0x8e7e
jmp 0x8e7e
movq %rax, %r14
movq %rsp, %rdi
callq 0x6aee
jmp 0x8ea1
movq %rax, %r14
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x69e2
jmp 0x8ea1
movq %rax, %r14
leaq 0x78(%rsp), %rdi
callq 0x4120
jmp 0x8ea1
movq %rax, %r14
movq %r14, %rdi
callq 0x43c0