aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/parser/lexer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/ApiExtractor/parser/lexer.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/parser/lexer.cpp1726
1 files changed, 0 insertions, 1726 deletions
diff --git a/sources/shiboken2/ApiExtractor/parser/lexer.cpp b/sources/shiboken2/ApiExtractor/parser/lexer.cpp
deleted file mode 100644
index 3fcf3b561..000000000
--- a/sources/shiboken2/ApiExtractor/parser/lexer.cpp
+++ /dev/null
@@ -1,1726 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2002-2005 Roberto Raggi <roberto@kdevelop.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of PySide2.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include "lexer.h"
-#include "tokens.h"
-#include "control.h"
-
-#include <cctype>
-#include <iostream>
-
-scan_fun_ptr Lexer::s_scan_keyword_table[] = {
- &Lexer::scanKeyword0, &Lexer::scanKeyword0,
- &Lexer::scanKeyword2, &Lexer::scanKeyword3,
- &Lexer::scanKeyword4, &Lexer::scanKeyword5,
- &Lexer::scanKeyword6, &Lexer::scanKeyword7,
- &Lexer::scanKeyword8, &Lexer::scanKeyword9,
- &Lexer::scanKeyword10, &Lexer::scanKeyword11,
- &Lexer::scanKeyword12, &Lexer::scanKeyword13,
- &Lexer::scanKeyword14, &Lexer::scanKeyword0,
- &Lexer::scanKeyword16
-};
-
-void LocationManager::extract_line(int offset, int *line, QString *filename) const
-{
- *line = 0;
- if (token_stream.size() < 1)
- return;
-
- const unsigned char *begin_buffer = reinterpret_cast<const unsigned char *>(token_stream[0].text);
- const unsigned char *cursor = begin_buffer + offset;
-
- ++cursor; // skip '#'
- if (std::isspace(*cursor) && std::isdigit(*(cursor + 1))) {
- ++cursor;
- char buffer[1024], *cp = buffer;
- do {
- *cp++ = *cursor++;
- } while (std::isdigit(*cursor));
- *cp = '\0';
- int l = strtol(buffer, 0, 0);
-
- Q_ASSERT(std::isspace(*cursor));
- ++cursor;
-
- Q_ASSERT(*cursor == '"');
- ++cursor;
-
- cp = buffer;
- while (*cursor && *cursor != '"') {
- *cp++ = *cursor++;
- }
- *cp = '\0';
- Q_ASSERT(*cursor == '"');
- ++cursor;
-
- *filename = QLatin1String(buffer);
- *line = l;
- // printf("filename: %s line: %d\n", buffer, line);
- }
-}
-
-void LocationManager::positionAt(std::size_t offset, int *line, int *column,
- QString *filename) const
-{
- int ppline = 0;
- int ppcolumn = 0;
- line_table.positionAt(offset, &ppline, &ppcolumn);
-
- int base_line = 0;
- extract_line((int) line_table[ppline-1], &base_line, filename);
-
- int line2 = 0;
- int column2 = 0;
- location_table.positionAt((int) line_table[ppline-1], &line2, &column2);
-
- location_table.positionAt(offset, line, column);
- *line = base_line + *line - line2 - 1;
-}
-
-scan_fun_ptr Lexer::s_scan_table[256];
-bool Lexer::s_initialized = false;
-
-void Lexer::tokenize(const char *contents, std::size_t size)
-{
- if (!s_initialized)
- initialize_scan_table();
-
- token_stream.resize(1024);
- token_stream[0].kind = Token_EOF;
- token_stream[0].text = contents;
-
- index = 1;
-
- cursor = (const unsigned char *) contents;
- begin_buffer = (const unsigned char *) contents;
- end_buffer = cursor + size;
-
- location_table.resize(1024);
- location_table[0] = 0;
- location_table.current_line = 1;
-
- line_table.resize(1024);
- line_table[0] = 0;
- line_table.current_line = 1;
-
- do {
- if (index == token_stream.size())
- token_stream.resize(token_stream.size() * 2);
-
- Token *current_token = &token_stream[(int) index];
- current_token->text = reinterpret_cast<const char*>(begin_buffer);
- current_token->position = cursor - begin_buffer;
- (this->*s_scan_table[*cursor])();
- current_token->size = cursor - begin_buffer - current_token->position;
- } while (cursor < end_buffer);
-
- if (index == token_stream.size())
- token_stream.resize(token_stream.size() * 2);
-
- Q_ASSERT(index < token_stream.size());
- token_stream[(int) index].position = cursor - begin_buffer;
- token_stream[(int) index].kind = Token_EOF;
-}
-
-void Lexer::reportError(const QString& msg)
-{
- int line = 0;
- int column = 0;
- QString fileName;
-
- std::size_t tok = token_stream.cursor();
- _M_location.positionAt(token_stream.position(tok),
- &line, &column, &fileName);
-
- Control::ErrorMessage errmsg;
- errmsg.setLine(line + 1);
- errmsg.setColumn(column);
- errmsg.setFileName(fileName);
- errmsg.setMessage(QLatin1String("** LEXER ERROR ") + msg);
- control->reportError(errmsg);
-}
-
-void Lexer::initialize_scan_table()
-{
- s_initialized = true;
-
- for (int i = 0; i < 256; ++i) {
- if (isspace(i))
- s_scan_table[i] = &Lexer::scan_white_spaces;
- else if (isalpha(i) || i == '_')
- s_scan_table[i] = &Lexer::scan_identifier_or_keyword;
- else if (isdigit(i))
- s_scan_table[i] = &Lexer::scan_int_constant;
- else
- s_scan_table[i] = &Lexer::scan_invalid_input;
- }
-
- s_scan_table[int('L')] = &Lexer::scan_identifier_or_literal;
- s_scan_table[int('\n')] = &Lexer::scan_newline;
- s_scan_table[int('#')] = &Lexer::scan_preprocessor;
-
- s_scan_table[int('\'')] = &Lexer::scan_char_constant;
- s_scan_table[int('"')] = &Lexer::scan_string_constant;
-
- s_scan_table[int('.')] = &Lexer::scan_int_constant;
-
- s_scan_table[int('!')] = &Lexer::scan_not;
- s_scan_table[int('%')] = &Lexer::scan_remainder;
- s_scan_table[int('&')] = &Lexer::scan_and;
- s_scan_table[int('(')] = &Lexer::scan_left_paren;
- s_scan_table[int(')')] = &Lexer::scan_right_paren;
- s_scan_table[int('*')] = &Lexer::scan_star;
- s_scan_table[int('+')] = &Lexer::scan_plus;
- s_scan_table[int(',')] = &Lexer::scan_comma;
- s_scan_table[int('-')] = &Lexer::scan_minus;
- s_scan_table[int('/')] = &Lexer::scan_divide;
- s_scan_table[int(':')] = &Lexer::scan_colon;
- s_scan_table[int(';')] = &Lexer::scan_semicolon;
- s_scan_table[int('<')] = &Lexer::scan_less;
- s_scan_table[int('=')] = &Lexer::scan_equal;
- s_scan_table[int('>')] = &Lexer::scan_greater;
- s_scan_table[int('?')] = &Lexer::scan_question;
- s_scan_table[int('[')] = &Lexer::scan_left_bracket;
- s_scan_table[int(']')] = &Lexer::scan_right_bracket;
- s_scan_table[int('^')] = &Lexer::scan_xor;
- s_scan_table[int('{')] = &Lexer::scan_left_brace;
- s_scan_table[int('|')] = &Lexer::scan_or;
- s_scan_table[int('}')] = &Lexer::scan_right_brace;
- s_scan_table[int('~')] = &Lexer::scan_tilde;
-
- s_scan_table[0] = &Lexer::scan_EOF;
-}
-
-void Lexer::scan_preprocessor()
-{
- if (line_table.current_line == line_table.size())
- line_table.resize(line_table.current_line * 2);
-
- line_table[(int) line_table.current_line++] = (cursor - begin_buffer);
-
- while (*cursor && *cursor != '\n')
- ++cursor;
-
- if (*cursor != '\n')
- reportError(QLatin1String("expected newline"));
-}
-
-void Lexer::scan_char_constant()
-{
- const unsigned char *begin = cursor;
-
- ++cursor;
- while (*cursor && *cursor != '\'') {
- if (*cursor == '\n')
- reportError(QLatin1String("did not expect newline"));
-
- if (*cursor == '\\')
- ++cursor;
- ++cursor;
- }
-
- if (*cursor != '\'')
- reportError(QLatin1String("expected \'"));
-
- ++cursor;
-
- token_stream[(int) index].extra.symbol =
- control->findOrInsertName((const char*) begin, cursor - begin);
-
- token_stream[(int) index++].kind = Token_char_literal;
-}
-
-void Lexer::scan_string_constant()
-{
- const unsigned char *begin = cursor;
-
- ++cursor;
- while (*cursor && *cursor != '"') {
- if (*cursor == '\n')
- reportError(QLatin1String("did not expect newline"));
-
- if (*cursor == '\\')
- ++cursor;
- ++cursor;
- }
-
- if (*cursor != '"')
- reportError(QLatin1String("expected \""));
-
- ++cursor;
-
- token_stream[(int) index].extra.symbol =
- control->findOrInsertName((const char*) begin, cursor - begin);
-
- token_stream[(int) index++].kind = Token_string_literal;
-}
-
-void Lexer::scan_newline()
-{
- if (location_table.current_line == location_table.size())
- location_table.resize(location_table.current_line * 2);
-
- location_table[(int) location_table.current_line++] = (cursor - begin_buffer);
- ++cursor;
-}
-
-void Lexer::scan_white_spaces()
-{
- while (isspace(*cursor)) {
- if (*cursor == '\n')
- scan_newline();
- else
- ++cursor;
- }
-}
-
-void Lexer::scan_identifier_or_literal()
-{
- switch (*(cursor + 1)) {
- case '\'':
- ++cursor;
- scan_char_constant();
- break;
-
- case '\"':
- ++cursor;
- scan_string_constant();
- break;
-
- default:
- scan_identifier_or_keyword();
- break;
- }
-}
-
-void Lexer::scan_identifier_or_keyword()
-{
- const unsigned char *skip = cursor;
- while (isalnum(*skip) || *skip == '_')
- ++skip;
-
- int n = skip - cursor;
- Token *current_token = &token_stream[(int) index];
- (this->*s_scan_keyword_table[n < 17 ? n : 0])();
-
- if (current_token->kind == Token_identifier) {
- current_token->extra.symbol =
- control->findOrInsertName((const char*) cursor, n);
- }
-
- cursor = skip;
-}
-
-void Lexer::scan_int_constant()
-{
- if (*cursor == '.' && !std::isdigit(*(cursor + 1))) {
- scan_dot();
- return;
- }
-
- const unsigned char *begin = cursor;
-
- while (isalnum(*cursor) || *cursor == '.')
- ++cursor;
-
- token_stream[(int) index].extra.symbol =
- control->findOrInsertName((const char*) begin, cursor - begin);
-
- token_stream[(int) index++].kind = Token_number_literal;
-}
-
-void Lexer::scan_not()
-{
- /*
- '!' ::= not
- '!=' ::= not_equal
- */
-
- ++cursor;
-
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_not_eq;
- } else {
- token_stream[(int) index++].kind = '!';
- }
-}
-
-void Lexer::scan_remainder()
-{
- /*
- '%' ::= remainder
- '%=' ::= remainder_equal
- */
-
- ++cursor;
-
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else {
- token_stream[(int) index++].kind = '%';
- }
-}
-
-void Lexer::scan_and()
-{
- /*
- '&&' ::= and_and
- '&' ::= and
- '&=' ::= and_equal
- */
-
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else if (*cursor == '&') {
- ++cursor;
- token_stream[(int) index++].kind = Token_and;
- } else {
- token_stream[(int) index++].kind = '&';
- }
-}
-
-void Lexer::scan_left_paren()
-{
- ++cursor;
- token_stream[(int) index++].kind = '(';
-}
-
-void Lexer::scan_right_paren()
-{
- ++cursor;
- token_stream[(int) index++].kind = ')';
-}
-
-void Lexer::scan_star()
-{
- /*
- '*' ::= star
- '*=' ::= star_equal
- */
-
- ++cursor;
-
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else {
- token_stream[(int) index++].kind = '*';
- }
-}
-
-void Lexer::scan_plus()
-{
- /*
- '+' ::= plus
- '++' ::= incr
- '+=' ::= plus_equal
- */
-
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else if (*cursor == '+') {
- ++cursor;
- token_stream[(int) index++].kind = Token_incr;
- } else {
- token_stream[(int) index++].kind = '+';
- }
-}
-
-void Lexer::scan_comma()
-{
- ++cursor;
- token_stream[(int) index++].kind = ',';
-}
-
-void Lexer::scan_minus()
-{
- /*
- '-' ::= minus
- '--' ::= decr
- '-=' ::= minus_equal
- '->' ::= left_arrow
- */
-
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else if (*cursor == '-') {
- ++cursor;
- token_stream[(int) index++].kind = Token_decr;
- } else if (*cursor == '>') {
- ++cursor;
- token_stream[(int) index++].kind = Token_arrow;
- if (*cursor == '*') {
- ++cursor;
- token_stream[(int) index++].kind = Token_ptrmem;
- }
- } else {
- token_stream[(int) index++].kind = '-';
- }
-}
-
-void Lexer::scan_dot()
-{
- /*
- '.' ::= dot
- '...' ::= ellipsis
- */
-
- ++cursor;
- if (*cursor == '.' && *(cursor + 1) == '.') {
- cursor += 2;
- token_stream[(int) index++].kind = Token_ellipsis;
- } else if (*cursor == '.' && *(cursor + 1) == '*') {
- cursor += 2;
- token_stream[(int) index++].kind = Token_ptrmem;
- } else
- token_stream[(int) index++].kind = '.';
-}
-
-void Lexer::scan_divide()
-{
- /*
- '/' ::= divide
- '/=' ::= divide_equal
- */
-
- ++cursor;
-
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else {
- token_stream[(int) index++].kind = '/';
- }
-}
-
-void Lexer::scan_colon()
-{
- ++cursor;
- if (*cursor == ':') {
- ++cursor;
- token_stream[(int) index++].kind = Token_scope;
- } else {
- token_stream[(int) index++].kind = ':';
- }
-}
-
-void Lexer::scan_semicolon()
-{
- ++cursor;
- token_stream[(int) index++].kind = ';';
-}
-
-void Lexer::scan_less()
-{
- /*
- '<' ::= less
- '<<' ::= left_shift
- '<<=' ::= left_shift_equal
- '<=' ::= less_equal
- */
-
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_leq;
- } else if (*cursor == '<') {
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else {
- token_stream[(int) index++].kind = Token_shift;
- }
- } else {
- token_stream[(int) index++].kind = '<';
- }
-}
-
-void Lexer::scan_equal()
-{
- /*
- '=' ::= equal
- '==' ::= equal_equal
- */
- ++cursor;
-
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_eq;
- } else {
- token_stream[(int) index++].kind = '=';
- }
-}
-
-void Lexer::scan_greater()
-{
- /*
- '>' ::= greater
- '>=' ::= greater_equal
- '>>' ::= right_shift
- '>>=' ::= right_shift_equal
- */
-
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_geq;
- } else if (*cursor == '>') {
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else {
- token_stream[(int) index++].kind = Token_shift;
- }
- } else {
- token_stream[(int) index++].kind = '>';
- }
-}
-
-void Lexer::scan_question()
-{
- ++cursor;
- token_stream[(int) index++].kind = '?';
-}
-
-void Lexer::scan_left_bracket()
-{
- ++cursor;
- token_stream[(int) index++].kind = '[';
-}
-
-void Lexer::scan_right_bracket()
-{
- ++cursor;
- token_stream[(int) index++].kind = ']';
-}
-
-void Lexer::scan_xor()
-{
- /*
- '^' ::= xor
- '^=' ::= xor_equal
- */
- ++cursor;
-
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else {
- token_stream[(int) index++].kind = '^';
- }
-}
-
-void Lexer::scan_left_brace()
-{
- ++cursor;
- token_stream[(int) index++].kind = '{';
-}
-
-void Lexer::scan_or()
-{
- /*
- '|' ::= or
- '|=' ::= or_equal
- '||' ::= or_or
- */
- ++cursor;
- if (*cursor == '=') {
- ++cursor;
- token_stream[(int) index++].kind = Token_assign;
- } else if (*cursor == '|') {
- ++cursor;
- token_stream[(int) index++].kind = Token_or;
- } else {
- token_stream[(int) index++].kind = '|';
- }
-}
-
-void Lexer::scan_right_brace()
-{
- ++cursor;
- token_stream[(int) index++].kind = '}';
-}
-
-void Lexer::scan_tilde()
-{
- ++cursor;
- token_stream[(int) index++].kind = '~';
-}
-
-void Lexer::scan_EOF()
-{
- ++cursor;
- token_stream[(int) index++].kind = Token_EOF;
-}
-
-void Lexer::scan_invalid_input()
-{
- QString errmsg(QLatin1String("invalid input: %1"));
- reportError(errmsg);
- ++cursor;
-}
-
-void LocationTable::positionAt(std::size_t offset, int max_line,
- int *line, int *column) const
-{
- if (!(line && column && max_line != 0))
- return;
-
- int first = 0;
- int len = max_line;
- int half;
- int middle;
-
- while (len > 0) {
- half = len >> 1;
- middle = first;
-
- middle += half;
-
- if (lines[middle] < offset) {
- first = middle;
- ++first;
- len = len - half - 1;
- } else
- len = half;
- }
-
- *line = std::max(first, 1);
- *column = (int)(offset - lines[*line - 1] - 1);
-
- if (*column < 0) {
- *column = 0;
- }
-}
-
-void Lexer::scanKeyword0()
-{
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword2()
-{
- switch (*cursor) {
- case 'i':
- if (*(cursor + 1) == 'f') {
- token_stream[(int) index++].kind = Token_if;
- return;
- }
- break;
-
- case 'd':
- if (*(cursor + 1) == 'o') {
- token_stream[(int) index++].kind = Token_do;
- return;
- }
- break;
-
- case 'o':
- if (*(cursor + 1) == 'r') {
- token_stream[(int) index++].kind = Token_or;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword3()
-{
- switch (*cursor) {
- case 'a':
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 'd') {
- token_stream[(int) index++].kind = Token_and;
- return;
- }
- if (*(cursor + 1) == 's' &&
- *(cursor + 2) == 'm') {
- token_stream[(int) index++].kind = Token_asm;
- return;
- }
- break;
-
- case 'f':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'r') {
- token_stream[(int) index++].kind = Token_for;
- return;
- }
- break;
-
- case 'i':
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 't') {
- token_stream[(int) index++].kind = Token_int;
- return;
- }
- break;
-
- case 'n':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 'w') {
- token_stream[(int) index++].kind = Token_new;
- return;
- }
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 't') {
- token_stream[(int) index++].kind = Token_not;
- return;
- }
- break;
-
- case 't':
- if (*(cursor + 1) == 'r' &&
- *(cursor + 2) == 'y') {
- token_stream[(int) index++].kind = Token_try;
- return;
- }
- break;
-
- case 'x':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'r') {
- token_stream[(int) index++].kind = Token_xor;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword4()
-{
- switch (*cursor) {
- case 'a':
- if (*(cursor + 1) == 'u' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'o') {
- token_stream[(int) index++].kind = Token_auto;
- return;
- }
- break;
-
- case 'c':
- if (*(cursor + 1) == 'a' &&
- *(cursor + 2) == 's' &&
- *(cursor + 3) == 'e') {
- token_stream[(int) index++].kind = Token_case;
- return;
- }
- if (*(cursor + 1) == 'h' &&
- *(cursor + 2) == 'a' &&
- *(cursor + 3) == 'r') {
- token_stream[(int) index++].kind = Token_char;
- return;
- }
- break;
-
- case 'b':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'o' &&
- *(cursor + 3) == 'l') {
- token_stream[(int) index++].kind = Token_bool;
- return;
- }
- break;
-
- case 'e':
- if (*(cursor + 1) == 'l' &&
- *(cursor + 2) == 's' &&
- *(cursor + 3) == 'e') {
- token_stream[(int) index++].kind = Token_else;
- return;
- }
- if (*(cursor + 1) == 'm' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 't') {
- token_stream[(int) index++].kind = Token_emit;
- return;
- }
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 'u' &&
- *(cursor + 3) == 'm') {
- token_stream[(int) index++].kind = Token_enum;
- return;
- }
- break;
-
- case 'g':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'o') {
- token_stream[(int) index++].kind = Token_goto;
- return;
- }
- break;
-
- case 'l':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'n' &&
- *(cursor + 3) == 'g') {
- token_stream[(int) index++].kind = Token_long;
- return;
- }
- break;
-
- case 't':
- if (*(cursor + 1) == 'h' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 's') {
- token_stream[(int) index++].kind = Token_this;
- return;
- }
- break;
-
- case 'v':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'd') {
- token_stream[(int) index++].kind = Token_void;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword5()
-{
- switch (*cursor) {
- case 'c':
- if (*(cursor + 1) == 'a' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'c' &&
- *(cursor + 4) == 'h') {
- token_stream[(int) index++].kind = Token_catch;
- return;
- }
- if (*(cursor + 1) == 'l' &&
- *(cursor + 2) == 'a' &&
- *(cursor + 3) == 's' &&
- *(cursor + 4) == 's') {
- token_stream[(int) index++].kind = Token_class;
- return;
- }
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'm' &&
- *(cursor + 3) == 'p' &&
- *(cursor + 4) == 'l') {
- token_stream[(int) index++].kind = Token_compl;
- return;
- }
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'n' &&
- *(cursor + 3) == 's' &&
- *(cursor + 4) == 't') {
- token_stream[(int) index++].kind = Token_const;
- return;
- }
- break;
-
- case 'b':
- if (*(cursor + 1) == 'i' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'o' &&
- *(cursor + 4) == 'r') {
- token_stream[(int) index++].kind = Token_bitor;
- return;
- }
- if (*(cursor + 1) == 'r' &&
- *(cursor + 2) == 'e' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 'k') {
- token_stream[(int) index++].kind = Token_break;
- return;
- }
- break;
-
- case 'f':
- if (*(cursor + 1) == 'l' &&
- *(cursor + 2) == 'o' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 't') {
- token_stream[(int) index++].kind = Token_float;
- return;
- }
- break;
-
- case 'o':
- if (*(cursor + 1) == 'r' &&
- *(cursor + 2) == '_' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'q') {
- token_stream[(int) index++].kind = Token_or_eq;
- return;
- }
- break;
-
- case 's':
- if (*(cursor + 1) == 'h' &&
- *(cursor + 2) == 'o' &&
- *(cursor + 3) == 'r' &&
- *(cursor + 4) == 't') {
- token_stream[(int) index++].kind = Token_short;
- return;
- }
- if (*(cursor + 1) == 'l' &&
- *(cursor + 2) == 'o' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 's') {
- token_stream[(int) index++].kind = Token_slots;
- return;
- }
- break;
-
- case 'u':
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'o' &&
- *(cursor + 4) == 'n') {
- token_stream[(int) index++].kind = Token_union;
- return;
- }
- if (*(cursor + 1) == 's' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'n' &&
- *(cursor + 4) == 'g') {
- token_stream[(int) index++].kind = Token_using;
- return;
- }
- break;
-
- case 't':
- if (*(cursor + 1) == 'h' &&
- *(cursor + 2) == 'r' &&
- *(cursor + 3) == 'o' &&
- *(cursor + 4) == 'w') {
- token_stream[(int) index++].kind = Token_throw;
- return;
- }
- break;
-
- case 'w':
- if (*(cursor + 1) == 'h' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'l' &&
- *(cursor + 4) == 'e') {
- token_stream[(int) index++].kind = Token_while;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword6()
-{
- switch (*cursor) {
- case 'a':
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 'd' &&
- *(cursor + 3) == '_' &&
- *(cursor + 4) == 'e' &&
- *(cursor + 5) == 'q') {
- token_stream[(int) index++].kind = Token_and_eq;
- return;
- }
- break;
-
- case 'b':
- if (*(cursor + 1) == 'i' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 'n' &&
- *(cursor + 5) == 'd') {
- token_stream[(int) index++].kind = Token_bitand;
- return;
- }
- break;
-
- case 'e':
- if (*(cursor + 1) == 'x' &&
- *(cursor + 2) == 'p' &&
- *(cursor + 3) == 'o' &&
- *(cursor + 4) == 'r' &&
- *(cursor + 5) == 't') {
- token_stream[(int) index++].kind = Token_export;
- return;
- }
- if (*(cursor + 1) == 'x' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'r' &&
- *(cursor + 5) == 'n') {
- token_stream[(int) index++].kind = Token_extern;
- return;
- }
- break;
-
- case 'd':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 'l' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 't' &&
- *(cursor + 5) == 'e') {
- token_stream[(int) index++].kind = Token_delete;
- return;
- }
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'u' &&
- *(cursor + 3) == 'b' &&
- *(cursor + 4) == 'l' &&
- *(cursor + 5) == 'e') {
- token_stream[(int) index++].kind = Token_double;
- return;
- }
- break;
-
- case 'f':
- if (*(cursor + 1) == 'r' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'n' &&
- *(cursor + 5) == 'd') {
- token_stream[(int) index++].kind = Token_friend;
- return;
- }
- break;
-
- case 'i':
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 'l' &&
- *(cursor + 3) == 'i' &&
- *(cursor + 4) == 'n' &&
- *(cursor + 5) == 'e') {
- token_stream[(int) index++].kind = Token_inline;
- return;
- }
- break;
-
- case 'K':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'D' &&
- *(cursor + 3) == 'C' &&
- *(cursor + 4) == 'O' &&
- *(cursor + 5) == 'P') {
- token_stream[(int) index++].kind = Token_K_DCOP;
- return;
- }
- break;
-
- case 'n':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == '_' &&
- *(cursor + 4) == 'e' &&
- *(cursor + 5) == 'q') {
- token_stream[(int) index++].kind = Token_not_eq;
- return;
- }
- break;
-
- case 'p':
- if (*(cursor + 1) == 'u' &&
- *(cursor + 2) == 'b' &&
- *(cursor + 3) == 'l' &&
- *(cursor + 4) == 'i' &&
- *(cursor + 5) == 'c') {
- token_stream[(int) index++].kind = Token_public;
- return;
- }
- break;
-
- case 's':
- if (*(cursor + 1) == 'i' &&
- *(cursor + 2) == 'g' &&
- *(cursor + 3) == 'n' &&
- *(cursor + 4) == 'e' &&
- *(cursor + 5) == 'd') {
- token_stream[(int) index++].kind = Token_signed;
- return;
- }
- if (*(cursor + 1) == 'i' &&
- *(cursor + 2) == 'z' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'o' &&
- *(cursor + 5) == 'f') {
- token_stream[(int) index++].kind = Token_sizeof;
- return;
- }
- if (*(cursor + 1) == 't' &&
- *(cursor + 2) == 'a' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 'i' &&
- *(cursor + 5) == 'c') {
- token_stream[(int) index++].kind = Token_static;
- return;
- }
- if (*(cursor + 1) == 't' &&
- *(cursor + 2) == 'r' &&
- *(cursor + 3) == 'u' &&
- *(cursor + 4) == 'c' &&
- *(cursor + 5) == 't') {
- token_stream[(int) index++].kind = Token_struct;
- return;
- }
- if (*(cursor + 1) == 'w' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 'c' &&
- *(cursor + 5) == 'h') {
- token_stream[(int) index++].kind = Token_switch;
- return;
- }
- break;
-
- case 'r':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'u' &&
- *(cursor + 4) == 'r' &&
- *(cursor + 5) == 'n') {
- token_stream[(int) index++].kind = Token_return;
- return;
- }
- break;
-
- case 't':
- if (*(cursor + 1) == 'y' &&
- *(cursor + 2) == 'p' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'i' &&
- *(cursor + 5) == 'd') {
- token_stream[(int) index++].kind = Token_typeid;
- return;
- }
- break;
-
- case 'x':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'r' &&
- *(cursor + 3) == '_' &&
- *(cursor + 4) == 'e' &&
- *(cursor + 5) == 'q') {
- token_stream[(int) index++].kind = Token_xor_eq;
- return;
- }
- break;
-
- case 'k':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'd' &&
- *(cursor + 3) == 'c' &&
- *(cursor + 4) == 'o' &&
- *(cursor + 5) == 'p') {
- token_stream[(int) index++].kind = Token_k_dcop;
- return;
- }
- break;
-
- case 'Q':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'E' &&
- *(cursor + 3) == 'N' &&
- *(cursor + 4) == 'U' &&
- *(cursor + 5) == 'M') { // Qt5.5
- token_stream[(int) index++].kind = Token_Q_ENUM;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword7()
-{
- switch (*cursor) {
- case 'd':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 'f' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 'u' &&
- *(cursor + 5) == 'l' &&
- *(cursor + 6) == 't') {
- token_stream[(int) index++].kind = Token_default;
- return;
- }
- break;
-
- case 'm':
- if (*(cursor + 1) == 'u' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 'b' &&
- *(cursor + 5) == 'l' &&
- *(cursor + 6) == 'e') {
- token_stream[(int) index++].kind = Token_mutable;
- return;
- }
- break;
-
- case 'p':
- if (*(cursor + 1) == 'r' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'v' &&
- *(cursor + 4) == 'a' &&
- *(cursor + 5) == 't' &&
- *(cursor + 6) == 'e') {
- token_stream[(int) index++].kind = Token_private;
- return;
- }
- break;
- case 's':
- if (*(cursor + 1) == 'i' &&
- *(cursor + 2) == 'g' &&
- *(cursor + 3) == 'n' &&
- *(cursor + 4) == 'a' &&
- *(cursor + 5) == 'l' &&
- *(cursor + 6) == 's') {
- token_stream[(int) index++].kind = Token_signals;
- return;
- }
- break;
- case 't':
- if (*(cursor + 1) == 'y' &&
- *(cursor + 2) == 'p' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'd' &&
- *(cursor + 5) == 'e' &&
- *(cursor + 6) == 'f') {
- token_stream[(int) index++].kind = Token_typedef;
- return;
- }
- break;
-
- case 'v':
- if (*(cursor + 1) == 'i' &&
- *(cursor + 2) == 'r' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 'u' &&
- *(cursor + 5) == 'a' &&
- *(cursor + 6) == 'l') {
- token_stream[(int) index++].kind = Token_virtual;
- return;
- }
- break;
-
- case 'Q':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'E' &&
- *(cursor + 3) == 'N' &&
- *(cursor + 4) == 'U' &&
- *(cursor + 5) == 'M' &&
- *(cursor + 6) == 'S') {
- token_stream[(int) index++].kind = Token_Q_ENUMS;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword8()
-{
- switch (*cursor) {
- case '_':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 't' &&
- *(cursor + 3) == 'y' &&
- *(cursor + 4) == 'p' &&
- *(cursor + 5) == 'e' &&
- *(cursor + 6) == 'o' &&
- *(cursor + 7) == 'f') {
- token_stream[(int) index++].kind = Token___typeof;
- return;
- }
- break;
-
- case 'c':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'n' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 'i' &&
- *(cursor + 5) == 'n' &&
- *(cursor + 6) == 'u' &&
- *(cursor + 7) == 'e') {
- token_stream[(int) index++].kind = Token_continue;
- return;
- }
- break;
-
- case 'e':
- if (*(cursor + 1) == 'x' &&
- *(cursor + 2) == 'p' &&
- *(cursor + 3) == 'l' &&
- *(cursor + 4) == 'i' &&
- *(cursor + 5) == 'c' &&
- *(cursor + 6) == 'i' &&
- *(cursor + 7) == 't') {
- token_stream[(int) index++].kind = Token_explicit;
- return;
- }
- break;
-
- case 'n':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'e' &&
- *(cursor + 3) == 'x' &&
- *(cursor + 4) == 'c' &&
- *(cursor + 5) == 'e' &&
- *(cursor + 6) == 'p' &&
- *(cursor + 7) == 't') {
- token_stream[(int) index++].kind = Token_noexcept;
- return;
- }
- break;
-
- case 'o':
- if (*(cursor + 1) == 'p' &&
- *(cursor + 2) == 'e' &&
- *(cursor + 3) == 'r' &&
- *(cursor + 4) == 'a' &&
- *(cursor + 5) == 't' &&
- *(cursor + 6) == 'o' &&
- *(cursor + 7) == 'r') {
- token_stream[(int) index++].kind = Token_operator;
- return;
- }
- break;
-
- case 'Q':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'O' &&
- *(cursor + 3) == 'B' &&
- *(cursor + 4) == 'J' &&
- *(cursor + 5) == 'E' &&
- *(cursor + 6) == 'C' &&
- *(cursor + 7) == 'T') {
- token_stream[(int) index++].kind = Token_Q_OBJECT;
- return;
- }
- break;
-
- case 'r':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 'g' &&
- *(cursor + 3) == 'i' &&
- *(cursor + 4) == 's' &&
- *(cursor + 5) == 't' &&
- *(cursor + 6) == 'e' &&
- *(cursor + 7) == 'r') {
- token_stream[(int) index++].kind = Token_register;
- return;
- }
- break;
-
- case 'u':
- if (*(cursor + 1) == 'n' &&
- *(cursor + 2) == 's' &&
- *(cursor + 3) == 'i' &&
- *(cursor + 4) == 'g' &&
- *(cursor + 5) == 'n' &&
- *(cursor + 6) == 'e' &&
- *(cursor + 7) == 'd') {
- token_stream[(int) index++].kind = Token_unsigned;
- return;
- }
- break;
-
- case 't':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 'm' &&
- *(cursor + 3) == 'p' &&
- *(cursor + 4) == 'l' &&
- *(cursor + 5) == 'a' &&
- *(cursor + 6) == 't' &&
- *(cursor + 7) == 'e') {
- token_stream[(int) index++].kind = Token_template;
- return;
- }
- if (*(cursor + 1) == 'y' &&
- *(cursor + 2) == 'p' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 'n' &&
- *(cursor + 5) == 'a' &&
- *(cursor + 6) == 'm' &&
- *(cursor + 7) == 'e') {
- token_stream[(int) index++].kind = Token_typename;
- return;
- }
- break;
-
- case 'v':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'l' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 't' &&
- *(cursor + 5) == 'i' &&
- *(cursor + 6) == 'l' &&
- *(cursor + 7) == 'e') {
- token_stream[(int) index++].kind = Token_volatile;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword9()
-{
- switch (*cursor) {
- case 'p':
- if (*(cursor + 1) == 'r' &&
- *(cursor + 2) == 'o' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 'e' &&
- *(cursor + 5) == 'c' &&
- *(cursor + 6) == 't' &&
- *(cursor + 7) == 'e' &&
- *(cursor + 8) == 'd') {
- token_stream[(int) index++].kind = Token_protected;
- return;
- }
- break;
-
- case 'n':
- if (*(cursor + 1) == 'a' &&
- *(cursor + 2) == 'm' &&
- *(cursor + 3) == 'e' &&
- *(cursor + 4) == 's' &&
- *(cursor + 5) == 'p' &&
- *(cursor + 6) == 'a' &&
- *(cursor + 7) == 'c' &&
- *(cursor + 8) == 'e') {
- token_stream[(int) index++].kind = Token_namespace;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword10()
-{
- switch (*cursor) {
- case 'c':
- if (*(cursor + 1) == 'o' &&
- *(cursor + 2) == 'n' &&
- *(cursor + 3) == 's' &&
- *(cursor + 4) == 't' &&
- *(cursor + 5) == '_' &&
- *(cursor + 6) == 'c' &&
- *(cursor + 7) == 'a' &&
- *(cursor + 8) == 's' &&
- *(cursor + 9) == 't') {
- token_stream[(int) index++].kind = Token_const_cast;
- return;
- }
- break;
-
- case 'Q':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'P' &&
- *(cursor + 3) == 'R' &&
- *(cursor + 4) == 'O' &&
- *(cursor + 5) == 'P' &&
- *(cursor + 6) == 'E' &&
- *(cursor + 7) == 'R' &&
- *(cursor + 8) == 'T' &&
- *(cursor + 9) == 'Y') {
- token_stream[(int) index++].kind = Token_Q_PROPERTY;
- return;
- }
-
- break;
- }
-
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword11()
-{
- switch (*cursor) {
- case 'Q':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'I' &&
- *(cursor + 3) == 'N' &&
- *(cursor + 4) == 'V' &&
- *(cursor + 5) == 'O' &&
- *(cursor + 6) == 'K' &&
- *(cursor + 7) == 'A' &&
- *(cursor + 8) == 'B' &&
- *(cursor + 9) == 'L' &&
- *(cursor + 10) == 'E') {
- token_stream[(int) index++].kind = Token_Q_INVOKABLE;
- return;
- }
- break;
-
- case 's':
- if (*(cursor + 1) == 't' &&
- *(cursor + 2) == 'a' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 'i' &&
- *(cursor + 5) == 'c' &&
- *(cursor + 6) == '_' &&
- *(cursor + 7) == 'c' &&
- *(cursor + 8) == 'a' &&
- *(cursor + 9) == 's' &&
- *(cursor + 10) == 't') {
- token_stream[(int) index++].kind = Token_static_cast;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword12()
-{
- switch (*cursor) {
- case 'd':
- if (*(cursor + 1) == 'y' &&
- *(cursor + 2) == 'n' &&
- *(cursor + 3) == 'a' &&
- *(cursor + 4) == 'm' &&
- *(cursor + 5) == 'i' &&
- *(cursor + 6) == 'c' &&
- *(cursor + 7) == '_' &&
- *(cursor + 8) == 'c' &&
- *(cursor + 9) == 'a' &&
- *(cursor + 10) == 's' &&
- *(cursor + 11) == 't') {
- token_stream[(int) index++].kind = Token_dynamic_cast;
- return;
- }
- break;
-
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword13()
-{
- switch (*cursor) {
- case '_':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'a' &&
- *(cursor + 3) == 't' &&
- *(cursor + 4) == 't' &&
- *(cursor + 5) == 'r' &&
- *(cursor + 6) == 'i' &&
- *(cursor + 7) == 'b' &&
- *(cursor + 8) == 'u' &&
- *(cursor + 9) == 't' &&
- *(cursor + 10) == 'e' &&
- *(cursor + 11) == '_' &&
- *(cursor + 12) == '_') {
- token_stream[(int) index++].kind = Token___attribute__;
- return;
- }
- break;
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword14()
-{
- switch (*cursor) {
- case 'k':
- if (*(cursor + 1) == '_' &&
- *(cursor + 2) == 'd' &&
- *(cursor + 3) == 'c' &&
- *(cursor + 4) == 'o' &&
- *(cursor + 5) == 'p' &&
- *(cursor + 6) == '_' &&
- *(cursor + 7) == 's' &&
- *(cursor + 8) == 'i' &&
- *(cursor + 9) == 'g' &&
- *(cursor + 10) == 'n' &&
- *(cursor + 11) == 'a' &&
- *(cursor + 12) == 'l' &&
- *(cursor + 13) == 's') {
- token_stream[(int) index++].kind = Token_k_dcop_signals;
- return;
- }
- break;
- }
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-void Lexer::scanKeyword16()
-{
- switch (*cursor) {
- case 'r':
- if (*(cursor + 1) == 'e' &&
- *(cursor + 2) == 'i' &&
- *(cursor + 3) == 'n' &&
- *(cursor + 4) == 't' &&
- *(cursor + 5) == 'e' &&
- *(cursor + 6) == 'r' &&
- *(cursor + 7) == 'p' &&
- *(cursor + 8) == 'r' &&
- *(cursor + 9) == 'e' &&
- *(cursor + 10) == 't' &&
- *(cursor + 11) == '_' &&
- *(cursor + 12) == 'c' &&
- *(cursor + 13) == 'a' &&
- *(cursor + 14) == 's' &&
- *(cursor + 15) == 't') {
- token_stream[(int) index++].kind = Token_reinterpret_cast;
- return;
- }
- break;
- }
-
- token_stream[(int) index++].kind = Token_identifier;
-}
-
-// kate: space-indent on; indent-width 2; replace-tabs on;