// File: besm6[P]pascal-re/pascompl.cc
// Function: Types::p[abi:cxx11]() const
std::string Types::p() const
{
    std::ostringstream ostr;
    switch (k) {
    case kindReal:
        return "REAL";
    case kindRange:
        ostr << "base: "
            << cast<RangeT>().base->p()
            << " range: "
            << cast<RangeT>().left
            << ".."
            << cast<RangeT>().right;
        return ostr.str();
    case kindArray:
        if (cast<ArrayT>().pck) ostr << "packed ";
        ostr << "array ["
             << cast<ArrayT>().range->p()
             << "] of " << cast<ArrayT>().base->p();
        return ostr.str();
    case kindSet:
        ostr << "set of " << cast<SetT>().sbase->p();
        return ostr.str();
    case kindPtr:
        if (this == cast<PtrT>().pbase)
            ostr << "typeless ptr";
        else
            ostr << "ptr to " << cast<PtrT>().pbase->p();
        return ostr.str();
    case kindFile:
        ostr << "file of " << cast<FileT>().fbase->p();
        return ostr.str();
    case kindScalar:
        return "scalar ";
    default:
        return "complex type";
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x350, %rsp            # imm = 0x350
movq %rdi, -0x288(%rbp)
movq %rdi, %rax
movq %rax, -0x280(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x278(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x43e0
movq -0x278(%rbp), %rax
movl 0x10(%rax), %eax
movq %rax, -0x270(%rbp)
subq $0x7, %rax
ja 0x57ca
movq -0x270(%rbp), %rax
leaq 0x2be60(%rip), %rcx     # 0x31004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x189(%rbp), %rdi
movq %rdi, -0x290(%rbp)
callq 0x44d0
movq -0x288(%rbp), %rdi
movq -0x290(%rbp), %rdx
leaq 0x2ca17(%rip), %rsi     # 0x31bec
callq 0x1dcf0
jmp 0x51dc
leaq -0x189(%rbp), %rdi
callq 0x4320
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x189(%rbp), %rdi
callq 0x4320
jmp 0x584d
leaq 0x2c9d0(%rip), %rsi     # 0x31bf1
leaq -0x188(%rbp), %rdi
callq 0x4290
movq %rax, -0x298(%rbp)
jmp 0x5236
movq -0x278(%rbp), %rdi
callq 0x1dda0
movq %rax, -0x2a0(%rbp)
jmp 0x524b
movq -0x2a0(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x1c0(%rbp), %rdi
callq 0x5140
jmp 0x5264
movq -0x298(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x4270
movq %rax, -0x2a8(%rbp)
jmp 0x5280
movq -0x2a8(%rbp), %rdi
leaq 0x2c96a(%rip), %rsi     # 0x31bf8
callq 0x4290
movq %rax, -0x2b0(%rbp)
jmp 0x529c
movq -0x278(%rbp), %rdi
callq 0x1dda0
movq %rax, -0x2b8(%rbp)
jmp 0x52b1
movq -0x2b0(%rbp), %rdi
movq -0x2b8(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x4510
movq %rax, -0x2c0(%rbp)
jmp 0x52d1
movq -0x2c0(%rbp), %rdi
leaq 0x2c922(%rip), %rsi     # 0x31c01
callq 0x4290
movq %rax, -0x2c8(%rbp)
jmp 0x52ed
movq -0x278(%rbp), %rdi
callq 0x1dda0
movq %rax, -0x2d0(%rbp)
jmp 0x5302
movq -0x2c8(%rbp), %rdi
movq -0x2d0(%rbp), %rax
movq 0x30(%rax), %rsi
callq 0x4510
jmp 0x531b
leaq -0x1c0(%rbp), %rdi
callq 0x4588
movq -0x288(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x42d0
jmp 0x533c
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
jmp 0x584d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x4588
jmp 0x584d
movq -0x278(%rbp), %rdi
callq 0x1ddf0
movq %rax, -0x2d8(%rbp)
jmp 0x539a
movq -0x2d8(%rbp), %rax
testb $0x1, 0x28(%rax)
je 0x53be
leaq 0x2c856(%rip), %rsi     # 0x31c04
leaq -0x188(%rbp), %rdi
callq 0x4290
jmp 0x53bc
jmp 0x53be
leaq 0x2c847(%rip), %rsi     # 0x31c0c
leaq -0x188(%rbp), %rdi
callq 0x4290
movq %rax, -0x2e0(%rbp)
jmp 0x53da
movq -0x278(%rbp), %rdi
callq 0x1ddf0
movq %rax, -0x2e8(%rbp)
jmp 0x53ef
movq -0x2e8(%rbp), %rax
movq 0x20(%rax), %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x5140
jmp 0x5408
movq -0x2e0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x4270
movq %rax, -0x2f0(%rbp)
jmp 0x5424
movq -0x2f0(%rbp), %rdi
leaq 0x2c7e2(%rip), %rsi     # 0x31c14
callq 0x4290
movq %rax, -0x2f8(%rbp)
jmp 0x5440
movq -0x278(%rbp), %rdi
callq 0x1ddf0
movq %rax, -0x300(%rbp)
jmp 0x5455
movq -0x300(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x200(%rbp), %rdi
callq 0x5140
jmp 0x546e
movq -0x2f8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x4270
jmp 0x5483
leaq -0x200(%rbp), %rdi
callq 0x4588
leaq -0x1e0(%rbp), %rdi
callq 0x4588
movq -0x288(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x42d0
jmp 0x54b0
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
jmp 0x54f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x4588
leaq -0x1e0(%rbp), %rdi
callq 0x4588
jmp 0x584d
leaq 0x2c711(%rip), %rsi     # 0x31c1a
leaq -0x188(%rbp), %rdi
callq 0x4290
movq %rax, -0x308(%rbp)
jmp 0x551e
movq -0x278(%rbp), %rdi
callq 0x1de40
movq %rax, -0x310(%rbp)
jmp 0x5533
movq -0x310(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x220(%rbp), %rdi
callq 0x5140
jmp 0x554c
movq -0x308(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x4270
jmp 0x5561
leaq -0x220(%rbp), %rdi
callq 0x4588
movq -0x288(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x42d0
jmp 0x5582
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x4588
jmp 0x584d
movq -0x278(%rbp), %rdi
callq 0x1de90
movq %rax, -0x318(%rbp)
jmp 0x55c9
movq -0x278(%rbp), %rax
movq -0x318(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jne 0x55f7
leaq 0x2c63e(%rip), %rsi     # 0x31c22
leaq -0x188(%rbp), %rdi
callq 0x4290
jmp 0x55f2
jmp 0x5687
leaq 0x2c631(%rip), %rsi     # 0x31c2f
leaq -0x188(%rbp), %rdi
callq 0x4290
movq %rax, -0x320(%rbp)
jmp 0x5613
movq -0x278(%rbp), %rdi
callq 0x1de90
movq %rax, -0x328(%rbp)
jmp 0x5628
movq -0x328(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x240(%rbp), %rdi
callq 0x5140
jmp 0x5641
movq -0x320(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x4270
jmp 0x5656
leaq -0x240(%rbp), %rdi
callq 0x4588
jmp 0x5687
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x4588
jmp 0x584d
movq -0x288(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x42d0
jmp 0x569c
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
leaq 0x2c585(%rip), %rsi     # 0x31c37
leaq -0x188(%rbp), %rdi
callq 0x4290
movq %rax, -0x330(%rbp)
jmp 0x56c7
movq -0x278(%rbp), %rdi
callq 0x1dee0
movq %rax, -0x338(%rbp)
jmp 0x56dc
movq -0x338(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x260(%rbp), %rdi
callq 0x5140
jmp 0x56f5
movq -0x330(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x4270
jmp 0x570a
leaq -0x260(%rbp), %rdi
callq 0x4588
movq -0x288(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x42d0
jmp 0x572b
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x4588
jmp 0x584d
leaq -0x261(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0x44d0
movq -0x288(%rbp), %rdi
movq -0x340(%rbp), %rdx
leaq 0x2c4bb(%rip), %rsi     # 0x31c40
callq 0x1dcf0
jmp 0x578c
leaq -0x261(%rbp), %rdi
callq 0x4320
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x261(%rbp), %rdi
callq 0x4320
jmp 0x584d
leaq -0x262(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x44d0
movq -0x288(%rbp), %rdi
movq -0x348(%rbp), %rdx
leaq 0x2c456(%rip), %rsi     # 0x31c48
callq 0x1dcf0
jmp 0x57f9
leaq -0x262(%rbp), %rdi
callq 0x4320
movl $0x1, -0x1a0(%rbp)
jmp 0x5831
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x198(%rbp)
movl %eax, -0x19c(%rbp)
leaq -0x262(%rbp), %rdi
callq 0x4320
jmp 0x584d
leaq -0x188(%rbp), %rdi
callq 0x4080
movq -0x280(%rbp), %rax
addq $0x350, %rsp            # imm = 0x350
popq %rbp
retq
leaq -0x188(%rbp), %rdi
callq 0x4080
movq -0x198(%rbp), %rdi
callq 0x44c0
nopw %cs:(%rax,%rax)