// File: /workspace/github_c_makefile_star2_O2/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_body_s_parse_expression
er_t xoico_body_s_parse_expression( xoico_body_s* o, const xoico_host* host, x_source* source )
{
    // xoico_body.x:338:1
    
    if( x_source_parse_bl(source," #=?'{'" ) )
    {
        xoico_body_code_s_attach( &(o->code ),  xoico_body_code_s_create());
        BLM_TRY(xoico_body_code_s_parse(o->code,host, source ))
        o->go_inline = o->code->single_line;
    }
    else
    {BLM_INIT_LEVEL(1);
        s3_t index = x_source_get_index(source);
    
        xoico_compiler_s* compiler = xoico_host_a_compiler(host);
    
        st_s st_name;BLM_T_INIT_SPUSH(st_s, &st_name);;
        BLM_TRY(xoico_host_a_parse_name_st(host,source,&( st_name )))
        tp_t tp_name = btypeof( st_name.sc );
    
        // if name_buf refers to another body
        if( xoico_compiler_s_is_body(compiler,tp_name ) )
        {
            const xoico_body_s* body = xoico_compiler_s_get_body(compiler,tp_name );
            xoico_body_code_s_attach( &(o->code ),  xoico_body_code_s_clone(body->code));
            o->go_inline = body->go_inline;
        }
        else // at this point we assume a single statement body
        {
            x_source_set_index(source,index );
            xoico_body_code_s_attach( &(o->code ),  xoico_body_code_s_create());
            BLM_TRY(xoico_body_code_s_parse_single_statement(o->code,host, source ))
            o->go_inline = o->code->single_line;
        }
    BLM_DOWN();}
    return  0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x99cd8(%rip), %rsi     # 0xaa5cb
movq %rdx, %rdi
callq 0xe5ff
testb %al, %al
je 0x10937
leaq 0x18(%rbx), %r15
callq 0x1014e
movq %r15, %rdi
movq %rax, %rsi
callq 0x10a73
movq 0x18(%rbx), %rdi
movq %r14, %rdx
callq 0x10189
testq %rax, %rax
je 0x109ba
movq %rax, %r12
leaq 0x10749e(%rip), %rax    # 0x117dd0
movq (%rax), %rdi
jmp 0x109b0
leaq 0x107492(%rip), %rax    # 0x117dd0
movq (%rax), %rsi
leaq 0x38(%rsp), %r13
movq %r13, 0x10(%rsp)
movq %r13, %rdi
callq 0x717f5
movq $0x1, 0x10(%r13)
movq %r14, %rdi
callq 0x10a95
movq %rax, %rbp
movq %r12, %rdi
callq 0xdab3
movq %rax, 0x8(%rsp)
leaq 0x18(%rsp), %r15
movq %r15, %rdi
callq 0x8e048
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
movq %r13, %rdi
movq %r15, %rdx
callq 0x71998
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0xda8c
testq %rax, %rax
je 0x109c9
movq %rax, %r12
leaq 0x38(%rsp), %rdi
callq 0x71b64
jmp 0x10a61
movq 0x18(%rbx), %rax
movb 0x8(%rax), %al
movb %al, 0x20(%rbx)
jmp 0x10a5e
movq 0x20(%rsp), %rdi
callq 0x10aad
movq %rax, %r12
movq 0x8(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x10abf
leaq 0x18(%rbx), %r13
testb %al, %al
je 0x10a16
movq %r15, %rdi
movq %r12, %rsi
callq 0x10ae2
movq %rax, %r14
movq 0x18(%rax), %rdi
callq 0x1016f
movq %r13, %rdi
movq %rax, %rsi
callq 0x10a73
addq $0x20, %r14
jmp 0x10a4e
movq %r14, %rdi
movq %rbp, %rsi
callq 0x10b09
callq 0x1014e
movq %r13, %rdi
movq %rax, %rsi
callq 0x10a73
movq (%r13), %rdi
movq %r14, %rdx
callq 0x1052b
testq %rax, %rax
jne 0x109a8
movq (%r13), %r14
addq $0x8, %r14
movb (%r14), %al
movb %al, 0x20(%rbx)
leaq 0x10(%rsp), %rdi
callq 0x71b48
xorl %r12d, %r12d
movq %r12, %rax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq