// File: oknenavin[P]cxon/test/../src/cxon/lang/common/cio/char.hxx
// Function: std::enable_if<(std::integral_constant<bool, true>::value || !cxon::JSON<cxon::cio::key::unquoted_traits<cxon::json::format_traits>>::assume_no_escapes) && !use_simd_<cxon::JSON<cxon::cio::key::unquoted_traits<cxon::json::format_traits>>>::value, bool>::type cxon::cio::chr::imp::encode_<cxon::JSON<cxon::cio::key::unquoted_traits<cxon::json::format_traits>>, char>::range<cxon::json::indenter<cxon::JSON<cxon::JSON<cxon::json::format_traits>>, std::ostreambuf_iterator<char, std::char_traits<char>>>, cxon::context<cxon::JSON<cxon::json::format_traits>, cxon::napa::imp::var<cxon::node::recursion_guard, unsigned int>>, cxon::JSON<cxon::cio::key::unquoted_traits<cxon::json::format_traits>>>(cxon::json::indenter<cxon::JSON<cxon::JSON<cxon::json::format_traits>>, std::ostreambuf_iterator<char, std::char_traits<char>>>&, char const*, char const*, cxon::context<cxon::JSON<cxon::json::format_traits>, cxon::napa::imp::var<cxon::node::recursion_guard, unsigned int>>&)
static auto range(O& o, const char* f, const char* l, Cx& cx)
                        -> enable_if_t<( is_unquoted_key_context<X>::value || !Y::assume_no_escapes) && !use_simd_<Y>::value, bool>
                    {
                        char const* a = f;
                        for ( ; f != l; ++f) {
                            if (should_escape_<Y>(*f)) {
                                if (a != f && !poke<Y>(o, a, f, cx))    return false;
                                if (!value(o, *f, cx))                  return false;
                                a = f + 1;
                            }
                            else CXON_IF_CONSTEXPR (Y::produce_strict_javascript) {
                                if (*f == '\xE2' && l - f > 2) {
                                    if (f[1] == '\x80') {
                                        if (f[2] == '\xA8' || f[2] == '\xA9') {
                                            if (a != f)
                                                if (!poke<Y>(o, a, f, cx)) return false;
                                            if (!poke<Y>(o, f[2] == '\xA8' ? "\\u2028" : "\\u2029", 6, cx)) return false;
                                            f += 2, a = f + 1;
                                        }
                                    }
                                }
                            }
                        }
                        return a == f || poke<Y>(o, a, f, cx);
                    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x20(%rbp), %rax
je 0x4d448
movq -0x18(%rbp), %rax
movsbl (%rax), %edi
callq 0x4d490
testb $0x1, %al
jne 0x4d3dc
jmp 0x4d433
movq -0x30(%rbp), %rax
cmpq -0x18(%rbp), %rax
je 0x4d405
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x4d4c0
testb $0x1, %al
jne 0x4d405
movb $0x0, -0x1(%rbp)
jmp 0x4d477
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movb (%rax), %al
movq -0x28(%rbp), %rdx
movsbl %al, %esi
callq 0x4d520
testb $0x1, %al
jne 0x4d425
movb $0x0, -0x1(%rbp)
jmp 0x4d477
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x4d435
jmp 0x4d435
jmp 0x4d437
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x4d3c0
movq -0x30(%rbp), %rcx
movb $0x1, %al
cmpq -0x18(%rbp), %rcx
movb %al, -0x31(%rbp)
je 0x4d46f
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x4d4c0
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)