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

    if (q.pop(); tok.type == token::tok_r_paren) {
        q.pop();
        return nil();
    }
    while (tok.type != token::tok_r_paren) {
        sexpr_t tmp;

        if (tok.type == token::tok_l_paren)
            tmp = parse_tokens(q, quasi);
        else if (tok.type == token::tok_cons_flavor) {
            if (not (op and parse_cons_flavor(q, e))) {
                cerr << "Err: car/cdr must be called as operators!" << endl;
                return nullptr;
            }
            break;
        } else if (is_quote(tok.type)) {
            if (not quasi and is_unquote(tok.type)) {
                cerr << "Err: unquote appeared without quasiquote" << endl;
                return nullptr;
            }
            tmp = parse_quote(q, quasi or tok.type == token::tok_quasi);
        } else if (tok.type == token::tok_pair) {
            if (not parse_pair(q, e, tail))
                return nullptr;
            break;
        } else if (tok.type == token::tok_lambda) {
            if (not (op and parse_lambda(q, e))) {
                cerr << "Err: Lambda is mal formatted" << endl;
                return nullptr;
            }
            break;
        } else {
            tmp = tok; q.pop();
        }
        if (not cons_append(tmp, e, tail))
            return nullptr;
        op = false;
    }
    q.pop();
    return e;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movq %rdi, -0xe0(%rbp)
movb %dl, %al
movq %rdi, %rcx
movq %rcx, -0xd8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x6ef0
leaq -0x38(%rbp), %rdi
callq 0x6ef0
movb $0x1, -0x39(%rbp)
movq -0x10(%rbp), %rdi
callq 0x1b7c0
jmp 0x1afac
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xe8(%rbp)
jmp 0x1afbe
movq -0xe8(%rbp), %rax
cmpl $0x1, 0x7c(%rax)
jne 0x1b001
movq -0x10(%rbp), %rdi
callq 0x1b7c0
jmp 0x1afd6
movq -0xe0(%rbp), %rdi
callq 0x78f0
jmp 0x1afe4
movl $0x1, -0x50(%rbp)
jmp 0x1b53c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1b55e
jmp 0x1b003
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xf0(%rbp)
jmp 0x1b015
movq -0xf0(%rbp), %rax
cmpl $0x1, 0x7c(%rax)
je 0x1b51a
leaq -0x60(%rbp), %rdi
callq 0x6ef0
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0xf8(%rbp)
jmp 0x1b041
movq -0xf8(%rbp), %rax
cmpl $0x0, 0x7c(%rax)
jne 0x1b099
movq -0x10(%rbp), %rsi
movzbl -0x11(%rbp), %edx
andl $0x1, %edx
leaq -0x70(%rbp), %rdi
callq 0x1a190
jmp 0x1b064
leaq -0x60(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x4420
leaq -0x70(%rbp), %rdi
callq 0x4450
jmp 0x1b4a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x4450
jmp 0x1b55e
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x100(%rbp)
jmp 0x1b0ab
movq -0x100(%rbp), %rax
cmpl $0xa, 0x7c(%rax)
jne 0x1b183
movb -0x39(%rbp), %cl
movb $0x0, -0x81(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x101(%rbp)
je 0x1b0fc
movq -0x10(%rbp), %rsi
leaq -0x80(%rbp), %rdi
leaq -0x28(%rbp), %rdx
callq 0x1a850
jmp 0x1b0e6
movb $0x1, -0x81(%rbp)
leaq -0x80(%rbp), %rdi
callq 0xb5c0
movb %al, -0x101(%rbp)
movb -0x101(%rbp), %al
xorb $-0x1, %al
movb %al, -0x102(%rbp)
testb $0x1, -0x81(%rbp)
jne 0x1b115
jmp 0x1b11e
leaq -0x80(%rbp), %rdi
callq 0x4450
movb -0x102(%rbp), %al
testb $0x1, %al
jne 0x1b12a
jmp 0x1b177
movq 0x12ebf(%rip), %rdi     # 0x2dff0
leaq 0x67b0(%rip), %rsi      # 0x218e8
callq 0x32c0
movq %rax, -0x110(%rbp)
jmp 0x1b146
movq -0x110(%rbp), %rdi
movq 0x12e3c(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0x1b15b
movq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x50(%rbp)
jmp 0x1b4f0
movl $0x3, -0x50(%rbp)
jmp 0x1b4f0
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x118(%rbp)
jmp 0x1b195
movq -0x118(%rbp), %rax
movl 0x7c(%rax), %edi
callq 0x1b580
movb %al, -0x119(%rbp)
jmp 0x1b1ac
movb -0x119(%rbp), %al
testb $0x1, %al
jne 0x1b1bb
jmp 0x1b2c8
testb $0x1, -0x11(%rbp)
jne 0x1b247
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x128(%rbp)
jmp 0x1b1d7
movq -0x128(%rbp), %rax
movl 0x7c(%rax), %edi
callq 0x1b5c0
movb %al, -0x129(%rbp)
jmp 0x1b1ee
movb -0x129(%rbp), %al
testb $0x1, %al
jne 0x1b1fa
jmp 0x1b247
movq 0x12def(%rip), %rdi     # 0x2dff0
leaq 0x670a(%rip), %rsi      # 0x21912
callq 0x32c0
movq %rax, -0x138(%rbp)
jmp 0x1b216
movq -0x138(%rbp), %rdi
movq 0x12d6c(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0x1b22b
movq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x50(%rbp)
jmp 0x1b4f0
movq -0x10(%rbp), %rax
movq %rax, -0x148(%rbp)
movb $0x1, %al
testb $0x1, -0x11(%rbp)
movb %al, -0x139(%rbp)
jne 0x1b286
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x150(%rbp)
jmp 0x1b272
movq -0x150(%rbp), %rax
cmpl $0x5, 0x7c(%rax)
sete %al
movb %al, -0x139(%rbp)
movq -0x148(%rbp), %rsi
movb -0x139(%rbp), %al
movzbl %al, %edx
andl $0x1, %edx
leaq -0x98(%rbp), %rdi
callq 0x19ea0
jmp 0x1b2a7
leaq -0x60(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x4420
leaq -0x98(%rbp), %rdi
callq 0x4450
jmp 0x1b4a3
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x158(%rbp)
jmp 0x1b2da
movq -0x158(%rbp), %rax
cmpl $0x8, 0x7c(%rax)
jne 0x1b355
movq -0x10(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
leaq -0x28(%rbp), %rdx
leaq -0x38(%rbp), %rcx
callq 0x1a4d0
jmp 0x1b301
leaq -0xa8(%rbp), %rdi
callq 0xb5c0
xorb $-0x1, %al
movb %al, -0x159(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x4450
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0x1b32d
jmp 0x1b349
movq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x50(%rbp)
jmp 0x1b4f0
movl $0x3, -0x50(%rbp)
jmp 0x1b4f0
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x168(%rbp)
jmp 0x1b367
movq -0x168(%rbp), %rax
cmpl $0x9, 0x7c(%rax)
jne 0x1b448
movb -0x39(%rbp), %cl
movb $0x0, -0xb9(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x169(%rbp)
je 0x1b3be
movq -0x10(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
leaq -0x28(%rbp), %rdx
callq 0x1a650
jmp 0x1b3a5
movb $0x1, -0xb9(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0xb5c0
movb %al, -0x169(%rbp)
movb -0x169(%rbp), %al
xorb $-0x1, %al
movb %al, -0x16a(%rbp)
testb $0x1, -0xb9(%rbp)
jne 0x1b3d7
jmp 0x1b3e3
leaq -0xb8(%rbp), %rdi
callq 0x4450
movb -0x16a(%rbp), %al
testb $0x1, %al
jne 0x1b3ef
jmp 0x1b43c
movq 0x12bfa(%rip), %rdi     # 0x2dff0
leaq 0x653e(%rip), %rsi      # 0x2193b
callq 0x32c0
movq %rax, -0x178(%rbp)
jmp 0x1b40b
movq -0x178(%rbp), %rdi
movq 0x12b77(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0x1b420
movq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x50(%rbp)
jmp 0x1b4f0
movl $0x3, -0x50(%rbp)
jmp 0x1b4f0
movq -0x10(%rbp), %rdi
callq 0x1b7a0
movq %rax, -0x180(%rbp)
jmp 0x1b45a
movq -0x180(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x1b800
jmp 0x1b46f
leaq -0x60(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
movq %rsi, -0x188(%rbp)
callq 0x4420
movq -0x188(%rbp), %rdi
callq 0x4450
movq -0x10(%rbp), %rdi
callq 0x1b7c0
jmp 0x1b49d
jmp 0x1b49f
jmp 0x1b4a1
jmp 0x1b4a3
jmp 0x1b4a5
jmp 0x1b4a7
leaq -0x60(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xb230
movb %al, -0x189(%rbp)
jmp 0x1b4c0
movb -0x189(%rbp), %al
testb $0x1, %al
jne 0x1b4e5
jmp 0x1b4cc
movq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x50(%rbp)
jmp 0x1b4f0
movb $0x0, -0x39(%rbp)
movl $0x0, -0x50(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x4450
movl -0x50(%rbp), %eax
movl %eax, -0x190(%rbp)
testl %eax, %eax
je 0x1b515
jmp 0x1b508
movl -0x190(%rbp), %eax
subl $0x3, %eax
je 0x1b51a
jmp 0x1b53c
jmp 0x1b003
movq -0x10(%rbp), %rdi
callq 0x1b7c0
jmp 0x1b525
movq -0xe0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xa6f0
movl $0x1, -0x50(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x4450
leaq -0x28(%rbp), %rdi
callq 0x4450
movq -0xd8(%rbp), %rax
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x4450
leaq -0x28(%rbp), %rdi
callq 0x4450
movq -0x48(%rbp), %rdi
callq 0x34f0
nopl (%rax)