// File: andrakis[P]alisp/parser.cpp
// Function: ALisp::Parser::detail::read_from(std::__cxx11::list<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&)
Cell read_from(TokenListType &tokens) EXCEPT {
				if (tokens.empty()) throw ParserException("Missing opening token");

				const TokenType token(tokens.front());
				tokens.pop_front();
				if (token == "(") {
					ListCell cells;
					while (tokens.front() != ")") {
						cells.push(read_from(tokens));
						if (tokens.empty()) throw ParserException("Missing closing )");
					}
					if (tokens.empty()) throw ParserException("Missing closing )");
					tokens.pop_front();
					return cells;
				} else
					return atom(token);
			}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0xd8(%rbp)
movq %rdi, %rax
movq %rax, -0xd0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2d480
testb $0x1, %al
jne 0x2cd66
jmp 0x2ce1e
movb $0x1, -0x45(%rbp)
movl $0x28, %edi
callq 0x8240
movq %rax, -0xe8(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x87d0
movq -0xe0(%rbp), %rdx
leaq 0x109a6(%rip), %rsi     # 0x3d73f
leaq -0x30(%rbp), %rdi
callq 0x8610
jmp 0x2cda4
movq -0xe8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2d4a0
jmp 0x2cdb6
movq -0xe8(%rbp), %rdi
movb $0x0, -0x45(%rbp)
leaq 0x29928(%rip), %rsi     # 0x566f0
leaq 0x751(%rip), %rdx       # 0x2d520
callq 0x8770
jmp 0x2d16a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2cdfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x8878
leaq -0x31(%rbp), %rdi
callq 0x8490
testb $0x1, -0x45(%rbp)
jne 0x2ce0d
jmp 0x2ce19
movq -0xe8(%rbp), %rdi
callq 0x8300
jmp 0x2d152
movq -0x10(%rbp), %rdi
callq 0x2d540
movq %rax, %rsi
leaq -0x68(%rbp), %rdi
callq 0x8200
jmp 0x2ce35
movq -0x10(%rbp), %rdi
callq 0x2d570
leaq 0xfb9d(%rip), %rsi      # 0x3c9e2
leaq -0x68(%rbp), %rdi
callq 0xed90
movb %al, -0xe9(%rbp)
jmp 0x2ce56
movb -0xe9(%rbp), %al
testb $0x1, %al
jne 0x2ce65
jmp 0x2d114
leaq -0x70(%rbp), %rdi
callq 0x137c0
jmp 0x2ce70
jmp 0x2ce72
movq -0x10(%rbp), %rdi
callq 0x2d540
movq %rax, %rdi
leaq 0x108e0(%rip), %rsi     # 0x3d765
callq 0xed60
movb %al, -0xea(%rbp)
jmp 0x2ce92
movb -0xea(%rbp), %al
testb $0x1, %al
jne 0x2cea1
jmp 0x2cffc
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x2cd30
jmp 0x2ceb0
leaq -0x70(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x13840
jmp 0x2cebf
leaq -0x78(%rbp), %rdi
callq 0xb9d0
movq -0x10(%rbp), %rdi
callq 0x2d480
testb $0x1, %al
jne 0x2ceda
jmp 0x2cff7
movb $0x1, -0x9a(%rbp)
movl $0x28, %edi
callq 0x8240
movq %rax, -0x100(%rbp)
leaq -0x99(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x87d0
movq -0xf8(%rbp), %rdx
leaq 0x10842(%rip), %rsi     # 0x3d755
leaq -0x98(%rbp), %rdi
callq 0x8610
jmp 0x2cf21
movq -0x100(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x2d4a0
jmp 0x2cf36
movq -0x100(%rbp), %rdi
movb $0x0, -0x9a(%rbp)
leaq 0x297a5(%rip), %rsi     # 0x566f0
leaq 0x5ce(%rip), %rdx       # 0x2d520
callq 0x8770
jmp 0x2d16a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2d152
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2d149
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2d109
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xb9d0
jmp 0x2d109
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2cfcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x8878
leaq -0x99(%rbp), %rdi
callq 0x8490
testb $0x1, -0x9a(%rbp)
jne 0x2cfe6
jmp 0x2cff2
movq -0x100(%rbp), %rdi
callq 0x8300
jmp 0x2d109
jmp 0x2ce72
movq -0x10(%rbp), %rdi
callq 0x2d480
testb $0x1, %al
jne 0x2d00e
jmp 0x2d0db
movb $0x1, -0xc2(%rbp)
movl $0x28, %edi
callq 0x8240
movq %rax, -0x110(%rbp)
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x87d0
movq -0x108(%rbp), %rdx
leaq 0x1070e(%rip), %rsi     # 0x3d755
leaq -0xc0(%rbp), %rdi
callq 0x8610
jmp 0x2d055
movq -0x110(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x2d4a0
jmp 0x2d06a
movq -0x110(%rbp), %rdi
movb $0x0, -0xc2(%rbp)
leaq 0x29671(%rip), %rsi     # 0x566f0
leaq 0x49a(%rip), %rdx       # 0x2d520
callq 0x8770
jmp 0x2d16a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2d0b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x8878
leaq -0xc1(%rbp), %rdi
callq 0x8490
testb $0x1, -0xc2(%rbp)
jne 0x2d0cd
jmp 0x2d0d9
movq -0x110(%rbp), %rdi
callq 0x8300
jmp 0x2d109
movq -0x10(%rbp), %rdi
callq 0x2d570
movq -0xd8(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0xbd50
movl $0x1, -0xc8(%rbp)
leaq -0x70(%rbp), %rdi
callq 0xbd80
jmp 0x2d130
leaq -0x70(%rbp), %rdi
callq 0xbd80
jmp 0x2d149
movq -0xd8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2cb20
jmp 0x2d126
movl $0x1, -0xc8(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x8878
movq -0xd0(%rbp), %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
leaq -0x68(%rbp), %rdi
callq 0x8878
cmpl $0x0, -0x44(%rbp)
jge 0x2d161
movq -0x40(%rbp), %rdi
callq 0x8590
movq -0x40(%rbp), %rdi
callq 0x87b0
nopw (%rax,%rax)