// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_compiler_s_get_type_member_object_info
bl_t xoico_compiler_s_get_type_member_object_info( const xoico_compiler_s* o, tp_t type, tp_t name, xoico_compiler_element_info_s* info )
{
    // xoico_compiler.x:643:1
    
    const xoico* xoico_item = xoico_compiler_s_get_const_item(o,type );
    if( !xoico_item )
    {
        xoico_item =((const xoico*)( xoico_compiler_s_get_group(((xoico_compiler_s*)(o)),type )));
        if( !xoico_item ) return  false;
    }
    
    bl_t success = false;
    ASSERT( info );
    info->type_info.item = ((xoico*)(xoico_item));
    
    if( xoico_item->_ == ((tp_t)(TYPEOF_xoico_stamp_s)) )
    {
        const xoico_stamp_s* stamp = ((const xoico_stamp_s*)(xoico_item));
        const bcore_self_s* self = stamp->self;
        const bcore_self_item_s* self_item = NULL; // returns NULL in case of no match
    
        if( ( self_item = bcore_self_s_get_item_by_name(self,name ) ) )
        {
            if( bcore_flect_caps_is_array_fix( self_item->caps ) )
            {
                info->type_info.typespec.access_class = TYPEOF_mutable;
                info->type_info.typespec.type = self_item->type;
                info->type_info.typespec.indirection = 1;
                success = true;
            }
            else if( !bcore_flect_caps_is_array_dyn( self_item->caps ) ) // dynamic arrays are handled separately
            {
                sz_t indirection = bcore_flect_caps_get_indirection( self_item->caps );
                info->type_info.typespec.type = self_item->type;
                info->type_info.typespec.indirection = indirection;
                info->type_info.typespec.access_class = ( indirection > 0 ) ? TYPEOF_mutable : 0;
                success = true;
            }
        }
        else if( ( self_item = bcore_self_s_get_first_anonymous_array_item( self ) ) ) /// builtin elements for arrays
        {
            if( name == TYPEOF_size )
            {
                info->type_info.typespec.type = ((tp_t)(TYPEOF_uz_t));
                info->type_info.typespec.indirection = 0;
                info->type_info.typespec.access_class = 0;
                success = true;
            }
            else if( name == TYPEOF_space )
            {
                info->type_info.typespec.type = ((tp_t)(TYPEOF_uz_t));
                info->type_info.typespec.indirection = 0;
                info->type_info.typespec.access_class = 0;
                success = true;
            }
            else if( name == TYPEOF_data )
            {
                info->type_info.typespec.access_class = TYPEOF_mutable;
                info->type_info.typespec.type = self_item->type ? self_item->type : ((tp_t)(TYPEOF_x_inst));
                info->type_info.typespec.indirection = bcore_flect_caps_get_indirection( self_item->caps ) + 1;
                success = true;
            }
            else if( name == TYPEOF_type )
            {
                if( bcore_flect_caps_is_typed( self_item->caps ) )
                {
                    info->type_info.typespec.type = ((tp_t)(TYPEOF_tp_t));
                    info->type_info.typespec.indirection = 0;
                    info->type_info.typespec.access_class = 0;
                    success = true;
                }
            }
        }
    }
    else if( xoico_item->_ == ((tp_t)(TYPEOF_xoico_group_s)) )
    {
        if( name == TYPEOF__ ) // group builtin element '_'
        {
            info->type_info.typespec.type = ((tp_t)(TYPEOF_aware_t));
            info->type_info.typespec.indirection = 0;
            success = true;
        }
    }
    
    return  success;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x15790
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x21e93
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x10480
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x21e91
movb $0x0, -0x1(%rbp)
jmp 0x22190
jmp 0x21e93
movb $0x0, -0x31(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x21ec7
leaq 0x111afa(%rip), %rdi    # 0x13399f
leaq 0x1145a2(%rip), %rsi    # 0x13644e
leaq 0x1145da(%rip), %rdx    # 0x13648d
leaq 0x11172e(%rip), %rcx    # 0x1335e8
movl $0x17ed, %r8d           # imm = 0x17ED
movb $0x0, %al
callq 0x9cea0
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x30(%rbp), %rax
movabsq $0x12d01d78049fae7, %rcx # imm = 0x12D01D78049FAE7
cmpq %rcx, (%rax)
jne 0x2213f
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x48(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0xa55d0
movq %rax, -0x50(%rbp)
cmpq $0x0, %rax
je 0x21fce
movq -0x50(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0450
testb $0x1, %al
jne 0x21f33
jmp 0x21f66
movq -0x28(%rbp), %rax
movabsq $-0x2c53c3baa9910217, %rcx # imm = 0xD3AC3C45566EFDE9
movq %rcx, 0x20(%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq $0x1, 0x30(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x21fc9
movq -0x50(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa03f0
testb $0x1, %al
jne 0x21fc7
movq -0x50(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0580
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x58(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x58(%rbp), %rdx
xorl %eax, %eax
movl %eax, %ecx
movabsq $-0x2c53c3baa9910217, %rax # imm = 0xD3AC3C45566EFDE9
cmpq $0x0, %rdx
cmovgq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x21fc9
jmp 0x2213d
movq -0x48(%rbp), %rdi
callq 0xa5770
movq %rax, -0x50(%rbp)
cmpq $0x0, %rax
je 0x2213b
movabsq $0x4dea9618e618ae3c, %rax # imm = 0x4DEA9618E618AE3C
cmpq %rax, -0x20(%rbp)
jne 0x22028
movq -0x28(%rbp), %rax
movabsq $-0x4882601bdca6aefb, %rcx # imm = 0xB77D9FE423595105
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x30(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x20(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x22139
movabsq $0x436cf28ab247e3e5, %rax # imm = 0x436CF28AB247E3E5
cmpq %rax, -0x20(%rbp)
jne 0x2206b
movq -0x28(%rbp), %rax
movabsq $-0x4882601bdca6aefb, %rcx # imm = 0xB77D9FE423595105
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x30(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x20(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x22137
movabsq $-0x7aa4aa98cf5cb5fb, %rax # imm = 0x855B556730A34A05
cmpq %rax, -0x20(%rbp)
jne 0x220e1
movq -0x28(%rbp), %rax
movabsq $-0x2c53c3baa9910217, %rcx # imm = 0xD3AC3C45566EFDE9
movq %rcx, 0x20(%rax)
movq -0x50(%rbp), %rax
cmpq $0x0, (%rax)
je 0x220a4
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x220b4
movabsq $-0x3b1008a961ddaa8, %rax # imm = 0xFC4EFF7569E22558
movq %rax, -0x60(%rbp)
jmp 0x220b4
movq -0x60(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x50(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0580
movq %rax, %rcx
addq $0x1, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x22135
movabsq $-0x586bc610840563d3, %rax # imm = 0xA79439EF7BFA9C2D
cmpq %rax, -0x20(%rbp)
jne 0x22133
movq -0x50(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0530
testb $0x1, %al
jne 0x22103
jmp 0x22131
movq -0x28(%rbp), %rax
movabsq $0x6d07f9ef5b68e8a2, %rcx # imm = 0x6D07F9EF5B68E8A2
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x30(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x20(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x22133
jmp 0x22135
jmp 0x22137
jmp 0x22139
jmp 0x2213b
jmp 0x2213d
jmp 0x22188
movq -0x30(%rbp), %rax
movabsq $0xc561a9d047fe9d3, %rcx # imm = 0xC561A9D047FE9D3
cmpq %rcx, (%rax)
jne 0x22186
movabsq $-0x509bedb379fdb7b2, %rax # imm = 0xAF64124C8602484E
cmpq %rax, -0x20(%rbp)
jne 0x22184
movq -0x28(%rbp), %rax
movabsq $-0x388c46b188de83fe, %rcx # imm = 0xC773B94E77217C02
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x30(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x22186
jmp 0x22188
movb -0x31(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)