// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_body_code_s_parse_single_statement
er_t xoico_body_code_s_parse_single_statement( xoico_body_code_s* o, const xoico_host* host, x_source* source )
{
    // xoico_body.x:190:1
    
    tp_t hash = bcore_tp_init();
    
    x_source_point_s_setup_from_source(&(o->source_point),source );
    
    sz_t nest_count = 0;
    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 '{':
            case '}':
                return  x_source_parse_error_fa(source,"Braces are not allowed in single statement." );
            break;
    
            case '(':
            {
                nest_count++;
            }
            break;
    
            case ')':
            {
                if( nest_count == 0 )
                {
                    return  x_source_parse_error_fa(source,"Unmatched closing bracket ')'." );
                }
                nest_count--;
            }
            break;
    
            case ';':
            {
                if( nest_count == 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 $0x60, %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 $0x0, -0x30(%rbp)
movb $0x0, -0x31(%rbp)
movq -0x10(%rbp), %rax
movb $0x1, 0x8(%rax)
movq -0x20(%rbp), %rdi
leaq 0x129307(%rip), %rsi    # 0x133894
callq 0x6700
testb $0x1, %al
jne 0xa598
jmp 0xa59a
jmp 0xa582
jmp 0xa59c
movq -0x20(%rbp), %rdi
callq 0x6730
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x33(%rbp)
jne 0xa5b9
movb -0x31(%rbp), %al
xorb $-0x1, %al
movb %al, -0x33(%rbp)
movb -0x33(%rbp), %al
testb $0x1, %al
jne 0xa5c5
jmp 0xa932
movq -0x20(%rbp), %rdi
callq 0xa4b0
movb %al, -0x32(%rbp)
movzbl -0x32(%rbp), %eax
movl %eax, -0x38(%rbp)
subl $0xa, %eax
je 0xa910
jmp 0xa5e3
movl -0x38(%rbp), %eax
subl $0x22, %eax
je 0xa6b2
jmp 0xa5f1
movl -0x38(%rbp), %eax
subl $0x27, %eax
je 0xa766
jmp 0xa5ff
movl -0x38(%rbp), %eax
subl $0x28, %eax
je 0xa65e
jmp 0xa609
movl -0x38(%rbp), %eax
subl $0x29, %eax
je 0xa66f
jmp 0xa613
movl -0x38(%rbp), %eax
subl $0x2f, %eax
je 0xa81a
jmp 0xa621
movl -0x38(%rbp), %eax
subl $0x3b, %eax
je 0xa6a2
jmp 0xa62b
movl -0x38(%rbp), %eax
subl $0x7b, %eax
je 0xa643
jmp 0xa635
movl -0x38(%rbp), %eax
subl $0x7d, %eax
jne 0xa91a
jmp 0xa643
movq -0x20(%rbp), %rdi
leaq 0x12928a(%rip), %rsi    # 0x1338d8
movb $0x0, %al
callq 0x4c80
movq %rax, -0x8(%rbp)
jmp 0xa946
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0xa91c
cmpq $0x0, -0x30(%rbp)
jne 0xa691
movq -0x20(%rbp), %rdi
leaq 0x129283(%rip), %rsi    # 0x133904
movb $0x0, %al
callq 0x4c80
movq %rax, -0x8(%rbp)
jmp 0xa946
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0xa91c
cmpq $0x0, -0x30(%rbp)
jne 0xa6ad
movb $0x1, -0x31(%rbp)
jmp 0xa91c
movq -0x28(%rbp), %rdi
movzbl -0x32(%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, -0x39(%rbp)
jne 0xa6f0
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x32(%rbp)
movzbl %al, %eax
cmpl $0x22, %eax
setne %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0xa6f9
jmp 0xa75d
movq -0x28(%rbp), %rdi
movzbl -0x32(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x32(%rbp), %eax
cmpl $0x5c, %eax
jne 0xa734
movq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa4b0
movq -0x48(%rbp), %rdi
movzbl %al, %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x32(%rbp), %eax
cmpl $0xa, %eax
jne 0xa758
movq -0x20(%rbp), %rdi
leaq 0x129152(%rip), %rsi    # 0x13389a
movb $0x0, %al
callq 0x4c80
movq %rax, -0x8(%rbp)
jmp 0xa946
jmp 0xa6c3
movb $0x0, -0x32(%rbp)
jmp 0xa91c
movq -0x28(%rbp), %rdi
movzbl -0x32(%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, -0x49(%rbp)
jne 0xa7a4
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x32(%rbp)
movzbl %al, %eax
cmpl $0x27, %eax
setne %al
movb %al, -0x49(%rbp)
movb -0x49(%rbp), %al
testb $0x1, %al
jne 0xa7ad
jmp 0xa811
movq -0x28(%rbp), %rdi
movzbl -0x32(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x32(%rbp), %eax
cmpl $0x5c, %eax
jne 0xa7e8
movq -0x28(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa4b0
movq -0x58(%rbp), %rdi
movzbl %al, %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x32(%rbp), %eax
cmpl $0xa, %eax
jne 0xa80c
movq -0x20(%rbp), %rdi
leaq 0x1290b9(%rip), %rsi    # 0x1338b5
movb $0x0, %al
callq 0x4c80
movq %rax, -0x8(%rbp)
jmp 0xa946
jmp 0xa777
movb $0x0, -0x32(%rbp)
jmp 0xa91c
movq -0x28(%rbp), %rdi
movzbl -0x32(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa440
movsbl %al, %eax
cmpl $0x2f, %eax
jne 0xa886
jmp 0xa83e
movq -0x20(%rbp), %rdi
callq 0x6730
xorb $-0x1, %al
testb $0x1, %al
jne 0xa84f
jmp 0xa881
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x32(%rbp)
movq -0x28(%rbp), %rdi
movzbl -0x32(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
movzbl -0x32(%rbp), %eax
cmpl $0xa, %eax
jne 0xa87f
movq -0x10(%rbp), %rax
movb $0x0, 0x8(%rax)
jmp 0xa881
jmp 0xa83e
jmp 0xa90a
movq -0x20(%rbp), %rdi
callq 0xa440
movsbl %al, %eax
cmpl $0x2a, %eax
jne 0xa908
jmp 0xa899
movq -0x20(%rbp), %rdi
callq 0x6730
xorb $-0x1, %al
testb $0x1, %al
jne 0xa8aa
jmp 0xa906
movq -0x20(%rbp), %rdi
leaq 0x129019(%rip), %rsi    # 0x1338ce
callq 0x6700
testb $0x1, %al
jne 0xa8c0
jmp 0xa8d6
movq -0x28(%rbp), %rdi
leaq 0x12900a(%rip), %rsi    # 0x1338d5
callq 0xa4d0
movq %rax, -0x28(%rbp)
jmp 0xa906
movq -0x20(%rbp), %rdi
callq 0xa490
movb %al, -0x32(%rbp)
movzbl -0x32(%rbp), %eax
cmpl $0xa, %eax
jne 0xa8f3
movq -0x10(%rbp), %rax
movb $0x0, 0x8(%rax)
movq -0x28(%rbp), %rdi
movzbl -0x32(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
jmp 0xa899
jmp 0xa908
jmp 0xa90a
movb $0x0, -0x32(%rbp)
jmp 0xa91c
movq -0x10(%rbp), %rax
movb $0x0, 0x8(%rax)
jmp 0xa91c
jmp 0xa91c
movq -0x28(%rbp), %rdi
movzbl -0x32(%rbp), %esi
callq 0xa460
movq %rax, -0x28(%rbp)
jmp 0xa59c
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq