// File: /workspace/github_c_makefile_star2_O1/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 0x16ee33(%rip), %rbp    # 0x1a9cc8
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 0x3aeef
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3aeef
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3aeef
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x3b279
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x3af1f
movabsq $-0x7e8ee9b9b4bbaa8, %rdi # imm = 0xF817116464B44558
movq %r12, %rsi
callq 0xf3f85
movq %rax, %r13
leaq 0x16edb4(%rip), %rdi    # 0x1a9cc8
movq %r12, %rsi
movq %rax, %rdx
callq 0x12128c
leaq 0xfd7e4(%rip), %rdx     # 0x13870a
movq %r13, %rdi
movq %rbx, %rsi
callq 0x10aa16
testb %al, %al
je 0x3afdd
movq (%r15), %r12
leaq 0x16756d(%rip), %rax    # 0x1a24b0
movl 0x167567(%rip), %ecx    # 0x1a24b0
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 0x3afa1
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3afa1
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3afa1
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x3b2d3
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x3afd1
movabsq $-0x3dfc7e0a250a30dc, %rdi # imm = 0xC20381F5DAF5CF24
movq %r12, %rsi
callq 0xf3f85
movq %rax, %r13
leaq 0x1674ea(%rip), %rdi    # 0x1a24b0
movq %r12, %rsi
movq %rax, %rdx
callq 0x12128c
leaq 0x100bbb(%rip), %rsi    # 0x13bb93
jmp 0x3b123
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 0x3b03a
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3b03a
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3b03a
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x3b2db
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x3b06a
movabsq $-0x7e8ee9b9b4bbaa8, %rdi # imm = 0xF817116464B44558
movq %r12, %rsi
callq 0xf3f85
movq %rax, %r13
leaq 0x16ec69(%rip), %rdi    # 0x1a9cc8
movq %r12, %rsi
movq %rax, %rdx
callq 0x12128c
leaq 0x1007d7(%rip), %rdx    # 0x13b848
movq %r13, %rdi
movq %rbx, %rsi
callq 0x10aa16
testb %al, %al
je 0x3b153
movq (%r15), %r12
leaq 0x167422(%rip), %rax    # 0x1a24b0
movl 0x16741c(%rip), %ecx    # 0x1a24b0
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 0x3b0ec
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x3b0ec
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x3b0ec
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x3b2e3
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x3b11c
movabsq $-0x3dfc7e0a250a30dc, %rdi # imm = 0xC20381F5DAF5CF24
movq %r12, %rsi
callq 0xf3f85
movq %rax, %r13
leaq 0x16739f(%rip), %rdi    # 0x1a24b0
movq %r12, %rsi
movq %rax, %rdx
callq 0x12128c
leaq 0x10072c(%rip), %rsi    # 0x13b84f
movq %r15, %rdi
callq *0x20(%r13)
movq %rax, %r12
testq %rax, %rax
je 0x3b153
leaq 0x16dc97(%rip), %rax    # 0x1a8dd0
movq (%rax), %rdi
callq 0xe0b30
movq %r12, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rsi
movq %r15, %rdx
callq 0x374b3
movq (%rbx), %r13
movl (%rbp), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rbp,%rax,8), %rcx
movq 0x18(%rbp,%rax,8), %rdx
andq %r13, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r13, %rdx
je 0x3b1bb
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r13, %rdx
je 0x3b1bb
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r13, %rdx
je 0x3b1bb
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r13, %rdx
jne 0x3b2cc
movq (%rax,%rcx), %rbp
testq %rbp, %rbp
jne 0x3b1eb
movabsq $-0x7e8ee9b9b4bbaa8, %rdi # imm = 0xF817116464B44558
movq %r13, %rsi
callq 0xf3f85
movq %rax, %rbp
leaq 0x16eae8(%rip), %rdi    # 0x1a9cc8
movq %r13, %rsi
movq %rax, %rdx
callq 0x12128c
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x10a499
cmpb $0x2a, %al
je 0x3b202
movzbl %al, %ecx
cmpl $0x26, %ecx
jne 0x3b221
leaq 0x100649(%rip), %rsi    # 0x13b852
movq %rbx, %rdi
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xddb2
addb $-0x30, %al
cmpb $0x9, %al
ja 0x3b230
leaq 0x100653(%rip), %rsi    # 0x13b881
jmp 0x3b209
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x34cab
movq %rax, %r13
movabsq $-0x3e306737b766a6d1, %rax # imm = 0xC1CF98C84899592F
cmpq %rax, %r13
jle 0x3b281
movabsq $-0x3e306737b766a6d0, %rax # imm = 0xC1CF98C848995930
cmpq %rax, %r13
je 0x3b29f
movabsq $-0x22e2f286f3d0e77f, %rax # imm = 0xDD1D0D790C2F1881
cmpq %rax, %r13
je 0x3b29f
movabsq $0x570ac119447423ee, %rax # imm = 0x570AC119447423EE
jmp 0x3b29a
xorl %r13d, %r13d
jmp 0x3aef3
movabsq $-0x4aa18f6f1786b6b2, %rax # imm = 0xB55E7090E879494E
cmpq %rax, %r13
je 0x3b29f
movabsq $-0x3ef8b00418101bb5, %rax # imm = 0xC1074FFBE7EFE44B
cmpq %rax, %r13
jne 0x3b2eb
movq %r14, %rdi
movq %r13, %rsi
callq 0x3417e
leaq 0x1005ff(%rip), %rsi    # 0x13b8b0
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 0xddb2
xorl %ebp, %ebp
jmp 0x3b1bf
xorl %r13d, %r13d
jmp 0x3afa5
xorl %r13d, %r13d
jmp 0x3b03e
xorl %r13d, %r13d
jmp 0x3b0f0
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x35495
movq %rax, %rbp
testq %rax, %rax
je 0x3b315
leaq 0x16dac6(%rip), %rax    # 0x1a8dd0
movq (%rax), %rdi
callq 0xe0b30
movq %rbp, %r12
testq %rbp, %rbp
jne 0x3b141
movq %rbx, %rsi
movq %r15, %rdx
callq 0x374b3
leaq 0xfd206(%rip), %rsi     # 0x138536
movq %rbx, %rdi
callq 0x115a3
testb %al, %al
je 0x3b353
movq %r14, %rdi
movq %r13, %rsi
callq 0x3417e
leaq 0x10058d(%rip), %rsi    # 0x13b8db
jmp 0x3b2b1
xorl %r12d, %r12d
jmp 0x3b141