// File: /workspace/github_c_makefile_star2_O2/BernardTatin[P]s7sh/s7.c
// Function: fx_num_eq_length_i
static s7_pointer fx_num_eq_length_i(s7_scheme *sc, s7_pointer arg)
                {
                    /* avoid make_integer (and telescope opts), we get here with car=length expr, cadr=int */
                    s7_int ilen;
                    s7_pointer val;

                    val = lookup(sc, opt3_sym(cdr(arg)));
                    ilen = integer(opt2_con(cdr(arg)));

                    switch (type(val))
                    {
                        case T_PAIR:         return(make_boolean(sc, s7_list_length(sc, val) == ilen));
                        case T_NIL:          return(make_boolean(sc, ilen == 0));
                        case T_STRING:       return(make_boolean(sc, string_length(val) == ilen));
                        case T_HASH_TABLE:   return(make_boolean(sc, (hash_table_mask(val) + 1) == ilen));
                        case T_C_OBJECT:     return(make_boolean(sc, c_object_length_to_int(sc, val) == ilen));
                        case T_LET:          return(make_boolean(sc, let_length(sc, val) == ilen));

                        case T_BYTE_VECTOR:
                        case T_INT_VECTOR:
                        case T_FLOAT_VECTOR:
                        case T_VECTOR:
                                             return(make_boolean(sc, vector_length(val) == ilen));

                        case T_ITERATOR:
                                             {
                                                 s7_pointer len;
                                                 len = s7_length(sc, iterator_sequence(val));
                                                 return(make_boolean(sc, (is_t_integer(len)) && (integer(len) == ilen)));
                                             }

                        case T_CLOSURE:
                        case T_CLOSURE_STAR:
                                             if (has_active_methods(sc, val))
                                                 return(make_boolean(sc, closure_length(sc, val) == ilen));
                                             /* fall through */

                        default:
                                             return(simple_wrong_type_argument_with_type(sc, sc->length_symbol, val, a_sequence_string));
                                             /* here we already lost because we checked for the length above */
                    }
                    return(sc->F);
                }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x10(%rsi), %r14
movq 0x28(%r14), %rsi
callq 0x7d158
movq 0x20(%r14), %rcx
movq 0x8(%rcx), %r14
movzbl (%rax), %ecx
leal -0x13(%rcx), %edx
cmpl $0x16, %edx
ja 0x90565
leaq 0x4404b(%rip), %rcx     # 0xd459c
movslq (%rcx,%rdx,4), %rdx
addq %rcx, %rdx
jmpq *%rdx
xorl %ecx, %ecx
cmpq %r14, 0x8(%rax)
jmp 0x90629
cmpl $0x2, %ecx
je 0x9063c
cmpl $0x1, %ecx
jne 0x905a9
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2dada
jmp 0x90624
testb $0x40, 0x3(%rax)
je 0x905a9
cmpb $0x1, 0x24c(%rbx)
jne 0x905a9
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2b459
cltq
xorl %ecx, %ecx
cmpq %rax, %r14
jmp 0x90629
movq 0x1218(%rbx), %rcx
movq 0x8(%rcx), %rsi
movq 0x140(%rbx), %rcx
movq 0x8964e(%rip), %r8      # 0x119c10
movq %rbx, %rdi
movq %rax, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xd456
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2b4f0
jmp 0x90624
movq 0x8(%rax), %rax
incq %rax
jmp 0x90624
movq 0x8(%rax), %rsi
movzbl (%rsi), %eax
leaq 0x935a8(%rip), %rcx     # 0x123ba0
movq %rbx, %rdi
callq *(%rcx,%rax,8)
cmpb $0xb, (%rax)
jne 0x9060e
movl $0x118, %ecx            # imm = 0x118
cmpq %r14, 0x8(%rax)
je 0x90613
movl $0x120, %ecx            # imm = 0x120
movq (%rbx,%rcx), %rax
jmp 0x90634
movq %rbx, %rdi
movq %rax, %rsi
callq 0x7b903
xorl %ecx, %ecx
cmpq %r14, %rax
setne %cl
movq 0x118(%rbx,%rcx,8), %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
xorl %eax, %eax
testq %r14, %r14
setne %al
movq 0x118(%rbx,%rax,8), %rax
jmp 0x90634