// File: KJTang[P]SimpleCompiler/AST.cpp
// Function: WhileExprAST::eval[abi:cxx11]()
std::string WhileExprAST::eval() {
    std::string condLabel = generateJmpLabel();
    std::string quitLabel = generateJmpLabel();
    return condLabel + ":" + insEnd + condAST->eval() + "JZ " + quitLabel + insEnd + 
        blockAST->eval() + "JMP " + condLabel + insEnd + quitLabel + ":" + insEnd;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x240, %rsp            # imm = 0x240
movq %rdi, -0x238(%rbp)
movq %rdi, %rax
movq %rax, -0x230(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x228(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xcf80
leaq -0x50(%rbp), %rdi
callq 0xcf80
jmp 0xd093
leaq 0xe2a0(%rip), %rdx      # 0x1b33a
leaq -0x1e0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xe1d0
jmp 0xd0ac
leaq 0x1b1ed(%rip), %rdx     # 0x282a0
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0xdf10
jmp 0xd0c8
movq -0x228(%rbp), %rax
movq 0x10(%rax), %rsi
movq (%rsi), %rax
movq 0x18(%rax), %rax
leaq -0x200(%rbp), %rdi
callq *%rax
jmp 0xd0e5
leaq -0x1a0(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
leaq -0x200(%rbp), %rdx
callq 0xe070
jmp 0xd101
leaq 0xe22e(%rip), %rdx      # 0x1b336
leaq -0x180(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0xe180
jmp 0xd11d
leaq -0x160(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xdf10
jmp 0xd136
leaq 0x1b163(%rip), %rdx     # 0x282a0
leaq -0x140(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0xdf10
jmp 0xd152
movq -0x228(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
movq 0x18(%rax), %rax
leaq -0x220(%rbp), %rdi
callq *%rax
jmp 0xd16f
leaq -0x120(%rbp), %rdi
leaq -0x140(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0xe070
jmp 0xd18b
leaq 0xe1aa(%rip), %rdx      # 0x1b33c
leaq -0x100(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0xe180
jmp 0xd1a7
leaq -0xe0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xdf10
jmp 0xd1c0
leaq 0x1b0d9(%rip), %rdx     # 0x282a0
leaq -0xc0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0xdf10
jmp 0xd1dc
leaq -0xa0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xdf10
jmp 0xd1f5
leaq 0xe13e(%rip), %rdx      # 0x1b33a
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0xe180
jmp 0xd20e
movq -0x238(%rbp), %rdi
leaq 0x1b084(%rip), %rdx     # 0x282a0
leaq -0x80(%rbp), %rsi
callq 0xdf10
jmp 0xd227
leaq -0x80(%rbp), %rdi
callq 0x34f8
leaq -0xa0(%rbp), %rdi
callq 0x34f8
leaq -0xc0(%rbp), %rdi
callq 0x34f8
leaq -0xe0(%rbp), %rdi
callq 0x34f8
leaq -0x100(%rbp), %rdi
callq 0x34f8
leaq -0x120(%rbp), %rdi
callq 0x34f8
leaq -0x220(%rbp), %rdi
callq 0x34f8
leaq -0x140(%rbp), %rdi
callq 0x34f8
leaq -0x160(%rbp), %rdi
callq 0x34f8
leaq -0x180(%rbp), %rdi
callq 0x34f8
leaq -0x1a0(%rbp), %rdi
callq 0x34f8
leaq -0x200(%rbp), %rdi
callq 0x34f8
leaq -0x1c0(%rbp), %rdi
callq 0x34f8
leaq -0x1e0(%rbp), %rdi
callq 0x34f8
leaq -0x50(%rbp), %rdi
callq 0x34f8
leaq -0x30(%rbp), %rdi
callq 0x34f8
movq -0x230(%rbp), %rax
addq $0x240, %rsp            # imm = 0x240
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd498
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd48f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd483
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd477
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd46b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd45f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd453
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd447
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd43b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd42f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd423
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd417
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd40b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd3ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xd3f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x34f8
leaq -0xa0(%rbp), %rdi
callq 0x34f8
leaq -0xc0(%rbp), %rdi
callq 0x34f8
leaq -0xe0(%rbp), %rdi
callq 0x34f8
leaq -0x100(%rbp), %rdi
callq 0x34f8
leaq -0x120(%rbp), %rdi
callq 0x34f8
leaq -0x220(%rbp), %rdi
callq 0x34f8
leaq -0x140(%rbp), %rdi
callq 0x34f8
leaq -0x160(%rbp), %rdi
callq 0x34f8
leaq -0x180(%rbp), %rdi
callq 0x34f8
leaq -0x1a0(%rbp), %rdi
callq 0x34f8
leaq -0x200(%rbp), %rdi
callq 0x34f8
leaq -0x1c0(%rbp), %rdi
callq 0x34f8
leaq -0x1e0(%rbp), %rdi
callq 0x34f8
leaq -0x50(%rbp), %rdi
callq 0x34f8
leaq -0x30(%rbp), %rdi
callq 0x34f8
movq -0x58(%rbp), %rdi
callq 0x3470
nopw (%rax,%rax)