// File: /workspace/github_c_makefile_star2_O2/johsteffens[P]beth/lib/bcore/bcore.xo.c
// Function: x_bcml_t_parse_body
er_t x_bcml_t_parse_body( x_bcml* o, tp_t t, x_source* source )
{
    // bcore_x_bcml.h:267:1
    
    x_stamp* stamp =((x_stamp*)( o));
    if( x_bcml_t_defines_bcml_body_from_source(t ) )
    {
        BLM_TRY(x_bcml_t_bcml_body_from_source(o,t, source ))
    }
    else if( t == ((tp_t)(TYPEOF_st_s)) )
    {
        st_s* st = ((st_s*)(o));
        st_s_clear(st);
        char c = 0;
        while( (c = x_source_get_char(source)) != 0 ) st_s_push_char(st,c );
    }
    else if( x_stamp_t_is_leaf(t ) )
    {
        BLM_TRY(x_bcml_t_parse_leaf_body( o,t, source ))
    }
    else if( x_stamp_t_is_pure_array(t ) )
    {
        x_array* arr =((x_array*)( stamp));
    
        if( x_array_t_is_mutable_mono_typed(t ) ) x_array_t_set_gtype(arr,t, x_bcml_parse_type(source ) );
        bl_t is_of_links = x_array_t_is_of_links(t );
        tp_t static_type = x_array_t_get_static_type(t );
    
        sz_t size = x_bcml_parse_size(source );
    
        if( x_array_t_is_fixed(t ) )
        {
            sz_t arr_size = x_array_t_size(arr,t );
            if( arr_size != size ) ERR_fa( "Fixed array size (#<sz_t>) differs from stored size (#<sz_t>).", arr_size, size );
        }
        else
        {
            x_array_t_set_size(arr,t, size );
        }
    
        if( ( !is_of_links ) && ( static_type != 0 ) && x_stamp_t_is_leaf(static_type ) )
        {
            BLM_TRY(x_bcml_t_parse_leaf_arr_body(((x_bcml*)( x_array_t_get_data_m(arr,t ))),static_type, size, source ))
        }
        else
        {
            for(sz_t i = 0; i < size; i++ )
            {
                sr_s sr = sr_null();
                BLM_TRY(x_bcml_parse_create_object(is_of_links, static_type, source, (&(sr)) ))
                x_array_t_set_sr(arr,t, i, sr );
            }
        }
    }
    else
    {
        sz_t size = x_stamp_t_size(t );
        for(sz_t i = 0; i < size; i++ )
        {
            sr_s sr = sr_null();
            tp_t type = x_stamp_t_is_static_i(t, i ) ? x_stamp_t_type_i(stamp,t, i ) : 0;
            BLM_TRY(x_bcml_parse_create_object(x_stamp_t_is_link_i(t, i ), type, source, (&(sr)) ))
            BLM_TRY(x_stamp_t_set_sr_i(stamp,t, i, sr ))
        }
    }
    
    x_stamp_t_source(stamp,t, source );
    x_stamp_t_mutated(stamp,t );
    
    return  0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x58736
cmpq $0x0, 0x10(%rax)
je 0x38b8a
movq %rbx, %rdi
callq 0x58736
movq %r14, %rdi
movq %r15, %rsi
callq *0x10(%rax)
testq %rax, %rax
je 0x38bd4
movq %rax, %rbp
leaq 0xdf250(%rip), %rax     # 0x117dd0
movq (%rax), %rdi
callq 0x71b64
jmp 0x38bef
movabsq $-0x503db0e6e1c2e704, %rax # imm = 0xAFC24F191E3D18FC
cmpq %rax, %rbx
jne 0x38bba
movq %r14, %rdi
callq 0x8f0c3
movq %r15, %rdi
callq 0x36ed6
testb %al, %al
je 0x38bd4
movsbl %al, %esi
movq %r14, %rdi
callq 0x8f0ee
jmp 0x38ba1
movq %rbx, %rdi
callq 0x36f05
testb %al, %al
je 0x38c01
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x38dfc
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x36dad
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3705d
xorl %ebp, %ebp
movq %rbp, %rax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rdi
callq 0x36f22
movq %rbx, %rdi
testb %al, %al
je 0x38ca3
callq 0x36f27
testb %al, %al
je 0x38c33
movq %r15, %rdi
callq 0x38af4
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x36f75
movq %rbx, %rdi
callq 0x391df
movl %eax, %ebp
movq %rbx, %rdi
callq 0x391ea
movq %rax, %r12
movq %r15, %rdi
callq 0x391f9
movq %rax, %r13
movq %rbx, %rdi
callq 0x36fb4
movq %r14, %rdi
movq %rbx, %rsi
testb %al, %al
je 0x38d49
callq 0x36fc4
cmpq %r13, %rax
je 0x38d51
leaq 0x7c7c3(%rip), %rdi     # 0xb5441
leaq 0x7bac9(%rip), %rsi     # 0xb474e
leaq 0x7c7c9(%rip), %rcx     # 0xb5455
movl $0x1176, %edx           # imm = 0x1176
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
callq 0x60186
jmp 0x38d51
callq 0x32e3b
movq %rax, %r12
xorl %r13d, %r13d
testq %rax, %rax
cmovleq %r13, %r12
cmpq %r13, %r12
je 0x38bd4
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0x39233
testb %al, %al
je 0x38cee
movq %r14, %rdi
movq %rbx, %rsi
movq %r13, %rdx
callq 0x3924a
movq %rax, %rbp
jmp 0x38cf0
xorl %ebp, %ebp
movq %rbx, %rdi
movq %r13, %rsi
callq 0x39271
movzbl %al, %edi
movq %rbp, %rsi
movq %r15, %rdx
leaq 0x20(%rsp), %rcx
callq 0x38593
testq %rax, %rax
jne 0x38b76
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movaps 0x20(%rsp), %xmm0
movups %xmm0, (%rsp)
movq %r14, %rdi
movq %rbx, %rsi
movq %r13, %rdx
callq 0x2f8c2
testq %rax, %rax
jne 0x38b76
incq %r13
jmp 0x38cb5
movq %r13, %rdx
callq 0x37003
testq %r12, %r12
sete %al
orb %bpl, %al
jne 0x38d89
movq %r12, %rdi
callq 0x36f05
testb %al, %al
je 0x38d89
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3921b
movq %rax, %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x38ff5
jmp 0x38bd4
movq %r12, 0x40(%rsp)
xorl %r12d, %r12d
testq %r13, %r13
cmovleq %r12, %r13
movzbl %bpl, %eax
movl %eax, 0x1c(%rsp)
cmpq %r12, %r13
je 0x38bd4
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
movl 0x1c(%rsp), %edi
movq 0x40(%rsp), %rsi
movq %r15, %rdx
leaq 0x20(%rsp), %rcx
callq 0x38593
testq %rax, %rax
jne 0x38b76
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movaps 0x20(%rsp), %xmm0
movups %xmm0, (%rsp)
movq %r14, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x36fdc
incq %r12
jmp 0x38da0