// File: 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 %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
cmpq $0x0, 0x50(%rax)
je 0x1bd67
jmp 0x1bd86
leaq 0xb8d38(%rip), %rdi     # 0xd4aa6
leaq 0xb896c(%rip), %rsi     # 0xd46e1
movl $0x2c47, %edx           # imm = 0x2C47
leaq 0xb9b94(%rip), %rcx     # 0xd5915
callq 0x13130
movq -0x70(%rbp), %rcx
movq 0x50(%rcx), %rax
cmpq 0x60(%rcx), %rax
jae 0x1bd96
jmp 0x1bdb5
leaq 0xb9d62(%rip), %rdi     # 0xd5aff
leaq 0xb893d(%rip), %rsi     # 0xd46e1
movl $0x2c48, %edx           # imm = 0x2C48
leaq 0xb9b65(%rip), %rcx     # 0xd5915
callq 0x13130
movb $0x1, %al
cmpl $0x5, -0x1c(%rbp)
movb %al, -0x71(%rbp)
je 0x1bdd5
movb $0x1, %al
cmpl $0x6, -0x1c(%rbp)
movb %al, -0x71(%rbp)
je 0x1bdd5
cmpl $0x7, -0x1c(%rbp)
sete %al
movb %al, -0x71(%rbp)
movb -0x71(%rbp), %al
testb $0x1, %al
jne 0x1bdde
jmp 0x1bde0
jmp 0x1bdff
leaq 0xb9d2b(%rip), %rdi     # 0xd5b12
leaq 0xb88f3(%rip), %rsi     # 0xd46e1
movl $0x2c4b, %edx           # imm = 0x2C4B
leaq 0xb9b1b(%rip), %rcx     # 0xd5915
callq 0x13130
movq -0x70(%rbp), %rax
movq 0x50(%rax), %rsi
movq 0x60(%rax), %rdx
leaq -0x30(%rbp), %rdi
callq 0x20a80
movl -0x1c(%rbp), %eax
movl %eax, -0x78(%rbp)
subl $0x5, %eax
je 0x1be2b
jmp 0x1be21
movl -0x78(%rbp), %eax
subl $0x6, %eax
je 0x1be69
jmp 0x1bea4
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x20ab0
testb $0x1, %al
jne 0x1be3e
jmp 0x1be67
movq -0x18(%rbp), %rax
movb $0x6, (%rax)
movq -0x38(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x20ae0
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x1bf19
jmp 0x1bea6
leaq -0x30(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x20b00
testb $0x1, %al
jne 0x1be7c
jmp 0x1bea2
movq -0x18(%rbp), %rax
movb $0x5, (%rax)
movq -0x48(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x20b30
movq -0x18(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x1bf19
jmp 0x1bea6
jmp 0x1bea6
leaq -0x30(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x20b50
testb $0x1, %al
jne 0x1beb9
jmp 0x1bf15
movq -0x18(%rbp), %rax
movb $0x7, (%rax)
movsd -0x58(%rbp), %xmm0
leaq -0x60(%rbp), %rdi
callq 0x20b80
movq -0x18(%rbp), %rax
movq -0x60(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x20ba0
testb $0x1, %al
jne 0x1bf0f
movq -0x18(%rbp), %rax
movb $0x0, (%rax)
leaq -0x68(%rbp), %rdi
xorl %esi, %esi
movl $0x8, %edx
callq 0x13240
movq -0x18(%rbp), %rax
movq -0x68(%rbp), %rcx
movq %rcx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x1bf19
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x80, %rsp
popq %rbp
retq
nopw (%rax,%rax)