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