// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_typespec_s_parse
er_t xoico_typespec_s_parse( xoico_typespec_s* o, const xoico_host* host, x_source* source )
{
    // xoico_typespec.x:117:1
    BLM_INIT_LEVEL(0);
    xoico_typespec_s_reset(o);
    xoico_compiler_s* compiler = xoico_host_a_compiler(host);
    
    if( x_source_parse_bl(source,"#?'...' " ) )
    {
        o->flag_variadic = true;
        BLM_RETURNV(er_t, 0)
    }
    
    tp_t access_class = 0;
    
    if(      x_source_parse_bl(source," #?w'c'" ) || x_source_parse_bl(source," #?w'const'"       ) ) access_class = TYPEOF_const;
    else if( x_source_parse_bl(source," #?w'm'" ) || x_source_parse_bl(source," #?w'mutable'"     ) ) access_class = TYPEOF_mutable;
    else if( x_source_parse_bl(source," #?w'd'" ) || x_source_parse_bl(source," #?w'discardable'" ) ) access_class = TYPEOF_discardable;
    
    while( !x_source_eos(source) )
    {
        if     ( x_source_parse_bl(source," #?w'static'"   ) && !o->flag_static ) o->flag_static = true;
        else if( x_source_parse_bl(source," #?w'volatile'" ) && !o->flag_volatile ) o->flag_volatile = true;
        else if( x_source_parse_bl(source," #?w'obliv'"    ) && !o->flag_obliv ) o->flag_obliv = true;
        else if( x_source_parse_bl(source," #?w'aware'"    ) && !o->flag_aware ) o->flag_aware = true;
        else break;
    }
    
    BLM_TRY(x_source_parse_fa(source," " ))
    
    if( x_source_parse_bl(source,"#?'(' " ) )
    {
        st_s* s = ((st_s*)BLM_LEVEL_T_PUSH(0,st_s,st_s_create()));
        BLM_TRY(x_source_parse_fa(source,"#name ", s ))
        if( s->size == 0 ) BLM_TRY(x_source_parse_error_fa(source,"Transient class: Identifier expected." ))
        BCORE_PASS_CREATE(xoico_typespec_transient_s,o->transient)->class = xoico_compiler_s_entypeof(compiler,s->sc );
        BLM_TRY(x_source_parse_fa(source," ) " ))
    }
    
    if( x_source_parse_bl(source,"#=?':'" ) )
    {
        BLM_TRY(xoico_host_a_parse_name_tp(host,source, (&(o->type)) ))
        BLM_TRY(x_source_parse_fa(source," " ))
    }
    else if( x_source_parse_bl(source,"#?'@' " ) )
    {
        o->type = ((tp_t)(TYPEOF_type_object));
    }
    else if( x_source_parse_bl(source,"#?'$' " ) )
    {
        o->type = ((tp_t)(TYPEOF_type_deduce));
    }
    else
    {
        st_s* s = ((st_s*)BLM_LEVEL_T_PUSH(0,st_s,st_s_create()));
        BLM_TRY(x_source_parse_fa(source,"#name ", s ))
        if( s->size == 0 ) BLM_TRY(x_source_parse_error_fa(source,"Argument: Type expected." ))
        o->type = xoico_compiler_s_entypeof( compiler,s->sc );
    }
    
    if( x_source_parse_bl(source,"#?'.' " ) )
    {
        if( !x_source_parse_bl(source,"#?([0]>='0'&&[0]<='9') " ) ) BLM_TRY(x_source_parse_error_fa(source,"Argument: Indirection literal expected." ))
        sz_t indirection = 0;
        BLM_TRY(x_source_parse_fa(source,"#<sz_t*> ", (&(indirection)) ))
        o->indirection = indirection;
    }
    else
    {
        while( x_source_parse_bl(source,"#?'*' " ) ) o->indirection++;
    }
    
    if( x_source_parse_bl(source," #?'restrict' " ) ) o->flag_restrict = true;
    
    if( o->indirection > 0 && access_class == 0 )
    {
        access_class = TYPEOF_const;
    }
    
    o->access_class = access_class;
    BLM_RETURNV(er_t, 0)
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
leaq 0x1ac3a2(%rip), %rax    # 0x1b2330
movq (%rax), %rax
movq %rax, -0x28(%rbp)
leaq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0xbfe80
movq -0x60(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x10(%rbp), %rdi
callq 0x5ea0
movq -0x18(%rbp), %rdi
callq 0x5170
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x12d4aa(%rip), %rsi    # 0x133489
callq 0x6700
testb $0x1, %al
jne 0x5fea
jmp 0x6010
movq -0x10(%rbp), %rax
movb $0x1, 0x2f(%rax)
movq $0x0, -0x70(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0x70(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
movq $0x0, -0x78(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x12d46f(%rip), %rsi    # 0x133492
callq 0x6700
testb $0x1, %al
jne 0x6042
movq -0x20(%rbp), %rdi
leaq 0x12d463(%rip), %rsi    # 0x13349a
callq 0x6700
testb $0x1, %al
jne 0x6042
jmp 0x6052
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
movq %rax, -0x78(%rbp)
jmp 0x60c8
movq -0x20(%rbp), %rdi
leaq 0x12d449(%rip), %rsi    # 0x1334a6
callq 0x6700
testb $0x1, %al
jne 0x607c
movq -0x20(%rbp), %rdi
leaq 0x12d43d(%rip), %rsi    # 0x1334ae
callq 0x6700
testb $0x1, %al
jne 0x607c
jmp 0x608c
movabsq $-0x2c53c3baa9910217, %rax # imm = 0xD3AC3C45566EFDE9
movq %rax, -0x78(%rbp)
jmp 0x60c6
movq -0x20(%rbp), %rdi
leaq 0x12d425(%rip), %rsi    # 0x1334bc
callq 0x6700
testb $0x1, %al
jne 0x60b6
movq -0x20(%rbp), %rdi
leaq 0x12d419(%rip), %rsi    # 0x1334c4
callq 0x6700
testb $0x1, %al
jne 0x60b6
jmp 0x60c4
movabsq $-0x12e90733f18038df, %rax # imm = 0xED16F8CC0E7FC721
movq %rax, -0x78(%rbp)
jmp 0x60c6
jmp 0x60c8
jmp 0x60ca
movq -0x20(%rbp), %rdi
callq 0x6730
xorb $-0x1, %al
testb $0x1, %al
jne 0x60de
jmp 0x6196
movq -0x20(%rbp), %rdi
leaq 0x12d3ed(%rip), %rsi    # 0x1334d6
callq 0x6700
testb $0x1, %al
jne 0x60f4
jmp 0x610b
movq -0x10(%rbp), %rax
testb $0x1, 0x28(%rax)
jne 0x610b
movq -0x10(%rbp), %rax
movb $0x1, 0x28(%rax)
jmp 0x6191
movq -0x20(%rbp), %rdi
leaq 0x12d3cd(%rip), %rsi    # 0x1334e3
callq 0x6700
testb $0x1, %al
jne 0x6121
jmp 0x6135
movq -0x10(%rbp), %rax
testb $0x1, 0x29(%rax)
jne 0x6135
movq -0x10(%rbp), %rax
movb $0x1, 0x29(%rax)
jmp 0x618f
movq -0x20(%rbp), %rdi
leaq 0x12d3b2(%rip), %rsi    # 0x1334f2
callq 0x6700
testb $0x1, %al
jne 0x614b
jmp 0x615f
movq -0x10(%rbp), %rax
testb $0x1, 0x2b(%rax)
jne 0x615f
movq -0x10(%rbp), %rax
movb $0x1, 0x2b(%rax)
jmp 0x618d
movq -0x20(%rbp), %rdi
leaq 0x12d394(%rip), %rsi    # 0x1334fe
callq 0x6700
testb $0x1, %al
jne 0x6175
jmp 0x6189
movq -0x10(%rbp), %rax
testb $0x1, 0x2c(%rax)
jne 0x6189
movq -0x10(%rbp), %rax
movb $0x1, 0x2c(%rax)
jmp 0x618b
jmp 0x6196
jmp 0x618d
jmp 0x618f
jmp 0x6191
jmp 0x60ca
movq -0x20(%rbp), %rdi
leaq 0x1479e0(%rip), %rsi    # 0x14db81
movb $0x0, %al
callq 0x4a20
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
je 0x61d7
movq -0x80(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0x88(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
movq -0x20(%rbp), %rdi
leaq 0x12d328(%rip), %rsi    # 0x13350a
callq 0x6700
testb $0x1, %al
jne 0x61f0
jmp 0x6357
movq -0x28(%rbp), %rax
movq %rax, -0x140(%rbp)
movb $0x0, %al
callq 0xff2e0
movq -0x140(%rbp), %rdi
movq %rax, %rcx
xorl %eax, %eax
movl %eax, %esi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
callq 0xc01a0
movq %rax, -0x90(%rbp)
movq -0x20(%rbp), %rdi
movq -0x90(%rbp), %rdx
leaq 0x12e943(%rip), %rsi    # 0x134b7b
movb $0x0, %al
callq 0x4a20
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x98(%rbp)
je 0x6277
movq -0x98(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0xa0(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
movq -0x90(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x62d1
movq -0x20(%rbp), %rdi
leaq 0x12d281(%rip), %rsi    # 0x133511
movb $0x0, %al
callq 0x4c80
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
je 0x62cf
movq -0xa8(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0xb0(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
jmp 0x62d1
movq -0x68(%rbp), %rdi
movq -0x90(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x5140
movq %rax, -0x148(%rbp)
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
leaq -0x75b(%rip), %rsi      # 0x5ba0
callq 0x6750
movq -0x148(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rdi
leaq 0x12da8c(%rip), %rsi    # 0x133da2
movb $0x0, %al
callq 0x4a20
movq %rax, -0xb8(%rbp)
cmpq $0x0, -0xb8(%rbp)
je 0x6355
movq -0xb8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0xc0(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
jmp 0x6357
movq -0x20(%rbp), %rdi
leaq 0x12d1d5(%rip), %rsi    # 0x133537
callq 0x6700
testb $0x1, %al
jne 0x6370
jmp 0x640c
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x10(%rbp), %rdx
addq $0x8, %rdx
callq 0x55b0
movq %rax, -0xc8(%rbp)
cmpq $0x0, -0xc8(%rbp)
je 0x63bd
movq -0xc8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0xd0(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
movq -0x20(%rbp), %rdi
leaq 0x1477b9(%rip), %rsi    # 0x14db81
movb $0x0, %al
callq 0x4a20
movq %rax, -0xd8(%rbp)
cmpq $0x0, -0xd8(%rbp)
je 0x6407
movq -0xd8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0xe0(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
jmp 0x656a
movq -0x20(%rbp), %rdi
leaq 0x12d127(%rip), %rsi    # 0x13353e
callq 0x6700
testb $0x1, %al
jne 0x6422
jmp 0x6439
movq -0x10(%rbp), %rax
movabsq $0x213393bef2495d15, %rcx # imm = 0x213393BEF2495D15
movq %rcx, 0x8(%rax)
jmp 0x6568
movq -0x20(%rbp), %rdi
leaq 0x12d101(%rip), %rsi    # 0x133545
callq 0x6700
testb $0x1, %al
jne 0x644f
jmp 0x6466
movq -0x10(%rbp), %rax
movabsq $-0x59040ffc58933ff2, %rcx # imm = 0xA6FBF003A76CC00E
movq %rcx, 0x8(%rax)
jmp 0x6566
movq -0x28(%rbp), %rax
movq %rax, -0x150(%rbp)
movb $0x0, %al
callq 0xff2e0
movq -0x150(%rbp), %rdi
movq %rax, %rcx
xorl %eax, %eax
movl %eax, %esi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
callq 0xc01a0
movq %rax, -0xe8(%rbp)
movq -0x20(%rbp), %rdi
movq -0xe8(%rbp), %rdx
leaq 0x12e6cd(%rip), %rsi    # 0x134b7b
movb $0x0, %al
callq 0x4a20
movq %rax, -0xf0(%rbp)
cmpq $0x0, -0xf0(%rbp)
je 0x64ed
movq -0xf0(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0xf8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
movq -0xe8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x6547
movq -0x20(%rbp), %rdi
leaq 0x12d046(%rip), %rsi    # 0x13354c
movb $0x0, %al
callq 0x4c80
movq %rax, -0x100(%rbp)
cmpq $0x0, -0x100(%rbp)
je 0x6545
movq -0x100(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0x108(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
jmp 0x6547
movq -0x68(%rbp), %rdi
movq -0xe8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x5140
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x6568
jmp 0x656a
movq -0x20(%rbp), %rdi
leaq 0x12cff0(%rip), %rsi    # 0x133565
callq 0x6700
testb $0x1, %al
jne 0x6583
jmp 0x6650
movq -0x20(%rbp), %rdi
leaq 0x12cfde(%rip), %rsi    # 0x13356c
callq 0x6700
testb $0x1, %al
jne 0x65e3
movq -0x20(%rbp), %rdi
leaq 0x12cfe2(%rip), %rsi    # 0x133584
movb $0x0, %al
callq 0x4c80
movq %rax, -0x110(%rbp)
cmpq $0x0, -0x110(%rbp)
je 0x65e1
movq -0x110(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0x118(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
jmp 0x65e3
movq $0x0, -0x120(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x12cfb3(%rip), %rsi    # 0x1335ac
leaq -0x120(%rbp), %rdx
movb $0x0, %al
callq 0x4a20
movq %rax, -0x128(%rbp)
cmpq $0x0, -0x128(%rbp)
je 0x663f
movq -0x128(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0x130(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x66e5
movq -0x120(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x667c
jmp 0x6652
movq -0x20(%rbp), %rdi
leaq 0x12cf59(%rip), %rsi    # 0x1335b6
callq 0x6700
testb $0x1, %al
jne 0x6668
jmp 0x667a
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
jmp 0x6652
jmp 0x667c
movq -0x20(%rbp), %rdi
leaq 0x12cf36(%rip), %rsi    # 0x1335bd
callq 0x6700
testb $0x1, %al
jne 0x6692
jmp 0x669a
movq -0x10(%rbp), %rax
movb $0x1, 0x2a(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jle 0x66ba
cmpq $0x0, -0x78(%rbp)
jne 0x66ba
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq $0x0, -0x138(%rbp)
movq -0x60(%rbp), %rdi
callq 0xc0720
movq -0x138(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
nopw %cs:(%rax,%rax)