// File: 0x0584[P]scmin-plus/src/repl/parser.cpp
// Function: parse_tokens(std::queue<token, std::deque<token, std::allocator<token>>>&, bool)
sexpr_t parse_tokens(queue<token>& q, bool quasi) {
    sexpr_t e;

    if (tok.type == token::tok_l_paren) {
        e = parse_list(q, quasi);
    } else if (is_quote(tok.type)) {
        if (not quasi and is_unquote(tok.type)) {
            cerr << "Err: unquote appeared without quasiquote" << endl;
            return nullptr;
        }
        e = parse_quote(q, quasi or tok.type == token::tok_quasi);
    } else if (tok.type == token::tok_pair) {
        cerr << "parsing error! pair is not valid" << endl;
        return nullptr;
    } else if (tok.type == token::tok_cons_flavor) {
        cerr << "Err: car/cdr must be called as operators!" << endl;
        return nullptr;
    } else {
        e = tok, q.pop();
    }
    return e;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x88(%rbp)
movb %dl, %al
movq %rdi, %rcx
movq %rcx, -0x80(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x6ef0
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x78(%rbp)
jmp 0x1a1d0
movq -0x78(%rbp), %rax
cmpl $0x0, 0x7c(%rax)
jne 0x1a21c
movq -0x10(%rbp), %rsi
movzbl -0x11(%rbp), %edx
andl $0x1, %edx
leaq -0x48(%rbp), %rdi
callq 0x1af60
jmp 0x1a1f0
leaq -0x28(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4420
leaq -0x48(%rbp), %rdi
callq 0x4450
jmp 0x1a491
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x1a4be
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x90(%rbp)
jmp 0x1a22e
movq -0x90(%rbp), %rax
movl 0x7c(%rax), %edi
callq 0x1b580
movb %al, -0x91(%rbp)
jmp 0x1a245
movb -0x91(%rbp), %al
testb $0x1, %al
jne 0x1a254
jmp 0x1a358
testb $0x1, -0x11(%rbp)
jne 0x1a2e0
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xa0(%rbp)
jmp 0x1a270
movq -0xa0(%rbp), %rax
movl 0x7c(%rax), %edi
callq 0x1b5c0
movb %al, -0xa1(%rbp)
jmp 0x1a287
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0x1a293
jmp 0x1a2e0
movq 0x13d56(%rip), %rdi     # 0x2dff0
leaq 0x7671(%rip), %rsi      # 0x21912
callq 0x32c0
movq %rax, -0xb0(%rbp)
jmp 0x1a2af
movq -0xb0(%rbp), %rdi
movq 0x13cd3(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0x1a2c4
movq -0x88(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x4c(%rbp)
jmp 0x1a4a8
movq -0x10(%rbp), %rax
movq %rax, -0xc0(%rbp)
movb $0x1, %al
testb $0x1, -0x11(%rbp)
movb %al, -0xb1(%rbp)
jne 0x1a31f
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xc8(%rbp)
jmp 0x1a30b
movq -0xc8(%rbp), %rax
cmpl $0x5, 0x7c(%rax)
sete %al
movb %al, -0xb1(%rbp)
movq -0xc0(%rbp), %rsi
movb -0xb1(%rbp), %al
movzbl %al, %edx
andl $0x1, %edx
leaq -0x60(%rbp), %rdi
callq 0x19ea0
jmp 0x1a33d
leaq -0x28(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x4420
leaq -0x60(%rbp), %rdi
callq 0x4450
jmp 0x1a48f
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xd0(%rbp)
jmp 0x1a36a
movq -0xd0(%rbp), %rax
cmpl $0x8, 0x7c(%rax)
jne 0x1a3c4
movq 0x13c72(%rip), %rdi     # 0x2dff0
leaq 0x74d9(%rip), %rsi      # 0x2185e
callq 0x32c0
movq %rax, -0xd8(%rbp)
jmp 0x1a393
movq -0xd8(%rbp), %rdi
movq 0x13bef(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0x1a3a8
movq -0x88(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x4c(%rbp)
jmp 0x1a4a8
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xe0(%rbp)
jmp 0x1a3d6
movq -0xe0(%rbp), %rax
cmpl $0xa, 0x7c(%rax)
jne 0x1a42d
movq 0x13c06(%rip), %rdi     # 0x2dff0
leaq 0x74f7(%rip), %rsi      # 0x218e8
callq 0x32c0
movq %rax, -0xe8(%rbp)
jmp 0x1a3ff
movq -0xe8(%rbp), %rdi
movq 0x13b83(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0x1a414
movq -0x88(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x4c(%rbp)
jmp 0x1a4a8
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xf0(%rbp)
jmp 0x1a43f
movq -0xf0(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x1b800
jmp 0x1a451
leaq -0x28(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x4420
movq -0x10(%rbp), %rdi
callq 0x1b7c0
jmp 0x1a469
leaq -0x70(%rbp), %rdi
callq 0x4450
jmp 0x1a48b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x4450
jmp 0x1a4be
jmp 0x1a48d
jmp 0x1a48f
jmp 0x1a491
movq -0x88(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xa6f0
movl $0x1, -0x4c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x4450
movq -0x80(%rbp), %rax
addq $0xf0, %rsp
popq %rbp
retq
leaq -0x28(%rbp), %rdi
callq 0x4450
movq -0x30(%rbp), %rdi
callq 0x34f0