// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_source_s_parse
er_t xoico_source_s_parse( xoico_source_s* o, const xoico_host* host, x_source* source, sc_t group_name, sc_t trait_name, tp_t embed_method )
{
    // xoico_source.x:227:1
    BLM_INIT_LEVEL(0);
    xoico_compiler_s* compiler = o->target->compiler;
    
    if( embed_method == TYPEOF_as_header )
    {
        while( !x_source_eos(source) )
        {
            if( x_source_parse_bl(source," #?w'XOILA_DEFINE_GROUP'" ) )
            {BLM_INIT_LEVEL(3);
                st_s st_trait_name;BLM_T_INIT_SPUSH(st_s, &st_trait_name);;
                st_s st_group_name;BLM_T_INIT_SPUSH(st_s, &st_group_name);;
                BLM_TRY(x_source_parse_fa(source," ( #name , #name", (&(st_group_name)), (&(st_trait_name)) ))
                xoico_group_s* group = NULL;
                BLM_TRY(xoico_source_s_get_group_if_preexsting(o,host, source, st_group_name.sc, st_trait_name.sc, (&(group)) ))
                if( !group )
                {
                    group = xoico_source_s_push_d(o,xoico_group_s_create() );
                    group->xoico_source = o;
                    group->compiler = compiler;
                    xoico_group_s_set_name_sc(group,host, st_group_name.sc );
                    group->trait_name = xoico_compiler_s_entypeof(compiler,st_trait_name.sc );
                }
    
                if( x_source_parse_bl(source," #=?','" ) )
                {
                    while( x_source_parse_bl(source," #?','" ) )
                    {BLM_INIT_LEVEL(5);
                        st_s* embed_file = ((st_s*)BLM_LEVEL_T_PUSH(5,st_s,st_s_create()));
                        BLM_TRY(x_source_parse_fa(source," #string", embed_file ))
                        x_source* embed_source = NULL;
                        BLM_TRY(xoico_embed_file_open(source, embed_file->sc, (&(embed_source)) ))
                        ((x_source*)BLM_LEVEL_A_PUSH(0,embed_source));
                        bcore_arr_st_s_push_st(&(group->explicit_embeddings),embed_file );
                        BLM_TRY(xoico_group_s_parse(group,((const xoico_host*)(o)), false, embed_source ))
                    BLM_DOWN();}
                    BLM_TRY(x_source_parse_fa(source," )" ))
                }
                else
                {
                    BLM_TRY(x_source_parse_fa(source," )" ))
                    BLM_TRY(xoico_group_s_parse(group,((const xoico_host*)(o)), false, source ))
                }
                BLM_TRY(xoico_compiler_s_register_group(o->target->compiler,group ))
            BLM_DOWN();}
            else
            {
                x_source_get_u0(source);
            }
        }
    }
    else
    {
        xoico_group_s* group = NULL;
    
        BLM_TRY(xoico_source_s_get_group_if_preexsting(o,host, source, group_name, trait_name, (&(group)) ))
        if( group )
        {
            if( group->xoico_source != o )
            {BLM_INIT_LEVEL(3);
                bcore_arr_st_s_push_st(&(group->explicit_embeddings),((st_s*)BLM_LEVEL_T_PUSH(3,st_s,st_s_create_fa("#<sc_t>.#<sc_t>", o->name.sc, o->ext.sc ))) );
            BLM_DOWN();}
        }
        else
        {
            group = xoico_source_s_push_d(o,xoico_group_s_create() );
            group->xoico_source = o;
            group->compiler = compiler;
            xoico_group_s_set_name_sc(group,host, group_name );
            group->trait_name = xoico_compiler_s_entypeof(compiler,trait_name );
            group->is_manifesto = true;
        }
    
        if( embed_method == TYPEOF_as_group )
        {
            BLM_TRY(xoico_group_s_parse(group,((const xoico_host*)(o)), false, source ))
        }
        else
        {
            BLM_TRY(xoico_group_s_parse_embed(group,((const xoico_host*)(o)), source, embed_method ))
        }
    
        BLM_TRY(xoico_compiler_s_register_group(compiler,group ))
    }
    
    BLM_RETURNV(er_t, 0)
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2a0, %rsp            # imm = 0x2A0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
leaq 0x1956d6(%rip), %rax    # 0x1b2330
movq (%rax), %rax
movq %rax, -0x40(%rbp)
leaq -0x70(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0xbfe80
movq -0x78(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x10(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x138(%rax), %rax
movq %rax, -0x80(%rbp)
movabsq $-0x9b90fe183067569, %rax # imm = 0xF646F01E7CF98A97
cmpq %rax, -0x38(%rbp)
jne 0x1d243
jmp 0x1ccb6
movq -0x20(%rbp), %rdi
callq 0x6730
xorb $-0x1, %al
testb $0x1, %al
jne 0x1ccca
jmp 0x1d23e
movq -0x20(%rbp), %rdi
leaq 0x118965(%rip), %rsi    # 0x13563a
callq 0x6700
testb $0x1, %al
jne 0x1cce3
jmp 0x1d230
movq -0x78(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0xb8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0xbfe80
movq -0xc0(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movq $0x3, 0x10(%rax)
leaq -0xe0(%rbp), %rdi
callq 0xfe150
movq -0x88(%rbp), %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
leaq -0xe0(%rbp), %rdx
callq 0xc0220
leaq -0x100(%rbp), %rdi
callq 0xfe150
movq -0x88(%rbp), %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
leaq -0x100(%rbp), %rdx
callq 0xc0220
movq -0x20(%rbp), %rdi
leaq 0x1188ca(%rip), %rsi    # 0x135653
leaq -0x100(%rbp), %rdx
leaq -0xe0(%rbp), %rcx
movb $0x0, %al
callq 0x4a20
movq %rax, -0x108(%rbp)
cmpq $0x0, -0x108(%rbp)
je 0x1cdd9
movq -0x108(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0xc0(%rbp), %rdi
callq 0xc0720
movq -0x110(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
movq $0x0, -0x118(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0xf8(%rbp), %rcx
movq -0xd8(%rbp), %r8
leaq -0x118(%rbp), %r9
callq 0x157e0
movq %rax, -0x120(%rbp)
cmpq $0x0, -0x120(%rbp)
je 0x1ce45
movq -0x120(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0xc0(%rbp), %rdi
callq 0xc0720
movq -0x128(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
cmpq $0x0, -0x118(%rbp)
jne 0x1ced5
movq -0x10(%rbp), %rax
movq %rax, -0x280(%rbp)
callq 0x101e0
movq -0x280(%rbp), %rdi
movq %rax, %rsi
callq 0x15950
movq %rax, -0x118(%rbp)
movq -0x10(%rbp), %rcx
movq -0x118(%rbp), %rax
movq %rcx, 0x138(%rax)
movq -0x80(%rbp), %rcx
movq -0x118(%rbp), %rax
movq %rcx, 0x140(%rax)
movq -0x118(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0xf8(%rbp), %rdx
callq 0x10270
movq -0x80(%rbp), %rdi
movq -0xd8(%rbp), %rsi
callq 0x5140
movq %rax, %rcx
movq -0x118(%rbp), %rax
movq %rcx, 0xb0(%rax)
movq -0x20(%rbp), %rdi
leaq 0x118784(%rip), %rsi    # 0x135664
callq 0x6700
testb $0x1, %al
jne 0x1ceee
jmp 0x1d129
jmp 0x1cef0
movq -0x20(%rbp), %rdi
leaq 0x118771(%rip), %rsi    # 0x13566c
callq 0x6700
testb $0x1, %al
jne 0x1cf09
jmp 0x1d0d7
movq -0xc0(%rbp), %rax
movq %rax, -0x130(%rbp)
leaq -0x160(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rdi
movq -0x130(%rbp), %rsi
callq 0xbfe80
movq -0x168(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x130(%rbp), %rax
movq $0x5, 0x10(%rax)
movq -0x130(%rbp), %rax
movq %rax, -0x288(%rbp)
movb $0x0, %al
callq 0xff2e0
movq -0x288(%rbp), %rdi
movq %rax, %rcx
movl $0x5, %esi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
callq 0xc01a0
movq %rax, -0x170(%rbp)
movq -0x20(%rbp), %rdi
movq -0x170(%rbp), %rdx
leaq 0x11760f(%rip), %rsi    # 0x1345b0
movb $0x0, %al
callq 0x4a20
movq %rax, -0x178(%rbp)
cmpq $0x0, -0x178(%rbp)
je 0x1cfe3
movq -0x178(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x168(%rbp), %rdi
callq 0xc0720
movq -0x180(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
movq $0x0, -0x188(%rbp)
movq -0x20(%rbp), %rdi
movq -0x170(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x188(%rbp), %rdx
callq 0x4ad0
movq %rax, -0x190(%rbp)
cmpq $0x0, -0x190(%rbp)
je 0x1d044
movq -0x190(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x168(%rbp), %rdi
callq 0xc0720
movq -0x198(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
movq -0x130(%rbp), %rdi
movq -0x188(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0xc0500
movq -0x118(%rbp), %rdi
addq $0x68, %rdi
movq -0x170(%rbp), %rsi
callq 0x95fa0
movq -0x118(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x188(%rbp), %rcx
xorl %edx, %edx
callq 0x119d0
movq %rax, -0x1a0(%rbp)
cmpq $0x0, -0x1a0(%rbp)
je 0x1d0c6
movq -0x1a0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x168(%rbp), %rdi
callq 0xc0720
movq -0x1a8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
leaq -0x168(%rbp), %rdi
callq 0xc06e0
jmp 0x1cef0
movq -0x20(%rbp), %rdi
leaq 0x138268(%rip), %rsi    # 0x15534a
movb $0x0, %al
callq 0x4a20
movq %rax, -0x1b0(%rbp)
cmpq $0x0, -0x1b0(%rbp)
je 0x1d124
movq -0x1b0(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq -0xc0(%rbp), %rdi
callq 0xc0720
movq -0x1b8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
jmp 0x1d1c9
movq -0x20(%rbp), %rdi
leaq 0x138216(%rip), %rsi    # 0x15534a
movb $0x0, %al
callq 0x4a20
movq %rax, -0x1c0(%rbp)
cmpq $0x0, -0x1c0(%rbp)
je 0x1d176
movq -0x1c0(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0xc0(%rbp), %rdi
callq 0xc0720
movq -0x1c8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
movq -0x118(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rcx
xorl %edx, %edx
callq 0x119d0
movq %rax, -0x1d0(%rbp)
cmpq $0x0, -0x1d0(%rbp)
je 0x1d1c7
movq -0x1d0(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0xc0(%rbp), %rdi
callq 0xc0720
movq -0x1d8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
jmp 0x1d1c9
movq -0x10(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x138(%rax), %rdi
movq -0x118(%rbp), %rsi
callq 0x15980
movq %rax, -0x1e0(%rbp)
cmpq $0x0, -0x1e0(%rbp)
je 0x1d222
movq -0x1e0(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0xc0(%rbp), %rdi
callq 0xc0720
movq -0x1e8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
leaq -0xc0(%rbp), %rdi
callq 0xc06e0
jmp 0x1d239
movq -0x20(%rbp), %rdi
callq 0xa4b0
jmp 0x1ccb6
jmp 0x1d511
movq $0x0, -0x1f0(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
leaq -0x1f0(%rbp), %r9
callq 0x157e0
movq %rax, -0x1f8(%rbp)
cmpq $0x0, -0x1f8(%rbp)
je 0x1d2a6
movq -0x1f8(%rbp), %rax
movq %rax, -0x200(%rbp)
movq -0x78(%rbp), %rdi
callq 0xc0720
movq -0x200(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
cmpq $0x0, -0x1f0(%rbp)
je 0x1d391
movq -0x1f0(%rbp), %rax
movq 0x138(%rax), %rax
cmpq -0x10(%rbp), %rax
je 0x1d38c
movq -0x78(%rbp), %rax
movq %rax, -0x208(%rbp)
leaq -0x238(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x240(%rbp), %rdi
movq -0x208(%rbp), %rsi
callq 0xbfe80
movq -0x240(%rbp), %rax
movq %rax, -0x208(%rbp)
movq -0x208(%rbp), %rax
movq $0x3, 0x10(%rax)
movq -0x1f0(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x290(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0x298(%rbp)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rdx
leaq 0x119007(%rip), %rdi    # 0x136353
movb $0x0, %al
callq 0xff430
movq -0x298(%rbp), %rdi
movq %rax, %rcx
movl $0x3, %esi
movabsq $-0x503db0e6e1c2e704, %rdx # imm = 0xAFC24F191E3D18FC
callq 0xc01a0
movq -0x290(%rbp), %rdi
movq %rax, %rsi
callq 0x95fa0
leaq -0x240(%rbp), %rdi
callq 0xc06e0
jmp 0x1d41b
movq -0x10(%rbp), %rax
movq %rax, -0x2a0(%rbp)
callq 0x101e0
movq -0x2a0(%rbp), %rdi
movq %rax, %rsi
callq 0x15950
movq %rax, -0x1f0(%rbp)
movq -0x10(%rbp), %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, 0x138(%rax)
movq -0x80(%rbp), %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, 0x140(%rax)
movq -0x1f0(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x10270
movq -0x80(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x5140
movq %rax, %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, 0xb0(%rax)
movq -0x1f0(%rbp), %rax
movb $0x1, 0xc9(%rax)
movabsq $0x56176620137ff69, %rax # imm = 0x56176620137FF69
cmpq %rax, -0x38(%rbp)
jne 0x1d47b
movq -0x1f0(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rcx
xorl %edx, %edx
callq 0x119d0
movq %rax, -0x248(%rbp)
cmpq $0x0, -0x248(%rbp)
je 0x1d479
movq -0x248(%rbp), %rax
movq %rax, -0x250(%rbp)
movq -0x78(%rbp), %rdi
callq 0xc0720
movq -0x250(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
jmp 0x1d4ca
movq -0x1f0(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x15a20
movq %rax, -0x258(%rbp)
cmpq $0x0, -0x258(%rbp)
je 0x1d4c8
movq -0x258(%rbp), %rax
movq %rax, -0x260(%rbp)
movq -0x78(%rbp), %rdi
callq 0xc0720
movq -0x260(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
jmp 0x1d4ca
movq -0x80(%rbp), %rdi
movq -0x1f0(%rbp), %rsi
callq 0x15980
movq %rax, -0x268(%rbp)
cmpq $0x0, -0x268(%rbp)
je 0x1d50f
movq -0x268(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x78(%rbp), %rdi
callq 0xc0720
movq -0x270(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d530
jmp 0x1d511
movq $0x0, -0x278(%rbp)
movq -0x78(%rbp), %rdi
callq 0xc0720
movq -0x278(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x2a0, %rsp            # imm = 0x2A0
popq %rbp
retq
nopl (%rax)