// File: /workspace/github_cpp_makefile_star2_O1/mattn[P]wandbox-run/./json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::lexer::get_number(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::lexer::token_type) const
bool get_number(basic_json& result, const token_type token) const
        {
            assert(m_start != nullptr);
            assert(m_start < m_cursor);
            assert((token == token_type::value_unsigned) or
                   (token == token_type::value_integer) or
                   (token == token_type::value_float));

            strtonum num_converter(reinterpret_cast<const char*>(m_start),
                                   reinterpret_cast<const char*>(m_cursor));

            switch (token)
            {
                case lexer::token_type::value_unsigned:
                {
                    number_unsigned_t val;
                    if (num_converter.to(val))
                    {
                        // parsing successful
                        result.m_type = value_t::number_unsigned;
                        result.m_value = val;
                        return true;
                    }
                    break;
                }

                case lexer::token_type::value_integer:
                {
                    number_integer_t val;
                    if (num_converter.to(val))
                    {
                        // parsing successful
                        result.m_type = value_t::number_integer;
                        result.m_value = val;
                        return true;
                    }
                    break;
                }

                default:
                {
                    break;
                }
            }

            // parse float (either explicitly or because a previous conversion
            // failed)
            number_float_t val;
            if (num_converter.to(val))
            {
                // parsing successful
                result.m_type = value_t::number_float;
                result.m_value = val;

                // replace infinity and NAN by null
                if (not std::isfinite(result.m_value.number_float))
                {
                    result.m_type  = value_t::null;
                    result.m_value = basic_json::json_value();
                }

                return true;
            }

            // couldn't parse number in any format
            return false;
        }

// Assembly:
pushq %rbx
subq $0x20, %rsp
movq 0x50(%rdi), %rax
testq %rax, %rax
je 0x19d41
movq 0x60(%rdi), %rcx
cmpq %rcx, %rax
jae 0x19d60
movq %rsi, %rbx
leal -0x5(%rdx), %esi
cmpl $0x3, %esi
jae 0x19d7f
movq %rax, 0x8(%rsp)
movq %rcx, 0x10(%rsp)
cmpl $0x6, %edx
je 0x19cd4
cmpl $0x5, %edx
jne 0x19cf4
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x1ab04
testb %al, %al
je 0x19cf4
movb $0x6, (%rbx)
jmp 0x19ce8
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x1ab64
testb %al, %al
je 0x19cf4
movb $0x5, (%rbx)
movq (%rsp), %rax
movq %rax, 0x8(%rbx)
movb $0x1, %al
jmp 0x19d3b
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x1abc4
testb %al, %al
je 0x19d3b
movb $0x7, (%rbx)
movsd (%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movq 0x18(%rsp), %rcx
movq %rcx, 0x8(%rbx)
btrq $0x3f, %rcx
movabsq $0x7ff0000000000000, %rdx # imm = 0x7FF0000000000000
cmpq %rdx, %rcx
jl 0x19d3b
movb $0x0, (%rbx)
movq $0x0, 0x8(%rbx)
addq $0x20, %rsp
popq %rbx
retq
leaq 0xb1982(%rip), %rdi     # 0xcb6ca
leaq 0xb15b6(%rip), %rsi     # 0xcb305
leaq 0xb21aa(%rip), %rcx     # 0xcbf00
movl $0x2c47, %edx           # imm = 0x2C47
callq 0x13130
leaq 0xb2383(%rip), %rdi     # 0xcc0ea
leaq 0xb1597(%rip), %rsi     # 0xcb305
leaq 0xb218b(%rip), %rcx     # 0xcbf00
movl $0x2c48, %edx           # imm = 0x2C48
callq 0x13130
leaq 0xb2377(%rip), %rdi     # 0xcc0fd
leaq 0xb1578(%rip), %rsi     # 0xcb305
leaq 0xb216c(%rip), %rcx     # 0xcbf00
movl $0x2c4b, %edx           # imm = 0x2C4B
callq 0x13130