// File: kram[P]kram/./src/parser/parser.cpp
// Function: Parser::keyword_while()
Instruction* Parser::keyword_while() {
	Instruction* ins = new Instruction(Ins::WHILE);

	ins->left = this->read_until(std::vector<lexer::Token>{
		lexer::Token::OPERATOR("{")
	});

	this->advance();
	ins->right = this->read_until(std::vector<lexer::Token>{
		lexer::Token::OPERATOR("}")
	});

	return ins;
}

// Assembly:
subq $0x208, %rsp            # imm = 0x208
movq %rdi, 0x200(%rsp)
movq 0x200(%rsp), %rax
movq %rax, 0xa8(%rsp)
movl $0x80, %edi
callq 0x32e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xb0(%rsp)
movl $0xd, %esi
callq 0x26dd0
jmp 0x25b13
movq 0xb0(%rsp), %rax
movq %rax, 0x1f8(%rsp)
movb $0x1, 0x156(%rsp)
leaq 0x180(%rsp), %rax
movq %rax, 0x178(%rsp)
leaq 0x157(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x34a0
movq 0xa0(%rsp), %rdx
leaq 0x5752(%rip), %rsi      # 0x2b2b1
leaq 0x158(%rsp), %rdi
callq 0x3390
jmp 0x25b6e
leaq 0x180(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0xd7e0
jmp 0x25b85
movb $0x0, 0x156(%rsp)
leaq 0x180(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq $0x1, 0x1b0(%rsp)
leaq 0x155(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x26940
movq 0x98(%rsp), %rcx
movq 0x1a8(%rsp), %rsi
movq 0x1b0(%rsp), %rdx
leaq 0x1b8(%rsp), %rdi
callq 0x26950
jmp 0x25be5
movq 0xa8(%rsp), %rsi
leaq 0x1d0(%rsp), %rdi
leaq 0x1b8(%rsp), %rdx
callq 0x20b20
jmp 0x25c04
movq 0x1f8(%rsp), %rdi
addq $0x38, %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x26e30
leaq 0x1d0(%rsp), %rdi
callq 0x5560
leaq 0x1b8(%rsp), %rdi
callq 0x269e0
leaq 0x155(%rsp), %rdi
callq 0x26a40
leaq 0x180(%rsp), %rax
movq %rax, 0x88(%rsp)
addq $0x28, %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rdi
addq $-0x28, %rdi
movq %rdi, 0x80(%rsp)
callq 0xdeb0
movq 0x88(%rsp), %rcx
movq 0x80(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x90(%rsp)
jne 0x25c60
leaq 0x158(%rsp), %rdi
callq 0x31f0
leaq 0x157(%rsp), %rdi
callq 0x3310
movq 0xa8(%rsp), %rdi
callq 0x21220
movb $0x1, 0xbe(%rsp)
leaq 0xe8(%rsp), %rax
movq %rax, 0xe0(%rsp)
leaq 0xbf(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x34a0
movq 0x78(%rsp), %rdx
leaq 0x55c0(%rip), %rsi      # 0x2b2b3
leaq 0xc0(%rsp), %rdi
callq 0x3390
jmp 0x25d02
leaq 0xe8(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0xd7e0
jmp 0x25d19
movb $0x0, 0xbe(%rsp)
leaq 0xe8(%rsp), %rax
movq %rax, 0x110(%rsp)
movq $0x1, 0x118(%rsp)
leaq 0xbd(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x26940
movq 0x70(%rsp), %rcx
movq 0x110(%rsp), %rsi
movq 0x118(%rsp), %rdx
leaq 0x120(%rsp), %rdi
callq 0x26950
jmp 0x25d73
movq 0xa8(%rsp), %rsi
leaq 0x138(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0x20b20
jmp 0x25d92
movq 0x1f8(%rsp), %rdi
addq $0x50, %rdi
leaq 0x138(%rsp), %rsi
callq 0x26e30
leaq 0x138(%rsp), %rdi
callq 0x5560
leaq 0x120(%rsp), %rdi
callq 0x269e0
leaq 0xbd(%rsp), %rdi
callq 0x26a40
leaq 0xe8(%rsp), %rax
movq %rax, 0x60(%rsp)
addq $0x28, %rax
movq %rax, 0x68(%rsp)
movq 0x68(%rsp), %rdi
addq $-0x28, %rdi
movq %rdi, 0x58(%rsp)
callq 0xdeb0
movq 0x60(%rsp), %rcx
movq 0x58(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x68(%rsp)
jne 0x25de8
leaq 0xc0(%rsp), %rdi
callq 0x31f0
leaq 0xbf(%rsp), %rdi
callq 0x3310
movq 0x1f8(%rsp), %rax
addq $0x208, %rsp            # imm = 0x208
retq
movq 0xb0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
callq 0x32b0
jmp 0x260a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x25f21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x25f14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x25ec8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
leaq 0x1b8(%rsp), %rdi
callq 0x269e0
leaq 0x155(%rsp), %rdi
callq 0x26a40
leaq 0x180(%rsp), %rax
movq %rax, 0x48(%rsp)
addq $0x28, %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rdi
addq $-0x28, %rdi
movq %rdi, 0x40(%rsp)
callq 0xdeb0
movq 0x48(%rsp), %rcx
movq 0x40(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x50(%rsp)
jne 0x25eeb
jmp 0x25f14
leaq 0x158(%rsp), %rdi
callq 0x31f0
leaq 0x157(%rsp), %rdi
callq 0x3310
testb $0x1, 0x156(%rsp)
jne 0x25f3a
jmp 0x25f80
movq 0x178(%rsp), %rax
leaq 0x180(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0x38(%rsp)
je 0x25f7e
movq 0x38(%rsp), %rdi
addq $-0x28, %rdi
movq %rdi, 0x30(%rsp)
callq 0xdeb0
movq 0x30(%rsp), %rax
leaq 0x180(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0x38(%rsp)
jne 0x25f54
jmp 0x25f80
jmp 0x260a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x26047
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x2603a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x25fee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
leaq 0x120(%rsp), %rdi
callq 0x269e0
leaq 0xbd(%rsp), %rdi
callq 0x26a40
leaq 0xe8(%rsp), %rax
movq %rax, 0x20(%rsp)
addq $0x28, %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
addq $-0x28, %rdi
movq %rdi, 0x18(%rsp)
callq 0xdeb0
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x28(%rsp)
jne 0x26011
jmp 0x2603a
leaq 0xc0(%rsp), %rdi
callq 0x31f0
leaq 0xbf(%rsp), %rdi
callq 0x3310
testb $0x1, 0xbe(%rsp)
jne 0x26060
jmp 0x260a6
movq 0xe0(%rsp), %rax
leaq 0xe8(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0x10(%rsp)
je 0x260a4
movq 0x10(%rsp), %rdi
addq $-0x28, %rdi
movq %rdi, 0x8(%rsp)
callq 0xdeb0
movq 0x8(%rsp), %rax
leaq 0xe8(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0x10(%rsp)
jne 0x2607a
jmp 0x260a6
jmp 0x260a8
movq 0x1f0(%rsp), %rdi
callq 0x3490
nopw %cs:(%rax,%rax)