// File: /workspace/github_cpp_makefile_star2_O2/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 %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x8eb2(%rip), %rsi      # 0x11801
leaq 0xd0(%rsp), %rdi
leaq 0x50(%rsp), %rdx
callq 0x6728
leaq 0x160(%rsp), %rdi
pushq $0x3
popq %rdx
leaq 0xd0(%rsp), %rcx
movq %r15, %rsi
callq 0x837c
leaq 0x170(%rsp), %rdi
callq 0x4120
leaq 0xd0(%rsp), %rdi
callq 0x4120
cmpl $0x0, 0x10(%r15)
je 0x89a8
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0x8bac
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rsi
movaps %xmm0, 0x20(%rsi)
movaps %xmm0, 0x10(%rsi)
movaps %xmm0, (%rsi)
movq %rbx, %rdi
callq 0xa20d
leaq 0x50(%rsp), %rdi
callq 0x6a94
leaq 0xf0(%rsp), %rdi
pushq $0x2
popq %rdx
movq %r15, %rsi
xorl %ecx, %ecx
callq 0x7ffc
cmpl $0x0, 0x10(%r15)
jne 0x8b9f
leaq 0x100(%rsp), %rsi
leaq 0x10(%rsp), %rdi
callq 0x42d0
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rsi
movups %xmm0, 0x20(%rsi)
leaq 0x50(%rsp), %rdi
callq 0xa24a
movq %rsp, %rdi
leaq 0x50(%rsp), %rsi
callq 0xa22b
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xa723
movq %rsp, %rsi
movq %rax, %rdi
callq 0xa740
leaq 0x8(%rsp), %rdi
callq 0x69e2
leaq 0x50(%rsp), %rdi
callq 0xa004
leaq 0x10(%rsp), %rdi
callq 0x6ba8
leaq 0x50(%rsp), %rdi
callq 0xa283
leaq 0x48(%rsp), %r12
leaq 0x40(%rsp), %rbp
leaq 0x50(%rsp), %r13
movq %rbp, %rdi
movq %r13, %rsi
callq 0x6d30
leaq 0x10(%rsp), %rdi
pushq $0x2
popq %rcx
movq %rbp, %rsi
movq %r15, %rdx
callq 0x8ea9
leaq 0x18(%rsp), %r12
leaq 0x48(%rsp), %rdi
callq 0x69e2
movq -0x8(%r12), %rdi
cmpq 0x50(%rsp), %rdi
je 0x8b17
cmpb $0x5, 0x48(%rdi)
jne 0x8b0a
addq $0x10, %rdi
callq 0xb277
movq (%rax), %r14
leaq 0x879b(%rip), %rsi      # 0x1125d
leaq 0xb0(%rsp), %rdi
movq %rsp, %rdx
callq 0x6728
leaq 0xb0(%rsp), %rdi
callq 0x7394
movq %rax, %rbp
leaq 0xb0(%rsp), %rdi
callq 0x4120
cmpq %rbp, %r14
jne 0x8b0a
movq 0x10(%rsp), %rdi
addq $0x10, %rdi
callq 0xb277
movq 0x8(%rax), %r13
addq $0x10, %r13
leaq 0x10(%rsp), %rdi
movq %r13, %rsi
callq 0xb294
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xa723
addq $0x10, %rax
leaq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0xb294
leaq 0x128(%rsp), %rdi
pushq $0x1d
popq %rdx
movq %r15, %rsi
callq 0x8192
leaq 0x138(%rsp), %rdi
callq 0x4120
cmpl $0x0, 0x10(%r15)
jne 0x8b8b
movq %rsp, %rdi
movq %r15, %rsi
callq 0x87ce
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xa723
addq $0x20, %rax
movq %rsp, %rsi
movq %rax, %rdi
callq 0xa740
leaq 0x8(%rsp), %rdi
callq 0x69e2
leaq 0x18(%rsp), %rdi
callq 0x69e2
leaq 0x58(%rsp), %rdi
callq 0x69e2
leaq 0x100(%rsp), %rdi
callq 0x4120
movq %rbx, %rax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r15
leaq 0xb0(%rsp), %rdi
callq 0x4120
jmp 0x8c1f
jmp 0x8c1c
movq %rax, %r15
leaq 0x8(%rsp), %rdi
callq 0x69e2
jmp 0x8c1f
jmp 0x8c1c
jmp 0x8c1c
jmp 0x8c17
movq %rax, %r15
leaq 0x8(%rsp), %rdi
callq 0x69e2
jmp 0x8bfc
movq %rax, %r15
leaq 0x50(%rsp), %rdi
callq 0xa004
jmp 0x8c0b
movq %rax, %r15
leaq 0x10(%rsp), %rdi
callq 0x6ba8
jmp 0x8c31
movq %rax, %r15
jmp 0x8c31
movq %rax, %r15
movq %r12, %rdi
callq 0x69e2
leaq 0x58(%rsp), %rdi
callq 0x69e2
leaq 0x100(%rsp), %rdi
callq 0x4120
jmp 0x8c43
movq %rax, %r15
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x69e2
jmp 0x8c75
movq %rax, %r15
leaq 0x50(%rsp), %rdi
callq 0x6a94
jmp 0x8c75
movq %rax, %r15
leaq 0xd0(%rsp), %rdi
callq 0x4120
jmp 0x8c75
movq %rax, %r15
movq %r15, %rdi
callq 0x43c0