// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_compiler_s_get_type_member_function_info
bl_t xoico_compiler_s_get_type_member_function_info( const xoico_compiler_s* o, tp_t type, tp_t name, xoico_compiler_element_info_s* info )
{
    // xoico_compiler.x:589: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( ( info->func = ((xoico_func_s*)(xoico_stamp_s_get_traitline_func_from_name(stamp,name ))) ) ) /// trait-line function
        {
            success = true;
        }
        else if( ( self_item = bcore_self_s_get_item_by_name(self,name ) ) )
        {
            if( self_item->caps == BCORE_CAPS_EXTERNAL_FUNC )
            {
                info->func = ((xoico_func_s*)(xoico_stamp_s_get_func_from_name(stamp,name )));
                ASSERT( info->func );
                success = true;
            }
        }
    }
    else if( xoico_item->_ == ((tp_t)(TYPEOF_xoico_group_s)) )
    {
        const xoico_group_s* group = ((xoico_group_s*)(xoico_item));
        info->func = ((xoico_func_s*)(xoico_group_s_get_traitline_func_from_name(group,name )));
        if( info->func ) success = true;
    }
    
    if( !success )
    {
        if( xoico_compiler_s_is_func(o,name ) )
        {
            info->func = xoico_compiler_s_get_func(((xoico_compiler_s*)(o)),name );
            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 0x21c43
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x10480
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x21c41
movb $0x0, -0x1(%rbp)
jmp 0x21dd3
jmp 0x21c43
movb $0x0, -0x31(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x21c77
leaq 0x111d4a(%rip), %rdi    # 0x13399f
leaq 0x1147f2(%rip), %rsi    # 0x13644e
leaq 0x1147f0(%rip), %rdx    # 0x136453
leaq 0x11197e(%rip), %rcx    # 0x1335e8
movl $0x17b7, %r8d           # imm = 0x17B7
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 0x21d4e
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 -0x40(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x187e0
movq -0x28(%rbp), %rcx
movq %rax, 0x48(%rcx)
cmpq $0x0, %rax
je 0x21cd7
movb $0x1, -0x31(%rbp)
jmp 0x21d4c
movq -0x48(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0xa55d0
movq %rax, -0x50(%rbp)
cmpq $0x0, %rax
je 0x21d4a
movq -0x50(%rbp), %rax
cmpl $0xe, 0x10(%rax)
jne 0x21d48
movq -0x40(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x21de0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x21d44
leaq 0x111c7d(%rip), %rdi    # 0x13399f
leaq 0x114759(%rip), %rsi    # 0x136482
leaq 0x114723(%rip), %rdx    # 0x136453
leaq 0x1118b1(%rip), %rcx    # 0x1335e8
movl $0x17c9, %r8d           # imm = 0x17C9
movb $0x0, %al
callq 0x9cea0
movb $0x1, -0x31(%rbp)
jmp 0x21d4a
jmp 0x21d4c
jmp 0x21d94
movq -0x30(%rbp), %rax
movabsq $0xc561a9d047fe9d3, %rcx # imm = 0xC561A9D047FE9D3
cmpq %rcx, (%rax)
jne 0x21d92
movq -0x30(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x10550
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x21d90
movb $0x1, -0x31(%rbp)
jmp 0x21d92
jmp 0x21d94
testb $0x1, -0x31(%rbp)
jne 0x21dcb
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x21e10
testb $0x1, %al
jne 0x21dad
jmp 0x21dc9
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x21080
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movb $0x1, -0x31(%rbp)
jmp 0x21dcb
movb -0x31(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nop