// File: andrakis[P]alisp/parser.cpp
// Function: ALisp::Parser::detail::tokenise(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
TokenListType tokenise(const TokenType &str) EXCEPT {
				TokenListType tokens;
				const char *s = str.c_str();
				while (*s) {
					// Skip whitespace
					while (isspace(*s))
						++s;
					// Skip comment lines
					if (*s == ';' && *(s + 1) == ';')
						while (*s && *s != '\n' && *s != '\r')
							++s;
					// List open or close
					else if (*s == '(' || *s == ')')
						tokens.push_back(*s++ == '(' ? "(" : ")");
					// "String" in quotes
					else if (*s == '"') {
						const char *t = s;
						int escape = 0;
						do {
							++t;
							if (escape != 0) escape--;
							if (*t == '\\')
								escape = 2; // skip this and the next character
						} while (*t && (escape != 0 || *t != '"'));
						++t;
						tokens.push_back(StringType(s, t));
						s = t;
					// A generic token
					} else {
						const char *t = s;
						while (*t && !isspace(*t) && *t != '(' && *t != ')')
							++t;
						tokens.push_back(StringType(s, t));
						s = t;
					}
				}
				return tokens;
			}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0xd0(%rbp)
movq %rdi, %rax
movq %rax, -0xc8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movb $0x0, -0x11(%rbp)
callq 0x2d290
movq -0x10(%rbp), %rdi
callq 0x81e0
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpb $0x0, (%rax)
je 0x2cacd
jmp 0x2c6a9
movq -0x20(%rbp), %rax
movsbl (%rax), %edi
callq 0x80b0
cmpl $0x0, %eax
je 0x2c6c8
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x2c6a9
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
jne 0x2c73a
movq -0x20(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x3b, %eax
jne 0x2c73a
jmp 0x2c6e3
movq -0x20(%rbp), %rcx
xorl %eax, %eax
cmpb $0x0, (%rcx)
movb %al, -0xd1(%rbp)
je 0x2c71b
movq -0x20(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0xa, %ecx
movb %al, -0xd1(%rbp)
je 0x2c71b
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0xd, %eax
setne %al
movb %al, -0xd1(%rbp)
movb -0xd1(%rbp), %al
testb $0x1, %al
jne 0x2c727
jmp 0x2c735
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x2c6e3
jmp 0x2cac8
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
je 0x2c756
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
jne 0x2c81e
movq -0x20(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x20(%rbp)
movsbl (%rax), %eax
cmpl $0x28, %eax
jne 0x2c77d
leaq 0x1026e(%rip), %rax     # 0x3c9e2
movq %rax, -0xe0(%rbp)
jmp 0x2c78d
leaq 0x10fe1(%rip), %rax     # 0x3d765
movq %rax, -0xe0(%rbp)
jmp 0x2c78d
movq -0xe0(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0x41(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0x87d0
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
leaq -0x40(%rbp), %rdi
callq 0x8610
jmp 0x2c7c4
movq -0xd0(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x2d2b0
jmp 0x2c7d6
leaq -0x40(%rbp), %rdi
callq 0x8878
leaq -0x41(%rbp), %rdi
callq 0x8490
jmp 0x2cac6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2c810
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x8878
leaq -0x41(%rbp), %rdi
callq 0x8490
jmp 0x2caf3
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x22, %eax
jne 0x2c97d
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
movl $0x0, -0x64(%rbp)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
cmpl $0x0, -0x64(%rbp)
je 0x2c858
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
movq -0x60(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5c, %eax
jne 0x2c86b
movl $0x2, -0x64(%rbp)
jmp 0x2c86d
movq -0x60(%rbp), %rcx
xorl %eax, %eax
cmpb $0x0, (%rcx)
movb %al, -0xf1(%rbp)
je 0x2c8ab
movb $0x1, %al
cmpl $0x0, -0x64(%rbp)
movb %al, -0xf2(%rbp)
jne 0x2c89f
movq -0x60(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x22, %eax
setne %al
movb %al, -0xf2(%rbp)
movb -0xf2(%rbp), %al
movb %al, -0xf1(%rbp)
movb -0xf1(%rbp), %al
testb $0x1, %al
jne 0x2c83d
movq -0x60(%rbp), %rax
incq %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x89(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x87d0
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
movq -0x100(%rbp), %rcx
leaq -0x88(%rbp), %rdi
callq 0x2d2f0
jmp 0x2c90c
movq -0xd0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x2d2b0
jmp 0x2c921
leaq -0x88(%rbp), %rdi
callq 0x8878
leaq -0x89(%rbp), %rdi
callq 0x8490
movq -0x60(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x2cac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2c96c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x8878
leaq -0x89(%rbp), %rdi
callq 0x8490
jmp 0x2caf3
movq -0x20(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rcx
xorl %eax, %eax
cmpb $0x0, (%rcx)
movb %al, -0x111(%rbp)
je 0x2c9e7
movq -0x98(%rbp), %rax
movsbl (%rax), %edi
callq 0x80b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x111(%rbp)
jne 0x2c9e7
movq -0x98(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x28, %ecx
movb %al, -0x111(%rbp)
je 0x2c9e7
movq -0x98(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
setne %al
movb %al, -0x111(%rbp)
movb -0x111(%rbp), %al
testb $0x1, %al
jne 0x2c9f3
jmp 0x2ca07
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2c988
movq -0x20(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x128(%rbp)
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x87d0
movq -0x130(%rbp), %rsi
movq -0x128(%rbp), %rdx
movq -0x120(%rbp), %rcx
leaq -0xb8(%rbp), %rdi
callq 0x2d2f0
jmp 0x2ca56
movq -0xd0(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2d2b0
jmp 0x2ca6b
leaq -0xb8(%rbp), %rdi
callq 0x8878
leaq -0xb9(%rbp), %rdi
callq 0x8490
movq -0x98(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x2cac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2cab6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x8878
leaq -0xb9(%rbp), %rdi
callq 0x8490
jmp 0x2caf3
jmp 0x2cac6
jmp 0x2cac8
jmp 0x2c69a
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x2cae3
movq -0xd0(%rbp), %rdi
callq 0x2d360
movq -0xc8(%rbp), %rax
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
movq -0xd0(%rbp), %rdi
callq 0x2d360
cmpl $0x0, -0x54(%rbp)
jge 0x2cb0e
movq -0x50(%rbp), %rdi
callq 0x8590
movq -0x50(%rbp), %rdi
callq 0x87b0
nopw (%rax,%rax)