// File: /workspace/github_cpp_makefile_star2_O2/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 %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x30, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movq 0x90(%rsi), %rax
cmpq 0x88(%rsi), %rax
jae 0x5dc2
movq %r14, %rdi
callq 0x5f80
testb %al, %al
jne 0x5da1
movq %rsp, %rdi
pushq $0x72
popq %rdx
movq %r14, %rsi
callq 0x5f20
leaq 0x8(%rsp), %rdi
callq 0x20f0
movq 0x80(%r14), %r15
movq 0x90(%r14), %rcx
movzbl (%r15,%rcx), %eax
cmpl $0x22, %eax
je 0x5dd2
cmpl $0x27, %eax
jne 0x5de2
pushq $0x27
jmp 0x5dd4
pushq $0x72
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5f20
jmp 0x5e04
pushq $0x22
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5fe0
jmp 0x5e04
movl %eax, %edx
andb $-0x21, %dl
addb $-0x41, %dl
cmpb $0x1a, %dl
jb 0x5df9
cmpl $0x5f, %eax
je 0x5df9
cmpl $0x24, %eax
jne 0x5e15
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6078
movq %rbx, %rax
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leal -0x30(%rax), %edx
cmpb $0x9, %dl
ja 0x5e2a
movq %rbx, %rdi
movq %r14, %rsi
callq 0x61dc
jmp 0x5e04
addq %rcx, %r15
cmpl $0x2f, %eax
je 0x5e71
cmpl $0x2e, %eax
jne 0x5e41
movb 0x1(%r15), %al
addb $-0x3a, %al
cmpb $-0xa, %al
jae 0x5e1d
movq 0x18(%r14), %r12
leaq 0x8(%r14), %r13
cmpq %r13, %r12
je 0x5e90
movq 0x20(%r12), %rsi
movq 0x28(%r12), %rdx
movq %r15, %rdi
callq 0x2210
testl %eax, %eax
je 0x5e9d
movq %r12, %rdi
callq 0x2250
movq %rax, %r12
jmp 0x5e49
movzbl 0x1(%r15), %eax
cmpl $0x2f, %eax
je 0x5eb9
cmpl $0x2a, %eax
jne 0x5ec9
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6280
jmp 0x5e04
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
jmp 0x5dcb
movl 0x40(%r12), %edx
addq $0x20, %r12
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rcx
callq 0x6480
jmp 0x5e04
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6336
jmp 0x5e04
movl 0x78(%r14), %eax
addl $-0x33, %eax
cmpl $0x31, %eax
ja 0x5e41
movabsq $0x2004000000089, %rcx  # imm = 0x2004000000089
btq %rax, %rcx
jae 0x5e41
movq %rbx, %rdi
movq %r14, %rsi
callq 0x63d6
jmp 0x5e04
nop