// File: /workspace/github_cpp_makefile_star2_O2/Nallantli[P]Rossa/main/rossa/node_parser/node_parser.cpp
// Function: node_parser_t::parseNumNode(std::vector<node_scope_t, std::allocator<node_scope_t>>*)
ptr_node_t node_parser_t::parseNumNode(std::vector<node_scope_t> *scopes)
{
	number_t numValue;
	std::string numStr = currentToken.valueString;
	if (numStr.size() > 2 && isalpha(currentToken.valueString[1]))
	{
		switch (numStr[1])
		{
		case 'b':
		case 'B':
			numValue = number_t::Long(std::stoll(numStr.substr(2), nullptr, 2));
			break;
		default:
			numValue = number_t::Long(std::stoll(numStr, nullptr, 0));
			break;
		}
	}
	else if (numStr == "inf")
	{
		numValue = number_t::Double(INFINITY);
	}
	else if (numStr == "nan")
	{
		numValue = number_t::Double(NAN);
	}
	else if (numStr.find('.') != std::string::npos)
	{
		numValue = number_t::Double(std::stod(numStr));
	}
	else if (numStr.length() == 1 && !isdigit(numStr[0]))
	{
		numValue = number_t::Long(static_cast<unsigned char>(numStr[0]));
	}
	else
	{
		numValue = number_t::Long(std::stoll(numStr, nullptr, 10));
	}
	const ptr_node_t n = std::make_shared<ContainerNode>(*scopes, symbol_t::Number(numValue), currentToken);
	nextToken();
	return n;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x70, %rsp
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x10(%rsp), %rdi
callq 0x3ec8e
leaq 0xb0(%r14), %r12
leaq 0x20(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x10550
cmpq $0x3, 0x8(%r13)
jb 0x22f75
movq (%r12), %rax
movsbl 0x1(%rax), %edi
callq 0x10640
testl %eax, %eax
je 0x22f75
movq 0x20(%rsp), %rax
movzbl 0x1(%rax), %eax
orl $0x20, %eax
cmpl $0x62, %eax
jne 0x22fec
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rsi
pushq $0x2
popq %rdx
pushq $-0x1
popq %rcx
callq 0x10410
leaq 0x40(%rsp), %rdi
pushq $0x2
popq %rdx
xorl %esi, %esi
callq 0x2e770
leaq 0x68(%rsp), %rdi
movq %rax, (%rdi)
callq 0x3ecba
movq %rsp, %rsi
movq %rax, (%rsi)
movl %edx, 0x8(%rsi)
leaq 0x10(%rsp), %rdi
callq 0x3ecda
leaq 0x40(%rsp), %rdi
callq 0x101d0
jmp 0x23048
leaq 0x53696(%rip), %rsi     # 0x76612
leaq 0x20(%rsp), %rdi
callq 0x1c7a0
testb %al, %al
je 0x22f96
movabsq $0x7ff0000000000000, %rax # imm = 0x7FF0000000000000
jmp 0x22fb5
leaq 0x53679(%rip), %rsi     # 0x76616
leaq 0x20(%rsp), %rdi
callq 0x1c7a0
testb %al, %al
je 0x22fc2
movabsq $0x7ff8000000000000, %rax # imm = 0x7FF8000000000000
movq %rsp, %rdi
movq %rax, (%rdi)
callq 0x3ec9a
jmp 0x23033
leaq 0x20(%rsp), %rdi
pushq $0x2e
popq %rsi
xorl %edx, %edx
callq 0x10530
cmpq $-0x1, %rax
je 0x22ffc
leaq 0x20(%rsp), %rdi
xorl %esi, %esi
callq 0x2e78c
movq %rsp, %rdi
movsd %xmm0, (%rdi)
jmp 0x22fbb
leaq 0x20(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e770
jmp 0x23028
cmpq $0x1, 0x28(%rsp)
jne 0x23014
movq 0x20(%rsp), %rax
movsbl (%rax), %eax
leal -0x30(%rax), %ecx
cmpl $0xa, %ecx
jae 0x23025
leaq 0x20(%rsp), %rdi
pushq $0xa
popq %rdx
xorl %esi, %esi
callq 0x2e770
jmp 0x23028
movzbl %al, %eax
movq %rsp, %rdi
movq %rax, (%rdi)
callq 0x3ecba
leaq 0x40(%rsp), %rsi
movq %rax, (%rsi)
movl %edx, 0x8(%rsi)
leaq 0x10(%rsp), %rdi
callq 0x3ecda
movq %rsp, %rdi
leaq 0x10(%rsp), %rsi
callq 0x39080
leaq 0x58(%r14), %rcx
leaq 0x40(%rsp), %rdi
movq %rsp, %rdx
movq %r15, %rsi
callq 0x2e7a5
leaq 0x48(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
andq $0x0, (%rdi)
movups %xmm0, (%rbx)
andq $0x0, -0x8(%rdi)
callq 0x1d786
movq %rsp, %rdi
callq 0x39102
movq %r14, %rdi
callq 0x22e24
leaq 0x20(%rsp), %rdi
callq 0x101d0
movq %rbx, %rax
addq $0x70, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x230e3
jmp 0x230e3
jmp 0x230e3
movq %rax, %r14
leaq 0x40(%rsp), %rdi
callq 0x101d0
jmp 0x230e6
jmp 0x230e3
movq %rax, %r14
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x1d786
jmp 0x230e6
movq %rax, %r14
movq %rsp, %rdi
callq 0x39102
jmp 0x230e6
movq %rax, %r14
leaq 0x20(%rsp), %rdi
callq 0x101d0
movq %r14, %rdi
callq 0x106f0