// File: Eronana[P]strawberry/src/parser.cpp
// Function: Parser::ReturnStatement()
AST_PTR Parser::ReturnStatement()
{
    if(!accept("return"))PARSER_ERROR("excepted a 'return'");
    DEF_AST_RET(ReturnStatement);
    ret->literal=Literal();
    if(!acceptEat(TOKEN_SEMICOLON))
    {
        ret->expr=Expression();
        if(!acceptEat(TOKEN_SEMICOLON))PARSER_ERROR("excepted a ';'");
    }
    RETURN_PTR;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0xe0(%rbp)
movq %rdi, %rax
movq %rax, -0xd8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xd0(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0xc8(%rbp)
callq 0x75f0
movq -0xc8(%rbp), %rdx
leaq 0x29c7b(%rip), %rsi     # 0x58808
leaq -0x30(%rbp), %rdi
callq 0xf990
jmp 0x2eb98
movq -0xd0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
xorl %edx, %edx
callq 0x27920
movb %al, -0xe1(%rbp)
jmp 0x2ebb2
movb -0xe1(%rbp), %al
xorb $-0x1, %al
movb %al, -0xe2(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x71d0
leaq -0x31(%rbp), %rdi
callq 0x7310
movb -0xe2(%rbp), %al
testb $0x1, %al
jne 0x2ebe1
jmp 0x2ecf6
movb $0x1, -0x6a(%rbp)
movl $0x70, %edi
callq 0x7180
movq -0xd0(%rbp), %rdi
movq %rax, -0xf8(%rbp)
xorl %esi, %esi
callq 0x277f0
movq %rax, -0xf0(%rbp)
jmp 0x2ec0d
leaq -0x69(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x75f0
movq -0x100(%rbp), %rdx
leaq 0x29eb9(%rip), %rsi     # 0x58ae4
leaq -0x68(%rbp), %rdi
callq 0xf990
jmp 0x2ec36
movq -0xf0(%rbp), %rsi
movq -0xf8(%rbp), %rdi
leaq -0x68(%rbp), %rdx
callq 0xac90
jmp 0x2ec4f
movq -0xf8(%rbp), %rdi
movb $0x0, -0x6a(%rbp)
leaq 0x59f9f(%rip), %rsi     # 0x88c00
leaq -0xe988(%rip), %rdx     # 0x202e0
callq 0x75c0
jmp 0x2ef54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2ec95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x71d0
leaq -0x31(%rbp), %rdi
callq 0x7310
jmp 0x2ef4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2ecdd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2ecd4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x71d0
leaq -0x69(%rbp), %rdi
callq 0x7310
testb $0x1, -0x6a(%rbp)
jne 0x2ece5
jmp 0x2ecf1
movq -0xf8(%rbp), %rdi
callq 0x7230
jmp 0x2ef4b
movl $0x18, %edi
callq 0x72c0
movq %rax, %rdi
movq %rdi, -0x108(%rbp)
callq 0x33830
movq -0x108(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x33880
movq -0xd0(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0x292e0
jmp 0x2ed31
leaq -0x78(%rbp), %rdi
callq 0x338b0
movq %rax, %rdi
addq $0x8, %rdi
leaq -0x80(%rbp), %rsi
movq %rsi, -0x118(%rbp)
callq 0x8ee0
movq -0x118(%rbp), %rdi
callq 0x8f10
movq -0xd0(%rbp), %rdi
movl $0x29, -0x84(%rbp)
leaq -0x84(%rbp), %rsi
callq 0x31240
movb %al, -0x109(%rbp)
jmp 0x2ed82
movb -0x109(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2ed93
jmp 0x2ef19
movq -0xd0(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0x2a9d0
jmp 0x2eda8
leaq -0x78(%rbp), %rdi
callq 0x338b0
movq %rax, %rdi
addq $0x10, %rdi
leaq -0x90(%rbp), %rsi
movq %rsi, -0x128(%rbp)
callq 0x8ee0
movq -0x128(%rbp), %rdi
callq 0x8f10
movq -0xd0(%rbp), %rdi
movl $0x29, -0x94(%rbp)
leaq -0x94(%rbp), %rsi
callq 0x31240
movb %al, -0x119(%rbp)
jmp 0x2edfc
movb -0x119(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2ee0d
jmp 0x2ef17
movb $0x1, -0xba(%rbp)
movl $0x70, %edi
callq 0x7180
movq -0xd0(%rbp), %rdi
movq %rax, -0x138(%rbp)
xorl %esi, %esi
callq 0x277f0
movq %rax, -0x130(%rbp)
jmp 0x2ee3c
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x140(%rbp)
callq 0x75f0
movq -0x140(%rbp), %rdx
leaq 0x29bf6(%rip), %rsi     # 0x58a53
leaq -0xb8(%rbp), %rdi
callq 0xf990
jmp 0x2ee6b
movq -0x130(%rbp), %rsi
movq -0x138(%rbp), %rdi
leaq -0xb8(%rbp), %rdx
callq 0xac90
jmp 0x2ee87
movq -0x138(%rbp), %rdi
movb $0x0, -0xba(%rbp)
leaq 0x59d64(%rip), %rsi     # 0x88c00
leaq -0xebc3(%rip), %rdx     # 0x202e0
callq 0x75c0
jmp 0x2ef54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2ef42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2eefe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2eef2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x71d0
leaq -0xb9(%rbp), %rdi
callq 0x7310
testb $0x1, -0xba(%rbp)
jne 0x2ef09
jmp 0x2ef15
movq -0x138(%rbp), %rdi
callq 0x7230
jmp 0x2ef42
jmp 0x2ef19
movq -0xe0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x338d0
leaq -0x78(%rbp), %rdi
callq 0x33920
movq -0xd8(%rbp), %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
leaq -0x78(%rbp), %rdi
callq 0x33920
movq -0x40(%rbp), %rdi
callq 0x75e0
nopw %cs:(%rax,%rax)