diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/glslang.l')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/glslang.l | 697 |
1 files changed, 0 insertions, 697 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/glslang.l b/src/3rdparty/angle/src/compiler/translator/glslang.l deleted file mode 100644 index 858ffd96bb..0000000000 --- a/src/3rdparty/angle/src/compiler/translator/glslang.l +++ /dev/null @@ -1,697 +0,0 @@ -/* -// -// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// - -This file contains the Lex specification for GLSL ES. -Based on ANSI C grammar, Lex specification: -http://www.lysator.liu.se/c/ANSI-C-grammar-l.html - -IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh, -WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp). -*/ - -%top{ -// -// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// - -// This file is auto-generated by generate_parser.sh. DO NOT EDIT! - -/* clang-format off */ - -// Ignore errors in auto-generated code. -#if defined(__GNUC__) -#pragma GCC diagnostic ignored "-Wunused-function" -#pragma GCC diagnostic ignored "-Wunused-variable" -#pragma GCC diagnostic ignored "-Wswitch-enum" -#elif defined(_MSC_VER) -#pragma warning(disable: 4005) -#pragma warning(disable: 4065) -#pragma warning(disable: 4189) -#pragma warning(disable: 4244) -#pragma warning(disable: 4505) -#pragma warning(disable: 4701) -#pragma warning(disable: 4702) -#endif -} - -%{ -#include "compiler/translator/glslang.h" -#include "compiler/translator/ParseContext.h" -#include "compiler/preprocessor/Token.h" -#include "compiler/translator/util.h" -#include "compiler/translator/length_limits.h" - -using namespace sh; - -#include "glslang_tab.h" - -/* windows only pragma */ -#ifdef _MSC_VER -#pragma warning(disable : 4102) -#endif - -// Workaround for flex using the register keyword, deprecated in C++11. -#ifdef __cplusplus -#if __cplusplus > 199711L -#define register -#endif -#endif - -#define YY_USER_ACTION \ - yylloc->first_file = yylloc->last_file = yycolumn; \ - yylloc->first_line = yylloc->last_line = yylineno; - -#define YY_INPUT(buf, result, max_size) \ - result = string_input(buf, max_size, yyscanner); - -static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner); -static int check_type(yyscan_t yyscanner); -static int reserved_word(yyscan_t yyscanner); -static int ES2_reserved_ES3_keyword(TParseContext *context, int token); -static int ES2_keyword_ES3_reserved(TParseContext *context, int token); -static int ES2_ident_ES3_keyword(TParseContext *context, int token); -static int ES2_ident_ES3_keyword_multiview_keyword(TParseContext *context, int token); -static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token); -static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token); -static int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token); -static int ES3_extension_keyword_else_ident(TParseContext *context, TExtension extension, int token); -static int uint_constant(TParseContext *context); -static int int_constant(TParseContext *context); -static int float_constant(yyscan_t yyscanner); -static int floatsuffix_check(TParseContext* context); -static int yuvcscstandardext_constant(TParseContext *context); -%} - -%option noyywrap nounput never-interactive -%option yylineno reentrant bison-bridge bison-locations -%option extra-type="TParseContext*" -%x FIELDS - -D [0-9] -L [a-zA-Z_] -H [a-fA-F0-9] -E [Ee][+-]?{D}+ -O [0-7] - -%% - -%{ - TParseContext* context = yyextra; -%} - -"invariant" { return INVARIANT; } -"highp" { return HIGH_PRECISION; } -"mediump" { return MEDIUM_PRECISION; } -"lowp" { return LOW_PRECISION; } -"precision" { return PRECISION; } - -"attribute" { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); } -"const" { return CONST_QUAL; } -"uniform" { return UNIFORM; } -"buffer" { return ES2_and_ES3_ident_ES3_1_keyword(context, BUFFER); } -"varying" { return ES2_keyword_ES3_reserved(context, VARYING); } - -"break" { return BREAK; } -"continue" { return CONTINUE; } -"do" { return DO; } -"for" { return FOR; } -"while" { return WHILE; } - -"if" { return IF; } -"else" { return ELSE; } -"switch" { return ES2_reserved_ES3_keyword(context, SWITCH); } -"case" { return ES2_ident_ES3_keyword(context, CASE); } -"default" { return ES2_reserved_ES3_keyword(context, DEFAULT); } - -"centroid" { return ES2_ident_ES3_keyword(context, CENTROID); } -"flat" { return ES2_reserved_ES3_keyword(context, FLAT); } -"smooth" { return ES2_ident_ES3_keyword(context, SMOOTH); } - -"in" { return IN_QUAL; } -"out" { return OUT_QUAL; } -"inout" { return INOUT_QUAL; } -"shared" { return ES2_and_ES3_ident_ES3_1_keyword(context, SHARED); } - -"float" { return FLOAT_TYPE; } -"int" { return INT_TYPE; } -"uint" { return ES2_ident_ES3_keyword(context, UINT_TYPE); } -"void" { return VOID_TYPE; } -"bool" { return BOOL_TYPE; } -"true" { yylval->lex.b = true; return BOOLCONSTANT; } -"false" { yylval->lex.b = false; return BOOLCONSTANT; } - -"discard" { return DISCARD; } -"return" { return RETURN; } - -"mat2" { return MATRIX2; } -"mat3" { return MATRIX3; } -"mat4" { return MATRIX4; } - -"mat2x2" { return ES2_ident_ES3_keyword(context, MATRIX2); } -"mat3x3" { return ES2_ident_ES3_keyword(context, MATRIX3); } -"mat4x4" { return ES2_ident_ES3_keyword(context, MATRIX4); } - -"mat2x3" { return ES2_ident_ES3_keyword(context, MATRIX2x3); } -"mat3x2" { return ES2_ident_ES3_keyword(context, MATRIX3x2); } -"mat2x4" { return ES2_ident_ES3_keyword(context, MATRIX2x4); } -"mat4x2" { return ES2_ident_ES3_keyword(context, MATRIX4x2); } -"mat3x4" { return ES2_ident_ES3_keyword(context, MATRIX3x4); } -"mat4x3" { return ES2_ident_ES3_keyword(context, MATRIX4x3); } - -"vec2" { return VEC2; } -"vec3" { return VEC3; } -"vec4" { return VEC4; } -"ivec2" { return IVEC2; } -"ivec3" { return IVEC3; } -"ivec4" { return IVEC4; } -"bvec2" { return BVEC2; } -"bvec3" { return BVEC3; } -"bvec4" { return BVEC4; } -"uvec2" { return ES2_ident_ES3_keyword(context, UVEC2); } -"uvec3" { return ES2_ident_ES3_keyword(context, UVEC3); } -"uvec4" { return ES2_ident_ES3_keyword(context, UVEC4); } - -"sampler2D" { return SAMPLER2D; } -"samplerCube" { return SAMPLERCUBE; } -"samplerExternalOES" { return SAMPLER_EXTERNAL_OES; } -"sampler3D" { return ES2_reserved_ES3_keyword(context, SAMPLER3D); } -"sampler3DRect" { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); } -"sampler2DRect" { return SAMPLER2DRECT; } -"sampler2DArray" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); } -"sampler2DMS" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, SAMPLER2DMS); } -"isampler2D" { return ES2_ident_ES3_keyword(context, ISAMPLER2D); } -"isampler3D" { return ES2_ident_ES3_keyword(context, ISAMPLER3D); } -"isamplerCube" { return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); } -"isampler2DArray" { return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); } -"isampler2DMS" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, ISAMPLER2DMS); } -"usampler2D" { return ES2_ident_ES3_keyword(context, USAMPLER2D); } -"usampler3D" { return ES2_ident_ES3_keyword(context, USAMPLER3D); } -"usamplerCube" { return ES2_ident_ES3_keyword(context, USAMPLERCUBE); } -"usampler2DArray" { return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); } -"usampler2DMS" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, USAMPLER2DMS); } -"sampler2DShadow" { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); } -"samplerCubeShadow" { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); } -"sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); } -"__samplerExternal2DY2YEXT" { return ES3_extension_keyword_else_ident(context, TExtension::EXT_YUV_target, SAMPLEREXTERNAL2DY2YEXT); } - -"struct" { return STRUCT; } - -"layout" { return ES2_ident_ES3_keyword_multiview_keyword(context, LAYOUT); } - -"yuvCscStandardEXT" { return ES3_extension_keyword_else_ident(context, TExtension::EXT_YUV_target, YUVCSCSTANDARDEXT); } -"itu_601" { return yuvcscstandardext_constant(context); } -"itu_601_full_range" { return yuvcscstandardext_constant(context); } -"itu_709" { return yuvcscstandardext_constant(context); } - -"image2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); } -"iimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); } -"uimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); } -"image2DArray" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); } -"iimage2DArray" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); } -"uimage2DArray" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); } -"image3D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); } -"uimage3D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); } -"iimage3D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); } -"iimageCube" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); } -"uimageCube" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); } -"imageCube" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); } -"readonly" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); } -"writeonly" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); } -"coherent" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); } -"restrict" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); } -"volatile" { return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); } -"atomic_uint" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, ATOMICUINT); } - - /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */ -"resource" | -"noperspective" | -"patch" | -"sample" | -"subroutine" | -"common" | -"partition" | -"active" | - -"filter" | -"image1D" | -"iimage1D" | -"uimage1D" | -"image1DArray" | -"iimage1DArray" | -"uimage1DArray" | -"image1DShadow" | -"image2DShadow" | -"image1DArrayShadow" | -"image2DArrayShadow" | -"imageBuffer" | -"iimageBuffer" | -"uimageBuffer" | - -"sampler1DArray" | -"sampler1DArrayShadow" | -"isampler1D" | -"isampler1DArray" | -"usampler1D" | -"usampler1DArray" | -"isampler2DRect" | -"usampler2DRect" | -"samplerBuffer" | -"isamplerBuffer" | -"usamplerBuffer" | -"sampler2DMSArray" | -"isampler2DMSArray" | -"usampler2DMSArray" { - if (context->getShaderVersion() < 300) { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); - } - return reserved_word(yyscanner); -} - - /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */ -"packed" { - if (context->getShaderVersion() >= 300) - { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); - } - - return reserved_word(yyscanner); -} - - /* Reserved keywords */ -"asm" | - -"class" | -"union" | -"enum" | -"typedef" | -"template" | -"this" | - -"goto" | - -"inline" | -"noinline" | -"public" | -"static" | -"extern" | -"external" | -"interface" | - -"long" | -"short" | -"double" | -"half" | -"fixed" | -"unsigned" | -"superp" | - -"input" | -"output" | - -"hvec2" | -"hvec3" | -"hvec4" | -"dvec2" | -"dvec3" | -"dvec4" | -"fvec2" | -"fvec3" | -"fvec4" | - -"sampler1D" | -"sampler1DShadow" | -"sampler2DRectShadow" | - -"sizeof" | -"cast" | - -"namespace" | -"using" { return reserved_word(yyscanner); } - -{L}({L}|{D})* { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); -} - -0[xX]{H}+ { return int_constant(context); } -0{O}+ { return int_constant(context); } -{D}+ { return int_constant(context); } - -0[xX]{H}+[uU] { return uint_constant(context); } -0{O}+[uU] { return uint_constant(context); } -{D}+[uU] { return uint_constant(context); } - -{D}+{E} { return float_constant(yyscanner); } -{D}+"."{D}*({E})? { return float_constant(yyscanner); } -"."{D}+({E})? { return float_constant(yyscanner); } - -{D}+{E}[fF] { return floatsuffix_check(context); } -{D}+"."{D}*({E})?[fF] { return floatsuffix_check(context); } -"."{D}+({E})?[fF] { return floatsuffix_check(context); } - -"+=" { return ADD_ASSIGN; } -"-=" { return SUB_ASSIGN; } -"*=" { return MUL_ASSIGN; } -"/=" { return DIV_ASSIGN; } -"%=" { return MOD_ASSIGN; } -"<<=" { return LEFT_ASSIGN; } -">>=" { return RIGHT_ASSIGN; } -"&=" { return AND_ASSIGN; } -"^=" { return XOR_ASSIGN; } -"|=" { return OR_ASSIGN; } - -"++" { return INC_OP; } -"--" { return DEC_OP; } -"&&" { return AND_OP; } -"||" { return OR_OP; } -"^^" { return XOR_OP; } -"<=" { return LE_OP; } -">=" { return GE_OP; } -"==" { return EQ_OP; } -"!=" { return NE_OP; } -"<<" { return LEFT_OP; } -">>" { return RIGHT_OP; } -";" { return SEMICOLON; } -("{"|"<%") { return LEFT_BRACE; } -("}"|"%>") { return RIGHT_BRACE; } -"," { return COMMA; } -":" { return COLON; } -"=" { return EQUAL; } -"(" { return LEFT_PAREN; } -")" { return RIGHT_PAREN; } -("["|"<:") { return LEFT_BRACKET; } -("]"|":>") { return RIGHT_BRACKET; } -"." { BEGIN(FIELDS); return DOT; } -"!" { return BANG; } -"-" { return DASH; } -"~" { return TILDE; } -"+" { return PLUS; } -"*" { return STAR; } -"/" { return SLASH; } -"%" { return PERCENT; } -"<" { return LEFT_ANGLE; } -">" { return RIGHT_ANGLE; } -"|" { return VERTICAL_BAR; } -"^" { return CARET; } -"&" { return AMPERSAND; } -"?" { return QUESTION; } - -<FIELDS>{L}({L}|{D})* { - BEGIN(INITIAL); - yylval->lex.string = NewPoolTString(yytext); - return FIELD_SELECTION; -} -<FIELDS>[ \t\v\f\r] {} -<FIELDS>. { - yyextra->error(*yylloc, "Illegal character at fieldname start", yytext); - return 0; -} - -[ \t\v\n\f\r] { } -<*><<EOF>> { yyterminate(); } -<*>. { assert(false); return 0; } - -%% - -yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) { - pp::Token token; - yyget_extra(yyscanner)->getPreprocessor().lex(&token); - yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size(); - if (len < max_size) - memcpy(buf, token.text.c_str(), len); - yyset_column(token.location.file, yyscanner); - yyset_lineno(token.location.line, yyscanner); - - if (len >= max_size) - YY_FATAL_ERROR("Input buffer overflow"); - else if (len > 0) - buf[len++] = ' '; - return len; -} - -int check_type(yyscan_t yyscanner) { - struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; - - int token = IDENTIFIER; - TSymbol* symbol = yyextra->symbolTable.find(yytext, yyextra->getShaderVersion()); - if (symbol && symbol->isVariable()) { - TVariable* variable = static_cast<TVariable*>(symbol); - if (variable->isUserType()) { - token = TYPE_NAME; - } - } - yylval->lex.symbol = symbol; - return token; -} - -int reserved_word(yyscan_t yyscanner) { - struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; - - yyextra->error(*yylloc, "Illegal use of reserved word", yytext); - return 0; -} - -int ES2_reserved_ES3_keyword(TParseContext *context, int token) -{ - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - if (context->getShaderVersion() < 300) - { - return reserved_word(yyscanner); - } - - return token; -} - -int ES2_keyword_ES3_reserved(TParseContext *context, int token) -{ - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - if (context->getShaderVersion() >= 300) - { - return reserved_word(yyscanner); - } - - return token; -} - -int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - if (context->getShaderVersion() < 300) - { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); - } - else if (context->getShaderVersion() == 300) - { - return reserved_word(yyscanner); - } - - return token; -} - -int ES2_ident_ES3_keyword(TParseContext *context, int token) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name - if (context->getShaderVersion() < 300) - { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); - } - - return token; -} - -int ES2_ident_ES3_keyword_multiview_keyword(TParseContext *context, int token) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name - // except when multiview extension is enabled - if (context->getShaderVersion() < 300 && !context->isExtensionEnabled(TExtension::OVR_multiview)) - { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); - } - - return token; -} - -int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token) -{ - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - if (context->getShaderVersion() < 310) - { - return reserved_word(yyscanner); - } - - return token; -} - -int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - // not a reserved word in GLSL ES 1.00 and GLSL ES 3.00, so could be used as an identifier/type name - if (context->getShaderVersion() < 310) - { - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); - } - - return token; -} - -int ES3_extension_keyword_else_ident(TParseContext *context, TExtension extension, int token) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - // a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name - if (context->getShaderVersion() >= 300 && context->isExtensionEnabled(extension)) - { - return token; - } - - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); -} - -int uint_constant(TParseContext *context) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - - if (context->getShaderVersion() < 300) - { - context->error(*yylloc, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext); - return 0; - } - - if (!atoi_clamp(yytext, &(yylval->lex.u))) - yyextra->error(*yylloc, "Integer overflow", yytext); - - return UINTCONSTANT; -} - -int floatsuffix_check(TParseContext* context) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - - if (context->getShaderVersion() < 300) - { - context->error(*yylloc, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext); - return 0; - } - - std::string text = yytext; - text.resize(text.size() - 1); - if (!strtof_clamp(text, &(yylval->lex.f))) - yyextra->warning(*yylloc, "Float overflow", yytext); - - return(FLOATCONSTANT); -} - -void yyerror(YYLTYPE* lloc, TParseContext* context, void *scanner, const char* reason) { - context->error(*lloc, reason, yyget_text(scanner)); -} - -int int_constant(TParseContext *context) { - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - - unsigned int u; - if (!atoi_clamp(yytext, &u)) - { - if (context->getShaderVersion() >= 300) - yyextra->error(*yylloc, "Integer overflow", yytext); - else - yyextra->warning(*yylloc, "Integer overflow", yytext); - } - yylval->lex.i = static_cast<int>(u); - return INTCONSTANT; -} - -int float_constant(yyscan_t yyscanner) { - struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; - - if (!strtof_clamp(yytext, &(yylval->lex.f))) - yyextra->warning(*yylloc, "Float overflow", yytext); - return FLOATCONSTANT; -} - -int yuvcscstandardext_constant(TParseContext *context) -{ - struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); - yyscan_t yyscanner = (yyscan_t) context->getScanner(); - - // a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name - if (context->getShaderVersion() >= 300 && context->isExtensionEnabled(TExtension::EXT_YUV_target)) - { - yylval->lex.string = NewPoolTString(yytext); - return YUVCSCSTANDARDEXTCONSTANT; - } - - yylval->lex.string = NewPoolTString(yytext); - return check_type(yyscanner); -} - -int glslang_initialize(TParseContext* context) { - yyscan_t scanner = NULL; - if (yylex_init_extra(context, &scanner)) - return 1; - - context->setScanner(scanner); - return 0; -} - -int glslang_finalize(TParseContext* context) { - yyscan_t scanner = context->getScanner(); - if (scanner == NULL) return 0; - - context->setScanner(NULL); - yylex_destroy(scanner); - - return 0; -} - -int glslang_scan(size_t count, const char* const string[], const int length[], - TParseContext* context) { - yyrestart(NULL, context->getScanner()); - yyset_column(0, context->getScanner()); - yyset_lineno(1, context->getScanner()); - - // Initialize preprocessor. - pp::Preprocessor *preprocessor = &context->getPreprocessor(); - - if (!preprocessor->init(count, string, length)) - return 1; - - // Define extension macros. - const TExtensionBehavior& extBehavior = context->extensionBehavior(); - for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); - iter != extBehavior.end(); ++iter) { - preprocessor->predefineMacro(GetExtensionNameString(iter->first), 1); - } - if (context->getFragmentPrecisionHigh()) - preprocessor->predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1); - - preprocessor->setMaxTokenSize(sh::GetGlobalMaxTokenSize(context->getShaderSpec())); - - return 0; -} |