// File: /workspace/github_c_makefile_star2_O3/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_che_s_trans_member
er_t xoico_che_s_trans_member( xoico_che_s* o, x_source* source, xoico_che_result* result )
{
    // xoico_che.x:930:1
    
    if(      x_source_parse_bl(source,"#?'.'"  ) ) BLM_TRY(xoico_che_result_a_push_sc(result,"." ))
    else if( x_source_parse_bl(source,"#?'->'" ) ) BLM_TRY(xoico_che_result_a_push_sc(result,"->" ))
    
    BLM_TRY(xoico_che_s_trans_whitespace(o,source, result ))
    
    char c = x_source_inspect_char(source);
    
    if( c == '*' || c == '&' )
    {
        return  x_source_parse_error_fa(source,"Postfix operators '&' and '*' are deprecated.\n" );
    }
    
    if( c >= '0' && c <= '9' )
    {
        return  x_source_parse_error_fa(source,"Setting indirection: Expression not tractable\n" );
    }
    
    tp_t tp_identifier = xoico_che_s_get_identifier(o,source, false );
    
    if( xoico_che_s_is_builtin_func(o,tp_identifier ) )
    {
        return  x_source_parse_error_fa(source,"Expression before '#<sc_t>' not tractable\n", xoico_che_s_nameof(o,tp_identifier ) );
    }
    
    BLM_TRY(xoico_che_s_trans_identifier(o,source, result, NULL ))
    BLM_TRY(xoico_che_s_trans_whitespace(o,source, result ))
    if( x_source_parse_bl(source,"#?'('") )
    {
        return  x_source_parse_error_fa(source,"Untraced member function '#<sc_t>'\n", xoico_che_s_nameof(o,tp_identifier ) );
    }
    
    return  0;
}

er_t xoico_che_s_try_take_typespec( xoico_che_s* o, x_source* source, xoico_typespec_s* typespec, bl_t require_tractable_type, bl_t* success )
{
    // xoico_che.x:978:1
    
    if( success ) (*(success)) = false;
    
    sz_t index = x_source_get_index(source);
    
    BLM_TRY(xoico_che_s_trans_whitespace(o,source, NULL ))
    tp_t tp_identifier = xoico_che_s_get_identifier(o,source, true );
    
    if( !tp_identifier )
    {
        x_source_set_index(source,index );
        return  0;
    }
    
    BLM_TRY(xoico_che_s_trans_whitespace(o,source, NULL ))
    
    // take fails if identifier is used as function
    if( x_source_parse_bl(source,"#?'('" ) )
    {
        x_source_set_index(source,index );
        return  0;
    }
    
    tp_t access_class = 0;
    
    switch( tp_identifier )
    {
        case TYPEOF_c:
        case TYPEOF_const:
            access_class = TYPEOF_const;
            break;
    
        case TYPEOF_m:
        case TYPEOF_mutable:
            access_class = TYPEOF_mutable;
            break;
    
        case TYPEOF_d:
        case TYPEOF_discardable:
            access_class = TYPEOF_discardable;
            break;
    
        default: break;
    }
    
    if( access_class )
    {
        tp_identifier = xoico_che_s_get_identifier(o,source, true );
        if( !tp_identifier )
        {
            x_source_set_index(source,index );
            return  0;
        }
        BLM_TRY(xoico_che_s_trans_whitespace(o,source, NULL ))
    }
    
    while( tp_identifier )
    {
        if     ( tp_identifier == TYPEOF_static   && !typespec->flag_static   ) typespec->flag_static   = true;
        else if( tp_identifier == TYPEOF_volatile && !typespec->flag_volatile ) typespec->flag_volatile = true;
        else if( tp_identifier == TYPEOF_aware    && !typespec->flag_aware    ) typespec->flag_aware    = true;
        else if( tp_identifier == TYPEOF_obliv    && !typespec->flag_obliv    ) typespec->flag_obliv    = true;
        else break;
    
        tp_identifier = 0;
        BLM_TRY(xoico_che_s_trans_identifier(o,source, NULL,&( tp_identifier )))
        BLM_TRY(xoico_che_s_trans_whitespace(o,source, NULL ))
    }
    
    typespec->type = tp_identifier;
    
    if( x_source_parse_bl(source,"#?'.' " ) )
    {
        if( !x_source_parse_bl(source,"#?([0]>='0'&&[0]<='9') " ) )
        {
            x_source_set_index(source,index );
            return  0;
        }
    
        sz_t indirection = 0;
        BLM_TRY(x_source_parse_fa(source,"#<sz_t*> ", (&(indirection)) ))
        typespec->indirection = indirection;
    }
    else
    {
        while( x_source_parse_bl(source,"#?'*' " ) ) typespec->indirection++;
    }
    
    if( require_tractable_type )
    {
        if( !( tp_identifier == ((tp_t)(TYPEOF_type_deduce)) || xoico_che_s_is_type(o,tp_identifier ) ) )
        {
            x_source_set_index(source,index );
            return  0;
        }
    }
    
    if( x_source_parse_bl(source," #?'^'") ) typespec->flag_scope = true;
    
    if( x_source_parse_bl(source," #?w'restrict'") ) typespec->flag_restrict = true;
    
    if( typespec->indirection > 0 && access_class == 0 )
    {
        access_class = TYPEOF_const; // const is default
    }
    
    typespec->access_class = access_class;
    
    if( success ) (*(success)) = true;
    return  0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %r14
movq (%rsi), %r12
leaq 0x164ae4(%rip), %rbp    # 0x19ccc8
movl (%rbp), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rbp,%rax,8), %rcx
movq 0x18(%rbp,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x3823a
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3823a
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3823a
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x38243
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x3826a
movabsq $-0x7e8ee9b9b4bbaa8, %rdi # imm = 0xF817116464B44558
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %r13
leaq 0x164a69(%rip), %rdi    # 0x19ccc8
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
leaq 0xf5499(%rip), %rdx     # 0x12d70a
movq %r13, %rdi
movq %rbx, %rsi
callq 0xffe2b
testb %al, %al
je 0x38324
movq (%r15), %r12
leaq 0x15d222(%rip), %rax    # 0x1954b0
movl 0x15d21c(%rip), %ecx    # 0x1954b0
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
movq 0x20(%rax,%rcx,8), %rdx
movq 0x18(%rax,%rcx,8), %rcx
andq %r12, %rcx
shlq $0x4, %rcx
leaq (%rdx,%rcx), %rax
movq (%rdx,%rcx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x382e8
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x382e8
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x382e8
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x382f1
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x38318
movabsq $-0x3dfc7e0a250a30dc, %rdi # imm = 0xC20381F5DAF5CF24
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %r13
leaq 0x15d1a3(%rip), %rdi    # 0x1954b0
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
leaq 0xf8874(%rip), %rsi     # 0x130b93
jmp 0x38462
movq (%rbx), %r12
movl (%rbp), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rbp,%rax,8), %rcx
movq 0x18(%rbp,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x3837d
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3837d
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3837d
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x38386
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x383ad
movabsq $-0x7e8ee9b9b4bbaa8, %rdi # imm = 0xF817116464B44558
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %r13
leaq 0x164926(%rip), %rdi    # 0x19ccc8
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
leaq 0xf8494(%rip), %rdx     # 0x130848
movq %r13, %rdi
movq %rbx, %rsi
callq 0xffe2b
testb %al, %al
je 0x38492
movq (%r15), %r12
leaq 0x15d0df(%rip), %rax    # 0x1954b0
movl 0x15d0d9(%rip), %ecx    # 0x1954b0
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
movq 0x20(%rax,%rcx,8), %rdx
movq 0x18(%rax,%rcx,8), %rcx
andq %r12, %rcx
shlq $0x4, %rcx
leaq (%rdx,%rcx), %rax
movq (%rdx,%rcx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x3842b
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3842b
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3842b
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x38434
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x3845b
movabsq $-0x3dfc7e0a250a30dc, %rdi # imm = 0xC20381F5DAF5CF24
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %r13
leaq 0x15d060(%rip), %rdi    # 0x1954b0
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
leaq 0xf83ed(%rip), %rsi     # 0x13084f
movq %r15, %rdi
callq *0x20(%r13)
testq %rax, %rax
je 0x38492
movq %rax, %r13
leaq 0x163958(%rip), %rax    # 0x19bdd0
movq (%rax), %rdi
callq 0xd6d2c
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rsi
movq %r15, %rdx
callq 0x34da0
movq (%rbx), %r12
movl (%rbp), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rbp,%rax,8), %rcx
movq 0x18(%rbp,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x384f6
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x384f6
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x384f6
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x384ff
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x38526
movabsq $-0x7e8ee9b9b4bbaa8, %rdi # imm = 0xF817116464B44558
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %r13
leaq 0x1647ad(%rip), %rdi    # 0x19ccc8
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
movq %r13, %rdi
movq %rbx, %rsi
callq 0xff8b6
cmpb $0x2a, %al
je 0x3853d
movzbl %al, %ecx
cmpl $0x26, %ecx
jne 0x3855c
leaq 0xf830e(%rip), %rsi     # 0x130852
movq %rbx, %rdi
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xde10
addb $-0x30, %al
cmpb $0x9, %al
ja 0x3856b
leaq 0xf8318(%rip), %rsi     # 0x130881
jmp 0x38544
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x329d8
movq %rax, %r12
movabsq $-0x3e306737b766a6d1, %rax # imm = 0xC1CF98C84899592F
cmpq %rax, %r12
jle 0x385b4
movabsq $-0x3e306737b766a6d0, %rax # imm = 0xC1CF98C848995930
cmpq %rax, %r12
je 0x385d2
movabsq $0x570ac119447423ee, %rax # imm = 0x570AC119447423EE
cmpq %rax, %r12
je 0x385d2
movabsq $-0x22e2f286f3d0e77f, %rax # imm = 0xDD1D0D790C2F1881
jmp 0x385cd
movabsq $-0x4aa18f6f1786b6b2, %rax # imm = 0xB55E7090E879494E
cmpq %rax, %r12
je 0x385d2
movabsq $-0x3ef8b00418101bb5, %rax # imm = 0xC1074FFBE7EFE44B
cmpq %rax, %r12
jne 0x385ff
movq %r14, %rdi
movq %r12, %rsi
callq 0x31f9d
leaq 0xf82cc(%rip), %rsi     # 0x1308b0
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xde10
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x3315f
testq %rax, %rax
jne 0x3846e
movq %rbx, %rsi
movq %r15, %rdx
callq 0x34da0
leaq 0xf4f0c(%rip), %rsi     # 0x12d536
movq %rbx, %rdi
callq 0x1130c
testb %al, %al
je 0x3864a
movq %r14, %rdi
movq %r12, %rsi
callq 0x31f9d
leaq 0xf8293(%rip), %rsi     # 0x1308db
jmp 0x385e4
xorl %r13d, %r13d
jmp 0x38480