// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_stamp_s_push_compact_initializer_func
er_t xoico_stamp_s_push_compact_initializer_func( xoico_stamp_s* o )
{
    // xoico_stamp.x:541:1
    BLM_INIT_LEVEL(0);
    xoico_compiler_s* compiler = o->group->compiler;
    
    st_s sig;BLM_T_INIT_SPUSH(st_s, &sig);;
    st_s body;BLM_T_INIT_SPUSH(st_s, &body);;
    st_s_push_fa(&(sig),"o _(m@* o" );
    
    bcore_self_s* self = ((bcore_self_s*)BLM_LEVEL_T_PUSH(0,bcore_self_s,bcore_self_s_create())); self->type = o->tp_name; self->trait = o->trait_name;
    
    sc_t err_prefix = "Cannot setup member for compact initialization";
    
    {const xoico_stamp_arr_self_item_s* __a=o->arr_self_item ;if(__a)for(sz_t __i=0;__i<__a->size;__i++){const xoico_stamp_self_item_s* self_item=&(__a->data[__i]);
    {
        if( self_item->arg_of_initializer )
        {BLM_INIT_LEVEL(5);
            bcore_self_item_s* item = ((bcore_self_item_s*)BLM_LEVEL_T_PUSH(5,bcore_self_item_s,bcore_self_item_s_create()));
            BLM_TRY(xoico_stamp_self_item_s_to_bcore_self_item(self_item,self, item ))
    
            if( !item->type ) BLM_RETURNV(er_t, x_source_point_s_parse_error_fa(&(self_item->source_point),"#<sc_t>: Item has no type.", err_prefix ))
            if( !item->name ) BLM_RETURNV(er_t, x_source_point_s_parse_error_fa(&(self_item->source_point),"#<sc_t>: Item has no name.", err_prefix ))
            if( bcore_flect_caps_is_array( item->caps ) ) BLM_RETURNV(er_t, x_source_point_s_parse_error_fa(&(self_item->source_point),"#<sc_t>: Item is an array.", err_prefix ))
            if( bcore_flect_caps_is_typed( item->caps ) ) BLM_RETURNV(er_t, x_source_point_s_parse_error_fa(&(self_item->source_point),"#<sc_t>: Item is typed.", err_prefix ))
            sz_t indirection = bcore_flect_caps_get_indirection( item->caps );
            bl_t is_leaf = bcore_type_is_leaf( item->type );
            bl_t is_pointer = ( item->caps == BCORE_CAPS_POINTER );
    
            sc_t sc_type = bnameof( item->type );
            sc_t sc_name = bnameof( item->name );
    
            if( indirection == 0 )
            {
                if( is_leaf )
                {
                    st_s_push_fa(&(sig),", #<sc_t> #<sc_t>", sc_type, sc_name );
                    st_s_push_fa(&(body),"    o.#<sc_t> = #<sc_t>;\n", sc_name, sc_name );
                }
                else
                {
                    st_s_push_fa(&(sig),", c #<sc_t>* #<sc_t>", sc_type, sc_name );
                    st_s_push_fa(&(body),"    o.#<sc_t>.copy( #<sc_t> );\n", sc_name, sc_name );
                }
            }
            else
            {
                if( is_leaf || is_pointer )
                {
                    st_s_push_fa(&(sig),", m #<sc_t>* #<sc_t>", sc_type, sc_name );
                    st_s_push_fa(&(body),"    o.#<sc_t> = #<sc_t>;\n", sc_name, sc_name );
                }
                else if( self_item->copy_from_initializer )
                {
                    st_s_push_fa(&(sig),", c #<sc_t>* #<sc_t>", sc_type, sc_name );
                    st_s_push_fa(&(body),"    o.#<sc_t> =< #<sc_t>.clone();\n", sc_name, sc_name );
                }
                else
                {
                    st_s_push_fa(&(sig),", d #<sc_t>* #<sc_t>", sc_type, sc_name );
                    st_s_push_fa(&(body),"    o.#<sc_t> =< #<sc_t>;\n", sc_name, sc_name );
                }
            }
        BLM_DOWN();}
    }
    }}st_s_push_fa(&(sig),")" );
    
    st_s st_func;BLM_T_INIT_SPUSH(st_s, &st_func);st_s_push_fa(&(st_func),"#<sc_t>\n"
        "{\n"
        "#<sc_t>"
        "    return o;\n"
        "};",
        sig.sc,
        body.sc
    );
    
    sz_t idx = xoico_funcs_s_get_index_from_name(&(o->funcs),xoico_compiler_s_entypeof(compiler,"_" ) );
    if( idx >= 0 )
    {
        BLM_RETURNV(er_t, x_source_point_s_parse_error_fa(&(o->funcs.data[ idx ]->source_point),"Explicit compact function declaration not possible because this stamp has one or more member elements marked for compact initialization."
        ))
    }
    
    xoico_func_s* func = ((xoico_func_s*)BLM_LEVEL_T_PUSH(0,xoico_func_s,xoico_func_s_create()));
    BLM_TRY(xoico_parse_sc(((xoico*)(func)),((const xoico_host*)(o)), st_func.sc ))
    x_array_push_d(((x_array*)(&(o->funcs))),((x_inst*)(((xoico_func_s*)bcore_fork(func)) )));
    
    BLM_RETURNV(er_t, 0)
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1d0, %rsp            # imm = 0x1D0
movq %rdi, -0x10(%rbp)
leaq 0x198dca(%rip), %rax    # 0x1b2330
movq (%rax), %rax
movq %rax, -0x18(%rbp)
leaq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xbfe80
movq -0x50(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x10(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x140(%rax), %rax
movq %rax, -0x58(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xfe150
movq -0x18(%rbp), %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
leaq -0x78(%rbp), %rdx
callq 0xc0220
leaq -0x98(%rbp), %rdi
callq 0xfe150
movq -0x18(%rbp), %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
leaq -0x98(%rbp), %rdx
callq 0xc0220
leaq -0x78(%rbp), %rdi
leaq 0x11b7db(%rip), %rsi    # 0x134dd8
movb $0x0, %al
callq 0x100210
movq -0x18(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movb $0x0, %al
callq 0xa5460
movq -0x1b0(%rbp), %rdi
movq %rax, %rcx
xorl %eax, %eax
movl %eax, %esi
movabsq $-0x4b706df6ad0a9f1, %rdx # imm = 0xFB48F920952F560F
callq 0xc01a0
movq %rax, -0xa0(%rbp)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x10(%rax)
leaq 0x11b77b(%rip), %rax    # 0x134de2
movq %rax, -0xa8(%rbp)
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0xb0(%rbp)
cmpq $0x0, -0xb0(%rbp)
je 0x19b33
movq $0x0, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq -0xb0(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jae 0x19b31
movq -0xb0(%rbp), %rax
movq 0x8(%rax), %rax
imulq $0x48, -0xb8(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rax
testb $0x1, 0x40(%rax)
je 0x19b18
movq -0x50(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0xf8(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rdi
movq -0xc8(%rbp), %rsi
callq 0xbfe80
movq -0x100(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movq $0x5, 0x10(%rax)
movq -0xc8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movb $0x0, %al
callq 0xa08d0
movq -0x1b8(%rbp), %rdi
movq %rax, %rcx
movl $0x5, %esi
movabsq $0x1a76aac8b75a6b47, %rdx # imm = 0x1A76AAC8B75A6B47
callq 0xc01a0
movq %rax, -0x108(%rbp)
movq -0xc0(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movq -0x108(%rbp), %rdx
callq 0x19cf0
movq %rax, -0x110(%rbp)
cmpq $0x0, -0x110(%rbp)
je 0x197b4
movq -0x110(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x100(%rbp), %rdi
callq 0xc0720
movq -0x118(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x108(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x19804
movq -0xc0(%rbp), %rdi
addq $0x8, %rdi
movq -0xa8(%rbp), %rdx
leaq 0x11b637(%rip), %rsi    # 0x134e11
movb $0x0, %al
callq 0x7d20
movq %rax, -0x120(%rbp)
movq -0x100(%rbp), %rdi
callq 0xc0720
movq -0x120(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x108(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x19855
movq -0xc0(%rbp), %rdi
addq $0x8, %rdi
movq -0xa8(%rbp), %rdx
leaq 0x11b601(%rip), %rsi    # 0x134e2c
movb $0x0, %al
callq 0x7d20
movq %rax, -0x128(%rbp)
movq -0x100(%rbp), %rdi
callq 0xc0720
movq -0x128(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x108(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0380
testb $0x1, %al
jne 0x1986a
jmp 0x198ad
movq -0xc0(%rbp), %rdi
addq $0x8, %rdi
movq -0xa8(%rbp), %rdx
leaq 0x11b5c4(%rip), %rsi    # 0x134e47
movb $0x0, %al
callq 0x7d20
movq %rax, -0x130(%rbp)
movq -0x100(%rbp), %rdi
callq 0xc0720
movq -0x130(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x108(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0530
testb $0x1, %al
jne 0x198c2
jmp 0x19905
movq -0xc0(%rbp), %rdi
addq $0x8, %rdi
movq -0xa8(%rbp), %rdx
leaq 0x11b587(%rip), %rsi    # 0x134e62
movb $0x0, %al
callq 0x7d20
movq %rax, -0x138(%rbp)
movq -0x100(%rbp), %rdi
callq 0xc0720
movq -0x138(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x108(%rbp), %rax
movl 0x10(%rax), %edi
callq 0xa0580
movq %rax, -0x140(%rbp)
movq -0x108(%rbp), %rax
movq (%rax), %rdi
callq 0xc2a90
andb $0x1, %al
movb %al, -0x141(%rbp)
movq -0x108(%rbp), %rax
cmpl $0x5, 0x10(%rax)
sete %al
andb $0x1, %al
movb %al, -0x142(%rbp)
movq -0x108(%rbp), %rax
movq (%rax), %rdi
callq 0x19ec0
movq %rax, -0x150(%rbp)
movq -0x108(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x19ec0
movq %rax, -0x158(%rbp)
cmpq $0x0, -0x140(%rbp)
jne 0x19a19
testb $0x1, -0x141(%rbp)
je 0x199d1
movq -0x150(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x78(%rbp), %rdi
leaq 0x11b4d5(%rip), %rsi    # 0x134e7a
movb $0x0, %al
callq 0x100210
movq -0x158(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x98(%rbp), %rdi
leaq 0x11b4c4(%rip), %rsi    # 0x134e8c
movb $0x0, %al
callq 0x100210
jmp 0x19a14
movq -0x150(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x78(%rbp), %rdi
leaq 0x11b4bc(%rip), %rsi    # 0x134ea6
movb $0x0, %al
callq 0x100210
movq -0x158(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x98(%rbp), %rdi
leaq 0x11b4ae(%rip), %rsi    # 0x134ebb
movb $0x0, %al
callq 0x100210
jmp 0x19b0c
testb $0x1, -0x141(%rbp)
jne 0x19a2b
testb $0x1, -0x142(%rbp)
je 0x19a73
movq -0x150(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x78(%rbp), %rdi
leaq 0x11b497(%rip), %rsi    # 0x134edb
movb $0x0, %al
callq 0x100210
movq -0x158(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x98(%rbp), %rdi
leaq 0x11b425(%rip), %rsi    # 0x134e8c
movb $0x0, %al
callq 0x100210
jmp 0x19b0a
movq -0xc0(%rbp), %rax
testb $0x1, 0x41(%rax)
je 0x19ac5
movq -0x150(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x78(%rbp), %rdi
leaq 0x11b40d(%rip), %rsi    # 0x134ea6
movb $0x0, %al
callq 0x100210
movq -0x158(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x98(%rbp), %rdi
leaq 0x11b434(%rip), %rsi    # 0x134ef0
movb $0x0, %al
callq 0x100210
jmp 0x19b08
movq -0x150(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x78(%rbp), %rdi
leaq 0x11b435(%rip), %rsi    # 0x134f13
movb $0x0, %al
callq 0x100210
movq -0x158(%rbp), %rdx
movq -0x158(%rbp), %rcx
leaq -0x98(%rbp), %rdi
leaq 0x11b427(%rip), %rsi    # 0x134f28
movb $0x0, %al
callq 0x100210
jmp 0x19b0a
jmp 0x19b0c
leaq -0x100(%rbp), %rdi
callq 0xc06e0
jmp 0x19b1a
movq -0xb8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb8(%rbp)
jmp 0x19696
jmp 0x19b33
leaq -0x78(%rbp), %rdi
leaq 0x13b80d(%rip), %rsi    # 0x15534b
movb $0x0, %al
callq 0x100210
leaq -0x178(%rbp), %rdi
callq 0xfe150
movq -0x18(%rbp), %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
leaq -0x178(%rbp), %rdx
callq 0xc0220
movq -0x70(%rbp), %rdx
movq -0x90(%rbp), %rcx
leaq -0x178(%rbp), %rdi
leaq 0x11b3bf(%rip), %rsi    # 0x134f43
movb $0x0, %al
callq 0x100210
movq -0x10(%rbp), %rax
addq $0x58, %rax
movq %rax, -0x1c0(%rbp)
movq -0x58(%rbp), %rdi
leaq 0x11d2da(%rip), %rsi    # 0x136e7f
callq 0x5140
movq -0x1c0(%rbp), %rdi
movq %rax, %rsi
callq 0xc2c0
movq %rax, -0x180(%rbp)
cmpq $0x0, -0x180(%rbp)
jl 0x19c0f
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rax
movq -0x180(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
addq $0x48, %rdi
leaq 0x11b37d(%rip), %rsi    # 0x134f65
movb $0x0, %al
callq 0x7d20
movq %rax, -0x188(%rbp)
movq -0x50(%rbp), %rdi
callq 0xc0720
movq -0x188(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x18(%rbp), %rax
movq %rax, -0x1c8(%rbp)
callq 0xb5a0
movq -0x1c8(%rbp), %rdi
movq %rax, %rcx
xorl %eax, %eax
movl %eax, %esi
movabsq $-0x58b74b3ddbc4f8b6, %rdx # imm = 0xA748B4C2243B074A
callq 0xc01a0
movq %rax, -0x190(%rbp)
movq -0x190(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x170(%rbp), %rdx
callq 0x4d30
movq %rax, -0x198(%rbp)
cmpq $0x0, -0x198(%rbp)
je 0x19c8f
movq -0x198(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x50(%rbp), %rdi
callq 0xc0720
movq -0x1a0(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x19cd8
movq -0x10(%rbp), %rax
addq $0x58, %rax
movq %rax, -0x1d0(%rbp)
movq -0x190(%rbp), %rdi
callq 0x9d3d0
movq -0x1d0(%rbp), %rdi
movq %rax, %rsi
callq 0x85f0
movq $0x0, -0x1a8(%rbp)
movq -0x50(%rbp), %rdi
callq 0xc0720
movq -0x1a8(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x1d0, %rsp            # imm = 0x1D0
popq %rbp
retq
nopw %cs:(%rax,%rax)