// File: jsteemann[P]jshund/src/./Tokenizer.h
// Function: jshund::Tokenizer::getNext()
Token getNext () {
        if (_position >= _length) {
          return makeToken(TOKEN_EOF);
        }

        if (! skipWhitespace()) {
          makeToken(TOKEN_EOF);
        }
        
        const char c = _input[_position];

        if (c == '\'') {
          return handleString('\'');
        }
        else if (c == '"') {
          return handleString('"');
        }
        else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_' || c == '$')) {
          return handleId();
        }
        else if (c >= '0' && c <= '9') {
          return handleNumber();
        }
        else if (c == '.') {
          const char c2 = _input[_position + 1];
          if (c2 >= '0' && c2 <= '9') {
            return handleNumber();
          }
        }
        else if (c == '/') {
          const char c2 = _input[_position + 1];
          if (c2 == '*') {
            return handleCommentMulti();
          }
          else if (c2 == '/') {
            return handleCommentSingle();
          }
          if (_last == TOKEN_PARENS_OPEN || 
              _last == TOKEN_ASSIGN || 
              _last == TOKEN_COLON || 
              _last == TOKEN_COMMA ||
              _last == TOKEN_NOT) {
            return handleRegex();
          }
        }

        TokenMapType::const_iterator it;
        for (it = _tokenMap.begin(); it != _tokenMap.end(); ++it) {
          const size_t length = (*it).first.size();
          if (::memcmp(_input + _position, (*it).first.c_str(), length) == 0) {
            // found
            return makeToken((*it).second, (*it).first);
          }
        }

        return makeToken(TOKEN_UNKNOWN);
      }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x90(%rbp)
movq %rdi, %rax
movq %rax, -0x88(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rcx
movq %rcx, -0x80(%rbp)
movq 0x90(%rcx), %rax
cmpq 0x88(%rcx), %rax
jb 0xe3c6
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
movl $0x72, %edx
callq 0xe720
jmp 0xe6cd
movq -0x80(%rbp), %rdi
callq 0xe7d0
testb $0x1, %al
jne 0xe3ee
movq -0x80(%rbp), %rsi
leaq -0x40(%rbp), %rdi
movl $0x72, %edx
callq 0xe720
leaq -0x40(%rbp), %rdi
callq 0xb120
movq -0x80(%rbp), %rcx
movq 0x80(%rcx), %rax
movq 0x90(%rcx), %rcx
movb (%rax,%rcx), %al
movb %al, -0x41(%rbp)
movsbl -0x41(%rbp), %eax
cmpl $0x27, %eax
jne 0xe429
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
movl $0x27, %edx
callq 0xe8e0
jmp 0xe6cd
movsbl -0x41(%rbp), %eax
cmpl $0x22, %eax
jne 0xe44c
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
movl $0x22, %edx
callq 0xe8e0
jmp 0xe6cd
movsbl -0x41(%rbp), %eax
cmpl $0x61, %eax
jl 0xe45e
movsbl -0x41(%rbp), %eax
cmpl $0x7a, %eax
jle 0xe482
movsbl -0x41(%rbp), %eax
cmpl $0x41, %eax
jl 0xe470
movsbl -0x41(%rbp), %eax
cmpl $0x5a, %eax
jle 0xe482
movsbl -0x41(%rbp), %eax
cmpl $0x5f, %eax
je 0xe482
movsbl -0x41(%rbp), %eax
cmpl $0x24, %eax
jne 0xe497
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
callq 0xe9f0
jmp 0xe6cd
movsbl -0x41(%rbp), %eax
cmpl $0x30, %eax
jl 0xe4be
movsbl -0x41(%rbp), %eax
cmpl $0x39, %eax
jg 0xe4be
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
callq 0xeda0
jmp 0xe6cd
movsbl -0x41(%rbp), %eax
cmpl $0x2e, %eax
jne 0xe50c
movq -0x80(%rbp), %rcx
movq 0x80(%rcx), %rax
movq 0x90(%rcx), %rcx
movb 0x1(%rax,%rcx), %al
movb %al, -0x42(%rbp)
movsbl -0x42(%rbp), %eax
cmpl $0x30, %eax
jl 0xe507
movsbl -0x42(%rbp), %eax
cmpl $0x39, %eax
jg 0xe507
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
callq 0xeda0
jmp 0xe6cd
jmp 0xe5bb
movsbl -0x41(%rbp), %eax
cmpl $0x2f, %eax
jne 0xe5b9
movq -0x80(%rbp), %rcx
movq 0x80(%rcx), %rax
movq 0x90(%rcx), %rcx
movb 0x1(%rax,%rcx), %al
movb %al, -0x43(%rbp)
movsbl -0x43(%rbp), %eax
cmpl $0x2a, %eax
jne 0xe550
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
callq 0xeec0
jmp 0xe6cd
movsbl -0x43(%rbp), %eax
cmpl $0x2f, %eax
jne 0xe56e
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
callq 0xf040
jmp 0xe6cd
jmp 0xe570
movq -0x80(%rbp), %rax
cmpl $0x36, 0x78(%rax)
je 0xe5a2
movq -0x80(%rbp), %rax
cmpl $0x64, 0x78(%rax)
je 0xe5a2
movq -0x80(%rbp), %rax
cmpl $0x3a, 0x78(%rax)
je 0xe5a2
movq -0x80(%rbp), %rax
cmpl $0x33, 0x78(%rax)
je 0xe5a2
movq -0x80(%rbp), %rax
cmpl $0x59, 0x78(%rax)
jne 0xe5b7
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
callq 0xf120
jmp 0xe6cd
jmp 0xe5b9
jmp 0xe5bb
jmp 0xe5bd
jmp 0xe5bf
jmp 0xe5c1
jmp 0xe5c3
leaq -0x50(%rbp), %rdi
callq 0xf290
movq -0x80(%rbp), %rdi
callq 0xf2b0
movq %rax, -0x60(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x9fc0
movq -0x58(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x80(%rbp), %rdi
callq 0x9de0
movq %rax, -0x70(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x9fc0
leaq -0x50(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xf2e0
testb $0x1, %al
jne 0xe61e
jmp 0xe6bb
leaq -0x50(%rbp), %rdi
callq 0xf310
movq %rax, %rdi
callq 0x31b0
movq -0x80(%rbp), %rcx
movq %rax, -0x78(%rbp)
movq 0x80(%rcx), %rax
addq 0x90(%rcx), %rax
movq %rax, -0x98(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xf310
movq %rax, %rdi
callq 0x3100
movq -0x98(%rbp), %rdi
movq %rax, %rsi
movq -0x78(%rbp), %rdx
callq 0x3130
cmpl $0x0, %eax
jne 0xe6ab
leaq -0x50(%rbp), %rdi
callq 0xf310
movl 0x20(%rax), %eax
movl %eax, -0x9c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xf310
movq -0x90(%rbp), %rdi
movq -0x80(%rbp), %rsi
movl -0x9c(%rbp), %edx
movq %rax, %rcx
callq 0xf330
jmp 0xe6cd
jmp 0xe6ad
leaq -0x50(%rbp), %rdi
callq 0xf3f0
jmp 0xe5ee
movq -0x80(%rbp), %rsi
movq -0x90(%rbp), %rdi
xorl %edx, %edx
callq 0xe720
movq -0x88(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
nopl (%rax)