14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com/* 24f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 3beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgThis file contains the Lex specification for GLSL ES. 9044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgBased on ANSI C grammar, Lex specification: 10044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orghttp://www.lysator.liu.se/c/ANSI-C-grammar-l.html 114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1275fe6b76d27174fd42ae4235df11a009bb3ed36dalokp@chromium.orgIF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh, 13044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgWHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp). 144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com*/ 154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 16044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%top{ 17044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org// 18beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 19044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be 20044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org// found in the LICENSE file. 21044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org// 224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2375fe6b76d27174fd42ae4235df11a009bb3ed36dalokp@chromium.org// This file is auto-generated by generate_parser.sh. DO NOT EDIT! 24536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org 25536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org// Ignore errors in auto-generated code. 26536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org#if defined(__GNUC__) 27a1d8059d676046ff9a35e15341866f1e93944132apatrick@chromium.org#pragma GCC diagnostic ignored "-Wunused-function" 28536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org#pragma GCC diagnostic ignored "-Wunused-variable" 29e057c5dd6e234c6edd8b80537ccb753b6c1eb343apatrick@chromium.org#pragma GCC diagnostic ignored "-Wswitch-enum" 30536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org#elif defined(_MSC_VER) 31536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org#pragma warning(disable: 4065) 32a1d8059d676046ff9a35e15341866f1e93944132apatrick@chromium.org#pragma warning(disable: 4189) 33a1d8059d676046ff9a35e15341866f1e93944132apatrick@chromium.org#pragma warning(disable: 4505) 34a1d8059d676046ff9a35e15341866f1e93944132apatrick@chromium.org#pragma warning(disable: 4701) 35536888b8718e3451e0c5fb964a9c4b682f4950b3apatrick@chromium.org#endif 36044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org} 37eab1ef126b3118ac06b715e236f6b805f668b46dalokp@chromium.org 38044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%{ 39044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org#include "compiler/glslang.h" 405625f658834c52906439ec34613906f2116884dbJamie Madill#include "compiler/ParseContext.h" 41b401a92b48599a64cbb44e463aef1b2976b3fbf8daniel@transgaming.com#include "compiler/preprocessor/Token.h" 4291ed14949eb43404b90e4315835e8e851275e187daniel@transgaming.com#include "compiler/util.h" 43eab1ef126b3118ac06b715e236f6b805f668b46dalokp@chromium.org#include "glslang_tab.h" 444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com/* windows only pragma */ 464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#ifdef _MSC_VER 474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#pragma warning(disable : 4102) 484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif 494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 50b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org#define YY_USER_ACTION \ 51b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yylloc->first_file = yylloc->last_file = yycolumn; \ 52b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yylloc->first_line = yylloc->last_line = yylineno; 53b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org 54044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org#define YY_INPUT(buf, result, max_size) \ 55044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org result = string_input(buf, max_size, yyscanner); 564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 57d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.comstatic yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner); 58044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgstatic int check_type(yyscan_t yyscanner); 59044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgstatic int reserved_word(yyscan_t yyscanner); 60521c8364151945482e25f6dba76d28ea296211cbZhenyao Mostatic int int_constant(yyscan_t yyscanner); 61521c8364151945482e25f6dba76d28ea296211cbZhenyao Mostatic int float_constant(yyscan_t yyscanner); 624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com%} 634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 64044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%option noyywrap nounput never-interactive 65b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org%option yylineno reentrant bison-bridge bison-locations 66044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%option extra-type="TParseContext*" 674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 68044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgD [0-9] 69044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgL [a-zA-Z_] 70044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgH [a-fA-F0-9] 71044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgE [Ee][+-]?{D}+ 72044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgO [0-7] 734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com%% 75044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 760428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"invariant" { return INVARIANT; } 770428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"highp" { return HIGH_PRECISION; } 780428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"mediump" { return MEDIUM_PRECISION; } 790428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"lowp" { return LOW_PRECISION; } 800428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"precision" { return PRECISION; } 810428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 820428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"attribute" { return ATTRIBUTE; } 830428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"const" { return CONST_QUAL; } 840428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"uniform" { return UNIFORM; } 850428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"varying" { return VARYING; } 860428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 870428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"break" { return BREAK; } 880428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"continue" { return CONTINUE; } 890428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"do" { return DO; } 900428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"for" { return FOR; } 910428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"while" { return WHILE; } 920428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 930428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"if" { return IF; } 940428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"else" { return ELSE; } 950428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 960428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"in" { return IN_QUAL; } 970428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"out" { return OUT_QUAL; } 980428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"inout" { return INOUT_QUAL; } 990428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 100211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"float" { return FLOAT_TYPE; } 101211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"int" { return INT_TYPE; } 102211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"void" { return VOID_TYPE; } 103211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"bool" { return BOOL_TYPE; } 1040428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"true" { yylval->lex.b = true; return BOOLCONSTANT; } 1050428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"false" { yylval->lex.b = false; return BOOLCONSTANT; } 1060428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 1070428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"discard" { return DISCARD; } 1080428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"return" { return RETURN; } 1090428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 110211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"mat2" { return MATRIX2; } 111211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"mat3" { return MATRIX3; } 112211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"mat4" { return MATRIX4; } 1130428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 114211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"vec2" { return VEC2; } 115211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"vec3" { return VEC3; } 116211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"vec4" { return VEC4; } 117211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"ivec2" { return IVEC2; } 118211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"ivec3" { return IVEC3; } 119211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"ivec4" { return IVEC4; } 120211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"bvec2" { return BVEC2; } 121211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"bvec3" { return BVEC3; } 122211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"bvec4" { return BVEC4; } 1230428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 124211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"sampler2D" { return SAMPLER2D; } 125211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"samplerCube" { return SAMPLERCUBE; } 126211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"samplerExternalOES" { return SAMPLER_EXTERNAL_OES; } 127211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"sampler2DRect" { return SAMPLER2DRECT; } 128044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 129211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"struct" { return STRUCT; } 130044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 131044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"asm" { return reserved_word(yyscanner); } 132044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 133044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"class" { return reserved_word(yyscanner); } 134044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"union" { return reserved_word(yyscanner); } 135044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"enum" { return reserved_word(yyscanner); } 136044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"typedef" { return reserved_word(yyscanner); } 137044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"template" { return reserved_word(yyscanner); } 138044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"this" { return reserved_word(yyscanner); } 139044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"packed" { return reserved_word(yyscanner); } 140044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 141044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"goto" { return reserved_word(yyscanner); } 142044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"switch" { return reserved_word(yyscanner); } 143044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"default" { return reserved_word(yyscanner); } 144044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 145044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"inline" { return reserved_word(yyscanner); } 146044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"noinline" { return reserved_word(yyscanner); } 147044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"volatile" { return reserved_word(yyscanner); } 148044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"public" { return reserved_word(yyscanner); } 149044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"static" { return reserved_word(yyscanner); } 150044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"extern" { return reserved_word(yyscanner); } 151044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"external" { return reserved_word(yyscanner); } 152044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"interface" { return reserved_word(yyscanner); } 153beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com"flat" { return reserved_word(yyscanner); } 154044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 155044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"long" { return reserved_word(yyscanner); } 156044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"short" { return reserved_word(yyscanner); } 157044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"double" { return reserved_word(yyscanner); } 158044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"half" { return reserved_word(yyscanner); } 159044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"fixed" { return reserved_word(yyscanner); } 160044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"unsigned" { return reserved_word(yyscanner); } 161beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com"superp" { return reserved_word(yyscanner); } 162044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 163044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"input" { return reserved_word(yyscanner); } 164044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"output" { return reserved_word(yyscanner); } 165044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 166044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"hvec2" { return reserved_word(yyscanner); } 167044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"hvec3" { return reserved_word(yyscanner); } 168044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"hvec4" { return reserved_word(yyscanner); } 169044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"dvec2" { return reserved_word(yyscanner); } 170044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"dvec3" { return reserved_word(yyscanner); } 171044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"dvec4" { return reserved_word(yyscanner); } 172beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com"fvec2" { return reserved_word(yyscanner); } 173beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com"fvec3" { return reserved_word(yyscanner); } 174beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com"fvec4" { return reserved_word(yyscanner); } 175beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com 1760428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"sampler1D" { return reserved_word(yyscanner); } 1770428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"sampler3D" { return reserved_word(yyscanner); } 1780428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"sampler1DShadow" { return reserved_word(yyscanner); } 1790428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"sampler2DShadow" { return reserved_word(yyscanner); } 1800428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"sampler3DRect" { return reserved_word(yyscanner); } 181beadd5d20a789ca599d018a346d8af8402f237ffdaniel@transgaming.com"sampler2DRectShadow" { return reserved_word(yyscanner); } 182044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 183044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"sizeof" { return reserved_word(yyscanner); } 184044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"cast" { return reserved_word(yyscanner); } 185044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 186044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"namespace" { return reserved_word(yyscanner); } 187044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"using" { return reserved_word(yyscanner); } 188044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 189044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org{L}({L}|{D})* { 190044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org yylval->lex.string = NewPoolTString(yytext); 191044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org return check_type(yyscanner); 1924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 194521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo0[xX]{H}+ { return int_constant(yyscanner); } 195521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo0{O}+ { return int_constant(yyscanner); } 196521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo{D}+ { return int_constant(yyscanner); } 1970428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 198521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo{D}+{E} { return float_constant(yyscanner); } 199521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo{D}+"."{D}*({E})? { return float_constant(yyscanner); } 200521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo"."{D}+({E})? { return float_constant(yyscanner); } 2010428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 2020428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"+=" { return ADD_ASSIGN; } 2030428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"-=" { return SUB_ASSIGN; } 2040428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"*=" { return MUL_ASSIGN; } 2050428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"/=" { return DIV_ASSIGN; } 2060428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"%=" { return MOD_ASSIGN; } 2070428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"<<=" { return LEFT_ASSIGN; } 2080428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org">>=" { return RIGHT_ASSIGN; } 2090428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"&=" { return AND_ASSIGN; } 2100428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"^=" { return XOR_ASSIGN; } 2110428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"|=" { return OR_ASSIGN; } 2120428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org 2130428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"++" { return INC_OP; } 2140428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"--" { return DEC_OP; } 2150428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"&&" { return AND_OP; } 2160428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"||" { return OR_OP; } 2170428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"^^" { return XOR_OP; } 2180428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"<=" { return LE_OP; } 2190428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org">=" { return GE_OP; } 2200428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"==" { return EQ_OP; } 2210428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"!=" { return NE_OP; } 2220428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"<<" { return LEFT_OP; } 2230428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org">>" { return RIGHT_OP; } 224211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org";" { return SEMICOLON; } 225211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org("{"|"<%") { return LEFT_BRACE; } 2260428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org("}"|"%>") { return RIGHT_BRACE; } 227211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"," { return COMMA; } 2280428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org":" { return COLON; } 229211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"=" { return EQUAL; } 230211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org"(" { return LEFT_PAREN; } 231211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org")" { return RIGHT_PAREN; } 2320428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org("["|"<:") { return LEFT_BRACKET; } 2330428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org("]"|":>") { return RIGHT_BRACKET; } 23447fcd1defc3e5bbb51ddd73cb0441bb4ff0fd0d5shannonwoods@chromium.org"." { return DOT; } 2350428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"!" { return BANG; } 2360428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"-" { return DASH; } 2370428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"~" { return TILDE; } 2380428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"+" { return PLUS; } 2390428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"*" { return STAR; } 2400428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"/" { return SLASH; } 2410428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"%" { return PERCENT; } 2420428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"<" { return LEFT_ANGLE; } 2430428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org">" { return RIGHT_ANGLE; } 2440428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"|" { return VERTICAL_BAR; } 2450428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"^" { return CARET; } 2460428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"&" { return AMPERSAND; } 2470428c72ead7ae1fb19449c5d43638bfd1ff84cabshannonwoods@chromium.org"?" { return QUESTION; } 2484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 249e37bfa0f5573b106b3260c7cca214d6be73b411eshannonwoods@chromium.org[ \t\v\n\f\r] { } 25047fcd1defc3e5bbb51ddd73cb0441bb4ff0fd0d5shannonwoods@chromium.org<<EOF>> { yyterminate(); } 25147fcd1defc3e5bbb51ddd73cb0441bb4ff0fd0d5shannonwoods@chromium.org. { assert(false); return 0; } 2524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com%% 2544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 255d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.comyy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) { 25673bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org pp::Token token; 25773bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org yyget_extra(yyscanner)->preprocessor.lex(&token); 258d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size(); 259d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com if (len < max_size) 2605b6a68e04a7d27dab71524fa481f42818f84a240alokp@chromium.org memcpy(buf, token.text.c_str(), len); 261b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yyset_column(token.location.file, yyscanner); 262b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yyset_lineno(token.location.line, yyscanner); 26373bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org 26473bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org if (len >= max_size) 26573bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org YY_FATAL_ERROR("Input buffer overflow"); 26673bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org else if (len > 0) 26773bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org buf[len++] = ' '; 26873bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org return len; 269044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org} 270044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 271044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint check_type(yyscan_t yyscanner) { 272044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 273044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 274044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org int token = IDENTIFIER; 275044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org TSymbol* symbol = yyextra->symbolTable.find(yytext); 276211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org if (symbol && symbol->isVariable()) { 277044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org TVariable* variable = static_cast<TVariable*>(symbol); 278211dcd705cc4f6170e1c210b1a662f266016123eshannonwoods@chromium.org if (variable->isUserType()) 279044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org token = TYPE_NAME; 280044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org } 281044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org yylval->lex.symbol = symbol; 282044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org return token; 283044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org} 284044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 285044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint reserved_word(yyscan_t yyscanner) { 286044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 287044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 288b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yyextra->error(*yylloc, "Illegal use of reserved word", yytext, ""); 289044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org yyextra->recover(); 290044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org return 0; 2914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 292044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 293686eb7d5fa1281ddc759b45d96470cea15776454Alok Priyadarshivoid yyerror(YYLTYPE* lloc, TParseContext* context, const char* reason) { 294686eb7d5fa1281ddc759b45d96470cea15776454Alok Priyadarshi context->error(*lloc, reason, yyget_text(context->scanner)); 295686eb7d5fa1281ddc759b45d96470cea15776454Alok Priyadarshi context->recover(); 296686eb7d5fa1281ddc759b45d96470cea15776454Alok Priyadarshi} 297686eb7d5fa1281ddc759b45d96470cea15776454Alok Priyadarshi 298521c8364151945482e25f6dba76d28ea296211cbZhenyao Moint int_constant(yyscan_t yyscanner) { 299521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 300521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo 301521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo if (!atoi_clamp(yytext, &(yylval->lex.i))) 302521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo yyextra->warning(*yylloc, "Integer overflow", yytext, ""); 303521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo return INTCONSTANT; 304521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo} 305521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo 306521c8364151945482e25f6dba76d28ea296211cbZhenyao Moint float_constant(yyscan_t yyscanner) { 307521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 308521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo 309521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo if (!atof_clamp(yytext, &(yylval->lex.f))) 310521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo yyextra->warning(*yylloc, "Float overflow", yytext, ""); 311521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo return FLOATCONSTANT; 312521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo} 313521c8364151945482e25f6dba76d28ea296211cbZhenyao Mo 314044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint glslang_initialize(TParseContext* context) { 315044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org yyscan_t scanner = NULL; 316044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org if (yylex_init_extra(context, &scanner)) 317044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org return 1; 318044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 319044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org context->scanner = scanner; 320044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org return 0; 321044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org} 322044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 323044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint glslang_finalize(TParseContext* context) { 324044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org yyscan_t scanner = context->scanner; 325044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org if (scanner == NULL) return 0; 326044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 327044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org context->scanner = NULL; 32873bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org yylex_destroy(scanner); 32973bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org 33073bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org return 0; 331044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org} 332044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 333d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.comint glslang_scan(size_t count, const char* const string[], const int length[], 334408c45e703875953dee96d9012f340b8d5bbd68aalokp@chromium.org TParseContext* context) { 335044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org yyrestart(NULL, context->scanner); 336b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yyset_column(0, context->scanner); 337b40ad5a418254a6cc0e68fe9854d7c0a980621f2shannonwoods@chromium.org yyset_lineno(1, context->scanner); 33873bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org 33973bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org // Initialize preprocessor. 34073bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org if (!context->preprocessor.init(count, string, length)) 34173bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org return 1; 342ba2cfe7cc7ddfa62d29c76d5f53300cc35d868f4Alok Priyadarshi context->preprocessor.setMaxTokenLength(SH_MAX_TOKEN_LENGTH); 34373bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org 34473bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org // Define extension macros. 34573bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org const TExtensionBehavior& extBehavior = context->extensionBehavior(); 34673bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); 34773bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org iter != extBehavior.end(); ++iter) { 348e3043b14c6f8a31d4ab2e514782f86124938908balokp@chromium.org context->preprocessor.predefineMacro(iter->first.c_str(), 1); 34973bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org } 35036aef7c1304f1369d3c042922c7bcd1884281e76shannon.woods@transgaming.com if (context->fragmentPrecisionHigh) 35136aef7c1304f1369d3c042922c7bcd1884281e76shannon.woods@transgaming.com context->preprocessor.predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1); 35236aef7c1304f1369d3c042922c7bcd1884281e76shannon.woods@transgaming.com 35373bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org return 0; 354044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org} 355044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org 356