Revision control
Copy as Markdown
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#include "glsllexer_p.h"
#include "glslparser_p.h"
QT_BEGIN_NAMESPACE
using namespace GLSL;
static inline int classify2(const char *s) {
if (s[0] == 'd') {
if (s[1] == 'o') {
return Parser::T_DO;
}
}
else if (s[0] == 'i') {
if (s[1] == 'f') {
return Parser::T_IF;
}
else if (s[1] == 'n') {
return Parser::T_IN;
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify3(const char *s) {
if (s[0] == 'f') {
if (s[1] == 'o') {
if (s[2] == 'r') {
return Parser::T_FOR;
}
}
}
else if (s[0] == 'i') {
if (s[1] == 'n') {
if (s[2] == 't') {
return Parser::T_INT;
}
}
}
else if (s[0] == 'o') {
if (s[1] == 'u') {
if (s[2] == 't') {
return Parser::T_OUT;
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify4(const char *s) {
if (s[0] == 'b') {
if (s[1] == 'o') {
if (s[2] == 'o') {
if (s[3] == 'l') {
return Parser::T_BOOL;
}
}
}
}
else if (s[0] == 'c') {
if (s[1] == 'a') {
if (s[2] == 's') {
if (s[3] == 'e') {
return Parser::T_CASE | Lexer::Variant_GLSL_150;
}
}
}
}
else if (s[0] == 'e') {
if (s[1] == 'l') {
if (s[2] == 's') {
if (s[3] == 'e') {
return Parser::T_ELSE;
}
}
}
}
else if (s[0] == 'f') {
if (s[1] == 'l') {
if (s[2] == 'a') {
if (s[3] == 't') {
return Parser::T_FLAT | Lexer::Variant_GLSL_150;
}
}
}
}
else if (s[0] == 'l') {
if (s[1] == 'o') {
if (s[2] == 'w') {
if (s[3] == 'p') {
return Parser::T_LOWP | Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400;
}
}
}
}
else if (s[0] == 'm') {
if (s[1] == 'a') {
if (s[2] == 't') {
if (s[3] == '2') {
return Parser::T_MAT2;
}
else if (s[3] == '3') {
return Parser::T_MAT3;
}
else if (s[3] == '4') {
return Parser::T_MAT4;
}
}
}
}
else if (s[0] == 't') {
if (s[1] == 'r') {
if (s[2] == 'u') {
if (s[3] == 'e') {
return Parser::T_TRUE;
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 'i') {
if (s[2] == 'n') {
if (s[3] == 't') {
return Parser::T_UINT | Lexer::Variant_GLSL_150;
}
}
}
}
else if (s[0] == 'v') {
if (s[1] == 'e') {
if (s[2] == 'c') {
if (s[3] == '2') {
return Parser::T_VEC2;
}
else if (s[3] == '3') {
return Parser::T_VEC3;
}
else if (s[3] == '4') {
return Parser::T_VEC4;
}
}
}
else if (s[1] == 'o') {
if (s[2] == 'i') {
if (s[3] == 'd') {
return Parser::T_VOID;
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify5(const char *s) {
if (s[0] == 'b') {
if (s[1] == 'r') {
if (s[2] == 'e') {
if (s[3] == 'a') {
if (s[4] == 'k') {
return Parser::T_BREAK;
}
}
}
}
else if (s[1] == 'v') {
if (s[2] == 'e') {
if (s[3] == 'c') {
if (s[4] == '2') {
return Parser::T_BVEC2;
}
else if (s[4] == '3') {
return Parser::T_BVEC3;
}
else if (s[4] == '4') {
return Parser::T_BVEC4;
}
}
}
}
}
else if (s[0] == 'c') {
if (s[1] == 'o') {
if (s[2] == 'n') {
if (s[3] == 's') {
if (s[4] == 't') {
return Parser::T_CONST;
}
}
}
}
}
else if (s[0] == 'd') {
if (s[1] == 'm') {
if (s[2] == 'a') {
if (s[3] == 't') {
if (s[4] == '2') {
return Parser::T_DMAT2 | Lexer::Variant_GLSL_400;
}
else if (s[4] == '3') {
return Parser::T_DMAT3 | Lexer::Variant_GLSL_400;
}
else if (s[4] == '4') {
return Parser::T_DMAT4 | Lexer::Variant_GLSL_400;
}
}
}
}
else if (s[1] == 'v') {
if (s[2] == 'e') {
if (s[3] == 'c') {
if (s[4] == '2') {
return Parser::T_DVEC2 | Lexer::Variant_GLSL_400;
}
else if (s[4] == '3') {
return Parser::T_DVEC3 | Lexer::Variant_GLSL_400;
}
else if (s[4] == '4') {
return Parser::T_DVEC4 | Lexer::Variant_GLSL_400;
}
}
}
}
}
else if (s[0] == 'f') {
if (s[1] == 'a') {
if (s[2] == 'l') {
if (s[3] == 's') {
if (s[4] == 'e') {
return Parser::T_FALSE;
}
}
}
}
else if (s[1] == 'l') {
if (s[2] == 'o') {
if (s[3] == 'a') {
if (s[4] == 't') {
return Parser::T_FLOAT;
}
}
}
}
}
else if (s[0] == 'h') {
if (s[1] == 'i') {
if (s[2] == 'g') {
if (s[3] == 'h') {
if (s[4] == 'p') {
return Parser::T_HIGHP | Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400;
}
}
}
}
}
else if (s[0] == 'i') {
if (s[1] == 'n') {
if (s[2] == 'o') {
if (s[3] == 'u') {
if (s[4] == 't') {
return Parser::T_INOUT;
}
}
}
}
else if (s[1] == 'v') {
if (s[2] == 'e') {
if (s[3] == 'c') {
if (s[4] == '2') {
return Parser::T_IVEC2;
}
else if (s[4] == '3') {
return Parser::T_IVEC3;
}
else if (s[4] == '4') {
return Parser::T_IVEC4;
}
}
}
}
}
else if (s[0] == 'p') {
if (s[1] == 'a') {
if (s[2] == 't') {
if (s[3] == 'c') {
if (s[4] == 'h') {
return Parser::T_PATCH | Lexer::Variant_GLSL_400;
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 'v') {
if (s[2] == 'e') {
if (s[3] == 'c') {
if (s[4] == '2') {
return Parser::T_UVEC2 | Lexer::Variant_GLSL_150;
}
else if (s[4] == '3') {
return Parser::T_UVEC3 | Lexer::Variant_GLSL_150;
}
else if (s[4] == '4') {
return Parser::T_UVEC4 | Lexer::Variant_GLSL_150;
}
}
}
}
}
else if (s[0] == 'w') {
if (s[1] == 'h') {
if (s[2] == 'i') {
if (s[3] == 'l') {
if (s[4] == 'e') {
return Parser::T_WHILE;
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify6(const char *s) {
if (s[0] == 'd') {
if (s[1] == 'o') {
if (s[2] == 'u') {
if (s[3] == 'b') {
if (s[4] == 'l') {
if (s[5] == 'e') {
return Parser::T_DOUBLE | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
else if (s[0] == 'l') {
if (s[1] == 'a') {
if (s[2] == 'y') {
if (s[3] == 'o') {
if (s[4] == 'u') {
if (s[5] == 't') {
return Parser::T_LAYOUT | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
else if (s[0] == 'm') {
if (s[1] == 'a') {
if (s[2] == 't') {
if (s[3] == '2') {
if (s[4] == 'x') {
if (s[5] == '2') {
return Parser::T_MAT2X2 | Lexer::Variant_GLSL_120;
}
else if (s[5] == '3') {
return Parser::T_MAT2X3 | Lexer::Variant_GLSL_120;
}
else if (s[5] == '4') {
return Parser::T_MAT2X4 | Lexer::Variant_GLSL_120;
}
}
}
else if (s[3] == '3') {
if (s[4] == 'x') {
if (s[5] == '2') {
return Parser::T_MAT3X2 | Lexer::Variant_GLSL_120;
}
else if (s[5] == '3') {
return Parser::T_MAT3X3 | Lexer::Variant_GLSL_120;
}
else if (s[5] == '4') {
return Parser::T_MAT3X4 | Lexer::Variant_GLSL_120;
}
}
}
else if (s[3] == '4') {
if (s[4] == 'x') {
if (s[5] == '2') {
return Parser::T_MAT4X2 | Lexer::Variant_GLSL_120;
}
else if (s[5] == '3') {
return Parser::T_MAT4X3 | Lexer::Variant_GLSL_120;
}
else if (s[5] == '4') {
return Parser::T_MAT4X4 | Lexer::Variant_GLSL_120;
}
}
}
}
}
}
else if (s[0] == 'r') {
if (s[1] == 'e') {
if (s[2] == 't') {
if (s[3] == 'u') {
if (s[4] == 'r') {
if (s[5] == 'n') {
return Parser::T_RETURN;
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
return Parser::T_SAMPLE | Lexer::Variant_Reserved;
}
}
}
}
}
else if (s[1] == 'm') {
if (s[2] == 'o') {
if (s[3] == 'o') {
if (s[4] == 't') {
if (s[5] == 'h') {
return Parser::T_SMOOTH | Lexer::Variant_GLSL_150;
}
}
}
}
}
else if (s[1] == 't') {
if (s[2] == 'r') {
if (s[3] == 'u') {
if (s[4] == 'c') {
if (s[5] == 't') {
return Parser::T_STRUCT;
}
}
}
}
}
else if (s[1] == 'w') {
if (s[2] == 'i') {
if (s[3] == 't') {
if (s[4] == 'c') {
if (s[5] == 'h') {
return Parser::T_SWITCH | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify7(const char *s) {
if (s[0] == 'd') {
if (s[1] == 'e') {
if (s[2] == 'f') {
if (s[3] == 'a') {
if (s[4] == 'u') {
if (s[5] == 'l') {
if (s[6] == 't') {
return Parser::T_DEFAULT | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
else if (s[1] == 'i') {
if (s[2] == 's') {
if (s[3] == 'c') {
if (s[4] == 'a') {
if (s[5] == 'r') {
if (s[6] == 'd') {
return Parser::T_DISCARD | Lexer::Variant_FragmentShader;
}
}
}
}
}
}
else if (s[1] == 'm') {
if (s[2] == 'a') {
if (s[3] == 't') {
if (s[4] == '2') {
if (s[5] == 'x') {
if (s[6] == '2') {
return Parser::T_DMAT2X2 | Lexer::Variant_GLSL_400;
}
else if (s[6] == '3') {
return Parser::T_DMAT2X3 | Lexer::Variant_GLSL_400;
}
else if (s[6] == '4') {
return Parser::T_DMAT2X4 | Lexer::Variant_GLSL_400;
}
}
}
else if (s[4] == '3') {
if (s[5] == 'x') {
if (s[6] == '2') {
return Parser::T_DMAT3X2 | Lexer::Variant_GLSL_400;
}
else if (s[6] == '3') {
return Parser::T_DMAT3X3 | Lexer::Variant_GLSL_400;
}
else if (s[6] == '4') {
return Parser::T_DMAT3X4 | Lexer::Variant_GLSL_400;
}
}
}
else if (s[4] == '4') {
if (s[5] == 'x') {
if (s[6] == '2') {
return Parser::T_DMAT4X2 | Lexer::Variant_GLSL_400;
}
else if (s[6] == '3') {
return Parser::T_DMAT4X3 | Lexer::Variant_GLSL_400;
}
else if (s[6] == '4') {
return Parser::T_DMAT4X4 | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
else if (s[0] == 'm') {
if (s[1] == 'e') {
if (s[2] == 'd') {
if (s[3] == 'i') {
if (s[4] == 'u') {
if (s[5] == 'm') {
if (s[6] == 'p') {
return Parser::T_MEDIUMP | Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 'n') {
if (s[2] == 'i') {
if (s[3] == 'f') {
if (s[4] == 'o') {
if (s[5] == 'r') {
if (s[6] == 'm') {
return Parser::T_UNIFORM;
}
}
}
}
}
}
}
else if (s[0] == 'v') {
if (s[1] == 'a') {
if (s[2] == 'r') {
if (s[3] == 'y') {
if (s[4] == 'i') {
if (s[5] == 'n') {
if (s[6] == 'g') {
return Parser::T_VARYING;
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify8(const char *s) {
if (s[0] == 'c') {
if (s[1] == 'e') {
if (s[2] == 'n') {
if (s[3] == 't') {
if (s[4] == 'r') {
if (s[5] == 'o') {
if (s[6] == 'i') {
if (s[7] == 'd') {
return Parser::T_CENTROID | Lexer::Variant_GLSL_120;
}
}
}
}
}
}
}
else if (s[1] == 'o') {
if (s[2] == 'n') {
if (s[3] == 't') {
if (s[4] == 'i') {
if (s[5] == 'n') {
if (s[6] == 'u') {
if (s[7] == 'e') {
return Parser::T_CONTINUE;
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify9(const char *s) {
if (s[0] == 'a') {
if (s[1] == 't') {
if (s[2] == 't') {
if (s[3] == 'r') {
if (s[4] == 'i') {
if (s[5] == 'b') {
if (s[6] == 'u') {
if (s[7] == 't') {
if (s[8] == 'e') {
return Parser::T_ATTRIBUTE | Lexer::Variant_VertexShader;
}
}
}
}
}
}
}
}
}
else if (s[0] == 'i') {
if (s[1] == 'n') {
if (s[2] == 'v') {
if (s[3] == 'a') {
if (s[4] == 'r') {
if (s[5] == 'i') {
if (s[6] == 'a') {
if (s[7] == 'n') {
if (s[8] == 't') {
return Parser::T_INVARIANT;
}
}
}
}
}
}
}
}
}
else if (s[0] == 'p') {
if (s[1] == 'r') {
if (s[2] == 'e') {
if (s[3] == 'c') {
if (s[4] == 'i') {
if (s[5] == 's') {
if (s[6] == 'i') {
if (s[7] == 'o') {
if (s[8] == 'n') {
return Parser::T_PRECISION | Lexer::Variant_GLSL_ES_100;
}
}
}
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '1') {
if (s[8] == 'D') {
return Parser::T_SAMPLER1D | Lexer::Variant_GLSL_120;
}
}
else if (s[7] == '2') {
if (s[8] == 'D') {
return Parser::T_SAMPLER2D;
}
}
else if (s[7] == '3') {
if (s[8] == 'D') {
return Parser::T_SAMPLER3D | Lexer::Variant_GLSL_120;
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify10(const char *s) {
if (s[0] == 'i') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '1') {
if (s[9] == 'D') {
return Parser::T_ISAMPLER1D | Lexer::Variant_GLSL_150;
}
}
else if (s[8] == '2') {
if (s[9] == 'D') {
return Parser::T_ISAMPLER2D | Lexer::Variant_GLSL_150;
}
}
else if (s[8] == '3') {
if (s[9] == 'D') {
return Parser::T_ISAMPLER3D | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'u') {
if (s[2] == 'b') {
if (s[3] == 'r') {
if (s[4] == 'o') {
if (s[5] == 'u') {
if (s[6] == 't') {
if (s[7] == 'i') {
if (s[8] == 'n') {
if (s[9] == 'e') {
return Parser::T_SUBROUTINE | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '1') {
if (s[9] == 'D') {
return Parser::T_USAMPLER1D | Lexer::Variant_GLSL_150;
}
}
else if (s[8] == '2') {
if (s[9] == 'D') {
return Parser::T_USAMPLER2D | Lexer::Variant_GLSL_150;
}
}
else if (s[8] == '3') {
if (s[9] == 'D') {
return Parser::T_USAMPLER3D | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify11(const char *s) {
if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'M') {
if (s[10] == 'S') {
return Parser::T_SAMPLER2DMS | Lexer::Variant_GLSL_150;
}
}
}
}
else if (s[7] == 'C') {
if (s[8] == 'u') {
if (s[9] == 'b') {
if (s[10] == 'e') {
return Parser::T_SAMPLERCUBE;
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify12(const char *s) {
if (s[0] == 'i') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'M') {
if (s[11] == 'S') {
return Parser::T_ISAMPLER2DMS | Lexer::Variant_GLSL_150;
}
}
}
}
else if (s[8] == 'C') {
if (s[9] == 'u') {
if (s[10] == 'b') {
if (s[11] == 'e') {
return Parser::T_ISAMPLERCUBE | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'M') {
if (s[11] == 'S') {
return Parser::T_USAMPLER2DMS | Lexer::Variant_GLSL_150;
}
}
}
}
else if (s[8] == 'C') {
if (s[9] == 'u') {
if (s[10] == 'b') {
if (s[11] == 'e') {
return Parser::T_USAMPLERCUBE | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify13(const char *s) {
if (s[0] == 'n') {
if (s[1] == 'o') {
if (s[2] == 'p') {
if (s[3] == 'e') {
if (s[4] == 'r') {
if (s[5] == 's') {
if (s[6] == 'p') {
if (s[7] == 'e') {
if (s[8] == 'c') {
if (s[9] == 't') {
if (s[10] == 'i') {
if (s[11] == 'v') {
if (s[12] == 'e') {
return Parser::T_NOPERSPECTIVE | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'R') {
if (s[10] == 'e') {
if (s[11] == 'c') {
if (s[12] == 't') {
return Parser::T_SAMPLER2DRECT;
}
}
}
}
}
}
else if (s[7] == 'B') {
if (s[8] == 'u') {
if (s[9] == 'f') {
if (s[10] == 'f') {
if (s[11] == 'e') {
if (s[12] == 'r') {
return Parser::T_SAMPLERBUFFER | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify14(const char *s) {
if (s[0] == 'i') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'R') {
if (s[11] == 'e') {
if (s[12] == 'c') {
if (s[13] == 't') {
return Parser::T_ISAMPLER2DRECT | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
else if (s[8] == 'B') {
if (s[9] == 'u') {
if (s[10] == 'f') {
if (s[11] == 'f') {
if (s[12] == 'e') {
if (s[13] == 'r') {
return Parser::T_ISAMPLERBUFFER | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '1') {
if (s[8] == 'D') {
if (s[9] == 'A') {
if (s[10] == 'r') {
if (s[11] == 'r') {
if (s[12] == 'a') {
if (s[13] == 'y') {
return Parser::T_SAMPLER1DARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
else if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'A') {
if (s[10] == 'r') {
if (s[11] == 'r') {
if (s[12] == 'a') {
if (s[13] == 'y') {
return Parser::T_SAMPLER2DARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'R') {
if (s[11] == 'e') {
if (s[12] == 'c') {
if (s[13] == 't') {
return Parser::T_USAMPLER2DRECT | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
else if (s[8] == 'B') {
if (s[9] == 'u') {
if (s[10] == 'f') {
if (s[11] == 'f') {
if (s[12] == 'e') {
if (s[13] == 'r') {
return Parser::T_USAMPLERBUFFER | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify15(const char *s) {
if (s[0] == 'i') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '1') {
if (s[9] == 'D') {
if (s[10] == 'A') {
if (s[11] == 'r') {
if (s[12] == 'r') {
if (s[13] == 'a') {
if (s[14] == 'y') {
return Parser::T_ISAMPLER1DARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
else if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'A') {
if (s[11] == 'r') {
if (s[12] == 'r') {
if (s[13] == 'a') {
if (s[14] == 'y') {
return Parser::T_ISAMPLER2DARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '1') {
if (s[8] == 'D') {
if (s[9] == 'S') {
if (s[10] == 'h') {
if (s[11] == 'a') {
if (s[12] == 'd') {
if (s[13] == 'o') {
if (s[14] == 'w') {
return Parser::T_SAMPLER1DSHADOW | Lexer::Variant_GLSL_120;
}
}
}
}
}
}
}
}
else if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'S') {
if (s[10] == 'h') {
if (s[11] == 'a') {
if (s[12] == 'd') {
if (s[13] == 'o') {
if (s[14] == 'w') {
return Parser::T_SAMPLER2DSHADOW | Lexer::Variant_GLSL_120;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '1') {
if (s[9] == 'D') {
if (s[10] == 'A') {
if (s[11] == 'r') {
if (s[12] == 'r') {
if (s[13] == 'a') {
if (s[14] == 'y') {
return Parser::T_USAMPLER1DARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
else if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'A') {
if (s[11] == 'r') {
if (s[12] == 'r') {
if (s[13] == 'a') {
if (s[14] == 'y') {
return Parser::T_USAMPLER2DARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify16(const char *s) {
if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'M') {
if (s[10] == 'S') {
if (s[11] == 'A') {
if (s[12] == 'r') {
if (s[13] == 'r') {
if (s[14] == 'a') {
if (s[15] == 'y') {
return Parser::T_SAMPLER2DMSARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
else if (s[7] == 'C') {
if (s[8] == 'u') {
if (s[9] == 'b') {
if (s[10] == 'e') {
if (s[11] == 'A') {
if (s[12] == 'r') {
if (s[13] == 'r') {
if (s[14] == 'a') {
if (s[15] == 'y') {
return Parser::T_SAMPLERCUBEARRAY | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify17(const char *s) {
if (s[0] == 'i') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'M') {
if (s[11] == 'S') {
if (s[12] == 'A') {
if (s[13] == 'r') {
if (s[14] == 'r') {
if (s[15] == 'a') {
if (s[16] == 'y') {
return Parser::T_ISAMPLER2DMSARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
else if (s[8] == 'C') {
if (s[9] == 'u') {
if (s[10] == 'b') {
if (s[11] == 'e') {
if (s[12] == 'A') {
if (s[13] == 'r') {
if (s[14] == 'r') {
if (s[15] == 'a') {
if (s[16] == 'y') {
return Parser::T_ISAMPLERCUBEARRAY | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == 'C') {
if (s[8] == 'u') {
if (s[9] == 'b') {
if (s[10] == 'e') {
if (s[11] == 'S') {
if (s[12] == 'h') {
if (s[13] == 'a') {
if (s[14] == 'd') {
if (s[15] == 'o') {
if (s[16] == 'w') {
return Parser::T_SAMPLERCUBESHADOW | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[0] == 'u') {
if (s[1] == 's') {
if (s[2] == 'a') {
if (s[3] == 'm') {
if (s[4] == 'p') {
if (s[5] == 'l') {
if (s[6] == 'e') {
if (s[7] == 'r') {
if (s[8] == '2') {
if (s[9] == 'D') {
if (s[10] == 'M') {
if (s[11] == 'S') {
if (s[12] == 'a') {
if (s[13] == 'r') {
if (s[14] == 'r') {
if (s[15] == 'a') {
if (s[16] == 'y') {
return Parser::T_USAMPLER2DMSARRAY | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
else if (s[8] == 'C') {
if (s[9] == 'u') {
if (s[10] == 'b') {
if (s[11] == 'e') {
if (s[12] == 'A') {
if (s[13] == 'r') {
if (s[14] == 'r') {
if (s[15] == 'a') {
if (s[16] == 'y') {
return Parser::T_USAMPLERCUBEARRAY | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify19(const char *s) {
if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'R') {
if (s[10] == 'e') {
if (s[11] == 'c') {
if (s[12] == 't') {
if (s[13] == 'S') {
if (s[14] == 'h') {
if (s[15] == 'a') {
if (s[16] == 'd') {
if (s[17] == 'o') {
if (s[18] == 'w') {
return Parser::T_SAMPLER2DRECTSHADOW;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify20(const char *s) {
if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == '1') {
if (s[8] == 'D') {
if (s[9] == 'A') {
if (s[10] == 'r') {
if (s[11] == 'r') {
if (s[12] == 'a') {
if (s[13] == 'y') {
if (s[14] == 'S') {
if (s[15] == 'h') {
if (s[16] == 'a') {
if (s[17] == 'd') {
if (s[18] == 'o') {
if (s[19] == 'w') {
return Parser::T_SAMPLER1DARRAYSHADOW | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
else if (s[7] == '2') {
if (s[8] == 'D') {
if (s[9] == 'A') {
if (s[10] == 'r') {
if (s[11] == 'r') {
if (s[12] == 'a') {
if (s[13] == 'y') {
if (s[14] == 'S') {
if (s[15] == 'h') {
if (s[16] == 'a') {
if (s[17] == 'd') {
if (s[18] == 'o') {
if (s[19] == 'w') {
return Parser::T_SAMPLER2DARRAYSHADOW | Lexer::Variant_GLSL_150;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
static inline int classify22(const char *s) {
if (s[0] == 's') {
if (s[1] == 'a') {
if (s[2] == 'm') {
if (s[3] == 'p') {
if (s[4] == 'l') {
if (s[5] == 'e') {
if (s[6] == 'r') {
if (s[7] == 'C') {
if (s[8] == 'u') {
if (s[9] == 'b') {
if (s[10] == 'e') {
if (s[11] == 'A') {
if (s[12] == 'r') {
if (s[13] == 'r') {
if (s[14] == 'a') {
if (s[15] == 'y') {
if (s[16] == 'S') {
if (s[17] == 'h') {
if (s[18] == 'a') {
if (s[19] == 'd') {
if (s[20] == 'o') {
if (s[21] == 'w') {
return Parser::T_SAMPLERCUBEARRAYSHADOW | Lexer::Variant_GLSL_400;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return Parser::T_IDENTIFIER;
}
int Lexer::classify(const char *s, int n) {
switch (n) {
case 2: return classify2(s);
case 3: return classify3(s);
case 4: return classify4(s);
case 5: return classify5(s);
case 6: return classify6(s);
case 7: return classify7(s);
case 8: return classify8(s);
case 9: return classify9(s);
case 10: return classify10(s);
case 11: return classify11(s);
case 12: return classify12(s);
case 13: return classify13(s);
case 14: return classify14(s);
case 15: return classify15(s);
case 16: return classify16(s);
case 17: return classify17(s);
case 19: return classify19(s);
case 20: return classify20(s);
case 22: return classify22(s);
default: return Parser::T_IDENTIFIER;
} // switch
}
QStringList Lexer::keywords(int variant) {
QStringList list;
list += QLatin1String("do");
list += QLatin1String("if");
list += QLatin1String("in");
list += QLatin1String("for");
list += QLatin1String("int");
list += QLatin1String("out");
list += QLatin1String("bool");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("case");
list += QLatin1String("else");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("flat");
if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400))
list += QLatin1String("lowp");
list += QLatin1String("mat2");
list += QLatin1String("mat3");
list += QLatin1String("mat4");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("uint");
list += QLatin1String("vec2");
list += QLatin1String("vec3");
list += QLatin1String("vec4");
list += QLatin1String("void");
list += QLatin1String("true");
list += QLatin1String("break");
list += QLatin1String("bvec2");
list += QLatin1String("bvec3");
list += QLatin1String("bvec4");
list += QLatin1String("const");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat2");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat3");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat4");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dvec2");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dvec3");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dvec4");
list += QLatin1String("float");
if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400))
list += QLatin1String("highp");
list += QLatin1String("inout");
list += QLatin1String("ivec2");
list += QLatin1String("ivec3");
list += QLatin1String("ivec4");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("patch");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("uvec2");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("uvec3");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("uvec4");
list += QLatin1String("while");
list += QLatin1String("false");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("double");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("layout");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat2x2");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat2x3");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat2x4");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat3x2");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat3x3");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat3x4");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat4x2");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat4x3");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("mat4x4");
list += QLatin1String("return");
if (variant & (Lexer::Variant_Reserved))
list += QLatin1String("sample");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("smooth");
list += QLatin1String("struct");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("switch");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("default");
if (variant & (Lexer::Variant_FragmentShader))
list += QLatin1String("discard");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat2x2");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat2x3");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat2x4");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat3x2");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat3x3");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat3x4");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat4x2");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat4x3");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("dmat4x4");
if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400))
list += QLatin1String("mediump");
list += QLatin1String("uniform");
list += QLatin1String("varying");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("centroid");
list += QLatin1String("continue");
if (variant & (Lexer::Variant_VertexShader))
list += QLatin1String("attribute");
list += QLatin1String("invariant");
if (variant & (Lexer::Variant_GLSL_ES_100))
list += QLatin1String("precision");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("sampler1D");
list += QLatin1String("sampler2D");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("sampler3D");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler1D");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler2D");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler3D");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("subroutine");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler1D");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler2D");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler3D");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("sampler2DMS");
list += QLatin1String("samplerCube");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler2DMS");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isamplerCube");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler2DMS");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usamplerCube");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("noperspective");
list += QLatin1String("sampler2DRect");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("samplerBuffer");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler2DRect");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isamplerBuffer");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("sampler1DArray");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("sampler2DArray");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler2DRect");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usamplerBuffer");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler1DArray");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler2DArray");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("sampler1DShadow");
if (variant & (Lexer::Variant_GLSL_120))
list += QLatin1String("sampler2DShadow");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler1DArray");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler2DArray");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("sampler2DMSArray");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("samplerCubeArray");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("isampler2DMSArray");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("isamplerCubeArray");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("samplerCubeShadow");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("usampler2DMSarray");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("usamplerCubeArray");
list += QLatin1String("sampler2DRectShadow");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("sampler1DArrayShadow");
if (variant & (Lexer::Variant_GLSL_150))
list += QLatin1String("sampler2DArrayShadow");
if (variant & (Lexer::Variant_GLSL_400))
list += QLatin1String("samplerCubeArrayShadow");
return list;
}
QT_END_NAMESPACE