// File: /workspace/github_c_makefile_star2_O0/vi[P]simple_cbor_stream_parse/scsp.c
// Function: scsp_closeelements
SCSP_INT static scsp_closeelements(
                struct scsp_state* state, 
                struct scsp_callbacks* callbacks,
                SCSP_USERDATA userdata) {
    while (state->cur_depth > 0) {
        struct scsp_stack_entry* se1 = &state->stack[state->cur_depth- 1];
        if (se1->remaining >= 0) {
            if (se1->remaining == 0) {
                SCSP_DEBUG("internal error: remaining=0?\n");
                return -1;
            }
            se1->remaining -= 1;
            if (se1->remaining == 0) {
                switch(se1->type) {
                    case ']': 
                    case '[':
                         CALLBACK0(array_closed);
                         break;
                    case '{': 
                    case '}':
                        CALLBACK0(map_closed);
                        break;
                    case 'B':
                        CALLBACK0(bytestring_closed);
                        break;
                    case 'S':
                        CALLBACK0(string_closed);
                        break;
                    case 'b':
                    case 's':
                        SCSP_DEBUG("interal error 5\n");
                        return -1;
                    default: {
                        SCSP_DEBUG("internal error: se->type=%c ?\n", se1->type);
                        return -1;
                    }
                }
                state->cur_depth -= 1;
                continue;
            }
        } else {
            if (se1->type == '}') {
                if (se1->remaining == -1) {
                    se1->remaining = -2;
                } else {
                    se1->remaining = -1;
                }
            }
        }
        break;
    }
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
jle 0x2b93
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jl 0x2b5c
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x2a27
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
subq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x2b5a
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
addl $-0x42, %eax
movl %eax, %ecx
movq %rcx, -0x30(%rbp)
subl $0x3b, %eax
ja 0x2b3d
movq -0x30(%rbp), %rax
leaq 0x856(%rip), %rcx       # 0x32c0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x2aa1
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x20(%rbp), %rdi
callq *%rax
cmpq $0x0, %rax
jge 0x2a9f
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
jmp 0x2aa1
jmp 0x2b47
movq -0x18(%rbp), %rax
cmpq $0x0, 0x68(%rax)
je 0x2ad4
movq -0x18(%rbp), %rax
movq 0x68(%rax), %rax
movq -0x20(%rbp), %rdi
callq *%rax
cmpq $0x0, %rax
jge 0x2ad2
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
jmp 0x2ad4
jmp 0x2b47
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x2b04
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x20(%rbp), %rdi
callq *%rax
cmpq $0x0, %rax
jge 0x2b02
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
jmp 0x2b04
jmp 0x2b47
movq -0x18(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x2b31
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rdi
callq *%rax
cmpq $0x0, %rax
jge 0x2b2f
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
jmp 0x2b31
jmp 0x2b47
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
movq $-0x1, -0x8(%rbp)
jmp 0x2b9b
movq -0x10(%rbp), %rax
movq (%rax), %rcx
subq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x29d4
jmp 0x2b91
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x7d, %eax
jne 0x2b8f
movq -0x28(%rbp), %rax
cmpq $-0x1, 0x8(%rax)
jne 0x2b81
movq -0x28(%rbp), %rax
movq $-0x2, 0x8(%rax)
jmp 0x2b8d
movq -0x28(%rbp), %rax
movq $-0x1, 0x8(%rax)
jmp 0x2b8f
jmp 0x2b91
jmp 0x2b93
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)