// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_spect_via.c
// Function: bcore_via_default_iset
er_t bcore_via_default_iset( const bcore_via_s* p, bcore_via* o, uz_t index, sr_s src )
{
    if( index >= p->size )
    {
        sr_down( src );
        return EM_ERR_fa( "index #<uz_t> out of range #<uz_t>", index, p->size );
    }

    const bcore_vitem_s* vitem  = &p->vitem_arr[ index ];

    if( vitem->fp_set ) // explicit setter
    {
        vitem->fp_set( o, src );
        return 0;
    }

    er_t err = 0;
    switch( vitem->caps )
    {
        case BCORE_CAPS_SOLID_STATIC:
        {
            vd_t dst = ( u0_t* )o + vitem->offs;
            const bcore_inst_s* inst_p = vitem->via_p->inst_p;
            if( sr_s_type( &src ) == vitem->type )
            {
                bcore_inst_p_copy( inst_p, dst, src.o );
            }
            else
            {
                err = bcore_inst_p_copy_typed( inst_p, dst, sr_s_type( &src ), src.o );
            }
        }
        break;

        case BCORE_CAPS_LINK_STATIC:
        {
            bcore_link_static_s* dst = ( vd_t )( ( u0_t* )o + vitem->offs );
            const bcore_inst_s* inst_p = vitem->via_p->inst_p;
            if( dst->link )
            {
                bcore_inst_p_discard( inst_p, dst->link );
                dst->link = NULL;
            }
            if( src.o )
            {
                if( sr_s_type( &src ) == vitem->type )
                {
                    dst->link = sr_s_is_strong( &src ) ? src.o : bcore_inst_p_clone( inst_p, src.o );
                    src = sr_cw( src );
                }
                else
                {
                    dst->link = bcore_inst_p_create_typed( inst_p, sr_s_type( &src ), src.o );
                    if( !dst->link ) return bcore_error_last();
                }
            }
        }
        break;

        case BCORE_CAPS_LINK_TYPED:
        {
            bcore_link_typed_s* dst = ( vd_t )( ( u0_t* )o + vitem->offs );
            if( dst->type && dst->link )
            {
                bcore_inst_t_discard( dst->type, dst->link );
                dst->link = NULL;
            }
            if( sr_s_type( &src ) )
            {
                dst->type = sr_s_type( &src );
                if( src.o )
                {
                    dst->link = sr_s_is_strong( &src ) ? src.o : bcore_inst_t_clone( sr_s_type( &src ), src.o );
                }
                src = sr_cw( src );
            }
        }
        break;

        case BCORE_CAPS_LINK_AWARE:
        {
            bcore_link_aware_s* dst = ( vd_t )( ( u0_t* )o + vitem->offs );

            if( dst->link )
            {
                bcore_inst_a_discard( dst->link );
                dst->link = NULL;
            }

            if( src.o )
            {
                if( sr_s_type( &src ) )
                {
                    const bcore_inst_s* inst_p = bcore_inst_s_get_typed( sr_s_type( &src ) );
                    if( inst_p->aware )
                    {
                        dst->link = sr_s_is_strong( &src ) ? src.o : bcore_inst_p_clone( inst_p, src.o );
                        src = sr_cw( src );
                    }
                    else
                    {
                        err = EM_ERR_fa( "Cannot convert #<sc_t> to self-aware object", ifnameof( sr_s_type( &src ) ) );
                    }
                }
                else
                {
                    dst->link = sr_s_is_strong( &src ) ? src.o : bcore_inst_a_clone( src.o );
                    src = sr_cw( src );
                }
            }
        }
        break;

        case BCORE_CAPS_ARRAY_DYN_SOLID_STATIC:
        case BCORE_CAPS_ARRAY_DYN_SOLID_TYPED:
        case BCORE_CAPS_ARRAY_DYN_LINK_STATIC:
        case BCORE_CAPS_ARRAY_DYN_LINK_TYPED:
        case BCORE_CAPS_ARRAY_DYN_LINK_AWARE:
        case BCORE_CAPS_ARRAY_FIX_SOLID_STATIC:
        case BCORE_CAPS_ARRAY_FIX_LINK_STATIC:
        case BCORE_CAPS_ARRAY_FIX_LINK_AWARE:
        {
            vd_t dst = ( ( u0_t* )o + vitem->offs );
            const bcore_inst_s* inst_p = vitem->via_p->inst_p;
            if( sr_s_type( &src ) == vitem->type )
            {
                bcore_inst_p_copy( inst_p, dst, src.o );
            }
            else
            {
                err = bcore_inst_p_copy_typed( inst_p, dst, sr_s_type( &src ), src.o );
            }
        }
        break;

        default:
            err = EM_ERR_fa( "Unsupported caps '#<sc_t>'", bcore_flect_caps_e_sc( vitem->caps ) );
            break;
    }
    sr_down( src );
    return err;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
leaq 0x10(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jb 0xf633b
movq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf6260
movq -0x20(%rbp), %r8
movq -0x10(%rbp), %rax
movq 0x20(%rax), %r9
leaq 0x5f835(%rip), %rdi     # 0x155b4d
leaq 0x5f800(%rip), %rsi     # 0x155b1f
movl $0x80, %edx
leaq 0x5f839(%rip), %rcx     # 0x155b64
movb $0x0, %al
callq 0x9e2c0
movq %rax, -0x8(%rbp)
jmp 0xf6a18
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x38, -0x20(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0xf6395
movq -0xe0(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rdi
movq (%rcx), %rdx
movq %rdx, (%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
callq *%rax
movq $0x0, -0x8(%rbp)
jmp 0xf6a18
movq $0x0, -0x30(%rbp)
movq -0x28(%rbp), %rax
movl 0x10(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0xe8(%rbp)
subl $0xc, %eax
ja 0xf69b7
movq -0xe8(%rbp), %rax
leaq 0x5f65e(%rip), %rcx     # 0x155a24
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0xe0(%rbp), %rdi
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
addq 0x18(%rcx), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
callq 0xf6240
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xf641d
movq -0xe0(%rbp), %rax
movq -0x40(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq (%rax), %rdx
callq 0xf6a30
jmp 0xf6463
movq -0xe0(%rbp), %rdi
movq -0x40(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0xf0(%rbp)
callq 0xf6240
movq -0xf8(%rbp), %rdi
movq -0xf0(%rbp), %rsi
movq %rax, %rdx
movq -0xe0(%rbp), %rax
movq (%rax), %rcx
callq 0xf6a60
movq %rax, -0x30(%rbp)
jmp 0xf69eb
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
addq 0x18(%rcx), %rax
movq %rax, -0x48(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf64ad
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rax
movq (%rax), %rsi
callq 0xf6aa0
movq -0x48(%rbp), %rax
movq $0x0, (%rax)
movq -0xe0(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf65c3
movq -0xe0(%rbp), %rdi
callq 0xf6240
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xf656d
movq -0xe0(%rbp), %rdi
callq 0xf6ae0
testb $0x1, %al
jne 0xf64e9
jmp 0xf64fc
movq -0xe0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x100(%rbp)
jmp 0xf6516
movq -0xe0(%rbp), %rax
movq -0x50(%rbp), %rdi
movq (%rax), %rsi
callq 0xf6b10
movq %rax, -0x100(%rbp)
movq -0xe0(%rbp), %rax
movq -0x100(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq %rdx, (%rcx)
leaq -0x68(%rbp), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf6b40
movq -0xe0(%rbp), %rax
movq -0x68(%rbp), %rcx
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0xf65c1
movq -0xe0(%rbp), %rdi
movq -0x50(%rbp), %rax
movq %rax, -0x108(%rbp)
callq 0xf6240
movq -0x108(%rbp), %rdi
movq %rax, %rsi
movq -0xe0(%rbp), %rax
movq (%rax), %rdx
callq 0xf6b70
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, (%rax)
movq -0x48(%rbp), %rax
cmpq $0x0, (%rax)
jne 0xf65bf
callq 0x9e370
movq %rax, -0x8(%rbp)
jmp 0xf6a18
jmp 0xf65c1
jmp 0xf65c3
jmp 0xf69eb
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
addq 0x18(%rcx), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xf660c
movq -0x70(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf660c
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x70(%rbp), %rax
movq (%rax), %rsi
callq 0xf6bb0
movq -0x70(%rbp), %rax
movq $0x0, (%rax)
movq -0xe0(%rbp), %rdi
callq 0xf6240
cmpq $0x0, %rax
je 0xf66eb
movq -0xe0(%rbp), %rdi
callq 0xf6240
movq %rax, %rdx
movq -0xe0(%rbp), %rax
movq -0x70(%rbp), %rcx
movq %rdx, 0x8(%rcx)
cmpq $0x0, (%rax)
je 0xf669e
movq -0xe0(%rbp), %rdi
callq 0xf6ae0
testb $0x1, %al
jne 0xf6658
jmp 0xf666b
movq -0xe0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x110(%rbp)
jmp 0xf6690
movq -0xe0(%rbp), %rdi
callq 0xf6240
movq %rax, %rdi
movq -0xe0(%rbp), %rax
movq (%rax), %rsi
callq 0xf6c00
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rcx
movq -0x70(%rbp), %rax
movq %rcx, (%rax)
movq -0xe0(%rbp), %rax
leaq -0x88(%rbp), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf6b40
movq -0xe0(%rbp), %rax
movq -0x88(%rbp), %rcx
movq %rcx, (%rax)
movq -0x80(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x78(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0xf69eb
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
addq 0x18(%rcx), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf672d
movq -0x90(%rbp), %rax
movq (%rax), %rdi
callq 0xf6c30
movq -0x90(%rbp), %rax
movq $0x0, (%rax)
movq -0xe0(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf690a
movq -0xe0(%rbp), %rdi
callq 0xf6240
cmpq $0x0, %rax
je 0xf6869
movq -0xe0(%rbp), %rdi
callq 0xf6240
movq %rax, %rdi
callq 0xf6c70
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
testb $0x1, 0x28(%rax)
je 0xf6828
movq -0xe0(%rbp), %rdi
callq 0xf6ae0
testb $0x1, %al
jne 0xf6792
jmp 0xf67a5
movq -0xe0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x118(%rbp)
jmp 0xf67c2
movq -0xe0(%rbp), %rax
movq -0x98(%rbp), %rdi
movq (%rax), %rsi
callq 0xf6b10
movq %rax, -0x118(%rbp)
movq -0xe0(%rbp), %rax
movq -0x118(%rbp), %rdx
movq -0x90(%rbp), %rcx
movq %rdx, (%rcx)
leaq -0xb0(%rbp), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf6b40
movq -0xe0(%rbp), %rax
movq -0xb0(%rbp), %rcx
movq %rcx, (%rax)
movq -0xa8(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0xf6864
movq -0xe0(%rbp), %rdi
callq 0xf6240
movq %rax, %rdi
callq 0xf6ce0
movq %rax, %r8
leaq 0x5f307(%rip), %rdi     # 0x155b4d
leaq 0x5f2d2(%rip), %rsi     # 0x155b1f
movl $0xe0, %edx
leaq 0x5f32e(%rip), %rcx     # 0x155b87
movb $0x0, %al
callq 0x9e2c0
movq %rax, -0x30(%rbp)
jmp 0xf6908
movq -0xe0(%rbp), %rdi
callq 0xf6ae0
testb $0x1, %al
jne 0xf687b
jmp 0xf688e
movq -0xe0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x120(%rbp)
jmp 0xf68a4
movq -0xe0(%rbp), %rax
movq (%rax), %rdi
callq 0xf6d30
movq %rax, -0x120(%rbp)
movq -0xe0(%rbp), %rax
movq -0x120(%rbp), %rdx
movq -0x90(%rbp), %rcx
movq %rdx, (%rcx)
leaq -0xc8(%rbp), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf6b40
movq -0xe0(%rbp), %rax
movq -0xc8(%rbp), %rcx
movq %rcx, (%rax)
movq -0xc0(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0xb8(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0xf690a
jmp 0xf69eb
movq -0xe0(%rbp), %rdi
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
addq 0x18(%rcx), %rax
movq %rax, -0xd0(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0xd8(%rbp)
callq 0xf6240
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xf6969
movq -0xe0(%rbp), %rax
movq -0xd8(%rbp), %rdi
movq -0xd0(%rbp), %rsi
movq (%rax), %rdx
callq 0xf6a30
jmp 0xf69b5
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0x128(%rbp)
callq 0xf6240
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
movq %rax, %rdx
movq -0xe0(%rbp), %rax
movq (%rax), %rcx
callq 0xf6a60
movq %rax, -0x30(%rbp)
jmp 0xf69eb
movq -0x28(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0650
movq %rax, %r8
leaq 0x5f180(%rip), %rdi     # 0x155b4d
leaq 0x5f14b(%rip), %rsi     # 0x155b1f
movl $0x103, %edx            # imm = 0x103
leaq 0x5f1d3(%rip), %rcx     # 0x155bb3
movb $0x0, %al
callq 0x9e2c0
movq %rax, -0x30(%rbp)
movq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf6260
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
nopw %cs:(%rax,%rax)