// File: /workspace/github_cpp_makefile_star2_O3/AgathokakologicalBit[P]wit/src/parsing/parsing.cpp
// Function: akbit::system::parsing::(anonymous namespace)::parse_statement_declaration(akbit::system::parsing::ParserState&)
std::shared_ptr<Node> parse_statement_declaration(ParserState &state)
    {
      state.consume(TokenSubType::t_identifier, "let");
      if (state.is_failed()) return nullptr;

      auto container = std::make_shared<Node>(Node::declaration_t{});
      auto idt = state.consume(TokenType::t_identifier);
      if (state.is_failed()) return container;

      std::get<Node::declaration_t>(container->value).variable = std::make_shared<Node>(Node(Node::value_variable_t{
        .name = idt.value,
      }));
      auto unode = std::make_shared<Node>();
      auto data = parse_expression(unode, state, 2);
      if (data != unode)
      {
        if (data->value.index() == 5 && std::get<Node::binary_operation_t>(data->value).operation == find_operator(":"))
        {
          data = std::get<Node::binary_operation_t>(data->value).operands[1];
        }
        else
        {
          data = unode;
        }
      }
      std::get<Node::declaration_t>(container->value).type = data;

      state.consume(TokenSubType::t_equal);
      if (state.is_failed()) return container;

      std::get<Node::declaration_t>(container->value).value = parse_statement(state);
      return container;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x90(%rsp), %r15
movq %r15, -0x10(%r15)
movl $0x74656c, (%r15)       # imm = 0x74656C
movq $0x3, -0x8(%r15)
leaq 0x168(%rsp), %rdi
leaq 0x80(%rsp), %rcx
movl $0x3, %edx
callq 0x900a
leaq 0x188(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x9cf1
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0x9d0e
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0x9d20
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0xa059
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rdx
movaps %xmm0, 0x20(%rdx)
movaps %xmm0, 0x10(%rdx)
movaps %xmm0, (%rdx)
leaq 0xf8(%rsp), %rsi
movq %rbx, %rdi
callq 0xc9f6
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x9d58
callq 0x6d78
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x9d6a
callq 0x6d78
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x9d7c
callq 0x6d78
leaq 0xf8(%rsp), %rdi
movq %r14, %rsi
movl $0x2, %edx
xorl %ecx, %ecx
callq 0x86e0
cmpl $0x0, 0x10(%r14)
jne 0xa038
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x108(%rsp), %rsi
movq 0x110(%rsp), %rdx
addq %rsi, %rdx
leaq 0x30(%rsp), %rdi
callq 0x6de8
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %rsi
movups %xmm0, 0x20(%rsi)
leaq 0xa0(%rsp), %rdi
callq 0xc9ba
leaq 0x18(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x10(%rsp), %rsi
leaq 0xf(%rsp), %rdx
leaq 0xa0(%rsp), %rcx
callq 0xcae4
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xcea2
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x8(%rax), %rdi
movups %xmm0, (%rax)
testq %rdi, %rdi
je 0x9e3a
callq 0x6d78
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x9e3a
callq 0x6d78
leaq 0xa0(%rsp), %rdi
callq 0xc7a2
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x9e7d
movq 0x13160(%rip), %rax     # 0x1cfb8
cmpb $0x0, (%rax)
je 0x9e68
movl 0xc(%rdi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0xc(%rdi)
jmp 0x9e72
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
lock
xaddl %eax, 0xc(%rdi)
cmpl $0x1, %eax
jne 0x9e7d
movq (%rdi), %rax
callq *0x18(%rax)
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x9e94
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x31f0
movl $0x68, %edi
callq 0x31e0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x12afd(%rip), %rcx     # 0x1c9b0
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x30(%rax)
movups %xmm0, 0x40(%rax)
movups %xmm0, 0x50(%rax)
movq $0x0, 0x60(%rax)
movq %rax, 0xa8(%rsp)
movq %rcx, 0xa0(%rsp)
movq %rcx, 0x20(%rsp)
movq %rax, 0x28(%rsp)
movq 0x130bb(%rip), %rcx     # 0x1cfb8
cmpb $0x0, (%rcx)
je 0x9f0b
movl $0x2, 0x8(%rax)
jmp 0x9f0f
lock
incl 0x8(%rax)
leaq 0x30(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %r14, %rdx
movl $0x2, %ecx
callq 0xa59c
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x9f35
callq 0x6d78
movq 0x30(%rsp), %rdi
cmpq 0xa0(%rsp), %rdi
je 0x9fb5
cmpb $0x5, 0x48(%rdi)
jne 0x9f9b
addq $0x10, %rdi
callq 0xd7a5
movq (%rax), %r12
leaq 0x70(%rsp), %r13
movq %r13, -0x10(%r13)
movw $0x3a, (%r13)
movq $0x1, -0x8(%r13)
leaq 0x60(%rsp), %rdi
callq 0x76f8
movq %rax, %r15
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x9f92
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpq %r15, %r12
je 0xa0be
leaq 0xa8(%rsp), %rsi
movq -0x8(%rsi), %rax
leaq 0x38(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0xd808
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xcea2
leaq 0x38(%rsp), %rsi
movq -0x8(%rsi), %rcx
movq %rcx, 0x10(%rax)
addq $0x18, %rax
movq %rax, %rdi
callq 0xd808
leaq 0x130(%rsp), %rdi
movq %r14, %rsi
movl $0x1d, %edx
callq 0x8aec
leaq 0x150(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa010
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0xa06a
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0xa026
callq 0x6d78
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0xa038
callq 0x6d78
leaq 0x118(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa059
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x31f0
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9984
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xcea2
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x28(%rax), %rdi
movups %xmm0, 0x20(%rax)
testq %rdi, %rdi
je 0xa017
callq 0x6d78
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa017
callq 0x6d78
jmp 0xa017
movq 0x30(%rsp), %rdi
addq $0x10, %rdi
callq 0xd7a5
movq 0x8(%rax), %rsi
movq 0x10(%rsi), %rax
leaq 0x38(%rsp), %rdi
movq %rax, -0x8(%rdi)
addq $0x18, %rsi
jmp 0x9fb0
movq %rax, %r14
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0xa161
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
jmp 0xa161
movq %rax, %r14
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa161
callq 0x6d78
jmp 0xa161
jmp 0xa15e
movq %rax, %r14
movq 0x28(%rsp), %rdi
jmp 0xa166
jmp 0xa159
movq %rax, %r14
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa13b
callq 0x6d78
jmp 0xa13b
movq %rax, %r14
leaq 0xa0(%rsp), %rdi
callq 0xc7a2
jmp 0xa14d
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0xc726
jmp 0xa182
movq %rax, %r14
jmp 0xa182
movq %rax, %r14
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0xa170
callq 0x6d78
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0xa182
callq 0x6d78
leaq 0x118(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa1a8
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x31f0
jmp 0xa1a8
movq %rax, %r14
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0xa1ea
callq 0x6d78
jmp 0xa1ea
movq %rax, %r14
leaq 0xa0(%rsp), %rdi
callq 0xc5fa
jmp 0xa1ea
movq %rax, %r14
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0xa1ea
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
movq %r14, %rdi
callq 0x3350