// File: /workspace/github_cpp_makefile_star2_O1/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 %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 0x8fe6
leaq 0x188(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x9cb4
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x31f0
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0x9cd1
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
je 0x9ce3
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0xa0aa
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 0xc968
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x9d1b
callq 0x6da4
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x9d2d
callq 0x6da4
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x9d3f
callq 0x6da4
leaq 0xf8(%rsp), %rdi
movq %r14, %rsi
movl $0x2, %edx
xorl %ecx, %ecx
callq 0x86b8
cmpl $0x0, 0x10(%r14)
jne 0xa089
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x108(%rsp), %rsi
movq 0x110(%rsp), %rdx
addq %rsi, %rdx
leaq 0x30(%rsp), %rdi
callq 0x6e14
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %rsi
movups %xmm0, 0x20(%rsi)
leaq 0xa0(%rsp), %rdi
callq 0xc92c
leaq 0x18(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x10(%rsp), %rsi
leaq 0xf(%rsp), %rdx
leaq 0xa0(%rsp), %rcx
callq 0xca56
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xceb6
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x8(%rax), %rdi
movups %xmm0, (%rax)
testq %rdi, %rdi
je 0x9dee
callq 0x6da4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x9dfd
callq 0x6da4
leaq 0xa0(%rsp), %rdi
callq 0xc700
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x9e40
movq 0x1319d(%rip), %rax     # 0x1cfb8
cmpb $0x0, (%rax)
je 0x9e2b
movl 0xc(%rdi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0xc(%rdi)
jmp 0x9e35
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
lock
xaddl %eax, 0xc(%rdi)
cmpl $0x1, %eax
jne 0x9e40
movq (%rdi), %rax
callq *0x18(%rax)
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x9e57
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x31f0
movq $0x0, 0xa0(%rsp)
movl $0x68, %edi
callq 0x31e0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x12af6(%rip), %rcx     # 0x1c978
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 0x130ec(%rip), %rcx     # 0x1cfb8
cmpb $0x0, (%rcx)
je 0x9eda
movl $0x2, 0x8(%rax)
jmp 0x9ede
lock
incl 0x8(%rax)
leaq 0x30(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %r14, %rdx
movl $0x2, %ecx
callq 0xa576
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x9f04
callq 0x6da4
movq 0x30(%rsp), %rdi
cmpq 0xa0(%rsp), %rdi
je 0x9fbf
movb 0x48(%rdi), %bpl
cmpb $0x5, %bpl
jne 0x9f57
addq $0x10, %rdi
callq 0xd7b9
movq (%rax), %r12
leaq 0x70(%rsp), %r15
movq %r15, -0x10(%r15)
movw $0x3a, (%r15)
movq $0x1, -0x8(%r15)
leaq 0x60(%rsp), %rdi
callq 0x76e0
cmpq %rax, %r12
sete %r15b
jmp 0x9f5a
xorl %r15d, %r15d
cmpb $0x5, %bpl
jne 0x9f7b
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x9f7b
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
testb %r15b, %r15b
je 0x9fa5
movq 0x30(%rsp), %rdi
addq $0x10, %rdi
callq 0xd7b9
movq 0x8(%rax), %rsi
movq 0x10(%rsi), %rax
leaq 0x38(%rsp), %rdi
movq %rax, -0x8(%rdi)
addq $0x18, %rsi
jmp 0x9fba
leaq 0xa8(%rsp), %rsi
movq -0x8(%rsi), %rax
leaq 0x38(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0xd81c
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xceb6
leaq 0x38(%rsp), %rsi
movq -0x8(%rsi), %rcx
movq %rcx, 0x10(%rax)
addq $0x18, %rax
movq %rax, %rdi
callq 0xd81c
leaq 0x130(%rsp), %rdi
movq %r14, %rsi
movl $0x1d, %edx
callq 0x8aca
leaq 0x150(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa01a
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x31f0
cmpl $0x0, 0x10(%r14)
jne 0xa068
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x9941
movq (%rbx), %rdi
addq $0x10, %rdi
callq 0xceb6
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x28(%rax), %rdi
movups %xmm0, 0x20(%rax)
testq %rdi, %rdi
je 0xa059
callq 0x6da4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa068
callq 0x6da4
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0xa077
callq 0x6da4
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0xa089
callq 0x6da4
leaq 0x118(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa0aa
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x31f0
movq %rbx, %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq 0x60(%rsp), %rdi
cmpq %r15, %rdi
je 0xa138
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x31f0
jmp 0xa138
movq %rax, %r14
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa138
callq 0x6da4
jmp 0xa138
jmp 0xa135
movq %rax, %r14
movq 0x28(%rsp), %rdi
jmp 0xa13d
jmp 0xa130
movq %rax, %r14
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0xa112
callq 0x6da4
jmp 0xa112
movq %rax, %r14
leaq 0xa0(%rsp), %rdi
callq 0xc700
jmp 0xa124
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0xc684
jmp 0xa159
movq %rax, %r14
jmp 0xa159
movq %rax, %r14
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0xa147
callq 0x6da4
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0xa159
callq 0x6da4
leaq 0x118(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa17f
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x31f0
jmp 0xa17f
movq %rax, %r14
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0xa1c1
callq 0x6da4
jmp 0xa1c1
movq %rax, %r14
leaq 0xa0(%rsp), %rdi
callq 0xc558
jmp 0xa1c1
movq %rax, %r14
movq 0x80(%rsp), %rdi
cmpq %r15, %rdi
je 0xa1c1
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x31f0
movq %r14, %rdi
callq 0x3350