// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_body_code_s_parse
er_t xoico_body_code_s_parse( xoico_body_code_s* o, const xoico_host* host, x_source* source )
{
    // xoico_body.x:68:1
    
    tp_t hash = bcore_tp_init();
    
    x_source_point_s_setup_from_source(&(o->source_point),source );
    
    if( x_source_parse_bl(source," #?'('" ) )
    {
        while( !x_source_eos(source) && x_source_inspect_char(source) != ')' ) hash = bcore_tp_fold_u0( hash, x_source_get_char(source) );
        BLM_TRY(x_source_parse_fa(source,")" ))
    }
    
    BLM_TRY(x_source_parse_fa(source," {" ))
    
    sz_t nest_count = 1;
    bl_t exit_loop = false;
    o->single_line = true;
    
    while( x_source_parse_bl(source,"#?' '" ) ); // skip leading spaces
    
    while( !x_source_eos(source) && !exit_loop )
    {
        u0_t c =  x_source_get_u0(source);
        switch( c )
        {
            case '{':
            {
                nest_count++;
            }
            break;
    
            case '}':
            {
                nest_count--;
                if( !nest_count )
                {
                    c = 0;
                    exit_loop = true;
                }
            }
            break;
    
            case '"': // string literal
            {
                hash = bcore_tp_fold_u0( hash, c );
                while( !x_source_eos(source) && ((c = x_source_get_char(source)) != '"') )
                {
                    hash = bcore_tp_fold_u0( hash, c );
                    if( c == '\\' ) hash = bcore_tp_fold_u0( hash, x_source_get_u0(source) );
                    if( c == '\n' ) return  x_source_parse_error_fa(source,"Newline in string literal." );
                }
                c = 0;
            }
            break;
    
            case '\'': // char literal
            {
                hash = bcore_tp_fold_u0( hash, c );
                while( !x_source_eos(source) && ((c = x_source_get_char(source)) != '\'') )
                {
                    hash = bcore_tp_fold_u0( hash, c );
                    if( c == '\\' ) hash = bcore_tp_fold_u0( hash, x_source_get_u0(source) );
                    if( c == '\n' ) return  x_source_parse_error_fa(source,"Newline in char literal." );
                }
                c = 0;
            }
            break;
    
            case '/': // comment
            {
                hash = bcore_tp_fold_u0( hash, c );
                if( x_source_inspect_char(source) == '/' )
                {
                    while( !x_source_eos(source) )
                    {
                        c = x_source_get_char(source);
                        hash = bcore_tp_fold_u0( hash, c );
                        if( c == '\n' )
                        {
                            o->single_line = false;
                            break;
                        }
                    }
                }
                else if( x_source_inspect_char(source) == '*' )
                {
                    while( !x_source_eos(source) )
                    {
                        if( x_source_parse_bl(source,"#?'*/'" ) )
                        {
                            hash = bcore_tp_fold_sc( hash, "*/" );
                            break;
                        }
                        else
                        {
                            c = x_source_get_char(source);
                            if( c == '\n' ) o->single_line = false;
                            hash = bcore_tp_fold_u0( hash, c );
                        }
                    }
                }
                c = 0;
            }
            break;
    
            case '\n' :
            {
                o->single_line = false;
                break;
            }
    
            default: break;
        }
        hash = bcore_tp_fold_u0( hash, c );
    }
    
    o->hash_source = hash;
    return  0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
callq 0x40f10
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x20(%rbp), %rsi
callq 0x5560
movq -0x20(%rbp), %rdi
leaq 0x1298c1(%rip), %rsi    # 0x13388d
callq 0x6700
testb $0x1, %al
jne 0x9fda
jmp 0xa075
jmp 0x9fdc
movq -0x20(%rbp), %rdi
callq 0x6730
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x53(%rbp)
jne 0xa006
movq -0x20(%rbp), %rdi
callq 0xa440
movsbl %al, %eax
cmpl $0x29, %eax
setne %al
movb %al, -0x53(%rbp)
movb -0x53(%rbp), %al
testb $0x1, %al
jne 0xa00f
jmp 0xa032
movq -0x28(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa490
movq -0x60(%rbp), %rdi
movzbl %al, %esi
callq 0xa460
movq %rax, -0x28(%rbp)
jmp 0x9fdc
movq -0x20(%rbp), %rdi
leaq 0x14b30e(%rip), %rsi    # 0x15534b
movb $0x0, %al
callq 0x4a20
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0xa073
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
leaq 0x1a82d2(%rip), %rax    # 0x1b2330
movq (%rax), %rdi
callq 0xc0720
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xa433
jmp 0xa075
movq -0x20(%rbp), %rdi
leaq 0x129e72(%rip), %rsi    # 0x133ef2
movb $0x0, %al
callq 0x4a20
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0xa0b6
movq -0x40(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x1a828f(%rip), %rax    # 0x1b2330
movq (%rax), %rdi
callq 0xc0720
movq -0x48(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xa433
movq $0x1, -0x50(%rbp)
movb $0x0, -0x51(%rbp)
movq -0x10(%rbp), %rax
movb $0x1, 0x8(%rax)
movq -0x20(%rbp), %rdi
leaq 0x1297bf(%rip), %rsi    # 0x133894
callq 0x6700
testb $0x1, %al
jne 0xa0e0
jmp 0xa0e2
jmp 0xa0ca
jmp 0xa0e4
movq -0x20(%rbp), %rdi
callq 0x6730
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x61(%rbp)
jne 0xa101
movb -0x51(%rbp), %al
xorb $-0x1, %al
movb %al, -0x61(%rbp)
movb -0x61(%rbp), %al
testb $0x1, %al
jne 0xa10d
jmp 0xa41f
movq -0x20(%rbp), %rdi
callq 0xa4b0
movb %al, -0x52(%rbp)
movzbl -0x52(%rbp), %eax
movl %eax, -0x68(%rbp)
subl $0xa, %eax
je 0xa3fd
jmp 0xa12b
movl -0x68(%rbp), %eax
subl $0x22, %eax
je 0xa199
jmp 0xa135
movl -0x68(%rbp), %eax
subl $0x27, %eax
je 0xa24d
jmp 0xa143
movl -0x68(%rbp), %eax
subl $0x2f, %eax
je 0xa307
jmp 0xa151
movl -0x68(%rbp), %eax
subl $0x7b, %eax
je 0xa168
jmp 0xa15b
movl -0x68(%rbp), %eax
subl $0x7d, %eax
je 0xa179
jmp 0xa407
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0xa409
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jne 0xa194
movb $0x0, -0x52(%rbp)
movb $0x1, -0x51(%rbp)
jmp 0xa409
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x6730
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x69(%rbp)
jne 0xa1d7
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x52(%rbp)
movzbl %al, %eax
cmpl $0x22, %eax
setne %al
movb %al, -0x69(%rbp)
movb -0x69(%rbp), %al
testb $0x1, %al
jne 0xa1e0
jmp 0xa244
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x52(%rbp), %eax
cmpl $0x5c, %eax
jne 0xa21b
movq -0x28(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa4b0
movq -0x78(%rbp), %rdi
movzbl %al, %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x52(%rbp), %eax
cmpl $0xa, %eax
jne 0xa23f
movq -0x20(%rbp), %rdi
leaq 0x12966b(%rip), %rsi    # 0x13389a
movb $0x0, %al
callq 0x4c80
movq %rax, -0x8(%rbp)
jmp 0xa433
jmp 0xa1aa
movb $0x0, -0x52(%rbp)
jmp 0xa409
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x6730
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x79(%rbp)
jne 0xa28b
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x52(%rbp)
movzbl %al, %eax
cmpl $0x27, %eax
setne %al
movb %al, -0x79(%rbp)
movb -0x79(%rbp), %al
testb $0x1, %al
jne 0xa294
jmp 0xa2fe
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x52(%rbp), %eax
cmpl $0x5c, %eax
jne 0xa2d5
movq -0x28(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa4b0
movq -0x88(%rbp), %rdi
movzbl %al, %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x52(%rbp), %eax
cmpl $0xa, %eax
jne 0xa2f9
movq -0x20(%rbp), %rdi
leaq 0x1295cc(%rip), %rsi    # 0x1338b5
movb $0x0, %al
callq 0x4c80
movq %rax, -0x8(%rbp)
jmp 0xa433
jmp 0xa25e
movb $0x0, -0x52(%rbp)
jmp 0xa409
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa440
movsbl %al, %eax
cmpl $0x2f, %eax
jne 0xa373
jmp 0xa32b
movq -0x20(%rbp), %rdi
callq 0x6730
xorb $-0x1, %al
testb $0x1, %al
jne 0xa33c
jmp 0xa36e
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x52(%rbp)
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x52(%rbp), %eax
cmpl $0xa, %eax
jne 0xa36c
movq -0x10(%rbp), %rax
movb $0x0, 0x8(%rax)
jmp 0xa36e
jmp 0xa32b
jmp 0xa3f7
movq -0x20(%rbp), %rdi
callq 0xa440
movsbl %al, %eax
cmpl $0x2a, %eax
jne 0xa3f5
jmp 0xa386
movq -0x20(%rbp), %rdi
callq 0x6730
xorb $-0x1, %al
testb $0x1, %al
jne 0xa397
jmp 0xa3f3
movq -0x20(%rbp), %rdi
leaq 0x12952c(%rip), %rsi    # 0x1338ce
callq 0x6700
testb $0x1, %al
jne 0xa3ad
jmp 0xa3c3
movq -0x28(%rbp), %rdi
leaq 0x12951d(%rip), %rsi    # 0x1338d5
callq 0xa4d0
movq %rax, -0x28(%rbp)
jmp 0xa3f3
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x52(%rbp)
movzbl -0x52(%rbp), %eax
cmpl $0xa, %eax
jne 0xa3e0
movq -0x10(%rbp), %rax
movb $0x0, 0x8(%rax)
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
jmp 0xa386
jmp 0xa3f5
jmp 0xa3f7
movb $0x0, -0x52(%rbp)
jmp 0xa409
movq -0x10(%rbp), %rax
movb $0x0, 0x8(%rax)
jmp 0xa409
jmp 0xa409
movq -0x28(%rbp), %rdi
movzbl -0x52(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
jmp 0xa0e4
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x90, %rsp
popq %rbp
retq