14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com/*
24f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
35524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com// Copyright (c) 2002-2013 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//
185524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com// Copyright (c) 2012-2013 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%{
3917732823f9c21bdba9cc51ffaceb545ce3857a8cGeoff Lang#include "compiler/translator/glslang.h"
406b9cb25980022d0c792d858bc6f6500c00a6c29dJamie Madill#include "compiler/translator/ParseContext.h"
41b401a92b48599a64cbb44e463aef1b2976b3fbf8daniel@transgaming.com#include "compiler/preprocessor/Token.h"
4217732823f9c21bdba9cc51ffaceb545ce3857a8cGeoff Lang#include "compiler/translator/util.h"
435508f39d0cffc9a68565bbff2e6f61332a509cdfJamie Madill#include "compiler/translator/length_limits.h"
44eab1ef126b3118ac06b715e236f6b805f668b46dalokp@chromium.org#include "glslang_tab.h"
454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com/* windows only pragma */
474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#ifdef _MSC_VER
484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#pragma warning(disable : 4102)
494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif
504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
51075edd84dd682b91279132317d34b09e8028ae6fJamie Madill#define YY_USER_ACTION                                 \
52075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yylloc->first_file = yylloc->last_file = yycolumn; \
53075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yylloc->first_line = yylloc->last_line = yylineno;
54075edd84dd682b91279132317d34b09e8028ae6fJamie Madill
55044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org#define YY_INPUT(buf, result, max_size) \
56044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    result = string_input(buf, max_size, yyscanner);
574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
58d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.comstatic yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner);
59044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgstatic int check_type(yyscan_t yyscanner);
60044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgstatic int reserved_word(yyscan_t yyscanner);
6135f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.orgstatic int ES2_reserved_ES3_keyword(TParseContext *context, int token);
6235f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.orgstatic int ES2_keyword_ES3_reserved(TParseContext *context, int token);
6316242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.orgstatic int ES2_ident_ES3_keyword(TParseContext *context, int token);
64c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.orgstatic int uint_constant(TParseContext *context);
65f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mostatic int int_constant(yyscan_t yyscanner);
66f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mostatic int float_constant(yyscan_t yyscanner);
674d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.orgstatic int floatsuffix_check(TParseContext* context);
684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com%}
694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
70044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%option noyywrap nounput never-interactive
71075edd84dd682b91279132317d34b09e8028ae6fJamie Madill%option yylineno reentrant bison-bridge bison-locations
72044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%option extra-type="TParseContext*"
734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
74044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgD           [0-9]
75044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgL           [a-zA-Z_]
76044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgH           [a-fA-F0-9]
77044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgE           [Ee][+-]?{D}+
78044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgO           [0-7]
794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com%%
81044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
82044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%{
83044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    TParseContext* context = yyextra;
84044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org%}
85044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
8656b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"invariant"    { return INVARIANT; }
8756b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"highp"        { return HIGH_PRECISION; }
8856b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"mediump"      { return MEDIUM_PRECISION; }
8956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"lowp"         { return LOW_PRECISION; }
9056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"precision"    { return PRECISION; }
91044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
9235f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org"attribute"    { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); }
9356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"const"        { return CONST_QUAL; }
9456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"uniform"      { return UNIFORM; }
9535f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org"varying"      { return ES2_keyword_ES3_reserved(context, VARYING); }
96044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
9756b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"break"        { return BREAK; }
9856b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"continue"     { return CONTINUE; }
9956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"do"           { return DO; }
10056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"for"          { return FOR; }
10156b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"while"        { return WHILE; }
102044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
10356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"if"           { return IF; }
10456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"else"         { return ELSE; }
10535f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org"switch"       { return ES2_reserved_ES3_keyword(context, SWITCH); }
1065c55caf3ae7829741cda145b1542d70cea6cb556Jamie Madill"case"         { return ES2_ident_ES3_keyword(context, CASE); }
10735f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org"default"      { return ES2_reserved_ES3_keyword(context, DEFAULT); }
1085524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
1095c55caf3ae7829741cda145b1542d70cea6cb556Jamie Madill"centroid"     { return ES2_ident_ES3_keyword(context, CENTROID); }
11035f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org"flat"         { return ES2_reserved_ES3_keyword(context, FLAT); }
1115c55caf3ae7829741cda145b1542d70cea6cb556Jamie Madill"smooth"       { return ES2_ident_ES3_keyword(context, SMOOTH); }
112044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
11356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"in"           { return IN_QUAL; }
11456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"out"          { return OUT_QUAL; }
11556b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"inout"        { return INOUT_QUAL; }
116044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
11778eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"float"        { return FLOAT_TYPE; }
11878eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"int"          { return INT_TYPE; }
1196b7099111f6f00493b24dd05680f60c30b60cb7cshannonwoods@chromium.org"uint"         { return ES2_ident_ES3_keyword(context, UINT_TYPE); }
12078eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"void"         { return VOID_TYPE; }
12178eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"bool"         { return BOOL_TYPE; }
12256b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"true"         { yylval->lex.b = true;  return BOOLCONSTANT; }
12356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"false"        { yylval->lex.b = false; return BOOLCONSTANT; }
124044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
12556b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"discard"      { return DISCARD; }
12656b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"return"       { return RETURN; }
127044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
12878eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"mat2"         { return MATRIX2; }
12978eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"mat3"         { return MATRIX3; }
13078eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"mat4"         { return MATRIX4; }
131044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
1329bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat2x2"         { return ES2_ident_ES3_keyword(context, MATRIX2); }
1339bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat3x3"         { return ES2_ident_ES3_keyword(context, MATRIX3); }
1349bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat4x4"         { return ES2_ident_ES3_keyword(context, MATRIX4); }
1359bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org
1369bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat2x3"         { return ES2_ident_ES3_keyword(context, MATRIX2x3); }
1379bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat3x2"         { return ES2_ident_ES3_keyword(context, MATRIX3x2); }
1389bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat2x4"         { return ES2_ident_ES3_keyword(context, MATRIX2x4); }
1399bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat4x2"         { return ES2_ident_ES3_keyword(context, MATRIX4x2); }
1409bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat3x4"         { return ES2_ident_ES3_keyword(context, MATRIX3x4); }
1419bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org"mat4x3"         { return ES2_ident_ES3_keyword(context, MATRIX4x3); }
1429bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org
14378eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"vec2"         { return VEC2; }
14478eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"vec3"         { return VEC3; }
14578eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"vec4"         { return VEC4; }
14678eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"ivec2"        { return IVEC2; }
14778eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"ivec3"        { return IVEC3; }
14878eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"ivec4"        { return IVEC4; }
14978eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"bvec2"        { return BVEC2; }
15078eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"bvec3"        { return BVEC3; }
15178eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"bvec4"        { return BVEC4; }
1528c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org"uvec2"        { return ES2_ident_ES3_keyword(context, UVEC2); }
1538c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org"uvec3"        { return ES2_ident_ES3_keyword(context, UVEC3); }
1548c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org"uvec4"        { return ES2_ident_ES3_keyword(context, UVEC4); }
155044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
1562a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"sampler2D"            { return SAMPLER2D; }
1572a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"samplerCube"          { return SAMPLERCUBE; }
1582a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"samplerExternalOES"   { return SAMPLER_EXTERNAL_OES; }
1592a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"sampler3D"            { return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
1602a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"sampler3DRect"        { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
1612a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"sampler2DRect"        { return SAMPLER2DRECT; }
1622a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"sampler2DArray"       { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); }
1632a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"isampler2D"           { return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
1642a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"isampler3D"           { return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
1652a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"isamplerCube"         { return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
1662a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"isampler2DArray"      { return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
1672a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"usampler2D"           { return ES2_ident_ES3_keyword(context, USAMPLER2D); }
1682a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"usampler3D"           { return ES2_ident_ES3_keyword(context, USAMPLER3D); }
1692a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"usamplerCube"         { return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
1702a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"usampler2DArray"      { return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
1715c55caf3ae7829741cda145b1542d70cea6cb556Jamie Madill"sampler2DShadow"      { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
1722a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"samplerCubeShadow"    { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
1732a1d8a381d29b906cb143c5834466d66ee032682Nicolas Capens"sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
174044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
17578eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"struct"       { return STRUCT; }
176044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
177302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org"layout"  { return ES2_ident_ES3_keyword(context, LAYOUT); }
178302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org
1795524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com    /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
1805524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"coherent"          |
1815524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"restrict"          |
1825524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"readonly"          |
1835524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"writeonly"         |
1845524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"resource"          |
1855524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"atomic_uint"       |
1865524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"noperspective"     |
1875524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"patch"             |
1885524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sample"            |
1895524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"subroutine"        |
1905524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"common"            |
1915524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"partition"         |
1925524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"active"            |
1935524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
1945524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"filter"            |
1955524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image1D"           |
1965524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image2D"           |
1975524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image3D"           |
1985524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"imageCube"	        |
1995524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimage1D"          |
2005524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimage2D"          |
2015524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimage3D"          |
2025524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimageCube"        |
2035524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimage1D"          |
2045524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimage2D"          |
2055524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimage3D"          |
2065524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimageCube"        |
2075524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image1DArray"      |
2085524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image2DArray"      |
2095524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimage1DArray"     |
2105524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimage2DArray"     |
2115524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimage1DArray"     |
2125524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimage2DArray"     |
2135524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image1DShadow"     |
2145524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image2DShadow"     |
2155524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image1DArrayShadow" |
2165524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"image2DArrayShadow" |
2175524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"imageBuffer"       |
2185524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"iimageBuffer"      |
2195524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"uimageBuffer"      |
2205524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2215524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler1DArray"    |
2225524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler1DArrayShadow" |
2235524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"isampler1D"        |
2245524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"isampler1DArray"   |
2255524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"usampler1D"        |
2265524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"usampler1DArray"   |
2275524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"isampler2DRect"    |
2285524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"usampler2DRect"    |
2295524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"samplerBuffer"     |
2305524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"isamplerBuffer"    |
2315524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"usamplerBuffer"    |
2325524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler2DMS"       |
2335524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"isampler2DMS"      |
2345524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"usampler2DMS"      |
2355524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler2DMSArray"  |
2365524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"isampler2DMSArray" |
2375524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"usampler2DMSArray" {
2385524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com    if (context->shaderVersion < 300) {
2395524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com		yylval->lex.string = NewPoolTString(yytext);
2405524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com	    return check_type(yyscanner);
2415524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com	}
2425524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com	return reserved_word(yyscanner);
2435524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com}
2445524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
245302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org    /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
246302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org"packed"  {
247302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org    if (context->shaderVersion >= 300)
248302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org    {
249302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org        yylval->lex.string = NewPoolTString(yytext);
250302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org        return check_type(yyscanner);
251302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org    }
252302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org
253302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org    return reserved_word(yyscanner);
254302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org}
255302adfef44f2a18b5770315408c23087cf5eff04shannonwoods@chromium.org
2565524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com    /* Reserved keywords */
2575524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"asm"          |
2585524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2595524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"class"        |
2605524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"union"        |
2615524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"enum"         |
2625524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"typedef"      |
2635524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"template"     |
2645524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"this"         |
2655524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2665524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"goto"         |
2675524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2685524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"inline"       |
2695524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"noinline"     |
2705524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"volatile"     |
2715524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"public"       |
2725524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"static"       |
2735524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"extern"       |
2745524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"external"     |
2755524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"interface"    |
2765524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2775524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"long"         |
2785524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"short"        |
2795524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"double"       |
2805524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"half"         |
2815524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"fixed"        |
2825524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"unsigned"     |
2835524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"superp"       |
2845524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2855524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"input"        |
2865524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"output"       |
2875524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2885524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"hvec2"        |
2895524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"hvec3"        |
2905524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"hvec4"        |
2915524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"dvec2"        |
2925524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"dvec3"        |
2935524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"dvec4"        |
2945524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"fvec2"        |
2955524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"fvec3"        |
2965524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"fvec4"        |
2975524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
2985524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler1D"    |
2995524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler1DShadow" |
3005524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sampler2DRectShadow" |
3015524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
3025524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"sizeof"       |
3035524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"cast"         |
3045524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com
3055524db0c05c8df6002489a077b18dd6fd5746448shannon.woods%transgaming.com@gtempaccount.com"namespace"    |
306044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org"using"        { return reserved_word(yyscanner); }
307044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
308044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org{L}({L}|{D})*       {
309044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org   yylval->lex.string = NewPoolTString(yytext);
310044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org   return check_type(yyscanner);
3114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
3124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
313f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo0[xX]{H}+         { return int_constant(yyscanner); }
314f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo0{O}+             { return int_constant(yyscanner); }
315f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo{D}+              { return int_constant(yyscanner); }
31656b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill
317c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org0[xX]{H}+[uU]     { return uint_constant(context); }
318c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org0{O}+[uU]         { return uint_constant(context); }
319c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org{D}+[uU]          { return uint_constant(context); }
320044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
321f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo{D}+{E}           { return float_constant(yyscanner); }
322f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo{D}+"."{D}*({E})? { return float_constant(yyscanner); }
323f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo"."{D}+({E})?     { return float_constant(yyscanner); }
32456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill
3254d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org{D}+{E}[fF]           { return floatsuffix_check(context); }
3264d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org{D}+"."{D}*({E})?[fF] { return floatsuffix_check(context); }
3274d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org"."{D}+({E})?[fF]     { return floatsuffix_check(context); }
328044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
32956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"+="            { return ADD_ASSIGN; }
33056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"-="            { return SUB_ASSIGN; }
33156b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"*="            { return MUL_ASSIGN; }
33256b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"/="            { return DIV_ASSIGN; }
33356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"%="            { return MOD_ASSIGN; }
33456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"<<="           { return LEFT_ASSIGN; }
33556b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill">>="           { return RIGHT_ASSIGN; }
33656b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"&="            { return AND_ASSIGN; }
33756b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"^="            { return XOR_ASSIGN; }
33856b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"|="            { return OR_ASSIGN; }
33956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill
34056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"++"            { return INC_OP; }
34156b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"--"            { return DEC_OP; }
34256b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"&&"            { return AND_OP; }
34356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"||"            { return OR_OP; }
34456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"^^"            { return XOR_OP; }
34556b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"<="            { return LE_OP; }
34656b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill">="            { return GE_OP; }
34756b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"=="            { return EQ_OP; }
34856b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"!="            { return NE_OP; }
34956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"<<"            { return LEFT_OP; }
35056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill">>"            { return RIGHT_OP; }
35178eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill";"             { return SEMICOLON; }
35278eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill("{"|"<%")      { return LEFT_BRACE; }
35356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill("}"|"%>")      { return RIGHT_BRACE; }
35478eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill","             { return COMMA; }
35556b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill":"             { return COLON; }
35678eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"="             { return EQUAL; }
35778eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill"("             { return LEFT_PAREN; }
35878eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill")"             { return RIGHT_PAREN; }
35956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill("["|"<:")      { return LEFT_BRACKET; }
36056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill("]"|":>")      { return RIGHT_BRACKET; }
361f8dc4fb66d2ee473b6ba37626f02756422863f6cJamie Madill"."             { return DOT; }
36256b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"!"             { return BANG; }
36356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"-"             { return DASH; }
36456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"~"             { return TILDE; }
36556b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"+"             { return PLUS; }
36656b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"*"             { return STAR; }
36756b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"/"             { return SLASH; }
36856b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"%"             { return PERCENT; }
36956b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"<"             { return LEFT_ANGLE; }
37056b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill">"             { return RIGHT_ANGLE; }
37156b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"|"             { return VERTICAL_BAR; }
37256b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"^"             { return CARET; }
37356b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"&"             { return AMPERSAND; }
37456b065198f6fdac375d4ce39549a97180e7bc5daJamie Madill"?"             { return QUESTION; }
3754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
37639a8ce6be517928abd6788bea0154f6dab8246f9Jamie Madill[ \t\v\n\f\r] { }
377f8dc4fb66d2ee473b6ba37626f02756422863f6cJamie Madill<<EOF>>       { yyterminate(); }
378f8dc4fb66d2ee473b6ba37626f02756422863f6cJamie Madill.             { assert(false); return 0; }
3794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com%%
3814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
382d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.comyy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) {
38373bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    pp::Token token;
38473bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    yyget_extra(yyscanner)->preprocessor.lex(&token);
385d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com    yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size();
386d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com    if (len < max_size)
3875b6a68e04a7d27dab71524fa481f42818f84a240alokp@chromium.org        memcpy(buf, token.text.c_str(), len);
388075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yyset_column(token.location.file, yyscanner);
389075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yyset_lineno(token.location.line, yyscanner);
39073bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org
39173bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    if (len >= max_size)
39273bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org        YY_FATAL_ERROR("Input buffer overflow");
39373bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    else if (len > 0)
39473bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org        buf[len++] = ' ';
39573bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    return len;
396044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org}
397044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
398044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint check_type(yyscan_t yyscanner) {
399044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
400044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
401044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    int token = IDENTIFIER;
40296e7ba17f417a48c1a6c31f3d9fbd5611219d14dshannonwoods@chromium.org    TSymbol* symbol = yyextra->symbolTable.find(yytext, yyextra->shaderVersion);
40378eb5dfbd88dc39a2b6d54f3f531767f45eca4b2Jamie Madill    if (symbol && symbol->isVariable()) {
404044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org        TVariable* variable = static_cast<TVariable*>(symbol);
405044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org        if (variable->isUserType()) {
406044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org            token = TYPE_NAME;
407044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org        }
408044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    }
409044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    yylval->lex.symbol = symbol;
410044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    return token;
411044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org}
412044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
413044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint reserved_word(yyscan_t yyscanner) {
414044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
415044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
416075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yyextra->error(*yylloc, "Illegal use of reserved word", yytext, "");
417044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    yyextra->recover();
418044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    return 0;
4194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
420044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
42135f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.orgint ES2_reserved_ES3_keyword(TParseContext *context, int token)
42235f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org{
42335f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    yyscan_t yyscanner = (yyscan_t) context->scanner;
42435f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org
42535f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    if (context->shaderVersion < 300)
42635f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    {
42735f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org        return reserved_word(yyscanner);
42835f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    }
42935f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org
43035f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    return token;
43135f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org}
43235f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org
43335f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.orgint ES2_keyword_ES3_reserved(TParseContext *context, int token)
43435f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org{
43535f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    yyscan_t yyscanner = (yyscan_t) context->scanner;
43635f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org
43735f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    if (context->shaderVersion >= 300)
43835f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    {
43935f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org        return reserved_word(yyscanner);
44035f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    }
44135f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org
44235f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org    return token;
44335f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org}
44435f156d9319d3f47a4893746275596d23ffe6124shannonwoods@chromium.org
44516242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.orgint ES2_ident_ES3_keyword(TParseContext *context, int token)
44616242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org{
44716242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
44816242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    yyscan_t yyscanner = (yyscan_t) context->scanner;
44916242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org
45016242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name
45116242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    if (context->shaderVersion < 300)
45216242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    {
45316242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org        yylval->lex.string = NewPoolTString(yytext);
45416242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org        return check_type(yyscanner);
45516242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    }
45616242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org
45716242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org    return token;
45816242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org}
45916242efc0b35c55c435992f1ab7f84bc4a4dc457shannonwoods@chromium.org
460c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.orgint uint_constant(TParseContext *context)
461c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org{
462c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
463c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org    yyscan_t yyscanner = (yyscan_t) context->scanner;
464c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org
465c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org    if (context->shaderVersion < 300)
466c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org    {
467075edd84dd682b91279132317d34b09e8028ae6fJamie Madill        context->error(*yylloc, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext, "");
468c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org        context->recover();
469c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org        return 0;
470c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org    }
471c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org
472f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    if (!atoi_clamp(yytext, &(yylval->lex.i)))
473f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo        yyextra->warning(*yylloc, "Integer overflow", yytext, "");
474f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo
475c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org    return UINTCONSTANT;
476c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org}
477c8100b85aa421a38ca3d70a612539d09c3f39192shannonwoods@chromium.org
4784d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.orgint floatsuffix_check(TParseContext* context)
4794d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org{
4804d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
4814d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org
4824d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org    if (context->shaderVersion < 300)
4834d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org    {
484075edd84dd682b91279132317d34b09e8028ae6fJamie Madill        context->error(*yylloc, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext);
4854d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org        context->recover();
4864d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org        return 0;
4874d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org    }
4884d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org
489f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    if (!atof_clamp(yytext, &(yylval->lex.f)))
490f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo        yyextra->warning(*yylloc, "Float overflow", yytext, "");
491f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo
4924d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org    return(FLOATCONSTANT);
4934d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org}
4944d20a846b6ac66392b7c0db08353f21441e90029shannonwoods@chromium.org
4950b67bfbf4aa27b96e6790fefad40633e7bf289beAlok Priyadarshivoid yyerror(YYLTYPE* lloc, TParseContext* context, const char* reason) {
4960b67bfbf4aa27b96e6790fefad40633e7bf289beAlok Priyadarshi    context->error(*lloc, reason, yyget_text(context->scanner));
4970b67bfbf4aa27b96e6790fefad40633e7bf289beAlok Priyadarshi    context->recover();
4980b67bfbf4aa27b96e6790fefad40633e7bf289beAlok Priyadarshi}
4990b67bfbf4aa27b96e6790fefad40633e7bf289beAlok Priyadarshi
500f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Moint int_constant(yyscan_t yyscanner) {
501f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
502f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo
503f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    if (!atoi_clamp(yytext, &(yylval->lex.i)))
504f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo        yyextra->warning(*yylloc, "Integer overflow", yytext, "");
505f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    return INTCONSTANT;
506f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo}
507f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo
508f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Moint float_constant(yyscan_t yyscanner) {
509f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
510f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo
511f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    if (!atof_clamp(yytext, &(yylval->lex.f)))
512f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo        yyextra->warning(*yylloc, "Float overflow", yytext, "");
513f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo    return FLOATCONSTANT;
514f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo}
515f1d723c698d88c7f9086d7fa0aa1c064dddfa8d4Zhenyao Mo
516044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint glslang_initialize(TParseContext* context) {
517044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    yyscan_t scanner = NULL;
518044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    if (yylex_init_extra(context, &scanner))
519044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org        return 1;
520044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
521044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    context->scanner = scanner;
522044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    return 0;
523044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org}
524044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
525044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.orgint glslang_finalize(TParseContext* context) {
526044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    yyscan_t scanner = context->scanner;
527044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    if (scanner == NULL) return 0;
528044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
529044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    context->scanner = NULL;
53073bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    yylex_destroy(scanner);
53173bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org
53273bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    return 0;
533044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org}
534044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
535d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.comint glslang_scan(size_t count, const char* const string[], const int length[],
536408c45e703875953dee96d9012f340b8d5bbd68aalokp@chromium.org                 TParseContext* context) {
537044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org    yyrestart(NULL, context->scanner);
538075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yyset_column(0, context->scanner);
539075edd84dd682b91279132317d34b09e8028ae6fJamie Madill    yyset_lineno(1, context->scanner);
54073bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org
54173bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    // Initialize preprocessor.
54273bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    if (!context->preprocessor.init(count, string, length))
54373bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org        return 1;
54473bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org
54573bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    // Define extension macros.
54673bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    const TExtensionBehavior& extBehavior = context->extensionBehavior();
54773bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
54873bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org         iter != extBehavior.end(); ++iter) {
549e3043b14c6f8a31d4ab2e514782f86124938908balokp@chromium.org        context->preprocessor.predefineMacro(iter->first.c_str(), 1);
55073bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    }
551cbb6b6a0416552b5e3fa8589194288532558ccb8shannon.woods%transgaming.com@gtempaccount.com    if (context->fragmentPrecisionHigh)
552cbb6b6a0416552b5e3fa8589194288532558ccb8shannon.woods%transgaming.com@gtempaccount.com        context->preprocessor.predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1);
553cbb6b6a0416552b5e3fa8589194288532558ccb8shannon.woods%transgaming.com@gtempaccount.com
5547faf1a14deb3cdfc9f9137de95f9fc1552b603bdZhenyao Mo    context->preprocessor.setMaxTokenSize(GetGlobalMaxTokenSize(context->shaderSpec));
5555508f39d0cffc9a68565bbff2e6f61332a509cdfJamie Madill
55673bc298e3f0688d40c07c13d94197c4146ae1b49alokp@chromium.org    return 0;
557044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org}
558044a5cf8348594de2009331cfc02bd35477caf20alokp@chromium.org
559