// File: martinda3[P]Compiler/src/TCparser.cpp
// Function: toyc::TCparser::ReturnStatement()
ASstatement* TCparser::ReturnStatement() // WIP
	{
		// RETURN [ Expression ] SEMICOLON
		enteringDEBUG("Return Statement");
		ASexpression* operand = NULL;
		accept(RETURN);
		try
		{
			operand = Expression();
			accept(SEMICOLON);
			exitingDEBUG("Return Statement");
			return new ASreturnState(operand);
		}
		catch (int t)
		{
			accept(SEMICOLON);
			exitingDEBUG("Return Statement");
			return new ASreturnState();
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xe0, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0x95c0
movq -0xa8(%rbp), %rdx
leaq 0x2287b(%rip), %rsi     # 0x33303
leaq -0x30(%rbp), %rdi
callq 0x13550
jmp 0x10a93
leaq -0x30(%rbp), %rdi
callq 0xd790
jmp 0x10a9e
leaq -0x30(%rbp), %rdi
callq 0x9658
leaq -0x31(%rbp), %rdi
callq 0x93b0
movq -0xb0(%rbp), %rdi
movq $0x0, -0x50(%rbp)
movl $0xa, %esi
callq 0xe670
movq -0xb0(%rbp), %rdi
callq 0xfe60
movq %rax, -0xb8(%rbp)
jmp 0x10ade
movq -0xb0(%rbp), %rdi
movq -0xb8(%rbp), %rax
movq %rax, -0x50(%rbp)
movl $0x27, %esi
callq 0xe670
jmp 0x10afc
leaq -0x71(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
callq 0x95c0
movq -0xc0(%rbp), %rdx
leaq 0x227e9(%rip), %rsi     # 0x33303
leaq -0x70(%rbp), %rdi
callq 0x13550
jmp 0x10b25
leaq -0x70(%rbp), %rdi
callq 0xda50
jmp 0x10b30
leaq -0x70(%rbp), %rdi
callq 0x9658
leaq -0x71(%rbp), %rdi
callq 0x93b0
movl $0x40, %edi
callq 0x9350
movq %rax, -0xc8(%rbp)
jmp 0x10b55
movq -0xc8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0xc880
jmp 0x10b67
movq -0xc8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x10d20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x10b9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x9658
leaq -0x31(%rbp), %rdi
callq 0x93b0
jmp 0x10d2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x10c01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x10bd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x9658
leaq -0x71(%rbp), %rdi
callq 0x93b0
jmp 0x10c01
movq -0xc8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x40, %esi
callq 0x9360
movl -0x44(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x10d2d
movq -0x40(%rbp), %rdi
callq 0x9140
movq -0xb0(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x78(%rbp)
movl $0x27, %esi
callq 0xe670
jmp 0x10c32
leaq -0x99(%rbp), %rdi
movq %rdi, -0xd0(%rbp)
callq 0x95c0
movq -0xd0(%rbp), %rdx
leaq 0x226b0(%rip), %rsi     # 0x33303
leaq -0x98(%rbp), %rdi
callq 0x13550
jmp 0x10c61
leaq -0x98(%rbp), %rdi
callq 0xda50
jmp 0x10c6f
leaq -0x98(%rbp), %rdi
callq 0x9658
leaq -0x99(%rbp), %rdi
callq 0x93b0
movl $0x40, %edi
callq 0x9350
movq %rax, -0xd8(%rbp)
jmp 0x10c9a
movq -0xd8(%rbp), %rdi
callq 0xc900
jmp 0x10ca8
movq -0xd8(%rbp), %rax
movq %rax, -0x8(%rbp)
callq 0x9540
jmp 0x10d20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x10d19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x10cee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x9658
leaq -0x99(%rbp), %rdi
callq 0x93b0
jmp 0x10d19
movq -0xd8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x40, %esi
callq 0x9360
callq 0x9540
jmp 0x10d2d
movq -0x8(%rbp), %rax
addq $0xe0, %rsp
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x95b0
nopw %cs:(%rax,%rax)