// File: /workspace/github_c_makefile_star2_O2/lengjingzju[P]json/json_test.c
// Function: sax_parser_cb
json_sax_ret_t _sax_parser_cb(json_sax_parser_t *parser)
{
    static json_sax_print_hd handle = NULL;
    json_string_t *jkey = &parser->array[parser->index];

    if (parser->index == 0) {
        switch (parser->array[parser->index].type) {
        case JSON_ARRAY:
        case JSON_OBJECT:
            if (parser->value.vcmd == JSON_SAX_START) {
                if (s_sax_for_file)
                    handle = json_sax_fprint_format_start(s_sax_item_num, s_dst_json_path, NULL);
                else
                    handle = json_sax_print_format_start(s_sax_item_num, NULL);
            }
            break;
        default:
            if (s_sax_for_file)
                handle = json_sax_fprint_format_start(s_sax_item_num, s_dst_json_path, NULL);
            else
                handle = json_sax_print_format_start(s_sax_item_num, NULL);
            break;
        }
    }

    switch (parser->array[parser->index].type) {
    case JSON_NULL:
        json_sax_print_null(handle, jkey);
        break;
    case JSON_BOOL:
        json_sax_print_bool(handle, jkey, parser->value.vnum.vbool);
        break;
    case JSON_INT:
        json_sax_print_int(handle, jkey, parser->value.vnum.vint);
        break;
    case JSON_HEX:
        json_sax_print_hex(handle, jkey, parser->value.vnum.vhex);
        break;
    case JSON_LINT:
        json_sax_print_lint(handle, jkey, parser->value.vnum.vlint);
        break;
    case JSON_LHEX:
        json_sax_print_lhex(handle, jkey, parser->value.vnum.vlhex);
        break;
    case JSON_DOUBLE:
        json_sax_print_double(handle, jkey, parser->value.vnum.vdbl);
        break;
    case JSON_STRING:
        json_sax_print_string(handle, jkey, &parser->value.vstr);
        break;
    case JSON_ARRAY:
        json_sax_print_array(handle, jkey, parser->value.vcmd);
        break;
    case JSON_OBJECT:
        json_sax_print_object(handle, jkey, parser->value.vcmd);
        break;
    default:
        break;
    }

    if (parser->index == 0) {
        switch (parser->array[parser->index].type) {
        case JSON_ARRAY:
        case JSON_OBJECT:
            if (parser->value.vcmd == JSON_SAX_FINISH) {
                if (s_sax_for_file) {
                    json_sax_print_finish(handle, NULL, NULL);
                } else {
                    s_print_str = json_sax_print_finish(handle, &s_print_size, NULL);
                }
            }
            break;
        default:
            if (s_sax_for_file) {
                json_sax_print_finish(handle, NULL, NULL);
            } else {
                s_print_str = json_sax_print_finish(handle, &s_print_size, NULL);
            }
            break;
        }
    }

    return JSON_SAX_PARSE_CONTINUE;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movslq 0x4(%rdi), %rax
movq %rax, %r14
shlq $0x4, %r14
addq 0x8(%rdi), %r14
testq %rax, %rax
jne 0x16e5
movl (%r14), %eax
andl $0xe, %eax
cmpl $0x8, %eax
jne 0x16c3
cmpl $0x0, 0x10(%rbx)
jne 0x16e5
movl 0xca53(%rip), %edi      # 0xe11c
cmpb $0x1, 0xca48(%rip)      # 0xe118
jne 0x16d9
callq 0x1842
jmp 0x16de
callq 0x1618
movq %rax, 0xca2b(%rip)      # 0xe110
movq 0x8(%rbx), %rcx
movslq 0x4(%rbx), %rax
movq %rax, %rdx
shlq $0x4, %rdx
movl (%rcx,%rdx), %ecx
andl $0xf, %ecx
cmpl $0x9, %ecx
ja 0x17da
leaq 0x68f6(%rip), %rax      # 0x8000
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0xc9f6(%rip), %rdi      # 0xe110
xorl %esi, %esi
movq %r14, %rdx
xorl %ecx, %ecx
jmp 0x17d2
movq 0xc9e3(%rip), %rdi      # 0xe110
movq 0x10(%rbx), %rax
movq %rsp, %rcx
movq %rax, (%rcx)
pushq $0x4
jmp 0x17ce
movq 0xc9cb(%rip), %rdi      # 0xe110
movl 0x10(%rbx), %edx
movq %r14, %rsi
callq 0x1641
jmp 0x17d7
movq 0xc9b4(%rip), %rdi      # 0xe110
movl 0x10(%rbx), %edx
movq %r14, %rsi
callq 0x1667
jmp 0x17d7
movq 0xc9a0(%rip), %rdi      # 0xe110
movl 0x10(%rbx), %eax
movq %rsp, %rcx
movl %eax, (%rcx)
pushq $0x3
jmp 0x17ce
movq 0xc98d(%rip), %rdi      # 0xe110
leaq 0x10(%rbx), %rdx
movq %r14, %rsi
callq 0x1659
jmp 0x17d7
movq 0xc978(%rip), %rdi      # 0xe110
movb 0x10(%rbx), %al
movq %rsp, %rcx
movb %al, (%rcx)
pushq $0x1
jmp 0x17ce
movq 0xc965(%rip), %rdi      # 0xe110
movq 0x10(%rbx), %rax
movq %rsp, %rcx
movq %rax, (%rcx)
pushq $0x5
jmp 0x17ce
movq 0xc950(%rip), %rdi      # 0xe110
movsd 0x10(%rbx), %xmm0
movq %rsp, %rcx
movsd %xmm0, (%rcx)
pushq $0x6
popq %rsi
movq %r14, %rdx
callq 0x2ceb
movl 0x4(%rbx), %eax
testl %eax, %eax
je 0x17e8
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq 0x8(%rbx), %rax
movl (%rax), %eax
andl $0xe, %eax
cmpl $0x8, %eax
jne 0x17fc
cmpl $0x1, 0x10(%rbx)
jne 0x17de
movq 0xc90d(%rip), %rdi      # 0xe110
cmpb $0x1, 0xc90e(%rip)      # 0xe118
jne 0x1817
xorl %esi, %esi
xorl %edx, %edx
callq 0x3773
jmp 0x17de
leaq 0xca02(%rip), %rsi      # 0xe220
xorl %edx, %edx
callq 0x3773
movq %rax, 0xc8dc(%rip)      # 0xe108
jmp 0x17de
movq 0xc8db(%rip), %rdi      # 0xe110
movl 0x10(%rbx), %edx
movq %r14, %rsi
callq 0x167f
jmp 0x17d7