// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_spect_array.c
// Function: set_dyn_link_typed
static void set_dyn_link_typed( const bcore_array_s* p, vd_t o, uz_t index, sr_s src )
{
    bcore_array_dyn_link_typed_s* arr = obj_vd( p, o );
    if( arr->type == 0 ) arr->type = sr_s_type( &src );
    if( index >= arr->size ) bcore_array_p_set_size( p, o, index + 1 );
    vd_t* dst = &arr->data[ index ];

    if( src.o )
    {
        if( sr_s_type( &src ) == arr->type )
        {
           const bcore_inst_s* inst_p = sr_s_get_spect( TYPEOF_bcore_inst_s, &src );
           if( *dst ) bcore_inst_p_discard( inst_p, *dst );
           *dst = sr_s_is_strong( &src ) ? src.o : bcore_inst_p_clone( inst_p, src.o );
           src = sr_cw( src );
        }
        else
        {
            const bcore_inst_s* inst_p = bcore_inst_s_get_typed( arr->type );
            if( *dst ) bcore_inst_p_discard( inst_p, *dst );
            *dst = bcore_inst_p_create_typed( inst_p, sr_s_type( &src ), src.o );
        }
    }
    else if( arr->type )
    {
        const bcore_inst_s* inst_p = bcore_inst_s_get_typed( arr->type );
        if( *dst ) bcore_inst_p_discard( inst_p, *dst );
        *dst = NULL;
    }

    sr_down( src );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
leaq 0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xd5d70
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0xdcdbf
movq -0x60(%rbp), %rdi
callq 0xd8670
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jb 0xdcde2
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
addq $0x1, %rdx
callq 0xd5dc0
movq -0x60(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
movq -0x18(%rbp), %rdx
shlq $0x3, %rdx
addq %rdx, %rcx
movq %rcx, -0x28(%rbp)
cmpq $0x0, (%rax)
je 0xdcf27
movq -0x60(%rbp), %rdi
callq 0xd8670
movq -0x20(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jne 0xdcecc
movq -0x60(%rbp), %rsi
movabsq $0x782b96602f424981, %rdi # imm = 0x782B96602F424981
callq 0xdd950
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0xdce4e
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
callq 0xdd9c0
movq -0x60(%rbp), %rdi
callq 0xdda00
testb $0x1, %al
jne 0xdce5d
jmp 0xdce6a
movq -0x60(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
jmp 0xdce7e
movq -0x60(%rbp), %rax
movq -0x30(%rbp), %rdi
movq (%rax), %rsi
callq 0xdc2f0
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq -0x68(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq %rdx, (%rcx)
leaq -0x48(%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 0xdda30
movq -0x60(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, (%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x38(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0xdcf25
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xd46d0
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0xdcef7
movq -0x50(%rbp), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
callq 0xdd9c0
movq -0x60(%rbp), %rdi
movq -0x50(%rbp), %rax
movq %rax, -0x70(%rbp)
callq 0xd8670
movq -0x70(%rbp), %rdi
movq %rax, %rsi
movq -0x60(%rbp), %rax
movq (%rax), %rdx
callq 0xdda60
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
jmp 0xdcf6a
movq -0x20(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xdcf68
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xd46d0
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0xdcf5d
movq -0x58(%rbp), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
callq 0xdd9c0
movq -0x28(%rbp), %rax
movq $0x0, (%rax)
jmp 0xdcf6a
movq -0x60(%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 0xd7380
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)