// File: sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_character_helper(char const&, input_t*)
pair<int, char> pl0_character_helper(char const & ch, input_t *text) {
    if (text->empty()) { return make_pair(-1, '\0'); }
    char c = text->at(0);
    if (ch != c) { pl0_parser_error(text->locate(), string("expected character ") + "'" + string(0, ch) + "'"); }
    return make_pair(ch == c ? (1) : (-1), ch);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x19780
testb $0x1, %al
jne 0x9fa2
jmp 0x9fcb
movl $0xffffffff, -0x1c(%rbp) # imm = 0xFFFFFFFF
movb $0x0, -0x1d(%rbp)
leaq -0x1c(%rbp), %rdi
leaq -0x1d(%rbp), %rsi
callq 0x197b0
movl %eax, %ecx
movl %ecx, -0x8(%rbp)
shrq $0x20, %rax
movb %al, -0x4(%rbp)
jmp 0xa224
movq -0x18(%rbp), %rdi
movl $0x0, -0x24(%rbp)
leaq -0x24(%rbp), %rsi
callq 0x197e0
movb %al, -0x1e(%rbp)
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
movsbl -0x1e(%rbp), %ecx
cmpl %ecx, %eax
je 0xa1e9
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x2c(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x55d0
movq -0xf8(%rbp), %rdx
leaq 0xe5167(%rip), %rsi     # 0xef18a
leaq -0xb0(%rbp), %rdi
callq 0x19840
jmp 0xa031
leaq 0xe71d7(%rip), %rdx     # 0xf120f
leaq -0x90(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1a380
jmp 0xa04d
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x104(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x55d0
movl -0x104(%rbp), %edx
movq -0x100(%rbp), %rcx
xorl %eax, %eax
movl %eax, %esi
leaq -0xe8(%rbp), %rdi
callq 0x19b20
jmp 0xa08c
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x1a3d0
jmp 0xa0a5
leaq 0xe7163(%rip), %rdx     # 0xf120f
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x1a380
jmp 0xa0bb
movq -0x2c(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x9e70
jmp 0xa0ca
leaq -0x50(%rbp), %rdi
callq 0x5200
leaq -0x70(%rbp), %rdi
callq 0x5200
leaq -0xe8(%rbp), %rdi
callq 0x5200
leaq -0xe9(%rbp), %rdi
callq 0x53c0
leaq -0x90(%rbp), %rdi
callq 0x5200
leaq -0xb0(%rbp), %rdi
callq 0x5200
leaq -0xb1(%rbp), %rdi
callq 0x53c0
jmp 0xa1e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xa1db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xa1cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xa1b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xa1ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xa1a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x5200
leaq -0x70(%rbp), %rdi
callq 0x5200
leaq -0xe8(%rbp), %rdi
callq 0x5200
leaq -0xe9(%rbp), %rdi
callq 0x53c0
leaq -0x90(%rbp), %rdi
callq 0x5200
leaq -0xb0(%rbp), %rdi
callq 0x5200
leaq -0xb1(%rbp), %rdi
callq 0x53c0
jmp 0xa231
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
movsbl -0x1e(%rbp), %ecx
subl %ecx, %eax
sete %al
movzbl %al, %ecx
movl %ecx, %eax
leal -0x1(%rax,%rax), %eax
movl %eax, -0xf0(%rbp)
movq -0x10(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x19a50
movl %eax, %ecx
movl %ecx, -0x8(%rbp)
shrq $0x20, %rax
movb %al, -0x4(%rbp)
movq -0x8(%rbp), %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
movq -0xc0(%rbp), %rdi
callq 0x55b0
nopl (%rax)