// File: sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_string_literal_helper(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, input_t*)
pair<int, string> pl0_string_literal_helper(const string & str, input_t *text) {
    if (text->empty()) { return make_pair(-1, "\0"); }
    string s = text->take(str.length());
    if (str != s) { pl0_parser_error(text->locate(), string("expected literal string ") + "\"" + str + "\""); }
    return make_pair(str == s ? str.length() : (-1), str);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x160, %rsp            # imm = 0x160
movq %rdi, -0x138(%rbp)
movq %rdi, %rax
movq %rax, -0x130(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x19780
testb $0x1, %al
jne 0xa3d7
jmp 0xa40a
movl $0xffffffff, -0x2c(%rbp) # imm = 0xFFFFFFFF
leaq -0x2c(%rbp), %rdi
leaq 0xe4cbb(%rip), %rsi     # 0xef0a4
callq 0x19c30
movq -0x138(%rbp), %rdi
movl %eax, -0x28(%rbp)
movq %rdx, -0x20(%rbp)
leaq -0x28(%rbp), %rsi
callq 0x19c70
jmp 0xa67c
movq -0x18(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x10(%rbp), %rdi
callq 0x54e0
movq -0x140(%rbp), %rsi
movl %eax, -0x54(%rbp)
leaq -0x50(%rbp), %rdi
leaq -0x54(%rbp), %rdx
callq 0x19cf0
movq -0x10(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1a4a0
testb $0x1, %al
jne 0xa44b
jmp 0xa5d1
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x148(%rbp)
jmp 0xa45d
movq -0x148(%rbp), %rax
movq %rax, -0x5c(%rbp)
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x150(%rbp)
callq 0x55d0
movq -0x150(%rbp), %rdx
leaq 0xe4d15(%rip), %rsi     # 0xef19e
leaq -0xf0(%rbp), %rdi
callq 0x19840
jmp 0xa497
leaq 0xe727d(%rip), %rdx     # 0xf171b
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x1a380
jmp 0xa4b3
movq -0x10(%rbp), %rdx
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x1a4d0
jmp 0xa4cc
leaq 0xe7248(%rip), %rdx     # 0xf171b
leaq -0x90(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1a380
jmp 0xa4e8
movq -0x5c(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x9e70
jmp 0xa4fa
leaq -0x90(%rbp), %rdi
callq 0x5200
leaq -0xb0(%rbp), %rdi
callq 0x5200
leaq -0xd0(%rbp), %rdi
callq 0x5200
leaq -0xf0(%rbp), %rdi
callq 0x5200
leaq -0xf1(%rbp), %rdi
callq 0x53c0
jmp 0xa5d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa671
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa5c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa5b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa5a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa59c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x5200
leaq -0xb0(%rbp), %rdi
callq 0x5200
leaq -0xd0(%rbp), %rdi
callq 0x5200
leaq -0xf0(%rbp), %rdi
callq 0x5200
leaq -0xf1(%rbp), %rdi
callq 0x53c0
jmp 0xa671
movq -0x10(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x19db0
testb $0x1, %al
jne 0xa5e4
jmp 0xa5f6
movq -0x10(%rbp), %rdi
callq 0x54e0
movq %rax, -0x158(%rbp)
jmp 0xa606
movq $-0x1, %rax
movq %rax, -0x158(%rbp)
jmp 0xa606
movq -0x158(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x10(%rbp), %rdx
leaq -0x120(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x19d70
jmp 0xa62d
movq -0x138(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x19e40
jmp 0xa642
leaq -0x120(%rbp), %rdi
callq 0x19e80
leaq -0x50(%rbp), %rdi
callq 0x5200
jmp 0xa67c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x19e80
leaq -0x50(%rbp), %rdi
callq 0x5200
jmp 0xa68c
movq -0x130(%rbp), %rax
addq $0x160, %rsp            # imm = 0x160
popq %rbp
retq
movq -0x68(%rbp), %rdi
callq 0x55b0
nopw %cs:(%rax,%rax)