// File: /workspace/github_c_makefile_star2_O0/ieyasu[P]funit/parse.c
// Function: next_line
char *next_line(struct ParseState *ps)
{
    char *prev_line;

    assert(ps->file_buf != NULL);

    if (ps->line_pos) {
        assert(ps->next_line_pos >= ps->line_pos ||
               ps->line_pos == ps->file_end);
        prev_line = ps->line_pos;
        ps->line_pos = ps->next_line_pos;
        // read past \r\n
        while (ps->line_pos < ps->file_end) {
            if (*ps->line_pos == '\n') {
                ps->line_pos++;
                ps->lineno++;
                break;
            } else if (*ps->line_pos == '\r') {
                if (ps->line_pos + 1 < ps->file_end &&
                    *(ps->line_pos + 1) == '\n')
                    ps->line_pos += 2;
                else
                    ps->line_pos++;
                ps->lineno++;
                break;
            }
            ps->line_pos++;
        }
        if (ps->line_pos >= ps->file_end) {
            ps->line_pos = prev_line;
            ps->lineno--;
            ps->read_pos = ps->file_end;
            return NULL;
        }
    } else { // very first line
        ps->line_pos = ps->file_buf;
        ps->lineno = 1;
    }
    ps->read_pos = ps->next_pos = ps->line_pos;

    // find next \r\n
    ps->next_line_pos = ps->line_pos;
    while (ps->next_line_pos < ps->file_end) {
        switch (*ps->next_line_pos) {
        case '\n':
        case '\r':
            goto eol;
        default:
            ps->next_line_pos++;
            break;
        }
    }
 eol:
    return ps->line_pos;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x66c9
jmp 0x66e8
leaq 0x5744(%rip), %rdi      # 0xbe14
leaq 0x56bc(%rip), %rsi      # 0xbd93
movl $0x49, %edx
leaq 0x5746(%rip), %rcx      # 0xbe29
callq 0x2120
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x6872
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jae 0x671b
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jne 0x671d
jmp 0x673c
leaq 0x572a(%rip), %rdi      # 0xbe4e
leaq 0x5668(%rip), %rsi      # 0xbd93
movl $0x4d, %edx
leaq 0x56f2(%rip), %rcx      # 0xbe29
callq 0x2120
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x6825
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movsbl (%rax), %eax
cmpl $0xa, %eax
jne 0x67a3
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x48(%rax)
jmp 0x6825
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movsbl (%rax), %eax
cmpl $0xd, %eax
jne 0x680e
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
addq $0x1, %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x67ec
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0xa, %eax
jne 0x67ec
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x2, %rcx
movq %rcx, 0x28(%rax)
jmp 0x67fc
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x48(%rax)
jmp 0x6825
jmp 0x6810
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
jmp 0x6758
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jb 0x6870
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x48(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x38(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x6909
jmp 0x688e
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq $0x1, 0x48(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x68fb
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movsbl (%rax), %eax
movl %eax, -0x1c(%rbp)
subl $0xa, %eax
je 0x68e7
jmp 0x68dd
movl -0x1c(%rbp), %eax
subl $0xd, %eax
jne 0x68e9
jmp 0x68e7
jmp 0x68fd
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x30(%rax)
jmp 0x68b6
jmp 0x68fd
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)