// File: sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_function_header_fn(input_t*)
pair<int, pl0_ast_function_header *> pl0_function_header_fn(input_t *text) {
    auto parser = (pl0_string_literal("function") >> (pl0_identify + (~pl0_param_list))) + (pl0_character(':') >> pl0_primitive_type << pl0_character(';'));
    auto res = (spaces >> parser << spaces)(text);
    if (verbose) {
        cout << "parsing: Function Header" << endl;
    }
    return make_pair(std::get<0>(res), new pl0_ast_function_header(text->locate(), std::get<1>(res).first.first, std::get<1>(res).first.second, std::get<1>(res).second));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb40, %rsp            # imm = 0xB40
movq %rdi, -0x18(%rbp)
leaq -0x309(%rbp), %rdi
movq %rdi, -0xaf0(%rbp)
callq 0x55d0
movq -0xaf0(%rbp), %rdx
leaq 0xe0eaf(%rip), %rsi     # 0xf10cf
leaq -0x308(%rbp), %rdi
callq 0x19840
jmp 0x1022e
leaq -0x2e8(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0xa6a0
jmp 0x10243
leaq 0x14fd36(%rip), %rsi    # 0x15ff80
leaq -0x3f8(%rbp), %rdi
callq 0x21b00
jmp 0x10258
leaq 0x14fa51(%rip), %rsi    # 0x15fcb0
leaq -0x3b0(%rbp), %rdi
leaq -0x3f8(%rbp), %rdx
callq 0x21ac0
jmp 0x10274
leaq -0x2a0(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
leaq -0x3b0(%rbp), %rdx
callq 0x21a80
jmp 0x10290
movb $0x3a, -0x5a9(%rbp)
leaq -0x5a8(%rbp), %rdi
leaq -0x5a9(%rbp), %rsi
callq 0xa240
jmp 0x102ac
leaq 0x14fb1d(%rip), %rdx    # 0x15fdd0
leaq -0x560(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x20b70
jmp 0x102c8
movb $0x3b, -0x5f9(%rbp)
leaq -0x5f8(%rbp), %rdi
leaq -0x5f9(%rbp), %rsi
callq 0xa240
jmp 0x102e4
leaq -0x4d0(%rbp), %rdi
leaq -0x560(%rbp), %rsi
leaq -0x5f8(%rbp), %rdx
callq 0x22140
jmp 0x10300
leaq -0x1c8(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
leaq -0x4d0(%rbp), %rdx
callq 0x22100
jmp 0x1031c
leaq -0x4d0(%rbp), %rdi
callq 0x22180
leaq -0x5f8(%rbp), %rdi
callq 0x19a20
leaq -0x560(%rbp), %rdi
callq 0x20bb0
leaq -0x5a8(%rbp), %rdi
callq 0x19a20
leaq -0x2a0(%rbp), %rdi
callq 0x21b30
leaq -0x3b0(%rbp), %rdi
callq 0x21b60
leaq -0x3f8(%rbp), %rdi
callq 0x21b90
leaq -0x2e8(%rbp), %rdi
callq 0x1d950
leaq -0x308(%rbp), %rdi
callq 0x5200
leaq -0x309(%rbp), %rdi
callq 0x53c0
leaq 0x14f435(%rip), %rsi    # 0x15f7d0
leaq -0xad8(%rbp), %rdi
leaq -0x1c8(%rbp), %rdx
callq 0x221f0
jmp 0x103b0
leaq 0x14f419(%rip), %rdx    # 0x15f7d0
leaq -0x8c0(%rbp), %rdi
leaq -0xad8(%rbp), %rsi
callq 0x221b0
jmp 0x103cc
movq -0x18(%rbp), %rdx
leaq -0x640(%rbp), %rdi
leaq -0x8c0(%rbp), %rsi
callq 0x22230
jmp 0x103e5
leaq -0x8c0(%rbp), %rdi
callq 0x225a0
leaq -0xad8(%rbp), %rdi
callq 0x225d0
testb $0x1, 0x14f434(%rip)    # 0x15f838
je 0x10603
movq 0x14ebc7(%rip), %rdi    # 0x15efd8
leaq 0xdef6c(%rip), %rsi     # 0xef384
callq 0x5330
movq %rax, -0xaf8(%rbp)
jmp 0x10426
movq -0xaf8(%rbp), %rdi
movq 0x14eb8c(%rip), %rsi    # 0x15efc0
callq 0x53a0
jmp 0x1043b
jmp 0x10603
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10581
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10569
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x1055d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10551
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10545
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10539
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x1052d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x10521
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x22180
leaq -0x5f8(%rbp), %rdi
callq 0x19a20
leaq -0x560(%rbp), %rdi
callq 0x20bb0
leaq -0x5a8(%rbp), %rdi
callq 0x19a20
leaq -0x2a0(%rbp), %rdi
callq 0x21b30
leaq -0x3b0(%rbp), %rdi
callq 0x21b60
leaq -0x3f8(%rbp), %rdi
callq 0x21b90
leaq -0x2e8(%rbp), %rdi
callq 0x1d950
leaq -0x308(%rbp), %rdi
callq 0x5200
leaq -0x309(%rbp), %rdi
callq 0x53c0
jmp 0x10757
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x1074b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x105db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x8c0(%rbp), %rdi
callq 0x225a0
leaq -0xad8(%rbp), %rdi
callq 0x225d0
jmp 0x1074b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x1073f
leaq -0x640(%rbp), %rdi
callq 0x22630
movq %rax, -0xb08(%rbp)
movl $0x20, %edi
callq 0x5340
movq %rax, -0xb00(%rbp)
jmp 0x10629
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0xb10(%rbp)
jmp 0x1063b
movq -0xb10(%rbp), %rax
movq %rax, -0xae8(%rbp)
leaq -0x640(%rbp), %rdi
movq %rdi, -0xb28(%rbp)
callq 0x22650
movq -0xb28(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0xb20(%rbp)
callq 0x22650
movq -0xb28(%rbp), %rdi
movq 0x8(%rax), %rax
movq %rax, -0xb18(%rbp)
callq 0x22650
movq -0xb00(%rbp), %rdi
movq -0xb20(%rbp), %rdx
movq -0xb18(%rbp), %rcx
movq 0x10(%rax), %r8
movq -0xae8(%rbp), %rsi
callq 0x22670
jmp 0x106b0
movq -0xb08(%rbp), %rdi
movq -0xb00(%rbp), %rax
movq %rax, -0xae0(%rbp)
leaq -0xae0(%rbp), %rsi
callq 0x22600
movq %rdx, -0xb38(%rbp)
movl %eax, -0xb2c(%rbp)
jmp 0x106e0
movq -0xb38(%rbp), %rax
movl -0xb2c(%rbp), %ecx
movl %ecx, -0x10(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x640(%rbp), %rdi
callq 0x226b0
leaq -0x1c8(%rbp), %rdi
callq 0x226d0
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rdx
addq $0xb40, %rsp            # imm = 0xB40
popq %rbp
retq
movq -0xb00(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
movl $0x20, %esi
callq 0x5350
leaq -0x640(%rbp), %rdi
callq 0x226b0
leaq -0x1c8(%rbp), %rdi
callq 0x226d0
movq -0x318(%rbp), %rdi
callq 0x55b0
nopw %cs:(%rax,%rax)