Forráskód Böngészése

Revert "Merge pull request #2330 from ShabbyX/optimize_for_angle"

This reverts commit 1ee5d1c0bb683daea245e8329fd619940a35a5b4, reversing
changes made to 906d48a7e828701e25487c9cf34418ded831c814.
John Kessenich 5 éve
szülő
commit
4f32f93d7e

+ 2 - 19
BUILD.gn

@@ -109,6 +109,7 @@ template("glslang_sources_common") {
       "SPIRV/SpvBuilder.cpp",
       "SPIRV/SpvBuilder.cpp",
       "SPIRV/SpvBuilder.h",
       "SPIRV/SpvBuilder.h",
       "SPIRV/SpvPostProcess.cpp",
       "SPIRV/SpvPostProcess.cpp",
+      "SPIRV/SpvTools.cpp",
       "SPIRV/SpvTools.h",
       "SPIRV/SpvTools.h",
       "SPIRV/bitutils.h",
       "SPIRV/bitutils.h",
       "SPIRV/disassemble.cpp",
       "SPIRV/disassemble.cpp",
@@ -155,7 +156,7 @@ template("glslang_sources_common") {
       "glslang/MachineIndependent/attribute.cpp",
       "glslang/MachineIndependent/attribute.cpp",
       "glslang/MachineIndependent/attribute.h",
       "glslang/MachineIndependent/attribute.h",
       "glslang/MachineIndependent/gl_types.h",
       "glslang/MachineIndependent/gl_types.h",
-      "glslang/MachineIndependent/glslang_angle_tab.cpp.h",
+      "glslang/MachineIndependent/glslang_tab.cpp",
       "glslang/MachineIndependent/glslang_tab.cpp.h",
       "glslang/MachineIndependent/glslang_tab.cpp.h",
       "glslang/MachineIndependent/intermOut.cpp",
       "glslang/MachineIndependent/intermOut.cpp",
       "glslang/MachineIndependent/iomapper.cpp",
       "glslang/MachineIndependent/iomapper.cpp",
@@ -206,25 +207,9 @@ template("glslang_sources_common") {
     }
     }
 
 
     defines = []
     defines = []
-    if (invoker.is_angle) {
-      sources += [
-        "glslang/MachineIndependent/glslang_angle_tab.cpp",
-      ]
-      defines += [ "GLSLANG_ANGLE" ]
-    }
-    else {
-      sources += [
-        "glslang/MachineIndependent/glslang_tab.cpp",
-      ]
-    }
-
     if (invoker.enable_opt) {
     if (invoker.enable_opt) {
-      sources += [ "SPIRV/SpvTools.cpp" ]
       defines += [ "ENABLE_OPT=1" ]
       defines += [ "ENABLE_OPT=1" ]
     }
     }
-    if (invoker.is_angle) {
-      defines += [ "GLSLANG_ANGLE" ]
-    }
 
 
     if (is_win) {
     if (is_win) {
       sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
       sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
@@ -272,13 +257,11 @@ template("glslang_sources_common") {
 glslang_sources_common("glslang_lib_sources") {
 glslang_sources_common("glslang_lib_sources") {
   enable_opt = !glslang_angle
   enable_opt = !glslang_angle
   enable_hlsl = !glslang_angle
   enable_hlsl = !glslang_angle
-  is_angle = glslang_angle
 }
 }
 
 
 glslang_sources_common("glslang_sources") {
 glslang_sources_common("glslang_sources") {
   enable_opt = true
   enable_opt = true
   enable_hlsl = true
   enable_hlsl = true
-  is_angle = false
 }
 }
 
 
 source_set("glslang_default_resource_limits_sources") {
 source_set("glslang_default_resource_limits_sources") {

+ 1 - 3
SPIRV/GlslangToSpv.cpp

@@ -283,8 +283,6 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile
 {
 {
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     return spv::SourceLanguageESSL;
     return spv::SourceLanguageESSL;
-#elif defined(GLSLANG_ANGLE)
-    return spv::SourceLanguageGLSL;
 #endif
 #endif
 
 
     switch (source) {
     switch (source) {
@@ -8688,7 +8686,7 @@ void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
 // Write SPIR-V out to a text file with 32-bit hexadecimal words
 // Write SPIR-V out to a text file with 32-bit hexadecimal words
 void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
 void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
 {
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     std::ofstream out;
     std::ofstream out;
     out.open(baseName, std::ios::binary | std::ios::out);
     out.open(baseName, std::ios::binary | std::ios::out);
     if (out.fail())
     if (out.fail())

+ 53 - 119
glslang/MachineIndependent/Initialize.cpp

@@ -147,10 +147,6 @@ EProfile EDesktopProfile = static_cast<EProfile>(ENoProfile | ECoreProfile | ECo
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     const Versioning* Es300Desktop130 = nullptr;
     const Versioning* Es300Desktop130 = nullptr;
     const Versioning* Es310Desktop420 = nullptr;
     const Versioning* Es310Desktop420 = nullptr;
-#elif defined(GLSLANG_ANGLE)
-    const Versioning* Es300Desktop130 = nullptr;
-    const Versioning* Es310Desktop420 = nullptr;
-    const Versioning* Es310Desktop450 = nullptr;
 #else
 #else
     const Versioning Es300Desktop130Version[] = { { EEsProfile,      0, 300, 0, nullptr },
     const Versioning Es300Desktop130Version[] = { { EEsProfile,      0, 300, 0, nullptr },
                                                   { EDesktopProfile, 0, 130, 0, nullptr },
                                                   { EDesktopProfile, 0, 130, 0, nullptr },
@@ -419,7 +415,7 @@ void AddTabledBuiltin(TString& decls, const BuiltInFunction& function)
 // See if the tabled versioning information allows the current version.
 // See if the tabled versioning information allows the current version.
 bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
 bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
 {
 {
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+#ifdef GLSLANG_WEB
     // all entries in table are valid
     // all entries in table are valid
     return true;
     return true;
 #endif
 #endif
@@ -503,7 +499,7 @@ TBuiltIns::TBuiltIns()
     prefixes[EbtFloat] =  "";
     prefixes[EbtFloat] =  "";
     prefixes[EbtInt]   = "i";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
     prefixes[EbtUint]  = "u";
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     prefixes[EbtFloat16] = "f16";
     prefixes[EbtFloat16] = "f16";
     prefixes[EbtInt8]  = "i8";
     prefixes[EbtInt8]  = "i8";
     prefixes[EbtUint8] = "u8";
     prefixes[EbtUint8] = "u8";
@@ -520,9 +516,7 @@ TBuiltIns::TBuiltIns()
     dimMap[Esd3D] = 3;
     dimMap[Esd3D] = 3;
     dimMap[EsdCube] = 3;
     dimMap[EsdCube] = 3;
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     dimMap[Esd1D] = 1;
     dimMap[Esd1D] = 1;
-#endif
     dimMap[EsdRect] = 2;
     dimMap[EsdRect] = 2;
     dimMap[EsdBuffer] = 1;
     dimMap[EsdBuffer] = 1;
     dimMap[EsdSubpass] = 2;  // potentially unused for now
     dimMap[EsdSubpass] = 2;  // potentially unused for now
@@ -547,9 +541,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     version = 310;
     version = 310;
     profile = EEsProfile;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 #endif
     addTabledBuiltins(version, profile, spvVersion);
     addTabledBuiltins(version, profile, spvVersion);
 
 
@@ -595,7 +586,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         "vec4  fwidthCoarse(vec4  p);"
         "vec4  fwidthCoarse(vec4  p);"
     );
     );
 
 
-#ifndef GLSLANG_ANGLE
     TString derivativesAndControl16bits (
     TString derivativesAndControl16bits (
         "float16_t dFdx(float16_t);"
         "float16_t dFdx(float16_t);"
         "f16vec2   dFdx(f16vec2);"
         "f16vec2   dFdx(f16vec2);"
@@ -1183,7 +1173,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "\n"
             "\n"
         );
         );
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     if ((profile == EEsProfile && version >= 310) ||
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
         (profile != EEsProfile && version >= 430)) {
@@ -1221,7 +1210,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "\n");
             "\n");
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 440) {
     if (profile != EEsProfile && version >= 440) {
         commonBuiltins.append(
         commonBuiltins.append(
             "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
             "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
@@ -1271,8 +1259,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
             "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_ANGLE
-#endif // !GLSLANG_WEB
+#endif
 
 
     if ((profile == EEsProfile && version >= 300) ||
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
         (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
@@ -1312,7 +1299,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "\n");
             "\n");
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
     if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
             commonBuiltins.append(
             commonBuiltins.append(
                 "double fma(double, double, double);"
                 "double fma(double, double, double);"
@@ -1321,7 +1307,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "dvec4  fma(dvec4,  dvec4,  dvec4 );"
                 "dvec4  fma(dvec4,  dvec4,  dvec4 );"
                 "\n");
                 "\n");
     }
     }
-#endif
 
 
     if ((profile == EEsProfile && version >= 310) ||
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
         (profile != EEsProfile && version >= 400)) {
@@ -1339,7 +1324,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "\n");
             "\n");
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
     if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
         commonBuiltins.append(
         commonBuiltins.append(
             "double frexp(double, out int);"
             "double frexp(double, out int);"
@@ -1357,7 +1341,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
 
             "\n");
             "\n");
     }
     }
-#endif
 #endif
 #endif
 
 
     if ((profile == EEsProfile && version >= 300) ||
     if ((profile == EEsProfile && version >= 300) ||
@@ -1467,7 +1450,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
     }
     }
 
 
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     //
     //
     // Original-style texture functions existing in all stages.
     // Original-style texture functions existing in all stages.
     // (Per-stage functions below.)
     // (Per-stage functions below.)
@@ -1616,7 +1598,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "\n");
                 "\n");
         }
         }
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     // Bitfield
     // Bitfield
     if ((profile == EEsProfile && version >= 310) ||
     if ((profile == EEsProfile && version >= 310) ||
@@ -1759,7 +1740,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "\n");
             "\n");
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
         commonBuiltins.append(
@@ -3080,7 +3060,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
             "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     if ((profile == EEsProfile && version >= 300 && version < 310) ||
     if ((profile == EEsProfile && version >= 300 && version < 310) ||
         (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
         (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
@@ -3100,7 +3079,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                               "\n");
                               "\n");
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     // GL_AMD_gpu_shader_half_float/Explicit types
     // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
         commonBuiltins.append(
@@ -3951,30 +3929,28 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f64vec3   log2(f64vec3);"
             "f64vec3   log2(f64vec3);"
             "f64vec4   log2(f64vec4);"
             "f64vec4   log2(f64vec4);"
             "\n");
             "\n");
-    }
-
-    if (profile != EEsProfile && version >= 450) {
-        stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
-        stageBuiltins[EShLangFragment].append(
-            "float64_t interpolateAtCentroid(float64_t);"
-            "f64vec2   interpolateAtCentroid(f64vec2);"
-            "f64vec3   interpolateAtCentroid(f64vec3);"
-            "f64vec4   interpolateAtCentroid(f64vec4);"
+        }
+        if (profile != EEsProfile && version >= 450) {
+            stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
+            stageBuiltins[EShLangFragment].append(
+                "float64_t interpolateAtCentroid(float64_t);"
+                "f64vec2   interpolateAtCentroid(f64vec2);"
+                "f64vec3   interpolateAtCentroid(f64vec3);"
+                "f64vec4   interpolateAtCentroid(f64vec4);"
 
 
-            "float64_t interpolateAtSample(float64_t, int);"
-            "f64vec2   interpolateAtSample(f64vec2,   int);"
-            "f64vec3   interpolateAtSample(f64vec3,   int);"
-            "f64vec4   interpolateAtSample(f64vec4,   int);"
+                "float64_t interpolateAtSample(float64_t, int);"
+                "f64vec2   interpolateAtSample(f64vec2,   int);"
+                "f64vec3   interpolateAtSample(f64vec3,   int);"
+                "f64vec4   interpolateAtSample(f64vec4,   int);"
 
 
-            "float64_t interpolateAtOffset(float64_t, f64vec2);"
-            "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
-            "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
-            "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
+                "float64_t interpolateAtOffset(float64_t, f64vec2);"
+                "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
+                "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
+                "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
 
 
-            "\n");
+                "\n");
 
 
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     //============================================================================
     //============================================================================
     //
     //
@@ -3990,7 +3966,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
     if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
     if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
 
-#ifndef GLSLANG_ANGLE
     //
     //
     // Original-style texture Functions with lod.
     // Original-style texture Functions with lod.
     //
     //
@@ -4050,7 +4025,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "\n");
                 "\n");
         }
         }
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     if ((profile != EEsProfile && version >= 150) ||
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
         (profile == EEsProfile && version >= 310)) {
@@ -4071,7 +4045,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "void EndPrimitive();"
             "void EndPrimitive();"
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_WEB
+#endif
 
 
     //============================================================================
     //============================================================================
     //
     //
@@ -4131,7 +4105,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
 
     commonBuiltins.append("void debugPrintfEXT();\n");
     commonBuiltins.append("void debugPrintfEXT();\n");
 
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
         // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
         // adding it introduces undesirable tempArgs on the stack. What we want
         // adding it introduces undesirable tempArgs on the stack. What we want
@@ -4255,7 +4228,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
 
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     // GL_ARB_derivative_control
     // GL_ARB_derivative_control
     if (profile != EEsProfile && version >= 400) {
     if (profile != EEsProfile && version >= 400) {
@@ -4293,7 +4265,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         "bool helperInvocationEXT();"
         "bool helperInvocationEXT();"
         "\n");
         "\n");
 
 
-#ifndef GLSLANG_ANGLE
     // GL_AMD_shader_explicit_vertex_parameter
     // GL_AMD_shader_explicit_vertex_parameter
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangFragment].append(
         stageBuiltins[EShLangFragment].append(
@@ -4428,14 +4399,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "void executeCallableEXT(uint, int);"
             "void executeCallableEXT(uint, int);"
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     //E_SPV_NV_compute_shader_derivatives
     //E_SPV_NV_compute_shader_derivatives
     if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
     if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
         stageBuiltins[EShLangCompute].append(derivativeControls);
         stageBuiltins[EShLangCompute].append(derivativeControls);
         stageBuiltins[EShLangCompute].append("\n");
         stageBuiltins[EShLangCompute].append("\n");
     }
     }
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
         stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
         stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
         stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
@@ -4448,8 +4417,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_ANGLE
-#endif // !GLSLANG_WEB
+#endif
 
 
     //============================================================================
     //============================================================================
     //
     //
@@ -4486,7 +4454,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "\n");
             "\n");
     }
     }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
     if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
         //
         //
         // Matrix state. p. 31, 32, 37, 39, 40.
         // Matrix state. p. 31, 32, 37, 39, 40.
@@ -4604,7 +4572,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
 
             "\n");
             "\n");
     }
     }
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif
 
 
     //============================================================================
     //============================================================================
     //
     //
@@ -4635,7 +4603,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
     }
     }
 
 
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     //============================================================================
     //============================================================================
     //
     //
     // Define the interface to the mesh/task shader.
     // Define the interface to the mesh/task shader.
@@ -4723,7 +4690,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "\n");
                 "\n");
         }
         }
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     //============================================================================
     //============================================================================
     //
     //
@@ -5394,15 +5360,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
 
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
 
 
-    if ((profile != EEsProfile && version >= 140) ||
-        (profile == EEsProfile && version >= 310)) {
-        stageBuiltins[EShLangFragment].append(
-            "flat in highp int gl_DeviceIndex;"     // GL_EXT_device_group
-            "flat in highp int gl_ViewIndex;"       // GL_EXT_multiview
-            "\n");
-    }
-
-#ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         const char* ballotDecls =
         const char* ballotDecls =
@@ -5433,6 +5390,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
         stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
     }
     }
 
 
+    if ((profile != EEsProfile && version >= 140) ||
+        (profile == EEsProfile && version >= 310)) {
+        stageBuiltins[EShLangFragment].append(
+            "flat in highp int gl_DeviceIndex;"     // GL_EXT_device_group
+            "flat in highp int gl_ViewIndex;"       // GL_EXT_multiview
+            "\n");
+    }
+
     // GL_KHR_shader_subgroup
     // GL_KHR_shader_subgroup
     if ((profile == EEsProfile && version >= 310) ||
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 140)) {
         (profile != EEsProfile && version >= 140)) {
@@ -5636,7 +5601,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         stageBuiltins[EShLangCallable].append(callableDecls);
         stageBuiltins[EShLangCallable].append(callableDecls);
 
 
     }
     }
-
     if ((profile != EEsProfile && version >= 140)) {
     if ((profile != EEsProfile && version >= 140)) {
         const char *deviceIndex =
         const char *deviceIndex =
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
@@ -5649,6 +5613,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         stageBuiltins[EShLangMiss].append(deviceIndex);
         stageBuiltins[EShLangMiss].append(deviceIndex);
     }
     }
 
 
+    if (version >= 300 /* both ES and non-ES */) {
+        stageBuiltins[EShLangFragment].append(
+            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
+            "\n");
+    }
+
     if ((profile != EEsProfile && version >= 420) ||
     if ((profile != EEsProfile && version >= 420) ||
         (profile == EEsProfile && version >= 310)) {
         (profile == EEsProfile && version >= 310)) {
         commonBuiltins.append("const int gl_ScopeDevice      = 1;\n");
         commonBuiltins.append("const int gl_ScopeDevice      = 1;\n");
@@ -5672,15 +5642,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
         commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
         commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
         commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
     }
     }
-
-#endif // !GLSLANG_ANGLE
-
-    if (version >= 300 /* both ES and non-ES */) {
-        stageBuiltins[EShLangFragment].append(
-            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
-            "\n");
-    }
-#endif // !GLSLANG_WEB
+#endif
 
 
     // printf("%s\n", commonBuiltins.c_str());
     // printf("%s\n", commonBuiltins.c_str());
     // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
     // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
@@ -5698,16 +5660,13 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
     //
     //
 
 
     // enumerate all the types
     // enumerate all the types
-    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint,
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
-        EbtFloat16
-#endif
-    };
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
+    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint };
     bool skipBuffer = true;
     bool skipBuffer = true;
     bool skipCubeArrayed = true;
     bool skipCubeArrayed = true;
     const int image = 0;
     const int image = 0;
 #else
 #else
+    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, EbtFloat16 };
     bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
     bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
     bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
     bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
     for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
     for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
@@ -5732,13 +5691,8 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
                 for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
                 for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
                     for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube
                     for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube
-#else
-#if defined(GLSLANG_ANGLE)
-                    // TODO: what is subpass?
-                    for (int dim = Esd2D; dim < EsdSubpass; ++dim) { // 2D, ..., buffer
 #else
 #else
                     for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
                     for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
-#endif
                         if (dim == EsdSubpass && spvVersion.vulkan == 0)
                         if (dim == EsdSubpass && spvVersion.vulkan == 0)
                             continue;
                             continue;
                         if (dim == EsdSubpass && (image || shadow || arrayed))
                         if (dim == EsdSubpass && (image || shadow || arrayed))
@@ -6132,9 +6086,6 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     profile = EEsProfile;
     version = 310;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 #endif
 
 
     //
     //
@@ -6211,8 +6162,8 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
                                     continue;
                                     continue;
 
 
                                 // loop over 16-bit floating-point texel addressing
                                 // loop over 16-bit floating-point texel addressing
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
-                                const bool f16TexAddr = false;
+#ifdef GLSLANG_WEB
+                                const int f16TexAddr = 0;
 #else
 #else
                                 for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
                                 for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
 #endif
 #endif
@@ -6224,8 +6175,8 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
                                         totalDims--;
                                         totalDims--;
                                     }
                                     }
                                     // loop over "bool" lod clamp
                                     // loop over "bool" lod clamp
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
-                                    const bool lodClamp = false;
+#ifdef GLSLANG_WEB
+                                    const int lodClamp = 0;
 #else
 #else
                                     for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
                                     for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
 #endif
 #endif
@@ -6236,8 +6187,8 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
                                             continue;
                                             continue;
 
 
                                         // loop over "bool" sparse or not
                                         // loop over "bool" sparse or not
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
-                                        const bool sparse = false;
+#ifdef GLSLANG_WEB
+                                        const int sparse = 0;
 #else
 #else
                                         for (int sparse = 0; sparse <= 1; ++sparse)
                                         for (int sparse = 0; sparse <= 1; ++sparse)
 #endif
 #endif
@@ -6420,9 +6371,6 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     profile = EEsProfile;
     version = 310;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 #endif
 
 
     switch (sampler.dim) {
     switch (sampler.dim) {
@@ -6666,9 +6614,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     version = 310;
     version = 310;
     profile = EEsProfile;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 #endif
 
 
     //
     //
@@ -7097,7 +7042,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
         s.append("\n");
         s.append("\n");
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     // atomic counters (some in compute below)
     // atomic counters (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 420)) {
         (profile != EEsProfile && version >= 420)) {
@@ -7134,7 +7078,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
 
 
         s.append("\n");
         s.append("\n");
     }
     }
-#endif // !GLSLANG_ANGLE
 
 
     // GL_ARB_cull_distance
     // GL_ARB_cull_distance
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
@@ -7151,7 +7094,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
         s.append(builtInConstant);
         s.append(builtInConstant);
     }
     }
 
 
-#ifndef GLSLANG_ANGLE
     // SPV_NV_mesh_shader
     // SPV_NV_mesh_shader
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
         snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
@@ -7174,7 +7116,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
 
 
         s.append("\n");
         s.append("\n");
     }
     }
-#endif
 #endif
 #endif
 
 
     s.append("\n");
     s.append("\n");
@@ -7259,9 +7200,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     version = 310;
     version = 310;
     profile = EEsProfile;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 #endif
 
 
     //
     //
@@ -7451,7 +7389,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 
 
     case EShLangTessEvaluation:
     case EShLangTessEvaluation:
     case EShLangGeometry:
     case EShLangGeometry:
-#endif // !GLSLANG_WEB
+#endif
         SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
         SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
         SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
         SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
 
 
@@ -7612,7 +7550,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
         }
-#endif // !GLSLANG_WEB
+#endif
         break;
         break;
 
 
     case EShLangFragment:
     case EShLangFragment:
@@ -8118,7 +8056,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
         }
         }
 
 
         symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
         symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
-#endif // !GLSLANG_WEB
+#endif
         break;
         break;
 
 
     case EShLangCompute:
     case EShLangCompute:
@@ -8250,10 +8188,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
         }
         }
-#endif // !GLSLANG_WEB
+#endif
         break;
         break;
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     case EShLangRayGen:
     case EShLangRayGen:
     case EShLangIntersect:
     case EShLangIntersect:
     case EShLangAnyHit:
     case EShLangAnyHit:
@@ -9156,7 +9094,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
     default:
     default:
         assert(false && "Language not supported");
         assert(false && "Language not supported");
     }
     }
-#endif // !GLSLANG_WEB
+#endif
 }
 }
 
 
 //
 //
@@ -9171,10 +9109,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
 {
 {
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
-#if defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
-#endif
     if (profile != EEsProfile && version >= 430 && version < 440) {
     if (profile != EEsProfile && version >= 430 && version < 440) {
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);

+ 64 - 92
glslang/MachineIndependent/Scan.cpp

@@ -49,15 +49,10 @@
 #include "SymbolTable.h"
 #include "SymbolTable.h"
 #include "ParseHelper.h"
 #include "ParseHelper.h"
 #include "attribute.h"
 #include "attribute.h"
+#include "glslang_tab.cpp.h"
 #include "ScanContext.h"
 #include "ScanContext.h"
 #include "Scan.h"
 #include "Scan.h"
 
 
-#ifdef GLSLANG_ANGLE
-#include "glslang_angle_tab.cpp.h"
-#else
-#include "glslang_tab.cpp.h"
-#endif
-
 // preprocessor includes
 // preprocessor includes
 #include "preprocessor/PpContext.h"
 #include "preprocessor/PpContext.h"
 #include "preprocessor/PpTokens.h"
 #include "preprocessor/PpTokens.h"
@@ -411,28 +406,25 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["uvec4"] =                   UVEC4;
     (*KeywordMap)["uvec4"] =                   UVEC4;
 
 
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
+    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
+    (*KeywordMap)["demote"] =                  DEMOTE;
     (*KeywordMap)["attribute"] =               ATTRIBUTE;
     (*KeywordMap)["attribute"] =               ATTRIBUTE;
     (*KeywordMap)["varying"] =                 VARYING;
     (*KeywordMap)["varying"] =                 VARYING;
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
-    (*KeywordMap)["precise"] =                 PRECISE;
     (*KeywordMap)["coherent"] =                COHERENT;
     (*KeywordMap)["coherent"] =                COHERENT;
-    (*KeywordMap)["restrict"] =                RESTRICT;
-    (*KeywordMap)["readonly"] =                READONLY;
-    (*KeywordMap)["writeonly"] =               WRITEONLY;
-    (*KeywordMap)["volatile"] =                VOLATILE;
-    (*KeywordMap)["patch"] =                   PATCH;
-    (*KeywordMap)["sample"] =                  SAMPLE;
-
-#ifndef GLSLANG_ANGLE
-    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
-    (*KeywordMap)["demote"] =                  DEMOTE;
     (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
     (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
     (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
     (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
     (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
     (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
     (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
     (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
     (*KeywordMap)["shadercallcoherent"] =      SHADERCALLCOHERENT;
     (*KeywordMap)["shadercallcoherent"] =      SHADERCALLCOHERENT;
     (*KeywordMap)["nonprivate"] =              NONPRIVATE;
     (*KeywordMap)["nonprivate"] =              NONPRIVATE;
+    (*KeywordMap)["restrict"] =                RESTRICT;
+    (*KeywordMap)["readonly"] =                READONLY;
+    (*KeywordMap)["writeonly"] =               WRITEONLY;
     (*KeywordMap)["atomic_uint"] =             ATOMIC_UINT;
     (*KeywordMap)["atomic_uint"] =             ATOMIC_UINT;
+    (*KeywordMap)["volatile"] =                VOLATILE;
+    (*KeywordMap)["patch"] =                   PATCH;
+    (*KeywordMap)["sample"] =                  SAMPLE;
     (*KeywordMap)["subroutine"] =              SUBROUTINE;
     (*KeywordMap)["subroutine"] =              SUBROUTINE;
     (*KeywordMap)["dmat2"] =                   DMAT2;
     (*KeywordMap)["dmat2"] =                   DMAT2;
     (*KeywordMap)["dmat3"] =                   DMAT3;
     (*KeywordMap)["dmat3"] =                   DMAT3;
@@ -449,10 +441,6 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["image1D"] =                 IMAGE1D;
     (*KeywordMap)["image1D"] =                 IMAGE1D;
     (*KeywordMap)["iimage1D"] =                IIMAGE1D;
     (*KeywordMap)["iimage1D"] =                IIMAGE1D;
     (*KeywordMap)["uimage1D"] =                UIMAGE1D;
     (*KeywordMap)["uimage1D"] =                UIMAGE1D;
-    (*KeywordMap)["image1DArray"] =            IMAGE1DARRAY;
-    (*KeywordMap)["iimage1DArray"] =           IIMAGE1DARRAY;
-    (*KeywordMap)["uimage1DArray"] =           UIMAGE1DARRAY;
-#endif
     (*KeywordMap)["image2D"] =                 IMAGE2D;
     (*KeywordMap)["image2D"] =                 IMAGE2D;
     (*KeywordMap)["iimage2D"] =                IIMAGE2D;
     (*KeywordMap)["iimage2D"] =                IIMAGE2D;
     (*KeywordMap)["uimage2D"] =                UIMAGE2D;
     (*KeywordMap)["uimage2D"] =                UIMAGE2D;
@@ -468,6 +456,9 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["imageBuffer"] =             IMAGEBUFFER;
     (*KeywordMap)["imageBuffer"] =             IMAGEBUFFER;
     (*KeywordMap)["iimageBuffer"] =            IIMAGEBUFFER;
     (*KeywordMap)["iimageBuffer"] =            IIMAGEBUFFER;
     (*KeywordMap)["uimageBuffer"] =            UIMAGEBUFFER;
     (*KeywordMap)["uimageBuffer"] =            UIMAGEBUFFER;
+    (*KeywordMap)["image1DArray"] =            IMAGE1DARRAY;
+    (*KeywordMap)["iimage1DArray"] =           IIMAGE1DARRAY;
+    (*KeywordMap)["uimage1DArray"] =           UIMAGE1DARRAY;
     (*KeywordMap)["image2DArray"] =            IMAGE2DARRAY;
     (*KeywordMap)["image2DArray"] =            IMAGE2DARRAY;
     (*KeywordMap)["iimage2DArray"] =           IIMAGE2DARRAY;
     (*KeywordMap)["iimage2DArray"] =           IIMAGE2DARRAY;
     (*KeywordMap)["uimage2DArray"] =           UIMAGE2DARRAY;
     (*KeywordMap)["uimage2DArray"] =           UIMAGE2DARRAY;
@@ -480,7 +471,6 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["image2DMSArray"] =          IMAGE2DMSARRAY;
     (*KeywordMap)["image2DMSArray"] =          IMAGE2DMSARRAY;
     (*KeywordMap)["iimage2DMSArray"] =         IIMAGE2DMSARRAY;
     (*KeywordMap)["iimage2DMSArray"] =         IIMAGE2DMSARRAY;
     (*KeywordMap)["uimage2DMSArray"] =         UIMAGE2DMSARRAY;
     (*KeywordMap)["uimage2DMSArray"] =         UIMAGE2DMSARRAY;
-#ifndef GLSLANG_ANGLE
     (*KeywordMap)["double"] =                  DOUBLE;
     (*KeywordMap)["double"] =                  DOUBLE;
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec3"] =                   DVEC3;
     (*KeywordMap)["dvec3"] =                   DVEC3;
@@ -571,7 +561,6 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["f64mat4x2"] =               F64MAT4X2;
     (*KeywordMap)["f64mat4x2"] =               F64MAT4X2;
     (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
     (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
     (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
     (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
-#endif
 #endif
 #endif
 
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
@@ -614,16 +603,11 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
     (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
     (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
     (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
     (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
     (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
-#ifndef GLSLANG_ANGLE
-    (*KeywordMap)["sampler1D"] =               SAMPLER1D;
-    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
-    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
-    (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
+    (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
     (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
     (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
+    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
+    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
     (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
     (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
-    (*KeywordMap)["sampler1DShadow"] =         SAMPLER1DSHADOW;
-    (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
-#endif
     (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
     (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
     (*KeywordMap)["isampler2DRect"] =          ISAMPLER2DRECT;
     (*KeywordMap)["isampler2DRect"] =          ISAMPLER2DRECT;
     (*KeywordMap)["usampler2DRect"] =          USAMPLER2DRECT;
     (*KeywordMap)["usampler2DRect"] =          USAMPLER2DRECT;
@@ -635,21 +619,20 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["sampler2DMSArray"] =        SAMPLER2DMSARRAY;
     (*KeywordMap)["sampler2DMSArray"] =        SAMPLER2DMSARRAY;
     (*KeywordMap)["isampler2DMSArray"] =       ISAMPLER2DMSARRAY;
     (*KeywordMap)["isampler2DMSArray"] =       ISAMPLER2DMSARRAY;
     (*KeywordMap)["usampler2DMSArray"] =       USAMPLER2DMSARRAY;
     (*KeywordMap)["usampler2DMSArray"] =       USAMPLER2DMSARRAY;
+    (*KeywordMap)["sampler1D"] =               SAMPLER1D;
+    (*KeywordMap)["sampler1DShadow"] =         SAMPLER1DSHADOW;
     (*KeywordMap)["sampler2DRect"] =           SAMPLER2DRECT;
     (*KeywordMap)["sampler2DRect"] =           SAMPLER2DRECT;
     (*KeywordMap)["sampler2DRectShadow"] =     SAMPLER2DRECTSHADOW;
     (*KeywordMap)["sampler2DRectShadow"] =     SAMPLER2DRECTSHADOW;
+    (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
 
 
     (*KeywordMap)["samplerExternalOES"] =      SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
     (*KeywordMap)["samplerExternalOES"] =      SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
 
 
     (*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
     (*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
 
 
-#ifndef GLSLANG_ANGLE
-    (*KeywordMap)["texture1D"] =               TEXTURE1D;
-    (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
-    (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
-    (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
     (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
     (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
+    (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
+    (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
     (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
     (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
-#endif
     (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
     (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
     (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
     (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
     (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
     (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
@@ -661,9 +644,10 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["texture2DMSArray"] =        TEXTURE2DMSARRAY;
     (*KeywordMap)["texture2DMSArray"] =        TEXTURE2DMSARRAY;
     (*KeywordMap)["itexture2DMSArray"] =       ITEXTURE2DMSARRAY;
     (*KeywordMap)["itexture2DMSArray"] =       ITEXTURE2DMSARRAY;
     (*KeywordMap)["utexture2DMSArray"] =       UTEXTURE2DMSARRAY;
     (*KeywordMap)["utexture2DMSArray"] =       UTEXTURE2DMSARRAY;
+    (*KeywordMap)["texture1D"] =               TEXTURE1D;
     (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
     (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
+    (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
 
 
-#ifndef GLSLANG_ANGLE
     (*KeywordMap)["subpassInput"] =            SUBPASSINPUT;
     (*KeywordMap)["subpassInput"] =            SUBPASSINPUT;
     (*KeywordMap)["subpassInputMS"] =          SUBPASSINPUTMS;
     (*KeywordMap)["subpassInputMS"] =          SUBPASSINPUTMS;
     (*KeywordMap)["isubpassInput"] =           ISUBPASSINPUT;
     (*KeywordMap)["isubpassInput"] =           ISUBPASSINPUT;
@@ -718,6 +702,7 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
     (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
     (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
     (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
     (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
     (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
+    (*KeywordMap)["precise"] =                 PRECISE;
 
 
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
     (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
     (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
@@ -739,7 +724,6 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
     (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
     (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
     (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
-#endif
 
 
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
 
 
@@ -871,7 +855,7 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
         case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
         case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
         case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
         case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
         case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
         case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
         case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
         case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
         case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
         case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
         case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
@@ -1020,17 +1004,16 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
         return es30ReservedFromGLSL(130);
         return es30ReservedFromGLSL(130);
 
 
-    case ATTRIBUTE:
-    case VARYING:
-        if (parseContext.isEsProfile() && parseContext.version >= 300)
-            reservedWord();
-        return keyword;
-#ifndef GLSLANG_ANGLE
     case NONUNIFORM:
     case NONUNIFORM:
         if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
         if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
             return keyword;
             return keyword;
         else
         else
             return identifierOrType();
             return identifierOrType();
+    case ATTRIBUTE:
+    case VARYING:
+        if (parseContext.isEsProfile() && parseContext.version >= 300)
+            reservedWord();
+        return keyword;
     case PAYLOADNV:
     case PAYLOADNV:
     case PAYLOADINNV:
     case PAYLOADINNV:
     case HITATTRNV:
     case HITATTRNV:
@@ -1064,17 +1047,13 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
         return es30ReservedFromGLSL(420);
         return es30ReservedFromGLSL(420);
 
 
-    case SUBROUTINE:
-        return es30ReservedFromGLSL(400);
-
+    case COHERENT:
     case DEVICECOHERENT:
     case DEVICECOHERENT:
     case QUEUEFAMILYCOHERENT:
     case QUEUEFAMILYCOHERENT:
     case WORKGROUPCOHERENT:
     case WORKGROUPCOHERENT:
     case SUBGROUPCOHERENT:
     case SUBGROUPCOHERENT:
     case SHADERCALLCOHERENT:
     case SHADERCALLCOHERENT:
     case NONPRIVATE:
     case NONPRIVATE:
-#endif
-    case COHERENT:
     case RESTRICT:
     case RESTRICT:
     case READONLY:
     case READONLY:
     case WRITEONLY:
     case WRITEONLY:
@@ -1103,6 +1082,9 @@ int TScanContext::tokenizeIdentifier()
             parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
             parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
             return keyword;
             return keyword;
         return es30ReservedFromGLSL(400);
         return es30ReservedFromGLSL(400);
+
+    case SUBROUTINE:
+        return es30ReservedFromGLSL(400);
 #endif
 #endif
     case SHARED:
     case SHARED:
         if ((parseContext.isEsProfile() && parseContext.version < 300) ||
         if ((parseContext.isEsProfile() && parseContext.version < 300) ||
@@ -1139,7 +1121,6 @@ int TScanContext::tokenizeIdentifier()
         return matNxM();
         return matNxM();
 
 
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     case DMAT2:
     case DMAT2:
     case DMAT3:
     case DMAT3:
     case DMAT4:
     case DMAT4:
@@ -1160,7 +1141,6 @@ int TScanContext::tokenizeIdentifier()
     case IMAGE1DARRAY:
     case IMAGE1DARRAY:
     case IIMAGE1DARRAY:
     case IIMAGE1DARRAY:
     case UIMAGE1DARRAY:
     case UIMAGE1DARRAY:
-#endif
     case IMAGE2DRECT:
     case IMAGE2DRECT:
     case IIMAGE2DRECT:
     case IIMAGE2DRECT:
     case UIMAGE2DRECT:
     case UIMAGE2DRECT:
@@ -1209,7 +1189,6 @@ int TScanContext::tokenizeIdentifier()
         afterType = true;
         afterType = true;
         return secondGenerationImage();
         return secondGenerationImage();
 
 
-#ifndef GLSLANG_ANGLE
     case DOUBLE:
     case DOUBLE:
     case DVEC2:
     case DVEC2:
     case DVEC3:
     case DVEC3:
@@ -1364,7 +1343,6 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
 
 
         return identifierOrType();
         return identifierOrType();
-#endif
 
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
     case SAMPLERCUBEARRAYSHADOW:
@@ -1441,7 +1419,6 @@ int TScanContext::tokenizeIdentifier()
             return identifierOrType();
             return identifierOrType();
 
 
 #ifndef GLSLANG_WEB
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     case ISAMPLER1D:
     case ISAMPLER1D:
     case ISAMPLER1DARRAY:
     case ISAMPLER1DARRAY:
     case SAMPLER1DARRAYSHADOW:
     case SAMPLER1DARRAYSHADOW:
@@ -1449,23 +1426,6 @@ int TScanContext::tokenizeIdentifier()
     case USAMPLER1DARRAY:
     case USAMPLER1DARRAY:
         afterType = true;
         afterType = true;
         return es30ReservedFromGLSL(130);
         return es30ReservedFromGLSL(130);
-
-    case SAMPLER1D:
-    case SAMPLER1DSHADOW:
-        afterType = true;
-        if (parseContext.isEsProfile())
-            reservedWord();
-        return keyword;
-
-    case SAMPLER1DARRAY:
-        afterType = true;
-        if (parseContext.isEsProfile() && parseContext.version == 300)
-            reservedWord();
-        else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
-                 (!parseContext.isEsProfile() && parseContext.version < 130))
-            return identifierOrType();
-        return keyword;
-#endif
     case ISAMPLER2DRECT:
     case ISAMPLER2DRECT:
     case USAMPLER2DRECT:
     case USAMPLER2DRECT:
         afterType = true;
         afterType = true;
@@ -1509,6 +1469,13 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
         return es30ReservedFromGLSL(150);
         return es30ReservedFromGLSL(150);
 
 
+    case SAMPLER1D:
+    case SAMPLER1DSHADOW:
+        afterType = true;
+        if (parseContext.isEsProfile())
+            reservedWord();
+        return keyword;
+
     case SAMPLER2DRECT:
     case SAMPLER2DRECT:
     case SAMPLER2DRECTSHADOW:
     case SAMPLER2DRECTSHADOW:
         afterType = true;
         afterType = true;
@@ -1522,6 +1489,15 @@ int TScanContext::tokenizeIdentifier()
         }
         }
         return keyword;
         return keyword;
 
 
+    case SAMPLER1DARRAY:
+        afterType = true;
+        if (parseContext.isEsProfile() && parseContext.version == 300)
+            reservedWord();
+        else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+                 (!parseContext.isEsProfile() && parseContext.version < 130))
+            return identifierOrType();
+        return keyword;
+
     case SAMPLEREXTERNALOES:
     case SAMPLEREXTERNALOES:
         afterType = true;
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
         if (parseContext.symbolTable.atBuiltInLevel() ||
@@ -1537,14 +1513,10 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
         return identifierOrType();
         return identifierOrType();
 
 
-#ifndef GLSLANG_ANGLE
-    case TEXTURE1D:
-    case ITEXTURE1D:
-    case UTEXTURE1D:
-    case TEXTURE1DARRAY:
     case ITEXTURE1DARRAY:
     case ITEXTURE1DARRAY:
+    case UTEXTURE1D:
+    case ITEXTURE1D:
     case UTEXTURE1DARRAY:
     case UTEXTURE1DARRAY:
-#endif
     case TEXTUREBUFFER:
     case TEXTUREBUFFER:
     case ITEXTURE2DRECT:
     case ITEXTURE2DRECT:
     case UTEXTURE2DRECT:
     case UTEXTURE2DRECT:
@@ -1556,24 +1528,14 @@ int TScanContext::tokenizeIdentifier()
     case TEXTURE2DMSARRAY:
     case TEXTURE2DMSARRAY:
     case ITEXTURE2DMSARRAY:
     case ITEXTURE2DMSARRAY:
     case UTEXTURE2DMSARRAY:
     case UTEXTURE2DMSARRAY:
+    case TEXTURE1D:
     case TEXTURE2DRECT:
     case TEXTURE2DRECT:
+    case TEXTURE1DARRAY:
         if (parseContext.spvVersion.vulkan > 0)
         if (parseContext.spvVersion.vulkan > 0)
             return keyword;
             return keyword;
         else
         else
             return identifierOrType();
             return identifierOrType();
 
 
-    case PRECISE:
-        if ((parseContext.isEsProfile() &&
-             (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
-            (!parseContext.isEsProfile() && parseContext.version >= 400))
-            return keyword;
-        if (parseContext.isEsProfile() && parseContext.version == 310) {
-            reservedWord();
-            return keyword;
-        }
-        return identifierOrType();
-
-#ifndef GLSLANG_ANGLE
     case SUBPASSINPUT:
     case SUBPASSINPUT:
     case SUBPASSINPUTMS:
     case SUBPASSINPUTMS:
     case ISUBPASSINPUT:
     case ISUBPASSINPUT:
@@ -1647,6 +1609,17 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
         return identifierOrType();
         return identifierOrType();
 
 
+    case PRECISE:
+        if ((parseContext.isEsProfile() &&
+             (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
+            (!parseContext.isEsProfile() && parseContext.version >= 400))
+            return keyword;
+        if (parseContext.isEsProfile() && parseContext.version == 310) {
+            reservedWord();
+            return keyword;
+        }
+        return identifierOrType();
+
     case PERPRIMITIVENV:
     case PERPRIMITIVENV:
     case PERVIEWNV:
     case PERVIEWNV:
     case PERTASKNV:
     case PERTASKNV:
@@ -1676,7 +1649,6 @@ int TScanContext::tokenizeIdentifier()
             return keyword;
             return keyword;
         else
         else
             return identifierOrType();
             return identifierOrType();
-#endif
 #endif
 #endif
 
 
     default:
     default:

+ 14 - 29
glslang/MachineIndependent/ShaderLang.cpp

@@ -294,9 +294,6 @@ void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int versi
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     profile = EEsProfile;
     version = 310;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 #endif
 
 
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
@@ -318,9 +315,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     profile = EEsProfile;
     version = 310;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 #endif
 
 
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
@@ -360,6 +354,7 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
         (profile == EEsProfile && version >= 310))
         (profile == EEsProfile && version >= 310))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
                                    infoSink, commonTable, symbolTables);
                                    infoSink, commonTable, symbolTables);
+#endif
 
 
     // check for compute
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
     if ((profile != EEsProfile && version >= 420) ||
@@ -367,7 +362,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
                                    infoSink, commonTable, symbolTables);
                                    infoSink, commonTable, symbolTables);
 
 
-#ifndef GLSLANG_ANGLE
     // check for ray tracing stages
     // check for ray tracing stages
     if (profile != EEsProfile && version >= 450) {
     if (profile != EEsProfile && version >= 450) {
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
@@ -395,8 +389,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
         (profile == EEsProfile && version >= 320))
         (profile == EEsProfile && version >= 320))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
                                    infoSink, commonTable, symbolTables);
                                    infoSink, commonTable, symbolTables);
-#endif // !GLSLANG_ANGLE
-#endif // !GLSLANG_WEB
 
 
     return true;
     return true;
 }
 }
@@ -498,7 +490,7 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
 // Function to Print all builtins
 // Function to Print all builtins
 void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
 void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
 {
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     infoSink.debug << "BuiltinSymbolTable {\n";
     infoSink.debug << "BuiltinSymbolTable {\n";
 
 
     symbolTable.dump(infoSink, true);
     symbolTable.dump(infoSink, true);
@@ -602,7 +594,7 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
         break;
         break;
     }
     }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     // Correct for stage type...
     // Correct for stage type...
     switch (stage) {
     switch (stage) {
     case EShLangGeometry:
     case EShLangGeometry:
@@ -878,7 +870,7 @@ bool ProcessDeferred(
                                 : userInput.scanVersion(version, profile, versionNotFirstToken);
                                 : userInput.scanVersion(version, profile, versionNotFirstToken);
     bool versionNotFound = version == 0;
     bool versionNotFound = version == 0;
     if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
     if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
         if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
             (version != defaultVersion || profile != defaultProfile)) {
             (version != defaultVersion || profile != defaultProfile)) {
             compiler->infoSink.info << "Warning, (version, profile) forced to be ("
             compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -901,13 +893,10 @@ bool ProcessDeferred(
 #ifdef GLSLANG_WEB
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     profile = EEsProfile;
     version = 310;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 #endif
 
 
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     bool warnVersionNotFirst = false;
     bool warnVersionNotFirst = false;
     if (! versionWillBeError && versionNotFirstToken) {
     if (! versionWillBeError && versionNotFirstToken) {
         if (messages & EShMsgRelaxedErrors)
         if (messages & EShMsgRelaxedErrors)
@@ -977,7 +966,7 @@ bool ProcessDeferred(
     parseContext->setLimits(*resources);
     parseContext->setLimits(*resources);
     if (! goodVersion)
     if (! goodVersion)
         parseContext->addError();
         parseContext->addError();
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     if (warnVersionNotFirst) {
     if (warnVersionNotFirst) {
         TSourceLoc loc;
         TSourceLoc loc;
         loc.init();
         loc.init();
@@ -1014,7 +1003,7 @@ bool ProcessDeferred(
     return success;
     return success;
 }
 }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 // Responsible for keeping track of the most recent source string and line in
 // Responsible for keeping track of the most recent source string and line in
 // the preprocessor and outputting newlines appropriately if the source string
 // the preprocessor and outputting newlines appropriately if the source string
@@ -1237,16 +1226,14 @@ struct DoFullParse{
             parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
             parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
         }
         }
 
 
-#ifndef GLSLANG_ANGLE
         if (messages & EShMsgAST)
         if (messages & EShMsgAST)
             intermediate.output(parseContext.infoSink, true);
             intermediate.output(parseContext.infoSink, true);
-#endif
 
 
         return success;
         return success;
     }
     }
 };
 };
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 // Take a single compilation unit, and run the preprocessor on it.
 // Take a single compilation unit, and run the preprocessor on it.
 // Return: True if there were no issues found in preprocessing,
 // Return: True if there were no issues found in preprocessing,
 //         False if during preprocessing any unknown version, pragmas or
 //         False if during preprocessing any unknown version, pragmas or
@@ -1886,7 +1873,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion
                            &environment);
                            &environment);
 }
 }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 // Fill in a string with the result of preprocessing ShaderStrings
 // Fill in a string with the result of preprocessing ShaderStrings
 // Returns true if all extensions, pragmas and version strings were valid.
 // Returns true if all extensions, pragmas and version strings were valid.
 //
 //
@@ -1924,7 +1911,7 @@ const char* TShader::getInfoDebugLog()
 }
 }
 
 
 TProgram::TProgram() :
 TProgram::TProgram() :
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     reflection(0),
     reflection(0),
 #endif
 #endif
     linked(false)
     linked(false)
@@ -1940,7 +1927,7 @@ TProgram::TProgram() :
 TProgram::~TProgram()
 TProgram::~TProgram()
 {
 {
     delete infoSink;
     delete infoSink;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     delete reflection;
     delete reflection;
 #endif
 #endif
 
 
@@ -1987,7 +1974,7 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages)
     if (stages[stage].size() == 0)
     if (stages[stage].size() == 0)
         return true;
         return true;
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     int numEsShaders = 0, numNonEsShaders = 0;
     int numEsShaders = 0, numNonEsShaders = 0;
     for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
     for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
         if ((*it)->intermediate->getProfile() == EEsProfile) {
         if ((*it)->intermediate->getProfile() == EEsProfile) {
@@ -2041,10 +2028,8 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages)
 #endif
 #endif
     intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
     intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
 
 
-#ifndef GLSLANG_ANGLE
     if (messages & EShMsgAST)
     if (messages & EShMsgAST)
         intermediate[stage]->output(*infoSink, true);
         intermediate[stage]->output(*infoSink, true);
-#endif
 
 
     return intermediate[stage]->getNumErrors() == 0;
     return intermediate[stage]->getNumErrors() == 0;
 }
 }
@@ -2059,7 +2044,7 @@ const char* TProgram::getInfoDebugLog()
     return infoSink->debug.c_str();
     return infoSink->debug.c_str();
 }
 }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 //
 //
 // Reflection implementation.
 // Reflection implementation.
@@ -2141,6 +2126,6 @@ bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper)
     return ioMapper->doMap(pResolver, *infoSink);
     return ioMapper->doMap(pResolver, *infoSink);
 }
 }
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB
 
 
 } // end namespace glslang
 } // end namespace glslang

+ 1 - 1
glslang/MachineIndependent/SymbolTable.cpp

@@ -178,7 +178,7 @@ void TType::buildMangledName(TString& mangledName) const
     }
     }
 }
 }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 //
 //
 // Dump functions.
 // Dump functions.

+ 6 - 6
glslang/MachineIndependent/SymbolTable.h

@@ -117,7 +117,7 @@ public:
     virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); }
     virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); }
     virtual const char** getExtensions() const { return extensions->data(); }
     virtual const char** getExtensions() const { return extensions->data(); }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0;
     virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0;
     void dumpExtensions(TInfoSink& infoSink) const;
     void dumpExtensions(TInfoSink& infoSink) const;
 #endif
 #endif
@@ -196,7 +196,7 @@ public:
     }
     }
     virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); }
     virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     virtual void dump(TInfoSink& infoSink, bool complete = false) const;
     virtual void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
 #endif
 
 
@@ -319,7 +319,7 @@ public:
     virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; }
     virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; }
     virtual const TParameter& operator[](int i) const { return parameters[i]; }
     virtual const TParameter& operator[](int i) const { return parameters[i]; }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
     virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
 #endif
 #endif
 
 
@@ -381,7 +381,7 @@ public:
     virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); }
     virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); }
 
 
     virtual int getAnonId() const { return anonId; }
     virtual int getAnonId() const { return anonId; }
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
     virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
 #endif
 #endif
 
 
@@ -551,7 +551,7 @@ public:
 
 
     void relateToOperator(const char* name, TOperator op);
     void relateToOperator(const char* name, TOperator op);
     void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
     void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     void dump(TInfoSink& infoSink, bool complete = false) const;
     void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
 #endif
     TSymbolTableLevel* clone() const;
     TSymbolTableLevel* clone() const;
@@ -854,7 +854,7 @@ public:
     }
     }
 
 
     int getMaxSymbolId() { return uniqueId; }
     int getMaxSymbolId() { return uniqueId; }
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     void dump(TInfoSink& infoSink, bool complete = false) const;
     void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
 #endif
     void copyTable(const TSymbolTable& copyOf);
     void copyTable(const TSymbolTable& copyOf);

+ 197 - 270
glslang/MachineIndependent/glslang.m4

@@ -58,16 +58,10 @@
 //
 //
 //    m4 -P
 //    m4 -P
 //
 //
-// A similar mechanism is used to exclude grammar for ANGLE with
-// GLSLANG_ANGLE_EXCLUDE_ON, GLSLANG_ANGLE_EXCLUDE_OFF and -DGLSLANG_ANGLE
-//
 
 
 m4_define(`GLSLANG_WEB_EXCLUDE_ON', `m4_ifdef(`GLSLANG_WEB', `m4_divert(`-1')')')
 m4_define(`GLSLANG_WEB_EXCLUDE_ON', `m4_ifdef(`GLSLANG_WEB', `m4_divert(`-1')')')
 m4_define(`GLSLANG_WEB_EXCLUDE_OFF', `m4_ifdef(`GLSLANG_WEB', `m4_divert')')
 m4_define(`GLSLANG_WEB_EXCLUDE_OFF', `m4_ifdef(`GLSLANG_WEB', `m4_divert')')
 
 
-m4_define(`GLSLANG_ANGLE_EXCLUDE_ON', `m4_ifdef(`GLSLANG_ANGLE', `m4_divert(`-1')')')
-m4_define(`GLSLANG_ANGLE_EXCLUDE_OFF', `m4_ifdef(`GLSLANG_ANGLE', `m4_divert')')
-
 /**
 /**
  * This is bison grammar and productions for parsing all versions of the
  * This is bison grammar and productions for parsing all versions of the
  * GLSL shading languages.
  * GLSL shading languages.
@@ -183,9 +177,6 @@ extern int yylex(YYSTYPE*, TParseContext&);
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
 
 
 %token <lex> ATTRIBUTE VARYING
 %token <lex> ATTRIBUTE VARYING
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
 %token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
 %token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> I64VEC2 I64VEC3 I64VEC4
 %token <lex> I64VEC2 I64VEC3 I64VEC4
@@ -218,31 +209,23 @@ GLSLANG_ANGLE_EXCLUDE_ON
 %token <lex> RAYQUERYEXT
 %token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 // combined image/sampler
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
 %token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
 %token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
 %token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
 %token <lex> SAMPLEREXTERNALOES
 %token <lex> SAMPLEREXTERNALOES
 %token <lex> SAMPLEREXTERNAL2DY2YEXT
 %token <lex> SAMPLEREXTERNAL2DY2YEXT
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
-%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
 %token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
-
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 // images
 // images
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
@@ -255,14 +238,10 @@ GLSLANG_ANGLE_EXCLUDE_OFF
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 
 
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
 %token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 // texture without sampler
 // texture without sampler
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@@ -272,8 +251,6 @@ GLSLANG_ANGLE_EXCLUDE_OFF
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
 
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
 %token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
 %token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
 %token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
 %token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
 %token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
@@ -282,8 +259,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
 %token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
 %token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
 %token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
 %token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
 
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 
 
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> LEFT_OP RIGHT_OP
@@ -310,26 +285,16 @@ GLSLANG_WEB_EXCLUDE_OFF
 %token <lex> FLAT SMOOTH LAYOUT
 %token <lex> FLAT SMOOTH LAYOUT
 
 
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
-%token <lex> NONUNIFORM
-%token <lex> DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> PATCH SAMPLE NONUNIFORM
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
-
-GLSLANG_ANGLE_EXCLUDE_OFF
-
-%token <lex> PATCH SAMPLE 
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
-%token <lex> NOPERSPECTIVE
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
 %token <lex> PRECISE
 %token <lex> PRECISE
-
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 
 
 %type <interm> assignment_operator unary_operator
 %type <interm> assignment_operator unary_operator
@@ -378,19 +343,11 @@ GLSLANG_WEB_EXCLUDE_OFF
 %type <interm.identifierList> identifier_list
 %type <interm.identifierList> identifier_list
 
 
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
-%type <interm.type> non_uniform_qualifier
-%type <interm.intermNode> demote_statement
-
-GLSLANG_ANGLE_EXCLUDE_OFF
-
-%type <interm.type> precise_qualifier
+%type <interm.type> precise_qualifier non_uniform_qualifier
 %type <interm.typeList> type_name_list
 %type <interm.typeList> type_name_list
 %type <interm.attributes> attribute attribute_list single_attribute
 %type <interm.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
 %type <interm.intermTypedNode> initializer_list
 %type <interm.intermTypedNode> initializer_list
-
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 
 
 %start translation_unit
 %start translation_unit
@@ -425,7 +382,6 @@ primary_expression
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
     }
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | STRING_LITERAL {
     | STRING_LITERAL {
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
     }
     }
@@ -463,7 +419,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
         parseContext.float16Check($1.loc, "half float literal");
         parseContext.float16Check($1.loc, "half float literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
     ;
 
 
@@ -591,13 +546,11 @@ function_identifier
         }
         }
     }
     }
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | non_uniform_qualifier {
     | non_uniform_qualifier {
         // Constructor
         // Constructor
         $$.intermNode = 0;
         $$.intermNode = 0;
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
     ;
 
 
@@ -1254,7 +1207,6 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
         $$.qualifier.nopersp = true;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | EXPLICITINTERPAMD {
     | EXPLICITINTERPAMD {
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -1294,7 +1246,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
         $$.qualifier.perTaskNV = true;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
     ;
 
 
@@ -1379,11 +1330,9 @@ GLSLANG_WEB_EXCLUDE_ON
         // allow inheritance of storage qualifier from block declaration
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
         $$ = $1;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | non_uniform_qualifier {
     | non_uniform_qualifier {
         $$ = $1;
         $$ = $1;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
     ;
 
 
@@ -1472,7 +1421,6 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.sample = true;
         $$.qualifier.sample = true;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | HITATTRNV {
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -1551,6 +1499,10 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.storage = EvqCallableDataIn;
         $$.qualifier.storage = EvqCallableDataIn;
     }
     }
+    | COHERENT {
+        $$.init($1.loc);
+        $$.qualifier.coherent = true;
+    }
     | DEVICECOHERENT {
     | DEVICECOHERENT {
         $$.init($1.loc);
         $$.init($1.loc);
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
@@ -1581,23 +1533,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         $$.qualifier.shadercallcoherent = true;
         $$.qualifier.shadercallcoherent = true;
     }
     }
-    | SUBROUTINE {
-        parseContext.spvRemoved($1.loc, "subroutine");
-        parseContext.globalCheck($1.loc, "subroutine");
-        parseContext.unimplemented($1.loc, "subroutine");
-        $$.init($1.loc);
-    }
-    | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
-        parseContext.spvRemoved($1.loc, "subroutine");
-        parseContext.globalCheck($1.loc, "subroutine");
-        parseContext.unimplemented($1.loc, "subroutine");
-        $$.init($1.loc);
-    }
-GLSLANG_ANGLE_EXCLUDE_OFF
-    | COHERENT {
-        $$.init($1.loc);
-        $$.qualifier.coherent = true;
-    }
     | VOLATILE {
     | VOLATILE {
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.volatil = true;
         $$.qualifier.volatil = true;
@@ -1614,18 +1549,28 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.writeonly = true;
         $$.qualifier.writeonly = true;
     }
     }
+    | SUBROUTINE {
+        parseContext.spvRemoved($1.loc, "subroutine");
+        parseContext.globalCheck($1.loc, "subroutine");
+        parseContext.unimplemented($1.loc, "subroutine");
+        $$.init($1.loc);
+    }
+    | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
+        parseContext.spvRemoved($1.loc, "subroutine");
+        parseContext.globalCheck($1.loc, "subroutine");
+        parseContext.unimplemented($1.loc, "subroutine");
+        $$.init($1.loc);
+    }
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
     ;
 
 
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
 non_uniform_qualifier
 non_uniform_qualifier
     : NONUNIFORM {
     : NONUNIFORM {
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.nonUniform = true;
         $$.qualifier.nonUniform = true;
     }
     }
     ;
     ;
-GLSLANG_ANGLE_EXCLUDE_OFF
 
 
 type_name_list
 type_name_list
     : IDENTIFIER {
     : IDENTIFIER {
@@ -1859,7 +1804,6 @@ type_specifier_nonarray
         $$.setMatrix(4, 4);
         $$.setMatrix(4, 4);
     }
     }
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | DOUBLE {
     | DOUBLE {
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -2478,7 +2422,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D);
         $$.sampler.set(EbtFloat, Esd1D);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | SAMPLER2D {
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2516,17 +2459,6 @@ GLSLANG_WEB_EXCLUDE_OFF
         $$.sampler.set(EbtFloat, Esd2D, true, true);
         $$.sampler.set(EbtFloat, Esd2D, true, true);
     }
     }
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-    | SAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, true);
-    }
-    | SAMPLERCUBEARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, true, true);
-    }
-GLSLANG_ANGLE_EXCLUDE_ON
     | SAMPLER1DSHADOW {
     | SAMPLER1DSHADOW {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2542,6 +2474,16 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D, true, true);
         $$.sampler.set(EbtFloat, Esd1D, true, true);
     }
     }
+    | SAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, true);
+    }
+    | SAMPLERCUBEARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, true, true);
+    }
     | F16SAMPLER1D {
     | F16SAMPLER1D {
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2625,7 +2567,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd1D);
         $$.sampler.set(EbtInt, Esd1D);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | ISAMPLER2D {
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2663,11 +2604,26 @@ GLSLANG_WEB_EXCLUDE_OFF
         $$.sampler.set(EbtUint, EsdCube);
         $$.sampler.set(EbtUint, EsdCube);
     }
     }
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
     | ISAMPLERCUBEARRAY {
     | ISAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, EsdCube, true);
         $$.sampler.set(EbtInt, EsdCube, true);
     }
     }
+    | USAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D);
+    }
+    | USAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D, true);
+    }
     | USAMPLERCUBEARRAY {
     | USAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2688,23 +2644,6 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, EsdCube, true);
         $$.sampler.setTexture(EbtUint, EsdCube, true);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_ON
-    | ISAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd1D, true);
-    }
-    | USAMPLER1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D);
-    }
-    | USAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D, true);
-    }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | USAMPLER2DARRAY {
     | USAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2792,6 +2731,18 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdRect, false, true);
         $$.sampler.set(EbtFloat, EsdRect, false, true);
     }
     }
+    | F16SAMPLER2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect);
+    }
+    | F16SAMPLER2DRECTSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect, false, true);
+    }
     | ISAMPLER2DRECT {
     | ISAMPLER2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2807,6 +2758,12 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdBuffer);
         $$.sampler.set(EbtFloat, EsdBuffer);
     }
     }
+    | F16SAMPLERBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdBuffer);
+    }
     | ISAMPLERBUFFER {
     | ISAMPLERBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2822,6 +2779,12 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, false, false, true);
         $$.sampler.set(EbtFloat, Esd2D, false, false, true);
     }
     }
+    | F16SAMPLER2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
+    }
     | ISAMPLER2DMS {
     | ISAMPLER2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2837,6 +2800,12 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, true, false, true);
         $$.sampler.set(EbtFloat, Esd2D, true, false, true);
     }
     }
+    | F16SAMPLER2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
+    }
     | ISAMPLER2DMSARRAY {
     | ISAMPLER2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2847,46 +2816,57 @@ GLSLANG_WEB_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_ON
-    | F16SAMPLER2DRECT {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdRect);
+        $$.sampler.setTexture(EbtFloat, Esd1D);
     }
     }
-    | F16SAMPLER2DRECTSHADOW {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdRect, false, true);
+        $$.sampler.setTexture(EbtFloat16, Esd1D);
     }
     }
-    | F16SAMPLERBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURE2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdBuffer);
+        $$.sampler.setTexture(EbtFloat16, Esd2D);
     }
     }
-    | F16SAMPLER2DMS {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURE3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
+        $$.sampler.setTexture(EbtFloat16, Esd3D);
     }
     }
-    | F16SAMPLER2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURECUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
+        $$.sampler.setTexture(EbtFloat16, EsdCube);
     }
     }
-    | TEXTURE1D {
+    | TEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd1D);
+        $$.sampler.setTexture(EbtFloat, Esd1D, true);
     }
     }
-    | TEXTURE1DARRAY {
+    | F16TEXTURE1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd1D, true);
+        $$.sampler.setTexture(EbtFloat16, Esd1D, true);
+    }
+    | F16TEXTURE2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true);
+    }
+    | F16TEXTURECUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdCube, true);
     }
     }
     | ITEXTURE1D {
     | ITEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2908,12 +2888,17 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D, true);
         $$.sampler.setTexture(EbtUint, Esd1D, true);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
     | TEXTURE2DRECT {
     | TEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdRect);
         $$.sampler.setTexture(EbtFloat, EsdRect);
     }
     }
+    | F16TEXTURE2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdRect);
+    }
     | ITEXTURE2DRECT {
     | ITEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2929,6 +2914,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdBuffer);
         $$.sampler.setTexture(EbtFloat, EsdBuffer);
     }
     }
+    | F16TEXTUREBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdBuffer);
+    }
     | ITEXTUREBUFFER {
     | ITEXTUREBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2944,6 +2935,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
         $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
     }
+    | F16TEXTURE2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+    }
     | ITEXTURE2DMS {
     | ITEXTURE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2959,87 +2956,32 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
         $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
     }
-    | ITEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true, false, true);
-    }
-    | UTEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true, false, true);
-    }
-GLSLANG_ANGLE_EXCLUDE_ON
-    | F16TEXTURE1D {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd1D);
-    }
-    | F16TEXTURE2D {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D);
-    }
-    | F16TEXTURE3D {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd3D);
-    }
-    | F16TEXTURECUBE {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdCube);
-    }
-    | F16TEXTURE1DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd1D, true);
-    }
-    | F16TEXTURE2DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D, true);
-    }
-    | F16TEXTURECUBEARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdCube, true);
-    }
-    | F16TEXTURE2DRECT {
+    | F16TEXTURE2DMSARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdRect);
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
     }
     }
-    | F16TEXTUREBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+    | ITEXTURE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdBuffer);
+        $$.sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
     }
-    | F16TEXTURE2DMS {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+    | UTEXTURE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+        $$.sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
     }
-    | F16TEXTURE2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+    | IMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
+        $$.sampler.setImage(EbtFloat, Esd1D);
     }
     }
-    | IMAGE1D {
+    | F16IMAGE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd1D);
+        $$.sampler.setImage(EbtFloat16, Esd1D);
     }
     }
     | IIMAGE1D {
     | IIMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3051,12 +2993,17 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtUint, Esd1D);
         $$.sampler.setImage(EbtUint, Esd1D);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
     | IMAGE2D {
     | IMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D);
         $$.sampler.setImage(EbtFloat, Esd2D);
     }
     }
+    | F16IMAGE2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D);
+    }
     | IIMAGE2D {
     | IIMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3072,6 +3019,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd3D);
         $$.sampler.setImage(EbtFloat, Esd3D);
     }
     }
+    | F16IMAGE3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd3D);
+    }
     | IIMAGE3D {
     | IIMAGE3D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3087,6 +3040,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdRect);
         $$.sampler.setImage(EbtFloat, EsdRect);
     }
     }
+    | F16IMAGE2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdRect);
+    }
     | IIMAGE2DRECT {
     | IIMAGE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3102,6 +3061,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdCube);
         $$.sampler.setImage(EbtFloat, EsdCube);
     }
     }
+    | F16IMAGECUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube);
+    }
     | IIMAGECUBE {
     | IIMAGECUBE {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3117,6 +3082,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdBuffer);
         $$.sampler.setImage(EbtFloat, EsdBuffer);
     }
     }
+    | F16IMAGEBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdBuffer);
+    }
     | IIMAGEBUFFER {
     | IIMAGEBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3132,6 +3103,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd1D, true);
         $$.sampler.setImage(EbtFloat, Esd1D, true);
     }
     }
+    | F16IMAGE1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D, true);
+    }
     | IIMAGE1DARRAY {
     | IIMAGE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3147,6 +3124,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true);
         $$.sampler.setImage(EbtFloat, Esd2D, true);
     }
     }
+    | F16IMAGE2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true);
+    }
     | IIMAGE2DARRAY {
     | IIMAGE2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3162,6 +3145,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdCube, true);
         $$.sampler.setImage(EbtFloat, EsdCube, true);
     }
     }
+    | F16IMAGECUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube, true);
+    }
     | IIMAGECUBEARRAY {
     | IIMAGECUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3177,6 +3166,12 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
         $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
     }
+    | F16IMAGE2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+    }
     | IIMAGE2DMS {
     | IIMAGE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3192,84 +3187,22 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
     }
-    | IIMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd2D, true, false, true);
-    }
-    | UIMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
-    }
-GLSLANG_ANGLE_EXCLUDE_ON
-    | F16IMAGE1D {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd1D);
-    }
-    | F16IMAGE2D {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D);
-    }
-    | F16IMAGE3D {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd3D);
-    }
-    | F16IMAGE2DRECT {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdRect);
-    }
-    | F16IMAGECUBE {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdCube);
-    }
-    | F16IMAGEBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdBuffer);
-    }
-    | F16IMAGE1DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd1D, true);
-    }
-    | F16IMAGE2DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, true);
-    }
-    | F16IMAGECUBEARRAY {
+    | F16IMAGE2DMSARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdCube, true);
+        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
     }
     }
-    | F16IMAGE2DMS {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+    | IIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+        $$.sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
     }
-    | F16IMAGE2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+    | UIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+        $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3282,7 +3215,6 @@ GLSLANG_ANGLE_EXCLUDE_OFF
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
         $$.sampler.yuv = true;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | SUBPASSINPUT {
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3351,7 +3283,6 @@ GLSLANG_ANGLE_EXCLUDE_ON
         $$.basicType = EbtUint;
         $$.basicType = EbtUint;
         $$.coopmat = true;
         $$.coopmat = true;
     }
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | struct_specifier {
     | struct_specifier {
         $$ = $1;
         $$ = $1;
@@ -3554,14 +3485,11 @@ simple_statement
     | iteration_statement   { $$ = $1; }
     | iteration_statement   { $$ = $1; }
     | jump_statement        { $$ = $1; }
     | jump_statement        { $$ = $1; }
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | demote_statement      { $$ = $1; }
     | demote_statement      { $$ = $1; }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
     ;
 
 
 GLSLANG_WEB_EXCLUDE_ON
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
 demote_statement
 demote_statement
     : DEMOTE SEMICOLON {
     : DEMOTE SEMICOLON {
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
@@ -3569,7 +3497,6 @@ demote_statement
         $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
         $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
     }
     }
     ;
     ;
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 
 
 compound_statement
 compound_statement

+ 198 - 270
glslang/MachineIndependent/glslang.y

@@ -58,12 +58,6 @@
 //
 //
 //    m4 -P
 //    m4 -P
 //
 //
-// A similar mechanism is used to exclude grammar for ANGLE with
-// GLSLANG_ANGLE_EXCLUDE_ON, GLSLANG_ANGLE_EXCLUDE_OFF and -DGLSLANG_ANGLE
-//
-
-
-
 
 
 
 
 
 
@@ -183,9 +177,6 @@ extern int yylex(YYSTYPE*, TParseContext&);
 
 
 
 
 %token <lex> ATTRIBUTE VARYING
 %token <lex> ATTRIBUTE VARYING
-
-
-
 %token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
 %token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
 %token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> I64VEC2 I64VEC3 I64VEC4
 %token <lex> I64VEC2 I64VEC3 I64VEC4
@@ -218,31 +209,23 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> RAYQUERYEXT
 %token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
 
-
-
 // combined image/sampler
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
 %token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
 %token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
 %token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
 %token <lex> SAMPLEREXTERNALOES
 %token <lex> SAMPLEREXTERNALOES
 %token <lex> SAMPLEREXTERNAL2DY2YEXT
 %token <lex> SAMPLEREXTERNAL2DY2YEXT
-
-
-
-%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
 %token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
-
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 
 
-
-
 // images
 // images
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
@@ -255,14 +238,10 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 
 
-
-
 %token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
 %token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
 
-
-
 // texture without sampler
 // texture without sampler
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@@ -272,8 +251,6 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
 
-
-
 %token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
 %token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
 %token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
 %token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
 %token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
 %token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
@@ -284,8 +261,6 @@ extern int yylex(YYSTYPE*, TParseContext&);
 
 
 
 
 
 
-
-
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@@ -310,28 +285,18 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> FLAT SMOOTH LAYOUT
 %token <lex> FLAT SMOOTH LAYOUT
 
 
 
 
-
-
-
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
-%token <lex> NONUNIFORM
-%token <lex> DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> PATCH SAMPLE NONUNIFORM
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
-
-
-
-%token <lex> PATCH SAMPLE 
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
-%token <lex> NOPERSPECTIVE
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
 %token <lex> PRECISE
 %token <lex> PRECISE
 
 
 
 
-
 %type <interm> assignment_operator unary_operator
 %type <interm> assignment_operator unary_operator
 %type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
 %type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
 %type <interm.intermTypedNode> expression integer_expression assignment_expression
 %type <interm.intermTypedNode> expression integer_expression assignment_expression
@@ -378,21 +343,13 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %type <interm.identifierList> identifier_list
 %type <interm.identifierList> identifier_list
 
 
 
 
-
-
-
-%type <interm.type> non_uniform_qualifier
-%type <interm.intermNode> demote_statement
-
-
-
-%type <interm.type> precise_qualifier
+%type <interm.type> precise_qualifier non_uniform_qualifier
 %type <interm.typeList> type_name_list
 %type <interm.typeList> type_name_list
 %type <interm.attributes> attribute attribute_list single_attribute
 %type <interm.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
 %type <interm.intermTypedNode> initializer_list
 %type <interm.intermTypedNode> initializer_list
 
 
 
 
-
 %start translation_unit
 %start translation_unit
 %%
 %%
 
 
@@ -425,7 +382,6 @@ primary_expression
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
     }
 
 
-
     | STRING_LITERAL {
     | STRING_LITERAL {
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
     }
     }
@@ -464,7 +420,6 @@ primary_expression
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
     }
 
 
-
     ;
     ;
 
 
 postfix_expression
 postfix_expression
@@ -591,14 +546,12 @@ function_identifier
         }
         }
     }
     }
 
 
-
     | non_uniform_qualifier {
     | non_uniform_qualifier {
         // Constructor
         // Constructor
         $$.intermNode = 0;
         $$.intermNode = 0;
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
     }
     }
 
 
-
     ;
     ;
 
 
 unary_expression
 unary_expression
@@ -1254,7 +1207,6 @@ interpolation_qualifier
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
         $$.qualifier.nopersp = true;
     }
     }
-
     | EXPLICITINTERPAMD {
     | EXPLICITINTERPAMD {
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -1295,7 +1247,6 @@ interpolation_qualifier
         $$.qualifier.perTaskNV = true;
         $$.qualifier.perTaskNV = true;
     }
     }
 
 
-
     ;
     ;
 
 
 layout_qualifier
 layout_qualifier
@@ -1379,12 +1330,10 @@ single_type_qualifier
         // allow inheritance of storage qualifier from block declaration
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
         $$ = $1;
     }
     }
-
     | non_uniform_qualifier {
     | non_uniform_qualifier {
         $$ = $1;
         $$ = $1;
     }
     }
 
 
-
     ;
     ;
 
 
 storage_qualifier
 storage_qualifier
@@ -1472,7 +1421,6 @@ storage_qualifier
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.sample = true;
         $$.qualifier.sample = true;
     }
     }
-
     | HITATTRNV {
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -1551,6 +1499,10 @@ storage_qualifier
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.storage = EvqCallableDataIn;
         $$.qualifier.storage = EvqCallableDataIn;
     }
     }
+    | COHERENT {
+        $$.init($1.loc);
+        $$.qualifier.coherent = true;
+    }
     | DEVICECOHERENT {
     | DEVICECOHERENT {
         $$.init($1.loc);
         $$.init($1.loc);
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
@@ -1581,23 +1533,6 @@ storage_qualifier
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         $$.qualifier.shadercallcoherent = true;
         $$.qualifier.shadercallcoherent = true;
     }
     }
-    | SUBROUTINE {
-        parseContext.spvRemoved($1.loc, "subroutine");
-        parseContext.globalCheck($1.loc, "subroutine");
-        parseContext.unimplemented($1.loc, "subroutine");
-        $$.init($1.loc);
-    }
-    | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
-        parseContext.spvRemoved($1.loc, "subroutine");
-        parseContext.globalCheck($1.loc, "subroutine");
-        parseContext.unimplemented($1.loc, "subroutine");
-        $$.init($1.loc);
-    }
-
-    | COHERENT {
-        $$.init($1.loc);
-        $$.qualifier.coherent = true;
-    }
     | VOLATILE {
     | VOLATILE {
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.volatil = true;
         $$.qualifier.volatil = true;
@@ -1614,11 +1549,22 @@ storage_qualifier
         $$.init($1.loc);
         $$.init($1.loc);
         $$.qualifier.writeonly = true;
         $$.qualifier.writeonly = true;
     }
     }
+    | SUBROUTINE {
+        parseContext.spvRemoved($1.loc, "subroutine");
+        parseContext.globalCheck($1.loc, "subroutine");
+        parseContext.unimplemented($1.loc, "subroutine");
+        $$.init($1.loc);
+    }
+    | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
+        parseContext.spvRemoved($1.loc, "subroutine");
+        parseContext.globalCheck($1.loc, "subroutine");
+        parseContext.unimplemented($1.loc, "subroutine");
+        $$.init($1.loc);
+    }
 
 
     ;
     ;
 
 
 
 
-
 non_uniform_qualifier
 non_uniform_qualifier
     : NONUNIFORM {
     : NONUNIFORM {
         $$.init($1.loc);
         $$.init($1.loc);
@@ -1626,7 +1572,6 @@ non_uniform_qualifier
     }
     }
     ;
     ;
 
 
-
 type_name_list
 type_name_list
     : IDENTIFIER {
     : IDENTIFIER {
         // TODO
         // TODO
@@ -1859,7 +1804,6 @@ type_specifier_nonarray
         $$.setMatrix(4, 4);
         $$.setMatrix(4, 4);
     }
     }
 
 
-
     | DOUBLE {
     | DOUBLE {
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -2479,7 +2423,6 @@ type_specifier_nonarray
         $$.sampler.set(EbtFloat, Esd1D);
         $$.sampler.set(EbtFloat, Esd1D);
     }
     }
 
 
-
     | SAMPLER2D {
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2516,17 +2459,6 @@ type_specifier_nonarray
         $$.sampler.set(EbtFloat, Esd2D, true, true);
         $$.sampler.set(EbtFloat, Esd2D, true, true);
     }
     }
 
 
-    | SAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, true);
-    }
-    | SAMPLERCUBEARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, true, true);
-    }
-
     | SAMPLER1DSHADOW {
     | SAMPLER1DSHADOW {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2542,6 +2474,16 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D, true, true);
         $$.sampler.set(EbtFloat, Esd1D, true, true);
     }
     }
+    | SAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, true);
+    }
+    | SAMPLERCUBEARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, true, true);
+    }
     | F16SAMPLER1D {
     | F16SAMPLER1D {
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2626,7 +2568,6 @@ type_specifier_nonarray
         $$.sampler.set(EbtInt, Esd1D);
         $$.sampler.set(EbtInt, Esd1D);
     }
     }
 
 
-
     | ISAMPLER2D {
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2663,11 +2604,26 @@ type_specifier_nonarray
         $$.sampler.set(EbtUint, EsdCube);
         $$.sampler.set(EbtUint, EsdCube);
     }
     }
 
 
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
     | ISAMPLERCUBEARRAY {
     | ISAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, EsdCube, true);
         $$.sampler.set(EbtInt, EsdCube, true);
     }
     }
+    | USAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D);
+    }
+    | USAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D, true);
+    }
     | USAMPLERCUBEARRAY {
     | USAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2689,23 +2645,6 @@ type_specifier_nonarray
         $$.sampler.setTexture(EbtUint, EsdCube, true);
         $$.sampler.setTexture(EbtUint, EsdCube, true);
     }
     }
 
 
-    | ISAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd1D, true);
-    }
-    | USAMPLER1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D);
-    }
-    | USAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D, true);
-    }
-
-
     | USAMPLER2DARRAY {
     | USAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2792,6 +2731,18 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdRect, false, true);
         $$.sampler.set(EbtFloat, EsdRect, false, true);
     }
     }
+    | F16SAMPLER2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect);
+    }
+    | F16SAMPLER2DRECTSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect, false, true);
+    }
     | ISAMPLER2DRECT {
     | ISAMPLER2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2807,6 +2758,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdBuffer);
         $$.sampler.set(EbtFloat, EsdBuffer);
     }
     }
+    | F16SAMPLERBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdBuffer);
+    }
     | ISAMPLERBUFFER {
     | ISAMPLERBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2822,6 +2779,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, false, false, true);
         $$.sampler.set(EbtFloat, Esd2D, false, false, true);
     }
     }
+    | F16SAMPLER2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
+    }
     | ISAMPLER2DMS {
     | ISAMPLER2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2837,6 +2800,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, true, false, true);
         $$.sampler.set(EbtFloat, Esd2D, true, false, true);
     }
     }
+    | F16SAMPLER2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
+    }
     | ISAMPLER2DMSARRAY {
     | ISAMPLER2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2847,46 +2816,57 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
     }
     }
-
-    | F16SAMPLER2DRECT {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdRect);
+        $$.sampler.setTexture(EbtFloat, Esd1D);
     }
     }
-    | F16SAMPLER2DRECTSHADOW {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdRect, false, true);
+        $$.sampler.setTexture(EbtFloat16, Esd1D);
     }
     }
-    | F16SAMPLERBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURE2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdBuffer);
+        $$.sampler.setTexture(EbtFloat16, Esd2D);
     }
     }
-    | F16SAMPLER2DMS {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURE3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
+        $$.sampler.setTexture(EbtFloat16, Esd3D);
     }
     }
-    | F16SAMPLER2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+    | F16TEXTURECUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
+        $$.sampler.setTexture(EbtFloat16, EsdCube);
     }
     }
-    | TEXTURE1D {
+    | TEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd1D);
+        $$.sampler.setTexture(EbtFloat, Esd1D, true);
     }
     }
-    | TEXTURE1DARRAY {
+    | F16TEXTURE1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd1D, true);
+        $$.sampler.setTexture(EbtFloat16, Esd1D, true);
+    }
+    | F16TEXTURE2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true);
+    }
+    | F16TEXTURECUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdCube, true);
     }
     }
     | ITEXTURE1D {
     | ITEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2908,12 +2888,17 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D, true);
         $$.sampler.setTexture(EbtUint, Esd1D, true);
     }
     }
-
     | TEXTURE2DRECT {
     | TEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdRect);
         $$.sampler.setTexture(EbtFloat, EsdRect);
     }
     }
+    | F16TEXTURE2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdRect);
+    }
     | ITEXTURE2DRECT {
     | ITEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2929,6 +2914,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdBuffer);
         $$.sampler.setTexture(EbtFloat, EsdBuffer);
     }
     }
+    | F16TEXTUREBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdBuffer);
+    }
     | ITEXTUREBUFFER {
     | ITEXTUREBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2944,6 +2935,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
         $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
     }
+    | F16TEXTURE2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+    }
     | ITEXTURE2DMS {
     | ITEXTURE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -2959,87 +2956,32 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
         $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
     }
-    | ITEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true, false, true);
-    }
-    | UTEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true, false, true);
-    }
-
-    | F16TEXTURE1D {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd1D);
-    }
-    | F16TEXTURE2D {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D);
-    }
-    | F16TEXTURE3D {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd3D);
-    }
-    | F16TEXTURECUBE {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdCube);
-    }
-    | F16TEXTURE1DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd1D, true);
-    }
-    | F16TEXTURE2DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D, true);
-    }
-    | F16TEXTURECUBEARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdCube, true);
-    }
-    | F16TEXTURE2DRECT {
+    | F16TEXTURE2DMSARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdRect);
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
     }
     }
-    | F16TEXTUREBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+    | ITEXTURE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, EsdBuffer);
+        $$.sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
     }
-    | F16TEXTURE2DMS {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+    | UTEXTURE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+        $$.sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
     }
-    | F16TEXTURE2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+    | IMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
+        $$.sampler.setImage(EbtFloat, Esd1D);
     }
     }
-    | IMAGE1D {
+    | F16IMAGE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd1D);
+        $$.sampler.setImage(EbtFloat16, Esd1D);
     }
     }
     | IIMAGE1D {
     | IIMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3051,12 +2993,17 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtUint, Esd1D);
         $$.sampler.setImage(EbtUint, Esd1D);
     }
     }
-
     | IMAGE2D {
     | IMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D);
         $$.sampler.setImage(EbtFloat, Esd2D);
     }
     }
+    | F16IMAGE2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D);
+    }
     | IIMAGE2D {
     | IIMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3072,6 +3019,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd3D);
         $$.sampler.setImage(EbtFloat, Esd3D);
     }
     }
+    | F16IMAGE3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd3D);
+    }
     | IIMAGE3D {
     | IIMAGE3D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3087,6 +3040,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdRect);
         $$.sampler.setImage(EbtFloat, EsdRect);
     }
     }
+    | F16IMAGE2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdRect);
+    }
     | IIMAGE2DRECT {
     | IIMAGE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3102,6 +3061,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdCube);
         $$.sampler.setImage(EbtFloat, EsdCube);
     }
     }
+    | F16IMAGECUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube);
+    }
     | IIMAGECUBE {
     | IIMAGECUBE {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3117,6 +3082,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdBuffer);
         $$.sampler.setImage(EbtFloat, EsdBuffer);
     }
     }
+    | F16IMAGEBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdBuffer);
+    }
     | IIMAGEBUFFER {
     | IIMAGEBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3132,6 +3103,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd1D, true);
         $$.sampler.setImage(EbtFloat, Esd1D, true);
     }
     }
+    | F16IMAGE1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D, true);
+    }
     | IIMAGE1DARRAY {
     | IIMAGE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3147,6 +3124,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true);
         $$.sampler.setImage(EbtFloat, Esd2D, true);
     }
     }
+    | F16IMAGE2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true);
+    }
     | IIMAGE2DARRAY {
     | IIMAGE2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3162,6 +3145,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdCube, true);
         $$.sampler.setImage(EbtFloat, EsdCube, true);
     }
     }
+    | F16IMAGECUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube, true);
+    }
     | IIMAGECUBEARRAY {
     | IIMAGECUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3177,6 +3166,12 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
         $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
     }
+    | F16IMAGE2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+    }
     | IIMAGE2DMS {
     | IIMAGE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3192,84 +3187,22 @@ type_specifier_nonarray
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
     }
-    | IIMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd2D, true, false, true);
-    }
-    | UIMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
-    }
-
-    | F16IMAGE1D {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd1D);
-    }
-    | F16IMAGE2D {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D);
-    }
-    | F16IMAGE3D {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd3D);
-    }
-    | F16IMAGE2DRECT {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdRect);
-    }
-    | F16IMAGECUBE {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdCube);
-    }
-    | F16IMAGEBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdBuffer);
-    }
-    | F16IMAGE1DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd1D, true);
-    }
-    | F16IMAGE2DARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, true);
-    }
-    | F16IMAGECUBEARRAY {
+    | F16IMAGE2DMSARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdCube, true);
+        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
     }
     }
-    | F16IMAGE2DMS {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+    | IIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+        $$.sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
     }
-    | F16IMAGE2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+    | UIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+        $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
     }
-
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.basicType = EbtSampler;
@@ -3282,7 +3215,6 @@ type_specifier_nonarray
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
         $$.sampler.yuv = true;
     }
     }
-
     | SUBPASSINPUT {
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3352,7 +3284,6 @@ type_specifier_nonarray
         $$.coopmat = true;
         $$.coopmat = true;
     }
     }
 
 
-
     | struct_specifier {
     | struct_specifier {
         $$ = $1;
         $$ = $1;
         $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3554,14 +3485,11 @@ simple_statement
     | iteration_statement   { $$ = $1; }
     | iteration_statement   { $$ = $1; }
     | jump_statement        { $$ = $1; }
     | jump_statement        { $$ = $1; }
 
 
-
     | demote_statement      { $$ = $1; }
     | demote_statement      { $$ = $1; }
 
 
-
     ;
     ;
 
 
 
 
-
 demote_statement
 demote_statement
     : DEMOTE SEMICOLON {
     : DEMOTE SEMICOLON {
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
@@ -3571,7 +3499,6 @@ demote_statement
     ;
     ;
 
 
 
 
-
 compound_statement
 compound_statement
     : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
     : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
     | LEFT_BRACE {
     | LEFT_BRACE {
@@ -3958,3 +3885,4 @@ single_attribute
 
 
 
 
 %%
 %%
+

+ 0 - 2643
glslang/MachineIndependent/glslang_angle.y

@@ -1,2643 +0,0 @@
-//
-// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
-// Copyright (C) 2012-2013 LunarG, Inc.
-// Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2015-2019 Google, Inc.
-// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-//    Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-//    Redistributions in binary form must reproduce the above
-//    copyright notice, this list of conditions and the following
-//    disclaimer in the documentation and/or other materials provided
-//    with the distribution.
-//
-//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
-//    contributors may be used to endorse or promote products derived
-//    from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-
-//
-// Do not edit the .y file, only edit the .m4 file.
-// The .y bison file is not a source file, it is a derivative of the .m4 file.
-// The m4 file needs to be processed by m4 to generate the .y bison file.
-//
-// Code sandwiched between a pair:
-//
-//    GLSLANG_WEB_EXCLUDE_ON
-//      ...
-//      ...
-//      ...
-//    GLSLANG_WEB_EXCLUDE_OFF
-//
-// Will be excluded from the grammar when m4 is executed as:
-//
-//    m4 -P -DGLSLANG_WEB
-//
-// It will be included when m4 is executed as:
-//
-//    m4 -P
-//
-// A similar mechanism is used to exclude grammar for ANGLE with
-// GLSLANG_ANGLE_EXCLUDE_ON, GLSLANG_ANGLE_EXCLUDE_OFF and -DGLSLANG_ANGLE
-//
-
-
-
-
-
-
-
-/**
- * This is bison grammar and productions for parsing all versions of the
- * GLSL shading languages.
- */
-%{
-
-/* Based on:
-ANSI C Yacc grammar
-
-In 1985, Jeff Lee published his Yacc grammar (which is accompanied by a
-matching Lex specification) for the April 30, 1985 draft version of the
-ANSI C standard.  Tom Stockfisch reposted it to net.sources in 1987; that
-original, as mentioned in the answer to question 17.25 of the comp.lang.c
-FAQ, can be ftp'ed from ftp.uu.net, file usenet/net.sources/ansi.c.grammar.Z.
-
-I intend to keep this version as close to the current C Standard grammar as
-possible; please let me know if you discover discrepancies.
-
-Jutta Degener, 1995
-*/
-
-#include "SymbolTable.h"
-#include "ParseHelper.h"
-#include "../Public/ShaderLang.h"
-#include "attribute.h"
-
-using namespace glslang;
-
-%}
-
-%define parse.error verbose
-
-%union {
-    struct {
-        glslang::TSourceLoc loc;
-        union {
-            glslang::TString *string;
-            int i;
-            unsigned int u;
-            long long i64;
-            unsigned long long u64;
-            bool b;
-            double d;
-        };
-        glslang::TSymbol* symbol;
-    } lex;
-    struct {
-        glslang::TSourceLoc loc;
-        glslang::TOperator op;
-        union {
-            TIntermNode* intermNode;
-            glslang::TIntermNodePair nodePair;
-            glslang::TIntermTyped* intermTypedNode;
-            glslang::TAttributes* attributes;
-        };
-        union {
-            glslang::TPublicType type;
-            glslang::TFunction* function;
-            glslang::TParameter param;
-            glslang::TTypeLoc typeLine;
-            glslang::TTypeList* typeList;
-            glslang::TArraySizes* arraySizes;
-            glslang::TIdentifierList* identifierList;
-        };
-        glslang::TArraySizes* typeParameters;
-    } interm;
-}
-
-%{
-
-/* windows only pragma */
-#ifdef _MSC_VER
-    #pragma warning(disable : 4065)
-    #pragma warning(disable : 4127)
-    #pragma warning(disable : 4244)
-#endif
-
-#define parseContext (*pParseContext)
-#define yyerror(context, msg) context->parserError(msg)
-
-extern int yylex(YYSTYPE*, TParseContext&);
-
-%}
-
-%parse-param {glslang::TParseContext* pParseContext}
-%lex-param {parseContext}
-%pure-parser  // enable thread safety
-%expect 1     // One shift reduce conflict because of if | else
-
-%token <lex> CONST BOOL INT UINT FLOAT
-%token <lex> BVEC2 BVEC3 BVEC4
-%token <lex> IVEC2 IVEC3 IVEC4
-%token <lex> UVEC2 UVEC3 UVEC4
-%token <lex> VEC2 VEC3 VEC4
-%token <lex> MAT2 MAT3 MAT4
-%token <lex> MAT2X2 MAT2X3 MAT2X4
-%token <lex> MAT3X2 MAT3X3 MAT3X4
-%token <lex> MAT4X2 MAT4X3 MAT4X4
-
-// combined image/sampler
-%token <lex> SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER2DSHADOW
-%token <lex> SAMPLERCUBESHADOW SAMPLER2DARRAY
-%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
-%token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
-%token <lex> USAMPLERCUBE USAMPLER2DARRAY
-
-// separate image/sampler
-%token <lex> SAMPLER SAMPLERSHADOW
-%token <lex>  TEXTURE2D  TEXTURE3D  TEXTURECUBE  TEXTURE2DARRAY
-%token <lex> ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY
-%token <lex> UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY
-
-
-
-%token <lex> ATTRIBUTE VARYING
-
-
-
-// combined image/sampler
-%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
-%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
-%token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
-%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
-%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
-%token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
-%token <lex> SAMPLEREXTERNALOES
-%token <lex> SAMPLEREXTERNAL2DY2YEXT
-
-
-
-// images
-%token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
-%token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
-%token <lex> IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT
-%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
-%token <lex> IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
-%token <lex> IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY
-%token <lex> IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
-%token <lex> IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY
-%token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
-%token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
-
-
-
-// texture without sampler
-%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
-%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
-%token <lex> TEXTURE1DARRAY ITEXTURE1DARRAY UTEXTURE1DARRAY
-%token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
-%token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
-%token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
-%token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
-
-
-
-
-
-%token <lex> LEFT_OP RIGHT_OP
-%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
-%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
-%token <lex> MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
-%token <lex> SUB_ASSIGN
-%token <lex> STRING_LITERAL
-
-%token <lex> LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT
-%token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
-%token <lex> LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION
-
-%token <lex> INVARIANT
-%token <lex> HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
-%token <lex> PACKED RESOURCE SUPERP
-
-%token <lex> FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
-%token <lex> IDENTIFIER TYPE_NAME
-%token <lex> CENTROID IN OUT INOUT
-%token <lex> STRUCT VOID WHILE
-%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
-%token <lex> UNIFORM SHARED BUFFER
-%token <lex> FLAT SMOOTH LAYOUT
-
-
-
-
-
-%token <lex> PATCH SAMPLE 
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
-%token <lex> NOPERSPECTIVE
-%token <lex> PRECISE
-
-
-
-%type <interm> assignment_operator unary_operator
-%type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
-%type <interm.intermTypedNode> expression integer_expression assignment_expression
-%type <interm.intermTypedNode> unary_expression multiplicative_expression additive_expression
-%type <interm.intermTypedNode> relational_expression equality_expression
-%type <interm.intermTypedNode> conditional_expression constant_expression
-%type <interm.intermTypedNode> logical_or_expression logical_xor_expression logical_and_expression
-%type <interm.intermTypedNode> shift_expression and_expression exclusive_or_expression inclusive_or_expression
-%type <interm.intermTypedNode> function_call initializer condition conditionopt
-
-%type <interm.intermNode> translation_unit function_definition
-%type <interm.intermNode> statement simple_statement
-%type <interm.intermNode> statement_list switch_statement_list compound_statement
-%type <interm.intermNode> declaration_statement selection_statement selection_statement_nonattributed expression_statement
-%type <interm.intermNode> switch_statement switch_statement_nonattributed case_label
-%type <interm.intermNode> declaration external_declaration
-%type <interm.intermNode> for_init_statement compound_statement_no_new_scope
-%type <interm.nodePair> selection_rest_statement for_rest_statement
-%type <interm.intermNode> iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped
-%type <interm> single_declaration init_declarator_list
-
-%type <interm> parameter_declaration parameter_declarator parameter_type_specifier
-
-%type <interm> array_specifier
-%type <interm.type> invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
-%type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
-
-%type <interm.typeParameters> type_parameter_specifier
-%type <interm.typeParameters> type_parameter_specifier_opt
-%type <interm.typeParameters> type_parameter_specifier_list
-
-%type <interm.type> type_qualifier fully_specified_type type_specifier
-%type <interm.type> single_type_qualifier
-%type <interm.type> type_specifier_nonarray
-%type <interm.type> struct_specifier
-%type <interm.typeLine> struct_declarator
-%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list
-%type <interm> block_structure
-%type <interm.function> function_header function_declarator
-%type <interm.function> function_header_with_parameters
-%type <interm> function_call_header_with_parameters function_call_header_no_parameters function_call_generic function_prototype
-%type <interm> function_call_or_method function_identifier function_call_header
-
-%type <interm.identifierList> identifier_list
-
-
-
-
-
-%type <interm.type> precise_qualifier
-%type <interm.typeList> type_name_list
-%type <interm.attributes> attribute attribute_list single_attribute
-%type <interm.intermTypedNode> initializer_list
-
-
-
-%start translation_unit
-%%
-
-variable_identifier
-    : IDENTIFIER {
-        $$ = parseContext.handleVariable($1.loc, $1.symbol, $1.string);
-    }
-    ;
-
-primary_expression
-    : variable_identifier {
-        $$ = $1;
-    }
-    | LEFT_PAREN expression RIGHT_PAREN {
-        $$ = $2;
-        if ($$->getAsConstantUnion())
-            $$->getAsConstantUnion()->setExpression();
-    }
-    | FLOATCONSTANT {
-        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
-    }
-    | INTCONSTANT {
-        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
-    }
-    | UINTCONSTANT {
-        parseContext.fullIntegerCheck($1.loc, "unsigned literal");
-        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
-    }
-    | BOOLCONSTANT {
-        $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
-    }
-
-
-
-    ;
-
-postfix_expression
-    : primary_expression {
-        $$ = $1;
-    }
-    | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET {
-        $$ = parseContext.handleBracketDereference($2.loc, $1, $3);
-    }
-    | function_call {
-        $$ = $1;
-    }
-    | postfix_expression DOT IDENTIFIER {
-        $$ = parseContext.handleDotDereference($3.loc, $1, *$3.string);
-    }
-    | postfix_expression INC_OP {
-        parseContext.variableCheck($1);
-        parseContext.lValueErrorCheck($2.loc, "++", $1);
-        $$ = parseContext.handleUnaryMath($2.loc, "++", EOpPostIncrement, $1);
-    }
-    | postfix_expression DEC_OP {
-        parseContext.variableCheck($1);
-        parseContext.lValueErrorCheck($2.loc, "--", $1);
-        $$ = parseContext.handleUnaryMath($2.loc, "--", EOpPostDecrement, $1);
-    }
-    ;
-
-integer_expression
-    : expression {
-        parseContext.integerCheck($1, "[]");
-        $$ = $1;
-    }
-    ;
-
-function_call
-    : function_call_or_method {
-        $$ = parseContext.handleFunctionCall($1.loc, $1.function, $1.intermNode);
-        delete $1.function;
-    }
-    ;
-
-function_call_or_method
-    : function_call_generic {
-        $$ = $1;
-    }
-    ;
-
-function_call_generic
-    : function_call_header_with_parameters RIGHT_PAREN {
-        $$ = $1;
-        $$.loc = $2.loc;
-    }
-    | function_call_header_no_parameters RIGHT_PAREN {
-        $$ = $1;
-        $$.loc = $2.loc;
-    }
-    ;
-
-function_call_header_no_parameters
-    : function_call_header VOID {
-        $$ = $1;
-    }
-    | function_call_header {
-        $$ = $1;
-    }
-    ;
-
-function_call_header_with_parameters
-    : function_call_header assignment_expression {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy($2->getType());
-        $1.function->addParameter(param);
-        $$.function = $1.function;
-        $$.intermNode = $2;
-    }
-    | function_call_header_with_parameters COMMA assignment_expression {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy($3->getType());
-        $1.function->addParameter(param);
-        $$.function = $1.function;
-        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc);
-    }
-    ;
-
-function_call_header
-    : function_identifier LEFT_PAREN {
-        $$ = $1;
-    }
-    ;
-
-// Grammar Note:  Constructors look like functions, but are recognized as types.
-
-function_identifier
-    : type_specifier {
-        // Constructor
-        $$.intermNode = 0;
-        $$.function = parseContext.handleConstructorCall($1.loc, $1);
-    }
-    | postfix_expression {
-        //
-        // Should be a method or subroutine call, but we haven't recognized the arguments yet.
-        //
-        $$.function = 0;
-        $$.intermNode = 0;
-
-        TIntermMethod* method = $1->getAsMethodNode();
-        if (method) {
-            $$.function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength);
-            $$.intermNode = method->getObject();
-        } else {
-            TIntermSymbol* symbol = $1->getAsSymbolNode();
-            if (symbol) {
-                parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
-                TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
-                $$.function = function;
-            } else
-                parseContext.error($1->getLoc(), "function call, method, or subroutine call expected", "", "");
-        }
-
-        if ($$.function == 0) {
-            // error recover
-            TString* empty = NewPoolTString("");
-            $$.function = new TFunction(empty, TType(EbtVoid), EOpNull);
-        }
-    }
-
-
-
-    ;
-
-unary_expression
-    : postfix_expression {
-        parseContext.variableCheck($1);
-        $$ = $1;
-        if (TIntermMethod* method = $1->getAsMethodNode())
-            parseContext.error($1->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
-    }
-    | INC_OP unary_expression {
-        parseContext.lValueErrorCheck($1.loc, "++", $2);
-        $$ = parseContext.handleUnaryMath($1.loc, "++", EOpPreIncrement, $2);
-    }
-    | DEC_OP unary_expression {
-        parseContext.lValueErrorCheck($1.loc, "--", $2);
-        $$ = parseContext.handleUnaryMath($1.loc, "--", EOpPreDecrement, $2);
-    }
-    | unary_operator unary_expression {
-        if ($1.op != EOpNull) {
-            char errorOp[2] = {0, 0};
-            switch($1.op) {
-            case EOpNegative:   errorOp[0] = '-'; break;
-            case EOpLogicalNot: errorOp[0] = '!'; break;
-            case EOpBitwiseNot: errorOp[0] = '~'; break;
-            default: break; // some compilers want this
-            }
-            $$ = parseContext.handleUnaryMath($1.loc, errorOp, $1.op, $2);
-        } else {
-            $$ = $2;
-            if ($$->getAsConstantUnion())
-                $$->getAsConstantUnion()->setExpression();
-        }
-    }
-    ;
-// Grammar Note:  No traditional style type casts.
-
-unary_operator
-    : PLUS  { $$.loc = $1.loc; $$.op = EOpNull; }
-    | DASH  { $$.loc = $1.loc; $$.op = EOpNegative; }
-    | BANG  { $$.loc = $1.loc; $$.op = EOpLogicalNot; }
-    | TILDE { $$.loc = $1.loc; $$.op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck($1.loc, "bitwise not"); }
-    ;
-// Grammar Note:  No '*' or '&' unary ops.  Pointers are not supported.
-
-multiplicative_expression
-    : unary_expression { $$ = $1; }
-    | multiplicative_expression STAR unary_expression {
-        $$ = parseContext.handleBinaryMath($2.loc, "*", EOpMul, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    | multiplicative_expression SLASH unary_expression {
-        $$ = parseContext.handleBinaryMath($2.loc, "/", EOpDiv, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    | multiplicative_expression PERCENT unary_expression {
-        parseContext.fullIntegerCheck($2.loc, "%");
-        $$ = parseContext.handleBinaryMath($2.loc, "%", EOpMod, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    ;
-
-additive_expression
-    : multiplicative_expression { $$ = $1; }
-    | additive_expression PLUS multiplicative_expression {
-        $$ = parseContext.handleBinaryMath($2.loc, "+", EOpAdd, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    | additive_expression DASH multiplicative_expression {
-        $$ = parseContext.handleBinaryMath($2.loc, "-", EOpSub, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    ;
-
-shift_expression
-    : additive_expression { $$ = $1; }
-    | shift_expression LEFT_OP additive_expression {
-        parseContext.fullIntegerCheck($2.loc, "bit shift left");
-        $$ = parseContext.handleBinaryMath($2.loc, "<<", EOpLeftShift, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    | shift_expression RIGHT_OP additive_expression {
-        parseContext.fullIntegerCheck($2.loc, "bit shift right");
-        $$ = parseContext.handleBinaryMath($2.loc, ">>", EOpRightShift, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    ;
-
-relational_expression
-    : shift_expression { $$ = $1; }
-    | relational_expression LEFT_ANGLE shift_expression {
-        $$ = parseContext.handleBinaryMath($2.loc, "<", EOpLessThan, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    | relational_expression RIGHT_ANGLE shift_expression  {
-        $$ = parseContext.handleBinaryMath($2.loc, ">", EOpGreaterThan, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    | relational_expression LE_OP shift_expression  {
-        $$ = parseContext.handleBinaryMath($2.loc, "<=", EOpLessThanEqual, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    | relational_expression GE_OP shift_expression  {
-        $$ = parseContext.handleBinaryMath($2.loc, ">=", EOpGreaterThanEqual, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    ;
-
-equality_expression
-    : relational_expression { $$ = $1; }
-    | equality_expression EQ_OP relational_expression  {
-        parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
-        parseContext.opaqueCheck($2.loc, $1->getType(), "==");
-        parseContext.specializationCheck($2.loc, $1->getType(), "==");
-        parseContext.referenceCheck($2.loc, $1->getType(), "==");
-        $$ = parseContext.handleBinaryMath($2.loc, "==", EOpEqual, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    | equality_expression NE_OP relational_expression {
-        parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
-        parseContext.opaqueCheck($2.loc, $1->getType(), "!=");
-        parseContext.specializationCheck($2.loc, $1->getType(), "!=");
-        parseContext.referenceCheck($2.loc, $1->getType(), "!=");
-        $$ = parseContext.handleBinaryMath($2.loc, "!=", EOpNotEqual, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    ;
-
-and_expression
-    : equality_expression { $$ = $1; }
-    | and_expression AMPERSAND equality_expression {
-        parseContext.fullIntegerCheck($2.loc, "bitwise and");
-        $$ = parseContext.handleBinaryMath($2.loc, "&", EOpAnd, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    ;
-
-exclusive_or_expression
-    : and_expression { $$ = $1; }
-    | exclusive_or_expression CARET and_expression {
-        parseContext.fullIntegerCheck($2.loc, "bitwise exclusive or");
-        $$ = parseContext.handleBinaryMath($2.loc, "^", EOpExclusiveOr, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    ;
-
-inclusive_or_expression
-    : exclusive_or_expression { $$ = $1; }
-    | inclusive_or_expression VERTICAL_BAR exclusive_or_expression {
-        parseContext.fullIntegerCheck($2.loc, "bitwise inclusive or");
-        $$ = parseContext.handleBinaryMath($2.loc, "|", EOpInclusiveOr, $1, $3);
-        if ($$ == 0)
-            $$ = $1;
-    }
-    ;
-
-logical_and_expression
-    : inclusive_or_expression { $$ = $1; }
-    | logical_and_expression AND_OP inclusive_or_expression {
-        $$ = parseContext.handleBinaryMath($2.loc, "&&", EOpLogicalAnd, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    ;
-
-logical_xor_expression
-    : logical_and_expression { $$ = $1; }
-    | logical_xor_expression XOR_OP logical_and_expression  {
-        $$ = parseContext.handleBinaryMath($2.loc, "^^", EOpLogicalXor, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    ;
-
-logical_or_expression
-    : logical_xor_expression { $$ = $1; }
-    | logical_or_expression OR_OP logical_xor_expression  {
-        $$ = parseContext.handleBinaryMath($2.loc, "||", EOpLogicalOr, $1, $3);
-        if ($$ == 0)
-            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
-    }
-    ;
-
-conditional_expression
-    : logical_or_expression { $$ = $1; }
-    | logical_or_expression QUESTION {
-        ++parseContext.controlFlowNestingLevel;
-    }
-      expression COLON assignment_expression {
-        --parseContext.controlFlowNestingLevel;
-        parseContext.boolCheck($2.loc, $1);
-        parseContext.rValueErrorCheck($2.loc, "?", $1);
-        parseContext.rValueErrorCheck($5.loc, ":", $4);
-        parseContext.rValueErrorCheck($5.loc, ":", $6);
-        $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc);
-        if ($$ == 0) {
-            parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString());
-            $$ = $6;
-        }
-    }
-    ;
-
-assignment_expression
-    : conditional_expression { $$ = $1; }
-    | unary_expression assignment_operator assignment_expression {
-        parseContext.arrayObjectCheck($2.loc, $1->getType(), "array assignment");
-        parseContext.opaqueCheck($2.loc, $1->getType(), "=");
-        parseContext.storage16BitAssignmentCheck($2.loc, $1->getType(), "=");
-        parseContext.specializationCheck($2.loc, $1->getType(), "=");
-        parseContext.lValueErrorCheck($2.loc, "assign", $1);
-        parseContext.rValueErrorCheck($2.loc, "assign", $3);
-        $$ = parseContext.intermediate.addAssign($2.op, $1, $3, $2.loc);
-        if ($$ == 0) {
-            parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString());
-            $$ = $1;
-        }
-    }
-    ;
-
-assignment_operator
-    : EQUAL {
-        $$.loc = $1.loc;
-        $$.op = EOpAssign;
-    }
-    | MUL_ASSIGN {
-        $$.loc = $1.loc;
-        $$.op = EOpMulAssign;
-    }
-    | DIV_ASSIGN {
-        $$.loc = $1.loc;
-        $$.op = EOpDivAssign;
-    }
-    | MOD_ASSIGN {
-        parseContext.fullIntegerCheck($1.loc, "%=");
-        $$.loc = $1.loc;
-        $$.op = EOpModAssign;
-    }
-    | ADD_ASSIGN {
-        $$.loc = $1.loc;
-        $$.op = EOpAddAssign;
-    }
-    | SUB_ASSIGN {
-        $$.loc = $1.loc;
-        $$.op = EOpSubAssign;
-    }
-    | LEFT_ASSIGN {
-        parseContext.fullIntegerCheck($1.loc, "bit-shift left assign");
-        $$.loc = $1.loc; $$.op = EOpLeftShiftAssign;
-    }
-    | RIGHT_ASSIGN {
-        parseContext.fullIntegerCheck($1.loc, "bit-shift right assign");
-        $$.loc = $1.loc; $$.op = EOpRightShiftAssign;
-    }
-    | AND_ASSIGN {
-        parseContext.fullIntegerCheck($1.loc, "bitwise-and assign");
-        $$.loc = $1.loc; $$.op = EOpAndAssign;
-    }
-    | XOR_ASSIGN {
-        parseContext.fullIntegerCheck($1.loc, "bitwise-xor assign");
-        $$.loc = $1.loc; $$.op = EOpExclusiveOrAssign;
-    }
-    | OR_ASSIGN {
-        parseContext.fullIntegerCheck($1.loc, "bitwise-or assign");
-        $$.loc = $1.loc; $$.op = EOpInclusiveOrAssign;
-    }
-    ;
-
-expression
-    : assignment_expression {
-        $$ = $1;
-    }
-    | expression COMMA assignment_expression {
-        parseContext.samplerConstructorLocationCheck($2.loc, ",", $3);
-        $$ = parseContext.intermediate.addComma($1, $3, $2.loc);
-        if ($$ == 0) {
-            parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString());
-            $$ = $3;
-        }
-    }
-    ;
-
-constant_expression
-    : conditional_expression {
-        parseContext.constantValueCheck($1, "");
-        $$ = $1;
-    }
-    ;
-
-declaration
-    : function_prototype SEMICOLON {
-        parseContext.handleFunctionDeclarator($1.loc, *$1.function, true /* prototype */);
-        $$ = 0;
-        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
-    }
-    | init_declarator_list SEMICOLON {
-        if ($1.intermNode && $1.intermNode->getAsAggregate())
-            $1.intermNode->getAsAggregate()->setOperator(EOpSequence);
-        $$ = $1.intermNode;
-    }
-    | PRECISION precision_qualifier type_specifier SEMICOLON {
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "precision statement");
-        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
-        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
-        parseContext.setDefaultPrecision($1.loc, $3, $2.qualifier.precision);
-        $$ = 0;
-    }
-    | block_structure SEMICOLON {
-        parseContext.declareBlock($1.loc, *$1.typeList);
-        $$ = 0;
-    }
-    | block_structure IDENTIFIER SEMICOLON {
-        parseContext.declareBlock($1.loc, *$1.typeList, $2.string);
-        $$ = 0;
-    }
-    | block_structure IDENTIFIER array_specifier SEMICOLON {
-        parseContext.declareBlock($1.loc, *$1.typeList, $2.string, $3.arraySizes);
-        $$ = 0;
-    }
-    | type_qualifier SEMICOLON {
-        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
-        parseContext.updateStandaloneQualifierDefaults($1.loc, $1);
-        $$ = 0;
-    }
-    | type_qualifier IDENTIFIER SEMICOLON {
-        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
-        parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$2.string);
-        $$ = 0;
-    }
-    | type_qualifier IDENTIFIER identifier_list SEMICOLON {
-        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
-        $3->push_back($2.string);
-        parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$3);
-        $$ = 0;
-    }
-    ;
-
-block_structure
-    : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
-        --parseContext.structNestingLevel;
-        parseContext.blockName = $2.string;
-        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
-        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
-        parseContext.currentBlockQualifier = $1.qualifier;
-        $$.loc = $1.loc;
-        $$.typeList = $5;
-    }
-
-identifier_list
-    : COMMA IDENTIFIER {
-        $$ = new TIdentifierList;
-        $$->push_back($2.string);
-    }
-    | identifier_list COMMA IDENTIFIER {
-        $$ = $1;
-        $$->push_back($3.string);
-    }
-    ;
-
-function_prototype
-    : function_declarator RIGHT_PAREN  {
-        $$.function = $1;
-        $$.loc = $2.loc;
-    }
-    ;
-
-function_declarator
-    : function_header {
-        $$ = $1;
-    }
-    | function_header_with_parameters {
-        $$ = $1;
-    }
-    ;
-
-
-function_header_with_parameters
-    : function_header parameter_declaration {
-        // Add the parameter
-        $$ = $1;
-        if ($2.param.type->getBasicType() != EbtVoid)
-            $1->addParameter($2.param);
-        else
-            delete $2.param.type;
-    }
-    | function_header_with_parameters COMMA parameter_declaration {
-        //
-        // Only first parameter of one-parameter functions can be void
-        // The check for named parameters not being void is done in parameter_declarator
-        //
-        if ($3.param.type->getBasicType() == EbtVoid) {
-            //
-            // This parameter > first is void
-            //
-            parseContext.error($2.loc, "cannot be an argument type except for '(void)'", "void", "");
-            delete $3.param.type;
-        } else {
-            // Add the parameter
-            $$ = $1;
-            $1->addParameter($3.param);
-        }
-    }
-    ;
-
-function_header
-    : fully_specified_type IDENTIFIER LEFT_PAREN {
-        if ($1.qualifier.storage != EvqGlobal && $1.qualifier.storage != EvqTemporary) {
-            parseContext.error($2.loc, "no qualifiers allowed for function return",
-                               GetStorageQualifierString($1.qualifier.storage), "");
-        }
-        if ($1.arraySizes)
-            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
-
-        // Add the function as a prototype after parsing it (we do not support recursion)
-        TFunction *function;
-        TType type($1);
-
-        // Potentially rename shader entry point function.  No-op most of the time.
-        parseContext.renameShaderFunction($2.string);
-
-        // Make the function
-        function = new TFunction($2.string, type);
-        $$ = function;
-    }
-    ;
-
-parameter_declarator
-    // Type + name
-    : type_specifier IDENTIFIER {
-        if ($1.arraySizes) {
-            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
-            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
-        }
-        if ($1.basicType == EbtVoid) {
-            parseContext.error($2.loc, "illegal use of type 'void'", $2.string->c_str(), "");
-        }
-        parseContext.reservedErrorCheck($2.loc, *$2.string);
-
-        TParameter param = {$2.string, new TType($1)};
-        $$.loc = $2.loc;
-        $$.param = param;
-    }
-    | type_specifier IDENTIFIER array_specifier {
-        if ($1.arraySizes) {
-            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
-            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
-        }
-        TType* type = new TType($1);
-        type->transferArraySizes($3.arraySizes);
-        type->copyArrayInnerSizes($1.arraySizes);
-
-        parseContext.arrayOfArrayVersionCheck($2.loc, type->getArraySizes());
-        parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes);
-        parseContext.reservedErrorCheck($2.loc, *$2.string);
-
-        TParameter param = { $2.string, type };
-
-        $$.loc = $2.loc;
-        $$.param = param;
-    }
-    ;
-
-parameter_declaration
-    //
-    // With name
-    //
-    : type_qualifier parameter_declarator {
-        $$ = $2;
-        if ($1.qualifier.precision != EpqNone)
-            $$.param.type->getQualifier().precision = $1.qualifier.precision;
-        parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
-
-        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
-        parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type);
-        parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type);
-
-    }
-    | parameter_declarator {
-        $$ = $1;
-
-        parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type);
-        parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type);
-        parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
-    }
-    //
-    // Without name
-    //
-    | type_qualifier parameter_type_specifier {
-        $$ = $2;
-        if ($1.qualifier.precision != EpqNone)
-            $$.param.type->getQualifier().precision = $1.qualifier.precision;
-        parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
-
-        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
-        parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type);
-        parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type);
-    }
-    | parameter_type_specifier {
-        $$ = $1;
-
-        parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type);
-        parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type);
-        parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
-    }
-    ;
-
-parameter_type_specifier
-    : type_specifier {
-        TParameter param = { 0, new TType($1) };
-        $$.param = param;
-        if ($1.arraySizes)
-            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
-    }
-    ;
-
-init_declarator_list
-    : single_declaration {
-        $$ = $1;
-    }
-    | init_declarator_list COMMA IDENTIFIER {
-        $$ = $1;
-        parseContext.declareVariable($3.loc, *$3.string, $1.type);
-    }
-    | init_declarator_list COMMA IDENTIFIER array_specifier {
-        $$ = $1;
-        parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes);
-    }
-    | init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer {
-        $$.type = $1.type;
-        TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes, $6);
-        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $5.loc);
-    }
-    | init_declarator_list COMMA IDENTIFIER EQUAL initializer {
-        $$.type = $1.type;
-        TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, 0, $5);
-        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $4.loc);
-    }
-    ;
-
-single_declaration
-    : fully_specified_type {
-        $$.type = $1;
-        $$.intermNode = 0;
-
-        parseContext.declareTypeDefaults($$.loc, $$.type);
-
-    }
-    | fully_specified_type IDENTIFIER {
-        $$.type = $1;
-        $$.intermNode = 0;
-        parseContext.declareVariable($2.loc, *$2.string, $1);
-    }
-    | fully_specified_type IDENTIFIER array_specifier {
-        $$.type = $1;
-        $$.intermNode = 0;
-        parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes);
-    }
-    | fully_specified_type IDENTIFIER array_specifier EQUAL initializer {
-        $$.type = $1;
-        TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes, $5);
-        $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $4.loc);
-    }
-    | fully_specified_type IDENTIFIER EQUAL initializer {
-        $$.type = $1;
-        TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4);
-        $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $3.loc);
-    }
-
-// Grammar Note:  No 'enum', or 'typedef'.
-
-fully_specified_type
-    : type_specifier {
-        $$ = $1;
-
-        parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $$);
-        if ($1.arraySizes) {
-            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
-        }
-        parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier);
-    }
-    | type_qualifier type_specifier  {
-        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
-        parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2);
-
-        if ($2.arraySizes) {
-            parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type");
-        }
-
-        if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier))
-            $2.arraySizes = nullptr;
-
-        parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers);
-        $2.shaderQualifiers.merge($1.shaderQualifiers);
-        parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true);
-        parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier);
-
-        $$ = $2;
-
-        if (! $$.qualifier.isInterpolation() &&
-            ((parseContext.language == EShLangVertex   && $$.qualifier.storage == EvqVaryingOut) ||
-             (parseContext.language == EShLangFragment && $$.qualifier.storage == EvqVaryingIn)))
-            $$.qualifier.smooth = true;
-    }
-    ;
-
-invariant_qualifier
-    : INVARIANT {
-        parseContext.globalCheck($1.loc, "invariant");
-        parseContext.profileRequires($$.loc, ENoProfile, 120, 0, "invariant");
-        $$.init($1.loc);
-        $$.qualifier.invariant = true;
-    }
-    ;
-
-interpolation_qualifier
-    : SMOOTH {
-        parseContext.globalCheck($1.loc, "smooth");
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "smooth");
-        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "smooth");
-        $$.init($1.loc);
-        $$.qualifier.smooth = true;
-    }
-    | FLAT {
-        parseContext.globalCheck($1.loc, "flat");
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "flat");
-        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "flat");
-        $$.init($1.loc);
-        $$.qualifier.flat = true;
-    }
-
-    | NOPERSPECTIVE {
-        parseContext.globalCheck($1.loc, "noperspective");
-        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective");
-        $$.init($1.loc);
-        $$.qualifier.nopersp = true;
-    }
-
-
-    ;
-
-layout_qualifier
-    : LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN {
-        $$ = $3;
-    }
-    ;
-
-layout_qualifier_id_list
-    : layout_qualifier_id {
-        $$ = $1;
-    }
-    | layout_qualifier_id_list COMMA layout_qualifier_id {
-        $$ = $1;
-        $$.shaderQualifiers.merge($3.shaderQualifiers);
-        parseContext.mergeObjectLayoutQualifiers($$.qualifier, $3.qualifier, false);
-    }
-
-layout_qualifier_id
-    : IDENTIFIER {
-        $$.init($1.loc);
-        parseContext.setLayoutQualifier($1.loc, $$, *$1.string);
-    }
-    | IDENTIFIER EQUAL constant_expression {
-        $$.init($1.loc);
-        parseContext.setLayoutQualifier($1.loc, $$, *$1.string, $3);
-    }
-    | SHARED { // because "shared" is both an identifier and a keyword
-        $$.init($1.loc);
-        TString strShared("shared");
-        parseContext.setLayoutQualifier($1.loc, $$, strShared);
-    }
-    ;
-
-
-precise_qualifier
-    : PRECISE {
-        parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
-        parseContext.profileRequires($1.loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
-        $$.init($1.loc);
-        $$.qualifier.noContraction = true;
-    }
-    ;
-
-
-type_qualifier
-    : single_type_qualifier {
-        $$ = $1;
-    }
-    | type_qualifier single_type_qualifier {
-        $$ = $1;
-        if ($$.basicType == EbtVoid)
-            $$.basicType = $2.basicType;
-
-        $$.shaderQualifiers.merge($2.shaderQualifiers);
-        parseContext.mergeQualifiers($$.loc, $$.qualifier, $2.qualifier, false);
-    }
-    ;
-
-single_type_qualifier
-    : storage_qualifier {
-        $$ = $1;
-    }
-    | layout_qualifier {
-        $$ = $1;
-    }
-    | precision_qualifier {
-        parseContext.checkPrecisionQualifier($1.loc, $1.qualifier.precision);
-        $$ = $1;
-    }
-    | interpolation_qualifier {
-        // allow inheritance of storage qualifier from block declaration
-        $$ = $1;
-    }
-    | invariant_qualifier {
-        // allow inheritance of storage qualifier from block declaration
-        $$ = $1;
-    }
-
-    | precise_qualifier {
-        // allow inheritance of storage qualifier from block declaration
-        $$ = $1;
-    }
-
-
-    ;
-
-storage_qualifier
-    : CONST {
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
-    }
-    | INOUT {
-        parseContext.globalCheck($1.loc, "inout");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqInOut;
-    }
-    | IN {
-        parseContext.globalCheck($1.loc, "in");
-        $$.init($1.loc);
-        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
-        $$.qualifier.storage = EvqIn;
-    }
-    | OUT {
-        parseContext.globalCheck($1.loc, "out");
-        $$.init($1.loc);
-        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
-        $$.qualifier.storage = EvqOut;
-    }
-    | CENTROID {
-        parseContext.profileRequires($1.loc, ENoProfile, 120, 0, "centroid");
-        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "centroid");
-        parseContext.globalCheck($1.loc, "centroid");
-        $$.init($1.loc);
-        $$.qualifier.centroid = true;
-    }
-    | UNIFORM {
-        parseContext.globalCheck($1.loc, "uniform");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqUniform;
-    }
-    | SHARED {
-        parseContext.globalCheck($1.loc, "shared");
-        parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
-        parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqShared;
-    }
-    | BUFFER {
-        parseContext.globalCheck($1.loc, "buffer");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqBuffer;
-    }
-
-    | ATTRIBUTE {
-        parseContext.requireStage($1.loc, EShLangVertex, "attribute");
-        parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute");
-        parseContext.checkDeprecated($1.loc, ENoProfile, 130, "attribute");
-        parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "attribute");
-        parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "attribute");
-
-        parseContext.globalCheck($1.loc, "attribute");
-
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqVaryingIn;
-    }
-    | VARYING {
-        parseContext.checkDeprecated($1.loc, ENoProfile, 130, "varying");
-        parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "varying");
-        parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "varying");
-        parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "varying");
-
-        parseContext.globalCheck($1.loc, "varying");
-
-        $$.init($1.loc);
-        if (parseContext.language == EShLangVertex)
-            $$.qualifier.storage = EvqVaryingOut;
-        else
-            $$.qualifier.storage = EvqVaryingIn;
-    }
-    | PATCH {
-        parseContext.globalCheck($1.loc, "patch");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
-        $$.init($1.loc);
-        $$.qualifier.patch = true;
-    }
-    | SAMPLE {
-        parseContext.globalCheck($1.loc, "sample");
-        $$.init($1.loc);
-        $$.qualifier.sample = true;
-    }
-
-    | COHERENT {
-        $$.init($1.loc);
-        $$.qualifier.coherent = true;
-    }
-    | VOLATILE {
-        $$.init($1.loc);
-        $$.qualifier.volatil = true;
-    }
-    | RESTRICT {
-        $$.init($1.loc);
-        $$.qualifier.restrict = true;
-    }
-    | READONLY {
-        $$.init($1.loc);
-        $$.qualifier.readonly = true;
-    }
-    | WRITEONLY {
-        $$.init($1.loc);
-        $$.qualifier.writeonly = true;
-    }
-
-    ;
-
-
-
-
-type_name_list
-    : IDENTIFIER {
-        // TODO
-    }
-    | type_name_list COMMA IDENTIFIER {
-        // TODO: 4.0 semantics: subroutines
-        // 1) make sure each identifier is a type declared earlier with SUBROUTINE
-        // 2) save all of the identifiers for future comparison with the declared function
-    }
-    ;
-
-
-type_specifier
-    : type_specifier_nonarray type_parameter_specifier_opt {
-        $$ = $1;
-        $$.qualifier.precision = parseContext.getDefaultPrecision($$);
-        $$.typeParameters = $2;
-    }
-    | type_specifier_nonarray type_parameter_specifier_opt array_specifier {
-        parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes);
-        $$ = $1;
-        $$.qualifier.precision = parseContext.getDefaultPrecision($$);
-        $$.typeParameters = $2;
-        $$.arraySizes = $3.arraySizes;
-    }
-    ;
-
-array_specifier
-    : LEFT_BRACKET RIGHT_BRACKET {
-        $$.loc = $1.loc;
-        $$.arraySizes = new TArraySizes;
-        $$.arraySizes->addInnerSize();
-    }
-    | LEFT_BRACKET conditional_expression RIGHT_BRACKET {
-        $$.loc = $1.loc;
-        $$.arraySizes = new TArraySizes;
-
-        TArraySize size;
-        parseContext.arraySizeCheck($2->getLoc(), $2, size, "array size");
-        $$.arraySizes->addInnerSize(size);
-    }
-    | array_specifier LEFT_BRACKET RIGHT_BRACKET {
-        $$ = $1;
-        $$.arraySizes->addInnerSize();
-    }
-    | array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET {
-        $$ = $1;
-
-        TArraySize size;
-        parseContext.arraySizeCheck($3->getLoc(), $3, size, "array size");
-        $$.arraySizes->addInnerSize(size);
-    }
-    ;
-
-type_parameter_specifier_opt
-    : type_parameter_specifier {
-        $$ = $1;
-    }
-    | /* May be null */ {
-        $$ = 0;
-    }
-    ;
-
-type_parameter_specifier
-    : LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE {
-        $$ = $2;
-    }
-    ;
-
-type_parameter_specifier_list
-    : unary_expression {
-        $$ = new TArraySizes;
-
-        TArraySize size;
-        parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter");
-        $$->addInnerSize(size);
-    }
-    | type_parameter_specifier_list COMMA unary_expression {
-        $$ = $1;
-
-        TArraySize size;
-        parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter");
-        $$->addInnerSize(size);
-    }
-    ;
-
-type_specifier_nonarray
-    : VOID {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtVoid;
-    }
-    | FLOAT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-    }
-    | INT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-    }
-    | UINT {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-    }
-    | BOOL {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-    }
-    | VEC2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setVector(2);
-    }
-    | VEC3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setVector(3);
-    }
-    | VEC4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setVector(4);
-    }
-    | BVEC2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-        $$.setVector(2);
-    }
-    | BVEC3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-        $$.setVector(3);
-    }
-    | BVEC4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-        $$.setVector(4);
-    }
-    | IVEC2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-        $$.setVector(2);
-    }
-    | IVEC3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-        $$.setVector(3);
-    }
-    | IVEC4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-        $$.setVector(4);
-    }
-    | UVEC2 {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-        $$.setVector(2);
-    }
-    | UVEC3 {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-        $$.setVector(3);
-    }
-    | UVEC4 {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-        $$.setVector(4);
-    }
-    | MAT2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 2);
-    }
-    | MAT3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 3);
-    }
-    | MAT4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 4);
-    }
-    | MAT2X2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 2);
-    }
-    | MAT2X3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 3);
-    }
-    | MAT2X4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 4);
-    }
-    | MAT3X2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 2);
-    }
-    | MAT3X3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 3);
-    }
-    | MAT3X4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 4);
-    }
-    | MAT4X2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 2);
-    }
-    | MAT4X3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 3);
-    }
-    | MAT4X4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 4);
-    }
-
-
-
-    | SAMPLER2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D);
-    }
-    | SAMPLER3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd3D);
-    }
-    | SAMPLERCUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube);
-    }
-    | SAMPLER2DSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, false, true);
-    }
-    | SAMPLERCUBESHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, false, true);
-    }
-    | SAMPLER2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true);
-    }
-    | SAMPLER2DARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true, true);
-    }
-
-    | SAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, true);
-    }
-    | SAMPLERCUBEARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdCube, true, true);
-    }
-
-
-    | ISAMPLER2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd2D);
-    }
-    | ISAMPLER3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd3D);
-    }
-    | ISAMPLERCUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdCube);
-    }
-    | ISAMPLER2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd2D, true);
-    }
-    | USAMPLER2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd2D);
-    }
-    | USAMPLER3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd3D);
-    }
-    | USAMPLERCUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, EsdCube);
-    }
-
-    | ISAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdCube, true);
-    }
-    | USAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, EsdCube, true);
-    }
-    | TEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube, true);
-    }
-    | ITEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube, true);
-    }
-    | UTEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube, true);
-    }
-
-
-    | USAMPLER2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd2D, true);
-    }
-    | TEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D);
-    }
-    | TEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd3D);
-    }
-    | TEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D, true);
-    }
-    | TEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube);
-    }
-    | ITEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D);
-    }
-    | ITEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd3D);
-    }
-    | ITEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube);
-    }
-    | ITEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true);
-    }
-    | UTEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D);
-    }
-    | UTEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd3D);
-    }
-    | UTEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube);
-    }
-    | UTEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true);
-    }
-    | SAMPLER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(false);
-    }
-    | SAMPLERSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(true);
-    }
-
-    | SAMPLER2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdRect);
-    }
-    | SAMPLER2DRECTSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdRect, false, true);
-    }
-    | ISAMPLER2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdRect);
-    }
-    | USAMPLER2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, EsdRect);
-    }
-    | SAMPLERBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, EsdBuffer);
-    }
-    | ISAMPLERBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdBuffer);
-    }
-    | USAMPLERBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, EsdBuffer);
-    }
-    | SAMPLER2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, false, false, true);
-    }
-    | ISAMPLER2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd2D, false, false, true);
-    }
-    | USAMPLER2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd2D, false, false, true);
-    }
-    | SAMPLER2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true, false, true);
-    }
-    | ISAMPLER2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd2D, true, false, true);
-    }
-    | USAMPLER2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd2D, true, false, true);
-    }
-
-    | TEXTURE2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdRect);
-    }
-    | ITEXTURE2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdRect);
-    }
-    | UTEXTURE2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdRect);
-    }
-    | TEXTUREBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdBuffer);
-    }
-    | ITEXTUREBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdBuffer);
-    }
-    | UTEXTUREBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdBuffer);
-    }
-    | TEXTURE2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
-    }
-    | ITEXTURE2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, false, false, true);
-    }
-    | UTEXTURE2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, false, false, true);
-    }
-    | TEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
-    }
-    | ITEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true, false, true);
-    }
-    | UTEXTURE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true, false, true);
-    }
-
-    | IMAGE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd2D);
-    }
-    | IIMAGE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd2D);
-    }
-    | UIMAGE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd2D);
-    }
-    | IMAGE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd3D);
-    }
-    | IIMAGE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd3D);
-    }
-    | UIMAGE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd3D);
-    }
-    | IMAGE2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, EsdRect);
-    }
-    | IIMAGE2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, EsdRect);
-    }
-    | UIMAGE2DRECT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, EsdRect);
-    }
-    | IMAGECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, EsdCube);
-    }
-    | IIMAGECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, EsdCube);
-    }
-    | UIMAGECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, EsdCube);
-    }
-    | IMAGEBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, EsdBuffer);
-    }
-    | IIMAGEBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, EsdBuffer);
-    }
-    | UIMAGEBUFFER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, EsdBuffer);
-    }
-    | IMAGE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd1D, true);
-    }
-    | IIMAGE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd1D, true);
-    }
-    | UIMAGE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd1D, true);
-    }
-    | IMAGE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd2D, true);
-    }
-    | IIMAGE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd2D, true);
-    }
-    | UIMAGE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd2D, true);
-    }
-    | IMAGECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, EsdCube, true);
-    }
-    | IIMAGECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, EsdCube, true);
-    }
-    | UIMAGECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, EsdCube, true);
-    }
-    | IMAGE2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
-    }
-    | IIMAGE2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd2D, false, false, true);
-    }
-    | UIMAGE2DMS {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd2D, false, false, true);
-    }
-    | IMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
-    }
-    | IIMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtInt, Esd2D, true, false, true);
-    }
-    | UIMAGE2DMSARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
-    }
-
-    | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D);
-        $$.sampler.external = true;
-    }
-    | SAMPLEREXTERNAL2DY2YEXT { // GL_EXT_YUV_target
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D);
-        $$.sampler.yuv = true;
-    }
-
-
-    | struct_specifier {
-        $$ = $1;
-        $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        parseContext.structTypeCheck($$.loc, $$);
-    }
-    | TYPE_NAME {
-        //
-        // This is for user defined type names.  The lexical phase looked up the
-        // type.
-        //
-        if (const TVariable* variable = ($1.symbol)->getAsVariable()) {
-            const TType& structure = variable->getType();
-            $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-            $$.basicType = EbtStruct;
-            $$.userDef = &structure;
-        } else
-            parseContext.error($1.loc, "expected type name", $1.string->c_str(), "");
-    }
-    ;
-
-precision_qualifier
-    : HIGH_PRECISION {
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "highp precision qualifier");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqHigh);
-    }
-    | MEDIUM_PRECISION {
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "mediump precision qualifier");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqMedium);
-    }
-    | LOW_PRECISION {
-        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "lowp precision qualifier");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqLow);
-    }
-    ;
-
-struct_specifier
-    : STRUCT IDENTIFIER LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
-        TType* structure = new TType($5, *$2.string);
-        parseContext.structArrayCheck($2.loc, *structure);
-        TVariable* userTypeDef = new TVariable($2.string, *structure, true);
-        if (! parseContext.symbolTable.insert(*userTypeDef))
-            parseContext.error($2.loc, "redefinition", $2.string->c_str(), "struct");
-        $$.init($1.loc);
-        $$.basicType = EbtStruct;
-        $$.userDef = structure;
-        --parseContext.structNestingLevel;
-    }
-    | STRUCT LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
-        TType* structure = new TType($4, TString(""));
-        $$.init($1.loc);
-        $$.basicType = EbtStruct;
-        $$.userDef = structure;
-        --parseContext.structNestingLevel;
-    }
-    ;
-
-struct_declaration_list
-    : struct_declaration {
-        $$ = $1;
-    }
-    | struct_declaration_list struct_declaration {
-        $$ = $1;
-        for (unsigned int i = 0; i < $2->size(); ++i) {
-            for (unsigned int j = 0; j < $$->size(); ++j) {
-                if ((*$$)[j].type->getFieldName() == (*$2)[i].type->getFieldName())
-                    parseContext.error((*$2)[i].loc, "duplicate member name:", "", (*$2)[i].type->getFieldName().c_str());
-            }
-            $$->push_back((*$2)[i]);
-        }
-    }
-    ;
-
-struct_declaration
-    : type_specifier struct_declarator_list SEMICOLON {
-        if ($1.arraySizes) {
-            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.isEsProfile())
-                parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
-        }
-
-        $$ = $2;
-
-        parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType);
-        parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier);
-
-        for (unsigned int i = 0; i < $$->size(); ++i) {
-            TType type($1);
-            type.setFieldName((*$$)[i].type->getFieldName());
-            type.transferArraySizes((*$$)[i].type->getArraySizes());
-            type.copyArrayInnerSizes($1.arraySizes);
-            parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
-            (*$$)[i].type->shallowCopy(type);
-        }
-    }
-    | type_qualifier type_specifier struct_declarator_list SEMICOLON {
-        if ($2.arraySizes) {
-            parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.isEsProfile())
-                parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes);
-        }
-
-        $$ = $3;
-
-        parseContext.memberQualifierCheck($1);
-        parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType);
-        parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true);
-        parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier);
-
-        for (unsigned int i = 0; i < $$->size(); ++i) {
-            TType type($2);
-            type.setFieldName((*$$)[i].type->getFieldName());
-            type.transferArraySizes((*$$)[i].type->getArraySizes());
-            type.copyArrayInnerSizes($2.arraySizes);
-            parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
-            (*$$)[i].type->shallowCopy(type);
-        }
-    }
-    ;
-
-struct_declarator_list
-    : struct_declarator {
-        $$ = new TTypeList;
-        $$->push_back($1);
-    }
-    | struct_declarator_list COMMA struct_declarator {
-        $$->push_back($3);
-    }
-    ;
-
-struct_declarator
-    : IDENTIFIER {
-        $$.type = new TType(EbtVoid);
-        $$.loc = $1.loc;
-        $$.type->setFieldName(*$1.string);
-    }
-    | IDENTIFIER array_specifier {
-        parseContext.arrayOfArrayVersionCheck($1.loc, $2.arraySizes);
-
-        $$.type = new TType(EbtVoid);
-        $$.loc = $1.loc;
-        $$.type->setFieldName(*$1.string);
-        $$.type->transferArraySizes($2.arraySizes);
-    }
-    ;
-
-initializer
-    : assignment_expression {
-        $$ = $1;
-    }
-
-    | LEFT_BRACE initializer_list RIGHT_BRACE {
-        const char* initFeature = "{ } style initializers";
-        parseContext.requireProfile($1.loc, ~EEsProfile, initFeature);
-        parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
-        $$ = $2;
-    }
-    | LEFT_BRACE initializer_list COMMA RIGHT_BRACE {
-        const char* initFeature = "{ } style initializers";
-        parseContext.requireProfile($1.loc, ~EEsProfile, initFeature);
-        parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
-        $$ = $2;
-    }
-
-    ;
-
-
-initializer_list
-    : initializer {
-        $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc());
-    }
-    | initializer_list COMMA initializer {
-        $$ = parseContext.intermediate.growAggregate($1, $3);
-    }
-    ;
-
-
-declaration_statement
-    : declaration { $$ = $1; }
-    ;
-
-statement
-    : compound_statement  { $$ = $1; }
-    | simple_statement    { $$ = $1; }
-    ;
-
-// Grammar Note:  labeled statements for switch statements only; 'goto' is not supported.
-
-simple_statement
-    : declaration_statement { $$ = $1; }
-    | expression_statement  { $$ = $1; }
-    | selection_statement   { $$ = $1; }
-    | switch_statement      { $$ = $1; }
-    | case_label            { $$ = $1; }
-    | iteration_statement   { $$ = $1; }
-    | jump_statement        { $$ = $1; }
-
-
-
-    ;
-
-
-
-
-
-compound_statement
-    : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
-    | LEFT_BRACE {
-        parseContext.symbolTable.push();
-        ++parseContext.statementNestingLevel;
-    }
-      statement_list {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        --parseContext.statementNestingLevel;
-    }
-      RIGHT_BRACE {
-        if ($3 && $3->getAsAggregate())
-            $3->getAsAggregate()->setOperator(EOpSequence);
-        $$ = $3;
-    }
-    ;
-
-statement_no_new_scope
-    : compound_statement_no_new_scope { $$ = $1; }
-    | simple_statement                { $$ = $1; }
-    ;
-
-statement_scoped
-    : {
-        ++parseContext.controlFlowNestingLevel;
-    }
-      compound_statement  {
-        --parseContext.controlFlowNestingLevel;
-        $$ = $2;
-    }
-    | {
-        parseContext.symbolTable.push();
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-      simple_statement {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-        $$ = $2;
-    }
-
-compound_statement_no_new_scope
-    // Statement that doesn't create a new scope, for selection_statement, iteration_statement
-    : LEFT_BRACE RIGHT_BRACE {
-        $$ = 0;
-    }
-    | LEFT_BRACE statement_list RIGHT_BRACE {
-        if ($2 && $2->getAsAggregate())
-            $2->getAsAggregate()->setOperator(EOpSequence);
-        $$ = $2;
-    }
-    ;
-
-statement_list
-    : statement {
-        $$ = parseContext.intermediate.makeAggregate($1);
-        if ($1 && $1->getAsBranchNode() && ($1->getAsBranchNode()->getFlowOp() == EOpCase ||
-                                            $1->getAsBranchNode()->getFlowOp() == EOpDefault)) {
-            parseContext.wrapupSwitchSubsequence(0, $1);
-            $$ = 0;  // start a fresh subsequence for what's after this case
-        }
-    }
-    | statement_list statement {
-        if ($2 && $2->getAsBranchNode() && ($2->getAsBranchNode()->getFlowOp() == EOpCase ||
-                                            $2->getAsBranchNode()->getFlowOp() == EOpDefault)) {
-            parseContext.wrapupSwitchSubsequence($1 ? $1->getAsAggregate() : 0, $2);
-            $$ = 0;  // start a fresh subsequence for what's after this case
-        } else
-            $$ = parseContext.intermediate.growAggregate($1, $2);
-    }
-    ;
-
-expression_statement
-    : SEMICOLON  { $$ = 0; }
-    | expression SEMICOLON  { $$ = static_cast<TIntermNode*>($1); }
-    ;
-
-selection_statement
-    : selection_statement_nonattributed {
-        $$ = $1;
-    }
-
-    | attribute selection_statement_nonattributed {
-        parseContext.handleSelectionAttributes(*$1, $2);
-        $$ = $2;
-    }
-
-
-selection_statement_nonattributed
-    : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement {
-        parseContext.boolCheck($1.loc, $3);
-        $$ = parseContext.intermediate.addSelection($3, $5, $1.loc);
-    }
-    ;
-
-selection_rest_statement
-    : statement_scoped ELSE statement_scoped {
-        $$.node1 = $1;
-        $$.node2 = $3;
-    }
-    | statement_scoped {
-        $$.node1 = $1;
-        $$.node2 = 0;
-    }
-    ;
-
-condition
-    // In 1996 c++ draft, conditions can include single declarations
-    : expression {
-        $$ = $1;
-        parseContext.boolCheck($1->getLoc(), $1);
-    }
-    | fully_specified_type IDENTIFIER EQUAL initializer {
-        parseContext.boolCheck($2.loc, $1);
-
-        TType type($1);
-        TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4);
-        if (initNode)
-            $$ = initNode->getAsTyped();
-        else
-            $$ = 0;
-    }
-    ;
-
-switch_statement
-    : switch_statement_nonattributed {
-        $$ = $1;
-    }
-
-    | attribute switch_statement_nonattributed {
-        parseContext.handleSwitchAttributes(*$1, $2);
-        $$ = $2;
-    }
-
-
-switch_statement_nonattributed
-    : SWITCH LEFT_PAREN expression RIGHT_PAREN {
-        // start new switch sequence on the switch stack
-        ++parseContext.controlFlowNestingLevel;
-        ++parseContext.statementNestingLevel;
-        parseContext.switchSequenceStack.push_back(new TIntermSequence);
-        parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
-        parseContext.symbolTable.push();
-    }
-    LEFT_BRACE switch_statement_list RIGHT_BRACE {
-        $$ = parseContext.addSwitch($1.loc, $3, $7 ? $7->getAsAggregate() : 0);
-        delete parseContext.switchSequenceStack.back();
-        parseContext.switchSequenceStack.pop_back();
-        parseContext.switchLevel.pop_back();
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-    ;
-
-switch_statement_list
-    : /* nothing */ {
-        $$ = 0;
-    }
-    | statement_list {
-        $$ = $1;
-    }
-    ;
-
-case_label
-    : CASE expression COLON {
-        $$ = 0;
-        if (parseContext.switchLevel.size() == 0)
-            parseContext.error($1.loc, "cannot appear outside switch statement", "case", "");
-        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
-            parseContext.error($1.loc, "cannot be nested inside control flow", "case", "");
-        else {
-            parseContext.constantValueCheck($2, "case");
-            parseContext.integerCheck($2, "case");
-            $$ = parseContext.intermediate.addBranch(EOpCase, $2, $1.loc);
-        }
-    }
-    | DEFAULT COLON {
-        $$ = 0;
-        if (parseContext.switchLevel.size() == 0)
-            parseContext.error($1.loc, "cannot appear outside switch statement", "default", "");
-        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
-            parseContext.error($1.loc, "cannot be nested inside control flow", "default", "");
-        else
-            $$ = parseContext.intermediate.addBranch(EOpDefault, $1.loc);
-    }
-    ;
-
-iteration_statement
-    : iteration_statement_nonattributed {
-        $$ = $1;
-    }
-
-    | attribute iteration_statement_nonattributed {
-        parseContext.handleLoopAttributes(*$1, $2);
-        $$ = $2;
-    }
-
-
-iteration_statement_nonattributed
-    : WHILE LEFT_PAREN {
-        if (! parseContext.limits.whileLoops)
-            parseContext.error($1.loc, "while loops not available", "limitation", "");
-        parseContext.symbolTable.push();
-        ++parseContext.loopNestingLevel;
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-      condition RIGHT_PAREN statement_no_new_scope {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        $$ = parseContext.intermediate.addLoop($6, $4, 0, true, $1.loc);
-        --parseContext.loopNestingLevel;
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-    | DO {
-        ++parseContext.loopNestingLevel;
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-      statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON {
-        if (! parseContext.limits.whileLoops)
-            parseContext.error($1.loc, "do-while loops not available", "limitation", "");
-
-        parseContext.boolCheck($8.loc, $6);
-
-        $$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc);
-        --parseContext.loopNestingLevel;
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-    | FOR LEFT_PAREN {
-        parseContext.symbolTable.push();
-        ++parseContext.loopNestingLevel;
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-      for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        $$ = parseContext.intermediate.makeAggregate($4, $2.loc);
-        TIntermLoop* forLoop = parseContext.intermediate.addLoop($7, reinterpret_cast<TIntermTyped*>($5.node1), reinterpret_cast<TIntermTyped*>($5.node2), true, $1.loc);
-        if (! parseContext.limits.nonInductiveForLoops)
-            parseContext.inductiveLoopCheck($1.loc, $4, forLoop);
-        $$ = parseContext.intermediate.growAggregate($$, forLoop, $1.loc);
-        $$->getAsAggregate()->setOperator(EOpSequence);
-        --parseContext.loopNestingLevel;
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-    ;
-
-for_init_statement
-    : expression_statement {
-        $$ = $1;
-    }
-    | declaration_statement {
-        $$ = $1;
-    }
-    ;
-
-conditionopt
-    : condition {
-        $$ = $1;
-    }
-    | /* May be null */ {
-        $$ = 0;
-    }
-    ;
-
-for_rest_statement
-    : conditionopt SEMICOLON {
-        $$.node1 = $1;
-        $$.node2 = 0;
-    }
-    | conditionopt SEMICOLON expression  {
-        $$.node1 = $1;
-        $$.node2 = $3;
-    }
-    ;
-
-jump_statement
-    : CONTINUE SEMICOLON {
-        if (parseContext.loopNestingLevel <= 0)
-            parseContext.error($1.loc, "continue statement only allowed in loops", "", "");
-        $$ = parseContext.intermediate.addBranch(EOpContinue, $1.loc);
-    }
-    | BREAK SEMICOLON {
-        if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
-            parseContext.error($1.loc, "break statement only allowed in switch and loops", "", "");
-        $$ = parseContext.intermediate.addBranch(EOpBreak, $1.loc);
-    }
-    | RETURN SEMICOLON {
-        $$ = parseContext.intermediate.addBranch(EOpReturn, $1.loc);
-        if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
-            parseContext.error($1.loc, "non-void function must return a value", "return", "");
-        if (parseContext.inMain)
-            parseContext.postEntryPointReturn = true;
-    }
-    | RETURN expression SEMICOLON {
-        $$ = parseContext.handleReturnValue($1.loc, $2);
-    }
-    | DISCARD SEMICOLON {
-        parseContext.requireStage($1.loc, EShLangFragment, "discard");
-        $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc);
-    }
-    ;
-
-// Grammar Note:  No 'goto'.  Gotos are not supported.
-
-translation_unit
-    : external_declaration {
-        $$ = $1;
-        parseContext.intermediate.setTreeRoot($$);
-    }
-    | translation_unit external_declaration {
-        if ($2 != nullptr) {
-            $$ = parseContext.intermediate.growAggregate($1, $2);
-            parseContext.intermediate.setTreeRoot($$);
-        }
-    }
-    ;
-
-external_declaration
-    : function_definition {
-        $$ = $1;
-    }
-    | declaration {
-        $$ = $1;
-    }
-
-    | SEMICOLON {
-        parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon");
-        parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
-        $$ = nullptr;
-    }
-
-    ;
-
-function_definition
-    : function_prototype {
-        $1.function = parseContext.handleFunctionDeclarator($1.loc, *$1.function, false /* not prototype */);
-        $1.intermNode = parseContext.handleFunctionDefinition($1.loc, *$1.function);
-    }
-    compound_statement_no_new_scope {
-        //   May be best done as post process phase on intermediate code
-        if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
-            parseContext.error($1.loc, "function does not return a value:", "", $1.function->getName().c_str());
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        $$ = parseContext.intermediate.growAggregate($1.intermNode, $3);
-        parseContext.intermediate.setAggregateOperator($$, EOpFunction, $1.function->getType(), $1.loc);
-        $$->getAsAggregate()->setName($1.function->getMangledName().c_str());
-
-        // store the pragma information for debug and optimize and other vendor specific
-        // information. This information can be queried from the parse tree
-        $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
-        $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
-        $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
-    }
-    ;
-
-
-attribute
-    : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET {
-        $$ = $3;
-        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
-    }
-
-attribute_list
-    : single_attribute {
-        $$ = $1;
-    }
-    | attribute_list COMMA single_attribute {
-        $$ = parseContext.mergeAttributes($1, $3);
-    }
-
-single_attribute
-    : IDENTIFIER {
-        $$ = parseContext.makeAttributes(*$1.string);
-    }
-    | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN {
-        $$ = parseContext.makeAttributes(*$1.string, $3);
-    }
-
-
-%%

+ 0 - 7178
glslang/MachineIndependent/glslang_angle_tab.cpp

@@ -1,7178 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.5.1.  */
-
-/* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
-   Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Undocumented macros, especially those whose name start with YY_,
-   are private implementation details.  Do not rely on them.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "3.5.1"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 1
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-
-
-
-/* First part of user prologue.  */
-#line 75 "MachineIndependent/glslang_angle.y"
-
-
-/* Based on:
-ANSI C Yacc grammar
-
-In 1985, Jeff Lee published his Yacc grammar (which is accompanied by a
-matching Lex specification) for the April 30, 1985 draft version of the
-ANSI C standard.  Tom Stockfisch reposted it to net.sources in 1987; that
-original, as mentioned in the answer to question 17.25 of the comp.lang.c
-FAQ, can be ftp'ed from ftp.uu.net, file usenet/net.sources/ansi.c.grammar.Z.
-
-I intend to keep this version as close to the current C Standard grammar as
-possible; please let me know if you discover discrepancies.
-
-Jutta Degener, 1995
-*/
-
-#include "SymbolTable.h"
-#include "ParseHelper.h"
-#include "../Public/ShaderLang.h"
-#include "attribute.h"
-
-using namespace glslang;
-
-
-#line 96 "MachineIndependent/glslang_angle_tab.cpp"
-
-# ifndef YY_CAST
-#  ifdef __cplusplus
-#   define YY_CAST(Type, Val) static_cast<Type> (Val)
-#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
-#  else
-#   define YY_CAST(Type, Val) ((Type) (Val))
-#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
-#  endif
-# endif
-# ifndef YY_NULLPTR
-#  if defined __cplusplus
-#   if 201103L <= __cplusplus
-#    define YY_NULLPTR nullptr
-#   else
-#    define YY_NULLPTR 0
-#   endif
-#  else
-#   define YY_NULLPTR ((void*)0)
-#  endif
-# endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 1
-#endif
-
-/* Use api.header.include to #include this header
-   instead of duplicating it here.  */
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_ANGLE_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_ANGLE_TAB_CPP_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    CONST = 258,
-    BOOL = 259,
-    INT = 260,
-    UINT = 261,
-    FLOAT = 262,
-    BVEC2 = 263,
-    BVEC3 = 264,
-    BVEC4 = 265,
-    IVEC2 = 266,
-    IVEC3 = 267,
-    IVEC4 = 268,
-    UVEC2 = 269,
-    UVEC3 = 270,
-    UVEC4 = 271,
-    VEC2 = 272,
-    VEC3 = 273,
-    VEC4 = 274,
-    MAT2 = 275,
-    MAT3 = 276,
-    MAT4 = 277,
-    MAT2X2 = 278,
-    MAT2X3 = 279,
-    MAT2X4 = 280,
-    MAT3X2 = 281,
-    MAT3X3 = 282,
-    MAT3X4 = 283,
-    MAT4X2 = 284,
-    MAT4X3 = 285,
-    MAT4X4 = 286,
-    SAMPLER2D = 287,
-    SAMPLER3D = 288,
-    SAMPLERCUBE = 289,
-    SAMPLER2DSHADOW = 290,
-    SAMPLERCUBESHADOW = 291,
-    SAMPLER2DARRAY = 292,
-    SAMPLER2DARRAYSHADOW = 293,
-    ISAMPLER2D = 294,
-    ISAMPLER3D = 295,
-    ISAMPLERCUBE = 296,
-    ISAMPLER2DARRAY = 297,
-    USAMPLER2D = 298,
-    USAMPLER3D = 299,
-    USAMPLERCUBE = 300,
-    USAMPLER2DARRAY = 301,
-    SAMPLER = 302,
-    SAMPLERSHADOW = 303,
-    TEXTURE2D = 304,
-    TEXTURE3D = 305,
-    TEXTURECUBE = 306,
-    TEXTURE2DARRAY = 307,
-    ITEXTURE2D = 308,
-    ITEXTURE3D = 309,
-    ITEXTURECUBE = 310,
-    ITEXTURE2DARRAY = 311,
-    UTEXTURE2D = 312,
-    UTEXTURE3D = 313,
-    UTEXTURECUBE = 314,
-    UTEXTURE2DARRAY = 315,
-    ATTRIBUTE = 316,
-    VARYING = 317,
-    SAMPLERCUBEARRAY = 318,
-    SAMPLERCUBEARRAYSHADOW = 319,
-    ISAMPLERCUBEARRAY = 320,
-    USAMPLERCUBEARRAY = 321,
-    SAMPLER2DRECT = 322,
-    SAMPLER2DRECTSHADOW = 323,
-    ISAMPLER2DRECT = 324,
-    USAMPLER2DRECT = 325,
-    SAMPLERBUFFER = 326,
-    ISAMPLERBUFFER = 327,
-    USAMPLERBUFFER = 328,
-    SAMPLER2DMS = 329,
-    ISAMPLER2DMS = 330,
-    USAMPLER2DMS = 331,
-    SAMPLER2DMSARRAY = 332,
-    ISAMPLER2DMSARRAY = 333,
-    USAMPLER2DMSARRAY = 334,
-    SAMPLEREXTERNALOES = 335,
-    SAMPLEREXTERNAL2DY2YEXT = 336,
-    IMAGE1D = 337,
-    IIMAGE1D = 338,
-    UIMAGE1D = 339,
-    IMAGE2D = 340,
-    IIMAGE2D = 341,
-    UIMAGE2D = 342,
-    IMAGE3D = 343,
-    IIMAGE3D = 344,
-    UIMAGE3D = 345,
-    IMAGE2DRECT = 346,
-    IIMAGE2DRECT = 347,
-    UIMAGE2DRECT = 348,
-    IMAGECUBE = 349,
-    IIMAGECUBE = 350,
-    UIMAGECUBE = 351,
-    IMAGEBUFFER = 352,
-    IIMAGEBUFFER = 353,
-    UIMAGEBUFFER = 354,
-    IMAGE1DARRAY = 355,
-    IIMAGE1DARRAY = 356,
-    UIMAGE1DARRAY = 357,
-    IMAGE2DARRAY = 358,
-    IIMAGE2DARRAY = 359,
-    UIMAGE2DARRAY = 360,
-    IMAGECUBEARRAY = 361,
-    IIMAGECUBEARRAY = 362,
-    UIMAGECUBEARRAY = 363,
-    IMAGE2DMS = 364,
-    IIMAGE2DMS = 365,
-    UIMAGE2DMS = 366,
-    IMAGE2DMSARRAY = 367,
-    IIMAGE2DMSARRAY = 368,
-    UIMAGE2DMSARRAY = 369,
-    TEXTURECUBEARRAY = 370,
-    ITEXTURECUBEARRAY = 371,
-    UTEXTURECUBEARRAY = 372,
-    TEXTURE1D = 373,
-    ITEXTURE1D = 374,
-    UTEXTURE1D = 375,
-    TEXTURE1DARRAY = 376,
-    ITEXTURE1DARRAY = 377,
-    UTEXTURE1DARRAY = 378,
-    TEXTURE2DRECT = 379,
-    ITEXTURE2DRECT = 380,
-    UTEXTURE2DRECT = 381,
-    TEXTUREBUFFER = 382,
-    ITEXTUREBUFFER = 383,
-    UTEXTUREBUFFER = 384,
-    TEXTURE2DMS = 385,
-    ITEXTURE2DMS = 386,
-    UTEXTURE2DMS = 387,
-    TEXTURE2DMSARRAY = 388,
-    ITEXTURE2DMSARRAY = 389,
-    UTEXTURE2DMSARRAY = 390,
-    LEFT_OP = 391,
-    RIGHT_OP = 392,
-    INC_OP = 393,
-    DEC_OP = 394,
-    LE_OP = 395,
-    GE_OP = 396,
-    EQ_OP = 397,
-    NE_OP = 398,
-    AND_OP = 399,
-    OR_OP = 400,
-    XOR_OP = 401,
-    MUL_ASSIGN = 402,
-    DIV_ASSIGN = 403,
-    ADD_ASSIGN = 404,
-    MOD_ASSIGN = 405,
-    LEFT_ASSIGN = 406,
-    RIGHT_ASSIGN = 407,
-    AND_ASSIGN = 408,
-    XOR_ASSIGN = 409,
-    OR_ASSIGN = 410,
-    SUB_ASSIGN = 411,
-    STRING_LITERAL = 412,
-    LEFT_PAREN = 413,
-    RIGHT_PAREN = 414,
-    LEFT_BRACKET = 415,
-    RIGHT_BRACKET = 416,
-    LEFT_BRACE = 417,
-    RIGHT_BRACE = 418,
-    DOT = 419,
-    COMMA = 420,
-    COLON = 421,
-    EQUAL = 422,
-    SEMICOLON = 423,
-    BANG = 424,
-    DASH = 425,
-    TILDE = 426,
-    PLUS = 427,
-    STAR = 428,
-    SLASH = 429,
-    PERCENT = 430,
-    LEFT_ANGLE = 431,
-    RIGHT_ANGLE = 432,
-    VERTICAL_BAR = 433,
-    CARET = 434,
-    AMPERSAND = 435,
-    QUESTION = 436,
-    INVARIANT = 437,
-    HIGH_PRECISION = 438,
-    MEDIUM_PRECISION = 439,
-    LOW_PRECISION = 440,
-    PRECISION = 441,
-    PACKED = 442,
-    RESOURCE = 443,
-    SUPERP = 444,
-    FLOATCONSTANT = 445,
-    INTCONSTANT = 446,
-    UINTCONSTANT = 447,
-    BOOLCONSTANT = 448,
-    IDENTIFIER = 449,
-    TYPE_NAME = 450,
-    CENTROID = 451,
-    IN = 452,
-    OUT = 453,
-    INOUT = 454,
-    STRUCT = 455,
-    VOID = 456,
-    WHILE = 457,
-    BREAK = 458,
-    CONTINUE = 459,
-    DO = 460,
-    ELSE = 461,
-    FOR = 462,
-    IF = 463,
-    DISCARD = 464,
-    RETURN = 465,
-    SWITCH = 466,
-    CASE = 467,
-    DEFAULT = 468,
-    UNIFORM = 469,
-    SHARED = 470,
-    BUFFER = 471,
-    FLAT = 472,
-    SMOOTH = 473,
-    LAYOUT = 474,
-    PATCH = 475,
-    SAMPLE = 476,
-    COHERENT = 477,
-    VOLATILE = 478,
-    RESTRICT = 479,
-    READONLY = 480,
-    WRITEONLY = 481,
-    NOPERSPECTIVE = 482,
-    PRECISE = 483
-  };
-#endif
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 103 "MachineIndependent/glslang_angle.y"
-
-    struct {
-        glslang::TSourceLoc loc;
-        union {
-            glslang::TString *string;
-            int i;
-            unsigned int u;
-            long long i64;
-            unsigned long long u64;
-            bool b;
-            double d;
-        };
-        glslang::TSymbol* symbol;
-    } lex;
-    struct {
-        glslang::TSourceLoc loc;
-        glslang::TOperator op;
-        union {
-            TIntermNode* intermNode;
-            glslang::TIntermNodePair nodePair;
-            glslang::TIntermTyped* intermTypedNode;
-            glslang::TAttributes* attributes;
-        };
-        union {
-            glslang::TPublicType type;
-            glslang::TFunction* function;
-            glslang::TParameter param;
-            glslang::TTypeLoc typeLine;
-            glslang::TTypeList* typeList;
-            glslang::TArraySizes* arraySizes;
-            glslang::TIdentifierList* identifierList;
-        };
-        glslang::TArraySizes* typeParameters;
-    } interm;
-
-#line 413 "MachineIndependent/glslang_angle_tab.cpp"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-
-int yyparse (glslang::TParseContext* pParseContext);
-
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_ANGLE_TAB_CPP_H_INCLUDED  */
-
-/* Second part of user prologue.  */
-#line 139 "MachineIndependent/glslang_angle.y"
-
-
-/* windows only pragma */
-#ifdef _MSC_VER
-    #pragma warning(disable : 4065)
-    #pragma warning(disable : 4127)
-    #pragma warning(disable : 4244)
-#endif
-
-#define parseContext (*pParseContext)
-#define yyerror(context, msg) context->parserError(msg)
-
-extern int yylex(YYSTYPE*, TParseContext&);
-
-
-#line 444 "MachineIndependent/glslang_angle_tab.cpp"
-
-
-#ifdef short
-# undef short
-#endif
-
-/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
-   <limits.h> and (if available) <stdint.h> are included
-   so that the code can choose integer types of a good width.  */
-
-#ifndef __PTRDIFF_MAX__
-# include <limits.h> /* INFRINGES ON USER NAME SPACE */
-# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
-#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
-#  define YY_STDINT_H
-# endif
-#endif
-
-/* Narrow types that promote to a signed type and that can represent a
-   signed or unsigned integer of at least N bits.  In tables they can
-   save space and decrease cache pressure.  Promoting to a signed type
-   helps avoid bugs in integer arithmetic.  */
-
-#ifdef __INT_LEAST8_MAX__
-typedef __INT_LEAST8_TYPE__ yytype_int8;
-#elif defined YY_STDINT_H
-typedef int_least8_t yytype_int8;
-#else
-typedef signed char yytype_int8;
-#endif
-
-#ifdef __INT_LEAST16_MAX__
-typedef __INT_LEAST16_TYPE__ yytype_int16;
-#elif defined YY_STDINT_H
-typedef int_least16_t yytype_int16;
-#else
-typedef short yytype_int16;
-#endif
-
-#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
-typedef __UINT_LEAST8_TYPE__ yytype_uint8;
-#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
-       && UINT_LEAST8_MAX <= INT_MAX)
-typedef uint_least8_t yytype_uint8;
-#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
-typedef unsigned char yytype_uint8;
-#else
-typedef short yytype_uint8;
-#endif
-
-#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
-typedef __UINT_LEAST16_TYPE__ yytype_uint16;
-#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
-       && UINT_LEAST16_MAX <= INT_MAX)
-typedef uint_least16_t yytype_uint16;
-#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
-typedef unsigned short yytype_uint16;
-#else
-typedef int yytype_uint16;
-#endif
-
-#ifndef YYPTRDIFF_T
-# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
-#  define YYPTRDIFF_T __PTRDIFF_TYPE__
-#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
-# elif defined PTRDIFF_MAX
-#  ifndef ptrdiff_t
-#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  endif
-#  define YYPTRDIFF_T ptrdiff_t
-#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
-# else
-#  define YYPTRDIFF_T long
-#  define YYPTRDIFF_MAXIMUM LONG_MAX
-# endif
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM                                  \
-  YY_CAST (YYPTRDIFF_T,                                 \
-           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
-            ? YYPTRDIFF_MAXIMUM                         \
-            : YY_CAST (YYSIZE_T, -1)))
-
-#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
-
-/* Stored state numbers (used for stacks). */
-typedef yytype_int16 yy_state_t;
-
-/* State numbers in computations.  */
-typedef int yy_state_fast_t;
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(Msgid) Msgid
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-#  define YY_ATTRIBUTE_PURE
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-# else
-#  define YY_ATTRIBUTE_UNUSED
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
-#else
-# define YYUSE(E) /* empty */
-#endif
-
-#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
-    _Pragma ("GCC diagnostic push")                                     \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
-# define YY_IGNORE_USELESS_CAST_BEGIN                          \
-    _Pragma ("GCC diagnostic push")                            \
-    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
-# define YY_IGNORE_USELESS_CAST_END            \
-    _Pragma ("GCC diagnostic pop")
-#endif
-#ifndef YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_END
-#endif
-
-
-#define YY_ASSERT(E) ((void) (0 && (E)))
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yy_state_t yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYPTRDIFF_T yynewbytes;                                         \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
-      }                                                                 \
-    while (0)
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
-#  else
-#   define YYCOPY(Dst, Src, Count)              \
-      do                                        \
-        {                                       \
-          YYPTRDIFF_T yyi;                      \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (Dst)[yyi] = (Src)[yyi];            \
-        }                                       \
-      while (0)
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  201
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   5268
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  229
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  108
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  384
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  524
-
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   483
-
-
-/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, with out-of-bounds checking.  */
-#define YYTRANSLATE(YYX)                                                \
-  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228
-};
-
-#if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_int16 yyrline[] =
-{
-       0,   322,   322,   328,   331,   336,   339,   342,   346,   355,
-     358,   361,   364,   367,   372,   380,   387,   394,   400,   404,
-     411,   414,   420,   427,   437,   445,   450,   483,   489,   493,
-     497,   517,   518,   519,   520,   526,   527,   532,   537,   546,
-     547,   552,   560,   561,   567,   576,   577,   582,   587,   592,
-     600,   601,   610,   622,   623,   632,   633,   642,   643,   652,
-     653,   661,   662,   670,   671,   679,   680,   680,   698,   699,
-     715,   719,   723,   727,   732,   736,   740,   744,   748,   752,
-     756,   763,   766,   777,   784,   789,   794,   801,   805,   809,
-     813,   818,   823,   832,   832,   843,   847,   854,   861,   864,
-     871,   879,   899,   922,   937,   962,   973,   983,   993,  1003,
-    1012,  1015,  1019,  1023,  1028,  1036,  1043,  1048,  1053,  1058,
-    1067,  1077,  1104,  1113,  1120,  1128,  1140,  1146,  1149,  1156,
-    1160,  1164,  1173,  1183,  1186,  1197,  1200,  1203,  1207,  1211,
-    1216,  1225,  1229,  1234,  1240,  1246,  1253,  1258,  1266,  1272,
-    1284,  1298,  1304,  1310,  1314,  1318,  1322,  1326,  1349,  1354,
-    1364,  1369,  1377,  1381,  1391,  1394,  1400,  1406,  1413,  1423,
-    1427,  1431,  1435,  1440,  1444,  1449,  1454,  1459,  1464,  1469,
-    1474,  1479,  1484,  1489,  1495,  1501,  1507,  1512,  1517,  1522,
-    1527,  1532,  1537,  1542,  1547,  1552,  1557,  1562,  1570,  1575,
-    1580,  1585,  1590,  1595,  1600,  1606,  1611,  1618,  1623,  1628,
-    1633,  1638,  1643,  1648,  1654,  1659,  1664,  1669,  1674,  1681,
-    1686,  1691,  1696,  1701,  1706,  1711,  1716,  1721,  1726,  1731,
-    1736,  1741,  1746,  1751,  1757,  1762,  1767,  1772,  1777,  1782,
-    1787,  1792,  1797,  1802,  1807,  1812,  1817,  1823,  1828,  1833,
-    1838,  1843,  1848,  1853,  1858,  1863,  1868,  1873,  1878,  1884,
-    1889,  1894,  1899,  1904,  1909,  1914,  1919,  1924,  1929,  1934,
-    1939,  1944,  1949,  1954,  1959,  1964,  1969,  1974,  1979,  1984,
-    1989,  1994,  1999,  2004,  2009,  2014,  2019,  2024,  2029,  2035,
-    2041,  2049,  2054,  2070,  2075,  2080,  2088,  2088,  2099,  2099,
-    2109,  2112,  2125,  2147,  2174,  2178,  2184,  2189,  2200,  2204,
-    2210,  2221,  2224,  2231,  2235,  2236,  2242,  2243,  2244,  2245,
-    2246,  2247,  2248,  2259,  2260,  2264,  2260,  2276,  2277,  2281,
-    2281,  2288,  2288,  2302,  2305,  2313,  2321,  2332,  2333,  2337,
-    2341,  2348,  2355,  2359,  2367,  2371,  2384,  2388,  2395,  2395,
-    2415,  2418,  2424,  2436,  2448,  2452,  2459,  2459,  2474,  2474,
-    2490,  2490,  2511,  2514,  2520,  2523,  2529,  2533,  2540,  2545,
-    2550,  2557,  2560,  2569,  2573,  2582,  2585,  2589,  2598,  2598,
-    2621,  2627,  2630,  2635,  2638
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || 1
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "CONST", "BOOL", "INT", "UINT", "FLOAT",
-  "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3",
-  "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "MAT2X2",
-  "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
-  "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER2DSHADOW",
-  "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", "SAMPLER2DARRAYSHADOW",
-  "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER2DARRAY",
-  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER",
-  "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
-  "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE",
-  "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE",
-  "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "SAMPLERCUBEARRAY",
-  "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
-  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
-  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
-  "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS", "SAMPLER2DMSARRAY",
-  "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES",
-  "SAMPLEREXTERNAL2DY2YEXT", "IMAGE1D", "IIMAGE1D", "UIMAGE1D", "IMAGE2D",
-  "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT",
-  "IIMAGE2DRECT", "UIMAGE2DRECT", "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE",
-  "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER", "IMAGE1DARRAY",
-  "IIMAGE1DARRAY", "UIMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE2DARRAY",
-  "UIMAGE2DARRAY", "IMAGECUBEARRAY", "IIMAGECUBEARRAY", "UIMAGECUBEARRAY",
-  "IMAGE2DMS", "IIMAGE2DMS", "UIMAGE2DMS", "IMAGE2DMSARRAY",
-  "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY", "TEXTURECUBEARRAY",
-  "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY", "TEXTURE1D", "ITEXTURE1D",
-  "UTEXTURE1D", "TEXTURE1DARRAY", "ITEXTURE1DARRAY", "UTEXTURE1DARRAY",
-  "TEXTURE2DRECT", "ITEXTURE2DRECT", "UTEXTURE2DRECT", "TEXTUREBUFFER",
-  "ITEXTUREBUFFER", "UTEXTUREBUFFER", "TEXTURE2DMS", "ITEXTURE2DMS",
-  "UTEXTURE2DMS", "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY",
-  "UTEXTURE2DMSARRAY", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
-  "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
-  "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
-  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "STRING_LITERAL",
-  "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET",
-  "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL",
-  "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT",
-  "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND",
-  "QUESTION", "INVARIANT", "HIGH_PRECISION", "MEDIUM_PRECISION",
-  "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP",
-  "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
-  "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT",
-  "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
-  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "UNIFORM", "SHARED",
-  "BUFFER", "FLAT", "SMOOTH", "LAYOUT", "PATCH", "SAMPLE", "COHERENT",
-  "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "NOPERSPECTIVE",
-  "PRECISE", "$accept", "variable_identifier", "primary_expression",
-  "postfix_expression", "integer_expression", "function_call",
-  "function_call_or_method", "function_call_generic",
-  "function_call_header_no_parameters",
-  "function_call_header_with_parameters", "function_call_header",
-  "function_identifier", "unary_expression", "unary_operator",
-  "multiplicative_expression", "additive_expression", "shift_expression",
-  "relational_expression", "equality_expression", "and_expression",
-  "exclusive_or_expression", "inclusive_or_expression",
-  "logical_and_expression", "logical_xor_expression",
-  "logical_or_expression", "conditional_expression", "$@1",
-  "assignment_expression", "assignment_operator", "expression",
-  "constant_expression", "declaration", "block_structure", "$@2",
-  "identifier_list", "function_prototype", "function_declarator",
-  "function_header_with_parameters", "function_header",
-  "parameter_declarator", "parameter_declaration",
-  "parameter_type_specifier", "init_declarator_list", "single_declaration",
-  "fully_specified_type", "invariant_qualifier", "interpolation_qualifier",
-  "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
-  "precise_qualifier", "type_qualifier", "single_type_qualifier",
-  "storage_qualifier", "type_specifier", "array_specifier",
-  "type_parameter_specifier_opt", "type_parameter_specifier",
-  "type_parameter_specifier_list", "type_specifier_nonarray",
-  "precision_qualifier", "struct_specifier", "$@3", "$@4",
-  "struct_declaration_list", "struct_declaration",
-  "struct_declarator_list", "struct_declarator", "initializer",
-  "initializer_list", "declaration_statement", "statement",
-  "simple_statement", "compound_statement", "$@5", "$@6",
-  "statement_no_new_scope", "statement_scoped", "$@7", "$@8",
-  "compound_statement_no_new_scope", "statement_list",
-  "expression_statement", "selection_statement",
-  "selection_statement_nonattributed", "selection_rest_statement",
-  "condition", "switch_statement", "switch_statement_nonattributed", "$@9",
-  "switch_statement_list", "case_label", "iteration_statement",
-  "iteration_statement_nonattributed", "$@10", "$@11", "$@12",
-  "for_init_statement", "conditionopt", "for_rest_statement",
-  "jump_statement", "translation_unit", "external_declaration",
-  "function_definition", "$@13", "attribute", "attribute_list",
-  "single_attribute", YY_NULLPTR
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_int16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
-     465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
-     475,   476,   477,   478,   479,   480,   481,   482,   483
-};
-# endif
-
-#define YYPACT_NINF (-453)
-
-#define yypact_value_is_default(Yyn) \
-  ((Yyn) == YYPACT_NINF)
-
-#define YYTABLE_NINF (-330)
-
-#define yytable_value_is_error(Yyn) \
-  0
-
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int16 yypact[] =
-{
-    2326,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-     -50,  -453,  -453,  -453,  -453,  -453,  -149,  -453,  -453,  -453,
-    -453,  -453,  -453,  -108,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -142,   -84,   -14,   -35,  3456,   -76,
-    -453,   -51,  -453,  -453,  -453,  -453,  2552,  -453,  -453,  -453,
-     -20,  -453,  -453,   518,  -453,  -453,  5067,  -453,    -5,  -162,
-    -453,  -135,  -453,     2,  -453,  3456,  -453,  -453,  -453,  3456,
-     -25,   -24,  -453,  -129,  -453,   -87,  -453,  -453,  4671,     5,
-    -453,  -453,  -453,    -8,  3456,  -453,     4,  -453,   -96,  -453,
-    3879,  -453,  -125,   744,  -453,  -453,  -453,  -453,     5,  -126,
-    -453,  4077,  -106,  -453,   -22,  -453,   -71,  4671,  4671,  4671,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -116,  -453,  -453,  -453,    15,   -95,  4869,    17,  -453,
-    4671,  -453,  -138,    18,  -453,  3456,   -17,  2778,  -453,  3456,
-    4671,  -453,  -162,  -453,  -453,   -34,  -110,   -31,  -120,   -28,
-      -1,     3,     9,    42,    44,  -130,    27,  4275,  -453,    31,
-      30,  -453,  -453,    37,    29,    32,  -453,    40,    41,    34,
-    4473,    45,  4671,    39,   -29,  -453,  -453,   -69,  -453,   -84,
-      48,  -453,  -453,  -453,  -453,   970,  -453,  -453,  -453,  -453,
-    -453,  -453,  -453,  -453,  -453,  -134,    18,  4077,  -101,  4077,
-    -453,  -453,  4077,  3456,  -453,    13,  -453,  -453,  -453,   -80,
-    -453,  -453,  4671,    16,  -453,  -453,  4671,    50,  -453,  -453,
-    -453,  4671,  -453,   -17,     5,   -52,  -453,  -453,  -453,  3004,
-    -453,  -453,  -453,  4671,  4671,  4671,  4671,  4671,  4671,  4671,
-    4671,  4671,  4671,  4671,  4671,  4671,  4671,  4671,  4671,  4671,
-    4671,  4671,  -453,  -453,  -453,    51,    20,  -453,  1196,  -453,
-    -453,  -453,  1196,  -453,  4671,  -453,  -453,   -37,  4671,   -18,
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,  4671,  4671,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  4077,  -453,   -21,  -453,  3230,  -453,  -453,    54,    46,
-    -453,  -453,  -453,   -36,    18,   -17,  -453,  -453,  -453,  -453,
-    -453,   -34,   -34,  -110,  -110,   -31,   -31,   -31,   -31,  -120,
-    -120,   -28,    -1,     3,     9,    42,    44,  4671,  -453,    58,
-     -70,  -453,  1196,  2100,    21,  1874,   -79,  -453,   -77,  -453,
-    -453,  -453,  -453,  -453,  3681,  -453,  -453,  -453,  -453,   -16,
-    4671,    56,    20,    55,    46,    25,  3456,    61,    66,  -453,
-    -453,  2100,    65,  -453,  -453,  -453,  4671,    70,  -453,  -453,
-    -453,    63,  1422,  4671,  -453,    64,    72,    28,    71,  1648,
-    -453,    73,  -453,  -453,  4077,  -453,  -453,  -453,   -72,  4671,
-    1422,    65,  -453,  -453,  1196,  -453,    68,    46,  -453,  -453,
-    1196,    74,  -453,  -453
-};
-
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
-static const yytype_int16 yydefact[] =
-{
-       0,   141,   173,   171,   172,   170,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   174,   175,   176,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   207,   208,   209,
-     210,   211,   212,   213,   219,   232,   233,   220,   221,   223,
-     222,   224,   225,   226,   227,   228,   229,   230,   231,   149,
-     150,   205,   206,   214,   215,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   289,   290,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     216,   217,   218,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   377,   122,   293,   294,   295,
-       0,   292,   145,   143,   144,   142,     0,   169,   146,   147,
-     148,   124,   123,     0,   151,   152,   153,   154,   155,   156,
-     157,   125,   132,   376,     0,   378,     0,    99,    98,     0,
-     110,   115,   139,   138,   136,   140,     0,   133,   135,   120,
-     165,   137,   291,     0,   373,   375,     0,   298,     0,     0,
-      87,     0,    84,     0,    97,     0,   106,   100,   108,     0,
-     109,     0,    85,   116,    90,     0,   134,   121,     0,   158,
-     164,     1,   374,     0,     0,   296,   129,   131,     0,   127,
-       0,    88,     0,     0,   379,   101,   105,   107,   103,   111,
-     102,     0,   117,    93,     0,    91,     0,     0,     0,     0,
-      33,    32,    34,    31,     5,     6,     7,     8,     2,     3,
-       9,    27,    11,    16,    17,     0,     0,    21,     0,   167,
-       0,    25,     0,   159,    86,     0,     0,     0,   300,     0,
-       0,   126,     0,   160,    35,    39,    42,    45,    50,    53,
-      55,    57,    59,    61,    63,    65,     0,     0,    89,     0,
-     324,   333,   337,     0,     0,     0,   358,     0,     0,     0,
-       0,     0,     0,     0,    35,    68,    81,     0,   313,     0,
-     120,   316,   335,   315,   314,     0,   317,   318,   339,   319,
-     346,   320,   321,   354,   322,     0,   104,     0,   112,     0,
-     308,   119,     0,     0,    95,     0,    92,    28,    29,     0,
-      13,    14,     0,     0,    19,    18,     0,   169,    22,    24,
-      30,     0,   166,     0,   306,     0,   304,   299,   301,     0,
-      83,   130,   128,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    66,   161,   162,     0,     0,   323,     0,   356,
-     369,   368,     0,   360,     0,   372,   370,     0,     0,     0,
-     353,    71,    72,    74,    73,    76,    77,    78,    79,    80,
-      75,    70,     0,     0,   338,   334,   336,   340,   347,   355,
-     114,     0,   311,     0,   118,     0,    96,     4,     0,    15,
-      12,    23,   168,     0,   307,     0,   302,   297,    36,    37,
-      38,    41,    40,    43,    44,    48,    49,    46,    47,    51,
-      52,    54,    56,    58,    60,    62,    64,     0,   163,   383,
-       0,   381,   325,     0,     0,     0,     0,   371,     0,   352,
-      69,    82,   113,   309,     0,    94,    10,   303,   305,     0,
-       0,     0,     0,     0,   344,     0,     0,     0,     0,   363,
-     362,   365,   331,   348,   310,   312,     0,     0,   380,   382,
-     326,     0,     0,     0,   364,     0,     0,   343,     0,     0,
-     341,     0,    67,   384,     0,   328,   357,   327,     0,   366,
-       0,   331,   330,   332,   350,   345,     0,   367,   361,   342,
-     351,     0,   359,   349
-};
-
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,    -2,  -453,  -220,  -207,  -251,  -210,  -128,  -127,
-    -124,  -123,  -131,  -122,  -453,  -205,  -453,  -219,  -453,  -225,
-    -229,     7,  -453,  -453,  -453,     8,  -453,  -453,  -453,    53,
-      62,    75,  -453,  -453,  -435,  -453,  -453,  -453,  -453,   -19,
-    -453,  -155,  -165,  -453,     0,  -182,  -453,  -453,  -453,  -453,
-     120,  -453,  -453,  -453,  -247,  -248,   -92,  -173,  -303,  -453,
-    -202,  -299,  -452,  -244,  -453,  -453,  -249,  -245,  -453,  -453,
-      79,  -368,  -192,  -453,   -46,  -453,  -211,  -453,   -44,  -453,
-    -453,  -453,  -453,   -43,  -453,  -453,  -453,  -453,  -453,  -453,
-    -453,  -453,   100,  -453,  -453,  -453,  -453,  -198
-};
-
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,   239,   240,   241,   418,   242,   243,   244,   245,   246,
-     247,   248,   294,   250,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   295,   447,   296,   402,   297,
-     351,   298,   154,   323,   226,   299,   156,   157,   158,   186,
-     187,   188,   159,   160,   161,   162,   163,   164,   208,   209,
-     165,   166,   167,   168,   251,   212,   199,   200,   252,   170,
-     171,   172,   259,   204,   257,   258,   345,   346,   321,   413,
-     301,   302,   303,   304,   378,   473,   506,   497,   498,   499,
-     507,   305,   306,   307,   308,   500,   477,   309,   310,   501,
-     521,   311,   312,   313,   453,   382,   455,   481,   495,   496,
-     314,   173,   174,   175,   183,   315,   450,   451
-};
-
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int16 yytable[] =
-{
-     169,   196,   320,   189,   329,   276,   406,   153,   155,   348,
-     452,   222,   349,   177,   410,   371,   412,   253,   475,   414,
-     360,   361,   330,   331,   196,   210,   180,   341,   338,   220,
-     189,   210,   206,   211,   210,   277,   316,   318,   221,   342,
-     505,   317,   -26,   278,   332,   178,   475,   513,   333,   255,
-     179,   372,   181,   207,   277,   350,   362,   363,   505,   277,
-     356,   322,   357,   261,   335,   387,   411,   389,   283,   262,
-     336,   286,   375,   287,   288,   223,   415,   291,   224,   417,
-     482,   225,   483,   454,   182,   403,   403,   516,   403,   191,
-     196,   471,   192,   403,   325,   472,   403,   326,   320,   404,
-     320,   348,   255,   320,   255,   358,   359,   419,   462,   435,
-     436,   437,   438,   425,   364,   365,   426,   421,   391,   392,
-     393,   394,   395,   396,   397,   398,   399,   400,   403,   425,
-     185,   457,   467,   127,   128,   129,   431,   432,   401,   353,
-     354,   355,   463,   193,   464,   184,   520,   403,   459,   403,
-     486,   433,   434,   406,   439,   440,   198,   205,   190,   456,
-     254,   485,   424,   458,   213,   210,   197,   348,   255,   218,
-     219,   260,   324,   169,   334,   339,   203,   344,   277,   366,
-     153,   155,   367,   460,   461,   190,   369,   368,   373,   190,
-     370,   376,   320,   377,   255,   379,   249,   380,   383,   384,
-     381,   515,   385,   388,   256,   390,   -25,   416,   264,   -20,
-     420,   403,   448,   300,   449,   466,   470,   488,   490,   491,
-     492,   406,   469,   478,   493,   327,   328,  -329,   474,   503,
-     504,   510,   509,   280,   511,   514,   522,   523,   441,   445,
-     442,   487,   216,   352,   443,   320,   444,   215,   340,   446,
-     176,   423,   468,   479,   512,   343,   474,   256,   264,   256,
-     255,   518,   214,   480,   217,   350,   519,   502,   508,   407,
-     494,   408,   409,   202,   489,   264,     0,     0,     0,     0,
-       0,     0,     0,     0,   517,   320,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   476,     0,
-       0,     0,     0,     0,     0,   300,     0,     0,     0,     0,
-       0,   196,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   256,     0,     0,   476,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   422,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   256,
-       0,   428,   429,   430,   264,   264,   264,   264,   264,   264,
-     264,   264,   264,   264,   264,   264,   264,   264,   264,   264,
-       0,     0,     0,     0,     0,     0,     0,     0,   300,     0,
-       0,     0,   300,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   256,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   300,   300,     0,   300,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   264,     0,
-       0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
-       0,   300,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   300,     0,     0,     0,     0,     0,     0,   300,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     300,     0,     0,     0,   300,     0,     0,     0,   201,     0,
-     300,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-       0,     0,     0,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,     0,     0,     0,     0,
-       0,     0,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   125,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     126,   127,   128,   129,   130,     0,     0,     0,     0,     0,
-       0,     0,     0,   131,   132,   133,   134,   135,   136,   137,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,     0,     0,     0,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,     0,     0,     0,     0,     0,     0,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-       0,     0,   227,   228,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   229,     0,   279,     0,   280,   281,     0,     0,
-       0,     0,   282,   230,   231,   232,   233,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   126,   127,   128,   129,
-     130,     0,     0,     0,   234,   235,   236,   237,   238,   131,
-     132,   133,   134,   135,   136,   137,   283,   284,   285,   286,
-       0,   287,   288,   289,   290,   291,   292,   293,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,     0,     0,     0,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,     0,     0,
-       0,     0,     0,     0,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,     0,     0,   227,   228,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   229,     0,
-     279,     0,   280,   405,     0,     0,     0,     0,   282,   230,
-     231,   232,   233,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   126,   127,   128,   129,   130,     0,     0,     0,
-     234,   235,   236,   237,   238,   131,   132,   133,   134,   135,
-     136,   137,   283,   284,   285,   286,     0,   287,   288,   289,
-     290,   291,   292,   293,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-       0,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,     0,     0,     0,     0,     0,     0,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,     0,     0,   227,   228,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   229,     0,   279,     0,   280,     0,
-       0,     0,     0,     0,   282,   230,   231,   232,   233,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   126,   127,
-     128,   129,   130,     0,     0,     0,   234,   235,   236,   237,
-     238,   131,   132,   133,   134,   135,   136,   137,   283,   284,
-     285,   286,     0,   287,   288,   289,   290,   291,   292,   293,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,     0,     0,     0,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-       0,     0,     0,     0,     0,     0,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,     0,     0,
-     227,   228,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     229,     0,   279,     0,   213,     0,     0,     0,     0,     0,
-     282,   230,   231,   232,   233,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   126,   127,   128,   129,   130,     0,
-       0,     0,   234,   235,   236,   237,   238,   131,   132,   133,
-     134,   135,   136,   137,   283,   284,   285,   286,     0,   287,
-     288,   289,   290,   291,   292,   293,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-       0,     0,     0,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,     0,     0,     0,     0,
-       0,     0,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,     0,     0,   227,   228,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   229,     0,   279,     0,
-       0,     0,     0,     0,     0,     0,   282,   230,   231,   232,
-     233,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     126,   127,   128,   129,   130,     0,     0,     0,   234,   235,
-     236,   237,   238,   131,   132,   133,   134,   135,   136,   137,
-     283,   284,   285,   286,     0,   287,   288,   289,   290,   291,
-     292,   293,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,     0,     0,     0,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,     0,     0,     0,     0,     0,     0,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-       0,     0,   227,   228,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   229,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   282,   230,   231,   232,   233,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   126,   127,   128,   129,
-     130,     0,     0,     0,   234,   235,   236,   237,   238,   131,
-     132,   133,   134,   135,   136,   137,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,     0,     0,     0,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,     0,     0,
-       0,     0,     0,     0,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,     0,     0,   227,   228,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   229,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   230,
-     231,   232,   233,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   126,   127,   128,   129,     0,     0,     0,     0,
-     234,   235,   236,   237,   238,   131,   132,   133,   134,   135,
-     136,   137,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-       0,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,     0,     0,     0,     0,     0,     0,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   125,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   126,   127,
-     128,   129,   130,     0,     0,     0,     0,     0,     0,     0,
-       0,   131,   132,   133,   134,   135,   136,   137,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,     0,     0,     0,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-       0,     0,     0,     0,     0,     0,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     194,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   126,   127,   128,   129,     0,     0,
-       0,     0,     0,     0,     0,     0,   195,   131,   132,   133,
-     134,   135,   136,   137,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-       0,     0,     0,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,     0,     0,     0,     0,
-       0,     0,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   347,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     126,   127,   128,   129,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   131,   132,   133,   134,   135,   136,   137,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,     0,     0,     0,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,     0,     0,     0,     0,     0,     0,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   427,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   126,   127,   128,   129,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   131,
-     132,   133,   134,   135,   136,   137,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,     0,     0,     0,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,     0,     0,
-       0,     0,     0,     0,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   465,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   126,   127,   128,   129,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   131,   132,   133,   134,   135,
-     136,   137,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-       0,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,     0,     0,     0,     0,     0,     0,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   126,   127,
-     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   131,   132,   133,   134,   135,   136,   137,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,     0,     0,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,     0,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,     0,
-       0,     0,     0,     0,     0,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,     0,     0,   227,
-     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   229,
-       0,     0,     0,   319,   484,     0,     0,     0,     0,     0,
-     230,   231,   232,   233,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   234,   235,   236,   237,   238,   131,     0,     0,     0,
-       0,   136,   137,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,     0,     0,     0,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,     0,     0,     0,
-       0,     0,     0,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,     0,     0,   227,   228,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   229,     0,     0,
-     263,     0,     0,     0,     0,     0,     0,     0,   230,   231,
-     232,   233,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   234,
-     235,   236,   237,   238,   131,     0,     0,     0,     0,   136,
-     137,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,     0,
-       0,     0,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,     0,     0,     0,     0,     0,
-       0,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,     0,     0,   227,   228,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   229,     0,     0,     0,   319,
-       0,     0,     0,     0,     0,     0,   230,   231,   232,   233,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   234,   235,   236,
-     237,   238,   131,     0,     0,     0,     0,   136,   137,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,     0,     0,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,     0,     0,     0,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,     0,     0,     0,     0,     0,     0,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,     0,     0,   227,   228,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   229,     0,     0,   374,     0,     0,     0,
-       0,     0,     0,     0,   230,   231,   232,   233,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   234,   235,   236,   237,   238,
-     131,     0,     0,     0,     0,   136,   137,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,     0,     0,     0,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,     0,     0,     0,     0,     0,     0,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,     0,
-       0,   227,   228,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   229,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   386,   230,   231,   232,   233,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   234,   235,   236,   237,   238,   131,     0,
-       0,     0,     0,   136,   137,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,     0,     0,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,     0,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,     0,
-       0,     0,     0,     0,     0,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,     0,     0,   227,
-     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   229,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     230,   231,   232,   233,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   234,   235,   236,   237,   238,   131,     0,     0,     0,
-       0,   136,   137,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,     0,     0,     0,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,     0,     0,     0,
-       0,     0,     0,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,     0,     0,   227,   228,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   229,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   230,   231,
-     232,   233,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   234,
-     235,   236,   237,   238,   131,     0,     0,     0,     0,   136,
-     337,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,     0,
-       0,     0,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,     0,     0,     0,     0,     0,
-       0,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   131,     0,     0,     0,     0,   136,   137
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,   166,   221,   158,   229,   210,   305,     0,     0,   257,
-     378,   193,   259,   162,   317,   145,   319,   199,   453,   322,
-     140,   141,   138,   139,   189,   160,   168,   165,   247,   158,
-     185,   160,   194,   168,   160,   160,   218,   219,   167,   177,
-     492,   167,   158,   168,   160,   194,   481,   499,   164,   204,
-     158,   181,   194,   215,   160,   260,   176,   177,   510,   160,
-     170,   167,   172,   159,   159,   290,   167,   292,   202,   165,
-     165,   205,   277,   207,   208,   162,   323,   211,   165,   159,
-     159,   168,   159,   382,   168,   165,   165,   159,   165,   165,
-     255,   161,   168,   165,   165,   165,   165,   168,   317,   168,
-     319,   349,   257,   322,   259,   136,   137,   332,   411,   360,
-     361,   362,   363,   165,   142,   143,   168,   336,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   165,   165,
-     165,   168,   168,   183,   184,   185,   356,   357,   167,   173,
-     174,   175,   163,   194,   165,   159,   514,   165,   166,   165,
-     166,   358,   359,   452,   364,   365,   176,   162,   158,   384,
-     168,   464,   344,   388,   162,   160,   166,   415,   323,   194,
-     194,   167,   194,   173,   159,   158,   176,   194,   160,   180,
-     173,   173,   179,   402,   403,   185,   144,   178,   161,   189,
-     146,   160,   411,   163,   349,   158,   198,   168,   158,   158,
-     168,   504,   168,   158,   204,   166,   158,   194,   210,   159,
-     194,   165,   161,   213,   194,   161,   158,   161,   163,   194,
-     159,   520,   447,   202,   158,   227,   228,   162,   453,   159,
-     167,   159,   168,   162,   206,   162,   168,   163,   366,   370,
-     367,   470,   189,   262,   368,   464,   369,   185,   250,   371,
-     130,   343,   425,   455,   498,   255,   481,   257,   260,   259,
-     415,   510,   183,   455,   189,   470,   511,   486,   493,   315,
-     481,   315,   315,   173,   472,   277,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   509,   504,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   453,    -1,
-      -1,    -1,    -1,    -1,    -1,   305,    -1,    -1,    -1,    -1,
-      -1,   476,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   323,    -1,    -1,   481,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,
-      -1,   353,   354,   355,   356,   357,   358,   359,   360,   361,
-     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,    -1,
-      -1,    -1,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   415,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   452,   453,    -1,   455,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   470,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   476,    -1,    -1,    -1,
-      -1,   481,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   492,    -1,    -1,    -1,    -1,    -1,    -1,   499,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     510,    -1,    -1,    -1,   514,    -1,    -1,    -1,     0,    -1,
-     520,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,
-      -1,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   168,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     182,   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   195,   196,   197,   198,   199,   200,   201,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,    -1,    -1,    -1,    -1,    -1,    -1,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-      -1,    -1,   138,   139,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   158,    -1,   160,    -1,   162,   163,    -1,    -1,
-      -1,    -1,   168,   169,   170,   171,   172,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   182,   183,   184,   185,
-     186,    -1,    -1,    -1,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-      -1,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    -1,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,    -1,    -1,
-      -1,    -1,    -1,    -1,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,    -1,    -1,   138,   139,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,
-     160,    -1,   162,   163,    -1,    -1,    -1,    -1,   168,   169,
-     170,   171,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   182,   183,   184,   185,   186,    -1,    -1,    -1,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,    -1,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,    -1,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,    -1,    -1,   138,   139,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   158,    -1,   160,    -1,   162,    -1,
-      -1,    -1,    -1,    -1,   168,   169,   170,   171,   172,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   182,   183,
-     184,   185,   186,    -1,    -1,    -1,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,    -1,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-      -1,    -1,    -1,    -1,    -1,    -1,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,    -1,    -1,
-     138,   139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     158,    -1,   160,    -1,   162,    -1,    -1,    -1,    -1,    -1,
-     168,   169,   170,   171,   172,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   182,   183,   184,   185,   186,    -1,
-      -1,    -1,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,    -1,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,
-      -1,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,    -1,    -1,   138,   139,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,   160,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   168,   169,   170,   171,
-     172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     182,   183,   184,   185,   186,    -1,    -1,    -1,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,    -1,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,    -1,    -1,    -1,    -1,    -1,    -1,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-      -1,    -1,   138,   139,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   168,   169,   170,   171,   172,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   182,   183,   184,   185,
-     186,    -1,    -1,    -1,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    -1,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,    -1,    -1,
-      -1,    -1,    -1,    -1,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,    -1,    -1,   138,   139,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   169,
-     170,   171,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   182,   183,   184,   185,    -1,    -1,    -1,    -1,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,    -1,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   168,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   182,   183,
-     184,   185,   186,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   195,   196,   197,   198,   199,   200,   201,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    -1,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-      -1,    -1,    -1,    -1,    -1,    -1,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     168,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   182,   183,   184,   185,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   194,   195,   196,   197,
-     198,   199,   200,   201,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,
-      -1,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     182,   183,   184,   185,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   195,   196,   197,   198,   199,   200,   201,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,    -1,    -1,    -1,    -1,    -1,    -1,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   182,   183,   184,   185,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   195,
-     196,   197,   198,   199,   200,   201,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    -1,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,    -1,    -1,
-      -1,    -1,    -1,    -1,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   182,   183,   184,   185,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   195,   196,   197,   198,   199,
-     200,   201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,    -1,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   182,   183,
-     184,   185,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   195,   196,   197,   198,   199,   200,   201,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,    -1,
-      -1,    -1,    -1,    -1,    -1,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,    -1,    -1,   138,
-     139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,
-      -1,    -1,    -1,   162,   163,    -1,    -1,    -1,    -1,    -1,
-     169,   170,   171,   172,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   190,   191,   192,   193,   194,   195,    -1,    -1,    -1,
-      -1,   200,   201,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,    -1,    -1,    -1,
-      -1,    -1,    -1,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,    -1,    -1,   138,   139,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,
-     161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   169,   170,
-     171,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   190,
-     191,   192,   193,   194,   195,    -1,    -1,    -1,    -1,   200,
-     201,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
-      -1,    -1,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,
-      -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,    -1,    -1,   138,   139,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,   162,
-      -1,    -1,    -1,    -1,    -1,    -1,   169,   170,   171,   172,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   190,   191,   192,
-     193,   194,   195,    -1,    -1,    -1,    -1,   200,   201,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,    -1,    -1,    -1,    -1,    -1,    -1,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,    -1,    -1,   138,   139,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   158,    -1,    -1,   161,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   169,   170,   171,   172,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   190,   191,   192,   193,   194,
-     195,    -1,    -1,    -1,    -1,   200,   201,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    -1,    -1,    -1,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,    -1,    -1,    -1,    -1,    -1,    -1,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,    -1,
-      -1,   138,   139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   168,   169,   170,   171,   172,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   190,   191,   192,   193,   194,   195,    -1,
-      -1,    -1,    -1,   200,   201,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,    -1,
-      -1,    -1,    -1,    -1,    -1,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,    -1,    -1,   138,
-     139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     169,   170,   171,   172,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   190,   191,   192,   193,   194,   195,    -1,    -1,    -1,
-      -1,   200,   201,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,    -1,    -1,    -1,
-      -1,    -1,    -1,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,    -1,    -1,   138,   139,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   169,   170,
-     171,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   190,
-     191,   192,   193,   194,   195,    -1,    -1,    -1,    -1,   200,
-     201,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
-      -1,    -1,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,
-      -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   195,    -1,    -1,    -1,    -1,   200,   201
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_int16 yystos[] =
-{
-       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   168,   182,   183,   184,   185,
-     186,   195,   196,   197,   198,   199,   200,   201,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   260,   261,   264,   265,   266,   267,   271,
-     272,   273,   274,   275,   276,   279,   280,   281,   282,   283,
-     288,   289,   290,   330,   331,   332,   289,   162,   194,   158,
-     168,   194,   168,   333,   159,   165,   268,   269,   270,   280,
-     283,   165,   168,   194,   168,   194,   281,   283,   176,   285,
-     286,     0,   331,   283,   292,   162,   194,   215,   277,   278,
-     160,   168,   284,   162,   309,   269,   268,   270,   194,   194,
-     158,   167,   284,   162,   165,   168,   263,   138,   139,   158,
-     169,   170,   171,   172,   190,   191,   192,   193,   194,   230,
-     231,   232,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   283,   287,   284,   168,   280,   283,   293,   294,   291,
-     167,   159,   165,   161,   241,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   160,   168,   160,
-     162,   163,   168,   202,   203,   204,   205,   207,   208,   209,
-     210,   211,   212,   213,   241,   254,   256,   258,   260,   264,
-     283,   299,   300,   301,   302,   310,   311,   312,   313,   316,
-     317,   320,   321,   322,   329,   334,   284,   167,   284,   162,
-     256,   297,   167,   262,   194,   165,   168,   241,   241,   258,
-     138,   139,   160,   164,   159,   159,   165,   201,   256,   158,
-     241,   165,   177,   283,   194,   295,   296,   163,   294,   293,
-     254,   259,   278,   173,   174,   175,   170,   172,   136,   137,
-     140,   141,   176,   177,   142,   143,   180,   179,   178,   144,
-     146,   145,   181,   161,   161,   254,   160,   163,   303,   158,
-     168,   168,   324,   158,   158,   168,   168,   258,   158,   258,
-     166,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   167,   257,   165,   168,   163,   300,   313,   317,   322,
-     297,   167,   297,   298,   297,   293,   194,   159,   233,   258,
-     194,   256,   241,   295,   284,   165,   168,   163,   241,   241,
-     241,   243,   243,   244,   244,   245,   245,   245,   245,   246,
-     246,   247,   248,   249,   250,   251,   252,   255,   161,   194,
-     335,   336,   310,   323,   300,   325,   258,   168,   258,   166,
-     256,   256,   297,   163,   165,   163,   161,   168,   296,   258,
-     158,   161,   165,   304,   258,   273,   280,   315,   202,   299,
-     311,   326,   159,   159,   163,   297,   166,   259,   161,   336,
-     163,   194,   159,   158,   315,   327,   328,   306,   307,   308,
-     314,   318,   256,   159,   167,   301,   305,   309,   258,   168,
-     159,   206,   302,   301,   162,   297,   159,   258,   305,   306,
-     310,   319,   168,   163
-};
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_int16 yyr1[] =
-{
-       0,   229,   230,   231,   231,   231,   231,   231,   231,   232,
-     232,   232,   232,   232,   232,   233,   234,   235,   236,   236,
-     237,   237,   238,   238,   239,   240,   240,   241,   241,   241,
-     241,   242,   242,   242,   242,   243,   243,   243,   243,   244,
-     244,   244,   245,   245,   245,   246,   246,   246,   246,   246,
-     247,   247,   247,   248,   248,   249,   249,   250,   250,   251,
-     251,   252,   252,   253,   253,   254,   255,   254,   256,   256,
-     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
-     257,   258,   258,   259,   260,   260,   260,   260,   260,   260,
-     260,   260,   260,   262,   261,   263,   263,   264,   265,   265,
-     266,   266,   267,   268,   268,   269,   269,   269,   269,   270,
-     271,   271,   271,   271,   271,   272,   272,   272,   272,   272,
-     273,   273,   274,   275,   275,   275,   276,   277,   277,   278,
-     278,   278,   279,   280,   280,   281,   281,   281,   281,   281,
-     281,   282,   282,   282,   282,   282,   282,   282,   282,   282,
-     282,   282,   282,   282,   282,   282,   282,   282,   283,   283,
-     284,   284,   284,   284,   285,   285,   286,   287,   287,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   288,   289,   289,   289,   291,   290,   292,   290,
-     293,   293,   294,   294,   295,   295,   296,   296,   297,   297,
-     297,   298,   298,   299,   300,   300,   301,   301,   301,   301,
-     301,   301,   301,   302,   303,   304,   302,   305,   305,   307,
-     306,   308,   306,   309,   309,   310,   310,   311,   311,   312,
-     312,   313,   314,   314,   315,   315,   316,   316,   318,   317,
-     319,   319,   320,   320,   321,   321,   323,   322,   324,   322,
-     325,   322,   326,   326,   327,   327,   328,   328,   329,   329,
-     329,   329,   329,   330,   330,   331,   331,   331,   333,   332,
-     334,   335,   335,   336,   336
-};
-
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_int8 yyr2[] =
-{
-       0,     2,     1,     1,     3,     1,     1,     1,     1,     1,
-       4,     1,     3,     2,     2,     1,     1,     1,     2,     2,
-       2,     1,     2,     3,     2,     1,     1,     1,     2,     2,
-       2,     1,     1,     1,     1,     1,     3,     3,     3,     1,
-       3,     3,     1,     3,     3,     1,     3,     3,     3,     3,
-       1,     3,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     3,     1,     3,     1,     0,     6,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     1,     2,     2,     4,     2,     3,     4,
-       2,     3,     4,     0,     6,     2,     3,     2,     1,     1,
-       2,     3,     3,     2,     3,     2,     1,     2,     1,     1,
-       1,     3,     4,     6,     5,     1,     2,     3,     5,     4,
-       1,     2,     1,     1,     1,     1,     4,     1,     3,     1,
-       3,     1,     1,     1,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     3,
-       2,     3,     3,     4,     1,     0,     3,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     6,     0,     5,
-       1,     2,     3,     4,     1,     3,     1,     2,     1,     3,
-       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     0,     5,     1,     1,     0,
-       2,     0,     2,     2,     3,     1,     2,     1,     2,     1,
-       2,     5,     3,     1,     1,     4,     1,     2,     0,     8,
-       0,     1,     3,     2,     1,     2,     0,     6,     0,     8,
-       0,     7,     1,     1,     1,     0,     2,     3,     2,     2,
-       2,     3,     2,     1,     2,     1,     1,     1,     0,     3,
-       5,     1,     3,     1,     4
-};
-
-
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                    \
-  do                                                              \
-    if (yychar == YYEMPTY)                                        \
-      {                                                           \
-        yychar = (Token);                                         \
-        yylval = (Value);                                         \
-        YYPOPSTACK (yylen);                                       \
-        yystate = *yyssp;                                         \
-        goto yybackup;                                            \
-      }                                                           \
-    else                                                          \
-      {                                                           \
-        yyerror (pParseContext, YY_("syntax error: cannot back up")); \
-        YYERROR;                                                  \
-      }                                                           \
-  while (0)
-
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Type, Value, pParseContext); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
-} while (0)
-
-
-/*-----------------------------------.
-| Print this symbol's value on YYO.  |
-`-----------------------------------*/
-
-static void
-yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
-{
-  FILE *yyoutput = yyo;
-  YYUSE (yyoutput);
-  YYUSE (pParseContext);
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
-# endif
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-}
-
-
-/*---------------------------.
-| Print this symbol on YYO.  |
-`---------------------------*/
-
-static void
-yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
-{
-  YYFPRINTF (yyo, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
-
-  yy_symbol_value_print (yyo, yytype, yyvaluep, pParseContext);
-  YYFPRINTF (yyo, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-static void
-yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-static void
-yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
-{
-  int yylno = yyrline[yyrule];
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
-             yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       yystos[+yyssp[yyi + 1 - yynrhs]],
-                       &yyvsp[(yyi + 1) - (yynrhs)]
-                                              , pParseContext);
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule, pParseContext); \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
-#  else
-/* Return the length of YYSTR.  */
-static YYPTRDIFF_T
-yystrlen (const char *yystr)
-{
-  YYPTRDIFF_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYPTRDIFF_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYPTRDIFF_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            else
-              goto append;
-
-          append:
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
-    do_not_strip_quotes: ;
-    }
-
-  if (yyres)
-    return yystpcpy (yyres, yystr) - yyres;
-  else
-    return yystrlen (yystr);
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
-                yy_state_t *yyssp, int yytoken)
-{
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat: reported tokens (one for the "unexpected",
-     one per "expected"). */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Actual size of YYARG. */
-  int yycount = 0;
-  /* Cumulated lengths of YYARG.  */
-  YYPTRDIFF_T yysize = 0;
-
-  /* There are many possibilities here to consider:
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[+*yyssp];
-      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-      yysize = yysize0;
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYPTRDIFF_T yysize1
-                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-                    yysize = yysize1;
-                  else
-                    return 2;
-                }
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-    default: /* Avoid compiler warnings. */
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  {
-    /* Don't count the "%s"s in the final size, but reserve room for
-       the terminator.  */
-    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
-    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-      yysize = yysize1;
-    else
-      return 2;
-  }
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          ++yyp;
-          ++yyformat;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext)
-{
-  YYUSE (yyvaluep);
-  YYUSE (pParseContext);
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-}
-
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-int
-yyparse (glslang::TParseContext* pParseContext)
-{
-/* The lookahead symbol.  */
-int yychar;
-
-
-/* The semantic value of the lookahead symbol.  */
-/* Default value used for initialization, for pacifying older GCCs
-   or non-GCC compilers.  */
-YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
-YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
-
-    /* Number of syntax errors so far.  */
-    int yynerrs;
-
-    yy_state_fast_t yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss;
-    yy_state_t *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYPTRDIFF_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-  goto yysetstate;
-
-
-/*------------------------------------------------------------.
-| yynewstate -- push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
-yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
-
-/*--------------------------------------------------------------------.
-| yysetstate -- set current state (the top of the stack) to yystate.  |
-`--------------------------------------------------------------------*/
-yysetstate:
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
-  YY_IGNORE_USELESS_CAST_BEGIN
-  *yyssp = YY_CAST (yy_state_t, yystate);
-  YY_IGNORE_USELESS_CAST_END
-
-  if (yyss + yystacksize - 1 <= yyssp)
-#if !defined yyoverflow && !defined YYSTACK_RELOCATE
-    goto yyexhaustedlab;
-#else
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYPTRDIFF_T yysize = yyssp - yyss + 1;
-
-# if defined yyoverflow
-      {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        yy_state_t *yyss1 = yyss;
-        YYSTYPE *yyvs1 = yyvs;
-
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * YYSIZEOF (*yyssp),
-                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
-                    &yystacksize);
-        yyss = yyss1;
-        yyvs = yyvs1;
-      }
-# else /* defined YYSTACK_RELOCATE */
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
-
-      {
-        yy_state_t *yyss1 = yyss;
-        union yyalloc *yyptr =
-          YY_CAST (union yyalloc *,
-                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
-      }
-# endif
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YY_IGNORE_USELESS_CAST_BEGIN
-      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
-                  YY_CAST (long, yystacksize)));
-      YY_IGNORE_USELESS_CAST_END
-
-      if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
-    }
-#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = yylex (&yylval, parseContext);
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-  yystate = yyn;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-  case 2:
-#line 322 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
-    }
-#line 3070 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 3:
-#line 328 "MachineIndependent/glslang_angle.y"
-                          {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3078 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 4:
-#line 331 "MachineIndependent/glslang_angle.y"
-                                        {
-        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
-        if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
-            (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
-    }
-#line 3088 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 5:
-#line 336 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
-    }
-#line 3096 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 6:
-#line 339 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 3104 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 7:
-#line 342 "MachineIndependent/glslang_angle.y"
-                   {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 3113 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 8:
-#line 346 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
-    }
-#line 3121 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 9:
-#line 355 "MachineIndependent/glslang_angle.y"
-                         {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3129 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 10:
-#line 358 "MachineIndependent/glslang_angle.y"
-                                                                       {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 3137 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 11:
-#line 361 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3145 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 12:
-#line 364 "MachineIndependent/glslang_angle.y"
-                                        {
-        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
-    }
-#line 3153 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 13:
-#line 367 "MachineIndependent/glslang_angle.y"
-                                {
-        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
-        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 3163 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 14:
-#line 372 "MachineIndependent/glslang_angle.y"
-                                {
-        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
-        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 3173 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 15:
-#line 380 "MachineIndependent/glslang_angle.y"
-                 {
-        parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3182 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 16:
-#line 387 "MachineIndependent/glslang_angle.y"
-                              {
-        (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
-        delete (yyvsp[0].interm).function;
-    }
-#line 3191 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 17:
-#line 394 "MachineIndependent/glslang_angle.y"
-                            {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 3199 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 18:
-#line 400 "MachineIndependent/glslang_angle.y"
-                                                       {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 3208 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 19:
-#line 404 "MachineIndependent/glslang_angle.y"
-                                                     {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 3217 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 20:
-#line 411 "MachineIndependent/glslang_angle.y"
-                                {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 3225 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 21:
-#line 414 "MachineIndependent/glslang_angle.y"
-                           {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 3233 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 22:
-#line 420 "MachineIndependent/glslang_angle.y"
-                                                 {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
-        (yyvsp[-1].interm).function->addParameter(param);
-        (yyval.interm).function = (yyvsp[-1].interm).function;
-        (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3245 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 23:
-#line 427 "MachineIndependent/glslang_angle.y"
-                                                                       {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
-        (yyvsp[-2].interm).function->addParameter(param);
-        (yyval.interm).function = (yyvsp[-2].interm).function;
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
-    }
-#line 3257 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 24:
-#line 437 "MachineIndependent/glslang_angle.y"
-                                     {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 3265 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 25:
-#line 445 "MachineIndependent/glslang_angle.y"
-                     {
-        // Constructor
-        (yyval.interm).intermNode = 0;
-        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
-    }
-#line 3275 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 26:
-#line 450 "MachineIndependent/glslang_angle.y"
-                         {
-        //
-        // Should be a method or subroutine call, but we haven't recognized the arguments yet.
-        //
-        (yyval.interm).function = 0;
-        (yyval.interm).intermNode = 0;
-
-        TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode();
-        if (method) {
-            (yyval.interm).function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength);
-            (yyval.interm).intermNode = method->getObject();
-        } else {
-            TIntermSymbol* symbol = (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode();
-            if (symbol) {
-                parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
-                TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
-                (yyval.interm).function = function;
-            } else
-                parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
-        }
-
-        if ((yyval.interm).function == 0) {
-            // error recover
-            TString* empty = NewPoolTString("");
-            (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
-        }
-    }
-#line 3307 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 27:
-#line 483 "MachineIndependent/glslang_angle.y"
-                         {
-        parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
-            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
-    }
-#line 3318 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 28:
-#line 489 "MachineIndependent/glslang_angle.y"
-                              {
-        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
-    }
-#line 3327 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 29:
-#line 493 "MachineIndependent/glslang_angle.y"
-                              {
-        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
-    }
-#line 3336 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 30:
-#line 497 "MachineIndependent/glslang_angle.y"
-                                      {
-        if ((yyvsp[-1].interm).op != EOpNull) {
-            char errorOp[2] = {0, 0};
-            switch((yyvsp[-1].interm).op) {
-            case EOpNegative:   errorOp[0] = '-'; break;
-            case EOpLogicalNot: errorOp[0] = '!'; break;
-            case EOpBitwiseNot: errorOp[0] = '~'; break;
-            default: break; // some compilers want this
-            }
-            (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].interm).loc, errorOp, (yyvsp[-1].interm).op, (yyvsp[0].interm.intermTypedNode));
-        } else {
-            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-            if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
-                (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
-        }
-    }
-#line 3357 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 31:
-#line 517 "MachineIndependent/glslang_angle.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 3363 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 32:
-#line 518 "MachineIndependent/glslang_angle.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 3369 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 33:
-#line 519 "MachineIndependent/glslang_angle.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 3375 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 34:
-#line 520 "MachineIndependent/glslang_angle.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 3382 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 35:
-#line 526 "MachineIndependent/glslang_angle.y"
-                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3388 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 36:
-#line 527 "MachineIndependent/glslang_angle.y"
-                                                      {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3398 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 37:
-#line 532 "MachineIndependent/glslang_angle.y"
-                                                       {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3408 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 38:
-#line 537 "MachineIndependent/glslang_angle.y"
-                                                         {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3419 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 39:
-#line 546 "MachineIndependent/glslang_angle.y"
-                                { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3425 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 40:
-#line 547 "MachineIndependent/glslang_angle.y"
-                                                         {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3435 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 41:
-#line 552 "MachineIndependent/glslang_angle.y"
-                                                         {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3445 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 42:
-#line 560 "MachineIndependent/glslang_angle.y"
-                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3451 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 43:
-#line 561 "MachineIndependent/glslang_angle.y"
-                                                   {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3462 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 44:
-#line 567 "MachineIndependent/glslang_angle.y"
-                                                    {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3473 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 45:
-#line 576 "MachineIndependent/glslang_angle.y"
-                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3479 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 46:
-#line 577 "MachineIndependent/glslang_angle.y"
-                                                        {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3489 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 47:
-#line 582 "MachineIndependent/glslang_angle.y"
-                                                          {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3499 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 48:
-#line 587 "MachineIndependent/glslang_angle.y"
-                                                    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3509 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 49:
-#line 592 "MachineIndependent/glslang_angle.y"
-                                                    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3519 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 50:
-#line 600 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3525 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 51:
-#line 601 "MachineIndependent/glslang_angle.y"
-                                                       {
-        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
-        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
-        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
-        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3539 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 52:
-#line 610 "MachineIndependent/glslang_angle.y"
-                                                      {
-        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
-        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
-        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
-        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3553 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 53:
-#line 622 "MachineIndependent/glslang_angle.y"
-                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3559 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 54:
-#line 623 "MachineIndependent/glslang_angle.y"
-                                                   {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3570 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 55:
-#line 632 "MachineIndependent/glslang_angle.y"
-                     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3576 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 56:
-#line 633 "MachineIndependent/glslang_angle.y"
-                                                   {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3587 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 57:
-#line 642 "MachineIndependent/glslang_angle.y"
-                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3593 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 58:
-#line 643 "MachineIndependent/glslang_angle.y"
-                                                                   {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3604 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 59:
-#line 652 "MachineIndependent/glslang_angle.y"
-                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3610 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 60:
-#line 653 "MachineIndependent/glslang_angle.y"
-                                                            {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3620 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 61:
-#line 661 "MachineIndependent/glslang_angle.y"
-                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3626 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 62:
-#line 662 "MachineIndependent/glslang_angle.y"
-                                                            {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3636 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 63:
-#line 670 "MachineIndependent/glslang_angle.y"
-                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3642 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 64:
-#line 671 "MachineIndependent/glslang_angle.y"
-                                                          {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
-    }
-#line 3652 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 65:
-#line 679 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3658 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 66:
-#line 680 "MachineIndependent/glslang_angle.y"
-                                     {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 3666 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 67:
-#line 683 "MachineIndependent/glslang_angle.y"
-                                             {
-        --parseContext.controlFlowNestingLevel;
-        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc);
-        if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
-            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        }
-    }
-#line 3683 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 68:
-#line 698 "MachineIndependent/glslang_angle.y"
-                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3689 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 69:
-#line 699 "MachineIndependent/glslang_angle.y"
-                                                                 {
-        parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
-        parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
-        parseContext.storage16BitAssignmentCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
-        parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
-        parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addAssign((yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].interm).loc);
-        if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-        }
-    }
-#line 3707 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 70:
-#line 715 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpAssign;
-    }
-#line 3716 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 71:
-#line 719 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpMulAssign;
-    }
-#line 3725 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 72:
-#line 723 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpDivAssign;
-    }
-#line 3734 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 73:
-#line 727 "MachineIndependent/glslang_angle.y"
-                 {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpModAssign;
-    }
-#line 3744 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 74:
-#line 732 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpAddAssign;
-    }
-#line 3753 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 75:
-#line 736 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpSubAssign;
-    }
-#line 3762 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 76:
-#line 740 "MachineIndependent/glslang_angle.y"
-                  {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
-    }
-#line 3771 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 77:
-#line 744 "MachineIndependent/glslang_angle.y"
-                   {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
-    }
-#line 3780 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 78:
-#line 748 "MachineIndependent/glslang_angle.y"
-                 {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
-    }
-#line 3789 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 79:
-#line 752 "MachineIndependent/glslang_angle.y"
-                 {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
-    }
-#line 3798 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 80:
-#line 756 "MachineIndependent/glslang_angle.y"
-                {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
-    }
-#line 3807 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 81:
-#line 763 "MachineIndependent/glslang_angle.y"
-                            {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3815 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 82:
-#line 766 "MachineIndependent/glslang_angle.y"
-                                             {
-        parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
-        if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
-            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        }
-    }
-#line 3828 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 83:
-#line 777 "MachineIndependent/glslang_angle.y"
-                             {
-        parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3837 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 84:
-#line 784 "MachineIndependent/glslang_angle.y"
-                                   {
-        parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
-        (yyval.interm.intermNode) = 0;
-        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
-    }
-#line 3847 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 85:
-#line 789 "MachineIndependent/glslang_angle.y"
-                                     {
-        if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
-            (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
-        (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
-    }
-#line 3857 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 86:
-#line 794 "MachineIndependent/glslang_angle.y"
-                                                             {
-        parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
-        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
-        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
-        parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3869 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 87:
-#line 801 "MachineIndependent/glslang_angle.y"
-                                {
-        parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3878 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 88:
-#line 805 "MachineIndependent/glslang_angle.y"
-                                           {
-        parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3887 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 89:
-#line 809 "MachineIndependent/glslang_angle.y"
-                                                           {
-        parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3896 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 90:
-#line 813 "MachineIndependent/glslang_angle.y"
-                               {
-        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
-        parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3906 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 91:
-#line 818 "MachineIndependent/glslang_angle.y"
-                                          {
-        parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
-        parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3916 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 92:
-#line 823 "MachineIndependent/glslang_angle.y"
-                                                          {
-        parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
-        (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
-        parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
-        (yyval.interm.intermNode) = 0;
-    }
-#line 3927 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 93:
-#line 832 "MachineIndependent/glslang_angle.y"
-                                           { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 3933 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 94:
-#line 832 "MachineIndependent/glslang_angle.y"
-                                                                                                                          {
-        --parseContext.structNestingLevel;
-        parseContext.blockName = (yyvsp[-4].lex).string;
-        parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
-        parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers);
-        parseContext.currentBlockQualifier = (yyvsp[-5].interm.type).qualifier;
-        (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
-        (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
-    }
-#line 3947 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 95:
-#line 843 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.identifierList) = new TIdentifierList;
-        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
-    }
-#line 3956 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 96:
-#line 847 "MachineIndependent/glslang_angle.y"
-                                       {
-        (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
-        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
-    }
-#line 3965 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 97:
-#line 854 "MachineIndependent/glslang_angle.y"
-                                       {
-        (yyval.interm).function = (yyvsp[-1].interm.function);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 3974 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 98:
-#line 861 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 3982 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 99:
-#line 864 "MachineIndependent/glslang_angle.y"
-                                      {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 3990 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 100:
-#line 871 "MachineIndependent/glslang_angle.y"
-                                            {
-        // Add the parameter
-        (yyval.interm.function) = (yyvsp[-1].interm.function);
-        if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
-            (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
-        else
-            delete (yyvsp[0].interm).param.type;
-    }
-#line 4003 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 101:
-#line 879 "MachineIndependent/glslang_angle.y"
-                                                                  {
-        //
-        // Only first parameter of one-parameter functions can be void
-        // The check for named parameters not being void is done in parameter_declarator
-        //
-        if ((yyvsp[0].interm).param.type->getBasicType() == EbtVoid) {
-            //
-            // This parameter > first is void
-            //
-            parseContext.error((yyvsp[-1].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
-            delete (yyvsp[0].interm).param.type;
-        } else {
-            // Add the parameter
-            (yyval.interm.function) = (yyvsp[-2].interm.function);
-            (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
-        }
-    }
-#line 4025 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 102:
-#line 899 "MachineIndependent/glslang_angle.y"
-                                                 {
-        if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
-            parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
-                               GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), "");
-        }
-        if ((yyvsp[-2].interm.type).arraySizes)
-            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
-
-        // Add the function as a prototype after parsing it (we do not support recursion)
-        TFunction *function;
-        TType type((yyvsp[-2].interm.type));
-
-        // Potentially rename shader entry point function.  No-op most of the time.
-        parseContext.renameShaderFunction((yyvsp[-1].lex).string);
-
-        // Make the function
-        function = new TFunction((yyvsp[-1].lex).string, type);
-        (yyval.interm.function) = function;
-    }
-#line 4049 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 103:
-#line 922 "MachineIndependent/glslang_angle.y"
-                                {
-        if ((yyvsp[-1].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            parseContext.arraySizeRequiredCheck((yyvsp[-1].interm.type).loc, *(yyvsp[-1].interm.type).arraySizes);
-        }
-        if ((yyvsp[-1].interm.type).basicType == EbtVoid) {
-            parseContext.error((yyvsp[0].lex).loc, "illegal use of type 'void'", (yyvsp[0].lex).string->c_str(), "");
-        }
-        parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string);
-
-        TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type))};
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).param = param;
-    }
-#line 4069 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 104:
-#line 937 "MachineIndependent/glslang_angle.y"
-                                                {
-        if ((yyvsp[-2].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
-        }
-        TType* type = new TType((yyvsp[-2].interm.type));
-        type->transferArraySizes((yyvsp[0].interm).arraySizes);
-        type->copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
-
-        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, type->getArraySizes());
-        parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
-        parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
-
-        TParameter param = { (yyvsp[-1].lex).string, type };
-
-        (yyval.interm).loc = (yyvsp[-1].lex).loc;
-        (yyval.interm).param = param;
-    }
-#line 4093 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 105:
-#line 962 "MachineIndependent/glslang_angle.y"
-                                          {
-        (yyval.interm) = (yyvsp[0].interm);
-        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
-            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
-        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
-
-        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
-        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
-
-    }
-#line 4109 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 106:
-#line 973 "MachineIndependent/glslang_angle.y"
-                           {
-        (yyval.interm) = (yyvsp[0].interm);
-
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
-        parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
-        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
-    }
-#line 4121 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 107:
-#line 983 "MachineIndependent/glslang_angle.y"
-                                              {
-        (yyval.interm) = (yyvsp[0].interm);
-        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
-            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
-        parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
-
-        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
-        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
-    }
-#line 4136 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 108:
-#line 993 "MachineIndependent/glslang_angle.y"
-                               {
-        (yyval.interm) = (yyvsp[0].interm);
-
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
-        parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
-        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
-    }
-#line 4148 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 109:
-#line 1003 "MachineIndependent/glslang_angle.y"
-                     {
-        TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
-        (yyval.interm).param = param;
-        if ((yyvsp[0].interm.type).arraySizes)
-            parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
-    }
-#line 4159 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 110:
-#line 1012 "MachineIndependent/glslang_angle.y"
-                         {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 4167 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 111:
-#line 1015 "MachineIndependent/glslang_angle.y"
-                                            {
-        (yyval.interm) = (yyvsp[-2].interm);
-        parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
-    }
-#line 4176 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 112:
-#line 1019 "MachineIndependent/glslang_angle.y"
-                                                            {
-        (yyval.interm) = (yyvsp[-3].interm);
-        parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
-    }
-#line 4185 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 113:
-#line 1023 "MachineIndependent/glslang_angle.y"
-                                                                              {
-        (yyval.interm).type = (yyvsp[-5].interm).type;
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
-    }
-#line 4195 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 114:
-#line 1028 "MachineIndependent/glslang_angle.y"
-                                                              {
-        (yyval.interm).type = (yyvsp[-4].interm).type;
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
-    }
-#line 4205 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 115:
-#line 1036 "MachineIndependent/glslang_angle.y"
-                           {
-        (yyval.interm).type = (yyvsp[0].interm.type);
-        (yyval.interm).intermNode = 0;
-
-        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
-
-    }
-#line 4217 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 116:
-#line 1043 "MachineIndependent/glslang_angle.y"
-                                      {
-        (yyval.interm).type = (yyvsp[-1].interm.type);
-        (yyval.interm).intermNode = 0;
-        parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
-    }
-#line 4227 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 117:
-#line 1048 "MachineIndependent/glslang_angle.y"
-                                                      {
-        (yyval.interm).type = (yyvsp[-2].interm.type);
-        (yyval.interm).intermNode = 0;
-        parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
-    }
-#line 4237 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 118:
-#line 1053 "MachineIndependent/glslang_angle.y"
-                                                                        {
-        (yyval.interm).type = (yyvsp[-4].interm.type);
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
-    }
-#line 4247 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 119:
-#line 1058 "MachineIndependent/glslang_angle.y"
-                                                        {
-        (yyval.interm).type = (yyvsp[-3].interm.type);
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
-    }
-#line 4257 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 120:
-#line 1067 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-
-        parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
-        if ((yyvsp[0].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-        }
-        parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
-    }
-#line 4272 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 121:
-#line 1077 "MachineIndependent/glslang_angle.y"
-                                     {
-        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
-        parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
-
-        if ((yyvsp[0].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-        }
-
-        if ((yyvsp[0].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).qualifier))
-            (yyvsp[0].interm.type).arraySizes = nullptr;
-
-        parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
-        (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers);
-        parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true);
-        parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier);
-
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-
-        if (! (yyval.interm.type).qualifier.isInterpolation() &&
-            ((parseContext.language == EShLangVertex   && (yyval.interm.type).qualifier.storage == EvqVaryingOut) ||
-             (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
-            (yyval.interm.type).qualifier.smooth = true;
-    }
-#line 4301 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 122:
-#line 1104 "MachineIndependent/glslang_angle.y"
-                {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
-        parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.invariant = true;
-    }
-#line 4312 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 123:
-#line 1113 "MachineIndependent/glslang_angle.y"
-             {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.smooth = true;
-    }
-#line 4324 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 124:
-#line 1120 "MachineIndependent/glslang_angle.y"
-           {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.flat = true;
-    }
-#line 4336 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 125:
-#line 1128 "MachineIndependent/glslang_angle.y"
-                    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.nopersp = true;
-    }
-#line 4348 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 126:
-#line 1140 "MachineIndependent/glslang_angle.y"
-                                                             {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
-#line 4356 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 127:
-#line 1146 "MachineIndependent/glslang_angle.y"
-                          {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4364 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 128:
-#line 1149 "MachineIndependent/glslang_angle.y"
-                                                         {
-        (yyval.interm.type) = (yyvsp[-2].interm.type);
-        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
-        parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
-    }
-#line 4374 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 129:
-#line 1156 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
-    }
-#line 4383 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 130:
-#line 1160 "MachineIndependent/glslang_angle.y"
-                                           {
-        (yyval.interm.type).init((yyvsp[-2].lex).loc);
-        parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
-    }
-#line 4392 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 131:
-#line 1164 "MachineIndependent/glslang_angle.y"
-             { // because "shared" is both an identifier and a keyword
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        TString strShared("shared");
-        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
-    }
-#line 4402 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 132:
-#line 1173 "MachineIndependent/glslang_angle.y"
-              {
-        parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.noContraction = true;
-    }
-#line 4413 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 133:
-#line 1183 "MachineIndependent/glslang_angle.y"
-                            {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4421 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 134:
-#line 1186 "MachineIndependent/glslang_angle.y"
-                                           {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-        if ((yyval.interm.type).basicType == EbtVoid)
-            (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
-
-        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
-        parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
-    }
-#line 4434 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 135:
-#line 1197 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4442 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 136:
-#line 1200 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4450 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 137:
-#line 1203 "MachineIndependent/glslang_angle.y"
-                          {
-        parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4459 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 138:
-#line 1207 "MachineIndependent/glslang_angle.y"
-                              {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4468 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 139:
-#line 1211 "MachineIndependent/glslang_angle.y"
-                          {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4477 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 140:
-#line 1216 "MachineIndependent/glslang_angle.y"
-                        {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4486 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 141:
-#line 1225 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
-    }
-#line 4495 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 142:
-#line 1229 "MachineIndependent/glslang_angle.y"
-            {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqInOut;
-    }
-#line 4505 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 143:
-#line 1234 "MachineIndependent/glslang_angle.y"
-         {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "in");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
-        (yyval.interm.type).qualifier.storage = EvqIn;
-    }
-#line 4516 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 144:
-#line 1240 "MachineIndependent/glslang_angle.y"
-          {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "out");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
-        (yyval.interm.type).qualifier.storage = EvqOut;
-    }
-#line 4527 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 145:
-#line 1246 "MachineIndependent/glslang_angle.y"
-               {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
-        parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.centroid = true;
-    }
-#line 4539 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 146:
-#line 1253 "MachineIndependent/glslang_angle.y"
-              {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqUniform;
-    }
-#line 4549 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 147:
-#line 1258 "MachineIndependent/glslang_angle.y"
-             {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqShared;
-    }
-#line 4562 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 148:
-#line 1266 "MachineIndependent/glslang_angle.y"
-             {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqBuffer;
-    }
-#line 4572 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 149:
-#line 1272 "MachineIndependent/glslang_angle.y"
-                {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
-
-        parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
-
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqVaryingIn;
-    }
-#line 4589 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 150:
-#line 1284 "MachineIndependent/glslang_angle.y"
-              {
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
-
-        parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
-
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        if (parseContext.language == EShLangVertex)
-            (yyval.interm.type).qualifier.storage = EvqVaryingOut;
-        else
-            (yyval.interm.type).qualifier.storage = EvqVaryingIn;
-    }
-#line 4608 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 151:
-#line 1298 "MachineIndependent/glslang_angle.y"
-            {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.patch = true;
-    }
-#line 4619 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 152:
-#line 1304 "MachineIndependent/glslang_angle.y"
-             {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.sample = true;
-    }
-#line 4629 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 153:
-#line 1310 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.coherent = true;
-    }
-#line 4638 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 154:
-#line 1314 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.volatil = true;
-    }
-#line 4647 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 155:
-#line 1318 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.restrict = true;
-    }
-#line 4656 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 156:
-#line 1322 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.readonly = true;
-    }
-#line 4665 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 157:
-#line 1326 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.writeonly = true;
-    }
-#line 4674 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 158:
-#line 1349 "MachineIndependent/glslang_angle.y"
-                                                           {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
-        (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
-    }
-#line 4684 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 159:
-#line 1354 "MachineIndependent/glslang_angle.y"
-                                                                           {
-        parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
-        (yyval.interm.type) = (yyvsp[-2].interm.type);
-        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
-        (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
-        (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
-    }
-#line 4696 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 160:
-#line 1364 "MachineIndependent/glslang_angle.y"
-                                 {
-        (yyval.interm).loc = (yyvsp[-1].lex).loc;
-        (yyval.interm).arraySizes = new TArraySizes;
-        (yyval.interm).arraySizes->addInnerSize();
-    }
-#line 4706 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 161:
-#line 1369 "MachineIndependent/glslang_angle.y"
-                                                        {
-        (yyval.interm).loc = (yyvsp[-2].lex).loc;
-        (yyval.interm).arraySizes = new TArraySizes;
-
-        TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
-        (yyval.interm).arraySizes->addInnerSize(size);
-    }
-#line 4719 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 162:
-#line 1377 "MachineIndependent/glslang_angle.y"
-                                                 {
-        (yyval.interm) = (yyvsp[-2].interm);
-        (yyval.interm).arraySizes->addInnerSize();
-    }
-#line 4728 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 163:
-#line 1381 "MachineIndependent/glslang_angle.y"
-                                                                        {
-        (yyval.interm) = (yyvsp[-3].interm);
-
-        TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
-        (yyval.interm).arraySizes->addInnerSize(size);
-    }
-#line 4740 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 164:
-#line 1391 "MachineIndependent/glslang_angle.y"
-                               {
-        (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
-    }
-#line 4748 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 165:
-#line 1394 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.typeParameters) = 0;
-    }
-#line 4756 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 166:
-#line 1400 "MachineIndependent/glslang_angle.y"
-                                                           {
-        (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
-    }
-#line 4764 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 167:
-#line 1406 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.typeParameters) = new TArraySizes;
-
-        TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
-        (yyval.interm.typeParameters)->addInnerSize(size);
-    }
-#line 4776 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 168:
-#line 1413 "MachineIndependent/glslang_angle.y"
-                                                           {
-        (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
-
-        TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
-        (yyval.interm.typeParameters)->addInnerSize(size);
-    }
-#line 4788 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 169:
-#line 1423 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtVoid;
-    }
-#line 4797 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 170:
-#line 1427 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-    }
-#line 4806 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 171:
-#line 1431 "MachineIndependent/glslang_angle.y"
-          {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-    }
-#line 4815 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 172:
-#line 1435 "MachineIndependent/glslang_angle.y"
-           {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-    }
-#line 4825 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 173:
-#line 1440 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-    }
-#line 4834 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 174:
-#line 1444 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 4844 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 175:
-#line 1449 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 4854 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 176:
-#line 1454 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 4864 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 177:
-#line 1459 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 4874 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 178:
-#line 1464 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 4884 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 179:
-#line 1469 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
-    }
-#line 4894 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 180:
-#line 1474 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 4904 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 181:
-#line 1479 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 4914 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 182:
-#line 1484 "MachineIndependent/glslang_angle.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 4924 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 183:
-#line 1489 "MachineIndependent/glslang_angle.y"
-            {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(2);
-    }
-#line 4935 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 184:
-#line 1495 "MachineIndependent/glslang_angle.y"
-            {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(3);
-    }
-#line 4946 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 185:
-#line 1501 "MachineIndependent/glslang_angle.y"
-            {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(4);
-    }
-#line 4957 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 186:
-#line 1507 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 4967 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 187:
-#line 1512 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 4977 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 188:
-#line 1517 "MachineIndependent/glslang_angle.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 4987 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 189:
-#line 1522 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 4997 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 190:
-#line 1527 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 5007 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 191:
-#line 1532 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 5017 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 192:
-#line 1537 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 5027 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 193:
-#line 1542 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 5037 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 194:
-#line 1547 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 4);
-    }
-#line 5047 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 195:
-#line 1552 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 2);
-    }
-#line 5057 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 196:
-#line 1557 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 3);
-    }
-#line 5067 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 197:
-#line 1562 "MachineIndependent/glslang_angle.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 5077 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 198:
-#line 1570 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
-    }
-#line 5087 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 199:
-#line 1575 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
-    }
-#line 5097 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 200:
-#line 1580 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
-    }
-#line 5107 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 201:
-#line 1585 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
-    }
-#line 5117 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 202:
-#line 1590 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
-    }
-#line 5127 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 203:
-#line 1595 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
-    }
-#line 5137 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 204:
-#line 1600 "MachineIndependent/glslang_angle.y"
-                           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
-    }
-#line 5147 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 205:
-#line 1606 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
-    }
-#line 5157 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 206:
-#line 1611 "MachineIndependent/glslang_angle.y"
-                             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
-    }
-#line 5167 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 207:
-#line 1618 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D);
-    }
-#line 5177 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 208:
-#line 1623 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd3D);
-    }
-#line 5187 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 209:
-#line 1628 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdCube);
-    }
-#line 5197 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 210:
-#line 1633 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
-    }
-#line 5207 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 211:
-#line 1638 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D);
-    }
-#line 5217 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 212:
-#line 1643 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd3D);
-    }
-#line 5227 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 213:
-#line 1648 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdCube);
-    }
-#line 5237 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 214:
-#line 1654 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
-    }
-#line 5247 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 215:
-#line 1659 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
-    }
-#line 5257 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 216:
-#line 1664 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
-    }
-#line 5267 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 217:
-#line 1669 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
-    }
-#line 5277 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 218:
-#line 1674 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
-    }
-#line 5287 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 219:
-#line 1681 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
-    }
-#line 5297 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 220:
-#line 1686 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
-    }
-#line 5307 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 221:
-#line 1691 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
-    }
-#line 5317 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 222:
-#line 1696 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
-    }
-#line 5327 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 223:
-#line 1701 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
-    }
-#line 5337 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 224:
-#line 1706 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
-    }
-#line 5347 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 225:
-#line 1711 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
-    }
-#line 5357 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 226:
-#line 1716 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
-    }
-#line 5367 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 227:
-#line 1721 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
-    }
-#line 5377 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 228:
-#line 1726 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
-    }
-#line 5387 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 229:
-#line 1731 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
-    }
-#line 5397 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 230:
-#line 1736 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
-    }
-#line 5407 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 231:
-#line 1741 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
-    }
-#line 5417 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 232:
-#line 1746 "MachineIndependent/glslang_angle.y"
-              {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setPureSampler(false);
-    }
-#line 5427 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 233:
-#line 1751 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setPureSampler(true);
-    }
-#line 5437 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 234:
-#line 1757 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
-    }
-#line 5447 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 235:
-#line 1762 "MachineIndependent/glslang_angle.y"
-                          {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
-    }
-#line 5457 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 236:
-#line 1767 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
-    }
-#line 5467 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 237:
-#line 1772 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
-    }
-#line 5477 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 238:
-#line 1777 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
-    }
-#line 5487 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 239:
-#line 1782 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
-    }
-#line 5497 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 240:
-#line 1787 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
-    }
-#line 5507 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 241:
-#line 1792 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
-    }
-#line 5517 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 242:
-#line 1797 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
-    }
-#line 5527 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 243:
-#line 1802 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
-    }
-#line 5537 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 244:
-#line 1807 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
-    }
-#line 5547 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 245:
-#line 1812 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
-    }
-#line 5557 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 246:
-#line 1817 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
-    }
-#line 5567 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 247:
-#line 1823 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
-    }
-#line 5577 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 248:
-#line 1828 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
-    }
-#line 5587 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 249:
-#line 1833 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
-    }
-#line 5597 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 250:
-#line 1838 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
-    }
-#line 5607 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 251:
-#line 1843 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
-    }
-#line 5617 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 252:
-#line 1848 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
-    }
-#line 5627 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 253:
-#line 1853 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
-    }
-#line 5637 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 254:
-#line 1858 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
-    }
-#line 5647 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 255:
-#line 1863 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
-    }
-#line 5657 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 256:
-#line 1868 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
-    }
-#line 5667 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 257:
-#line 1873 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
-    }
-#line 5677 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 258:
-#line 1878 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
-    }
-#line 5687 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 259:
-#line 1884 "MachineIndependent/glslang_angle.y"
-              {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
-    }
-#line 5697 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 260:
-#line 1889 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
-    }
-#line 5707 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 261:
-#line 1894 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
-    }
-#line 5717 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 262:
-#line 1899 "MachineIndependent/glslang_angle.y"
-              {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
-    }
-#line 5727 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 263:
-#line 1904 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
-    }
-#line 5737 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 264:
-#line 1909 "MachineIndependent/glslang_angle.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
-    }
-#line 5747 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 265:
-#line 1914 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
-    }
-#line 5757 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 266:
-#line 1919 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
-    }
-#line 5767 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 267:
-#line 1924 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
-    }
-#line 5777 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 268:
-#line 1929 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
-    }
-#line 5787 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 269:
-#line 1934 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
-    }
-#line 5797 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 270:
-#line 1939 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
-    }
-#line 5807 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 271:
-#line 1944 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
-    }
-#line 5817 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 272:
-#line 1949 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
-    }
-#line 5827 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 273:
-#line 1954 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
-    }
-#line 5837 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 274:
-#line 1959 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
-    }
-#line 5847 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 275:
-#line 1964 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
-    }
-#line 5857 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 276:
-#line 1969 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
-    }
-#line 5867 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 277:
-#line 1974 "MachineIndependent/glslang_angle.y"
-                   {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
-    }
-#line 5877 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 278:
-#line 1979 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
-    }
-#line 5887 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 279:
-#line 1984 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
-    }
-#line 5897 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 280:
-#line 1989 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
-    }
-#line 5907 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 281:
-#line 1994 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
-    }
-#line 5917 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 282:
-#line 1999 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
-    }
-#line 5927 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 283:
-#line 2004 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
-    }
-#line 5937 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 284:
-#line 2009 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
-    }
-#line 5947 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 285:
-#line 2014 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
-    }
-#line 5957 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 286:
-#line 2019 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
-    }
-#line 5967 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 287:
-#line 2024 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
-    }
-#line 5977 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 288:
-#line 2029 "MachineIndependent/glslang_angle.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
-    }
-#line 5987 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 289:
-#line 2035 "MachineIndependent/glslang_angle.y"
-                         {  // GL_OES_EGL_image_external
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
-        (yyval.interm.type).sampler.external = true;
-    }
-#line 5998 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 290:
-#line 2041 "MachineIndependent/glslang_angle.y"
-                              { // GL_EXT_YUV_target
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
-        (yyval.interm.type).sampler.yuv = true;
-    }
-#line 6009 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 291:
-#line 2049 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-        (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
-    }
-#line 6019 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 292:
-#line 2054 "MachineIndependent/glslang_angle.y"
-                {
-        //
-        // This is for user defined type names.  The lexical phase looked up the
-        // type.
-        //
-        if (const TVariable* variable = ((yyvsp[0].lex).symbol)->getAsVariable()) {
-            const TType& structure = variable->getType();
-            (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-            (yyval.interm.type).basicType = EbtStruct;
-            (yyval.interm.type).userDef = &structure;
-        } else
-            parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
-    }
-#line 6037 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 293:
-#line 2070 "MachineIndependent/glslang_angle.y"
-                     {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
-    }
-#line 6047 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 294:
-#line 2075 "MachineIndependent/glslang_angle.y"
-                       {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
-    }
-#line 6057 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 295:
-#line 2080 "MachineIndependent/glslang_angle.y"
-                    {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
-    }
-#line 6067 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 296:
-#line 2088 "MachineIndependent/glslang_angle.y"
-                                   { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 6073 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 297:
-#line 2088 "MachineIndependent/glslang_angle.y"
-                                                                                                                   {
-        TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
-        parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
-        TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
-        if (! parseContext.symbolTable.insert(*userTypeDef))
-            parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct");
-        (yyval.interm.type).init((yyvsp[-5].lex).loc);
-        (yyval.interm.type).basicType = EbtStruct;
-        (yyval.interm.type).userDef = structure;
-        --parseContext.structNestingLevel;
-    }
-#line 6089 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 298:
-#line 2099 "MachineIndependent/glslang_angle.y"
-                        { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 6095 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 299:
-#line 2099 "MachineIndependent/glslang_angle.y"
-                                                                                                        {
-        TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
-        (yyval.interm.type).init((yyvsp[-4].lex).loc);
-        (yyval.interm.type).basicType = EbtStruct;
-        (yyval.interm.type).userDef = structure;
-        --parseContext.structNestingLevel;
-    }
-#line 6107 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 300:
-#line 2109 "MachineIndependent/glslang_angle.y"
-                         {
-        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
-    }
-#line 6115 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 301:
-#line 2112 "MachineIndependent/glslang_angle.y"
-                                                 {
-        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
-        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
-            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
-                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
-                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
-            }
-            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
-        }
-    }
-#line 6130 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 302:
-#line 2125 "MachineIndependent/glslang_angle.y"
-                                                      {
-        if ((yyvsp[-2].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.isEsProfile())
-                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
-        }
-
-        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
-
-        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
-        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
-
-        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-            TType type((yyvsp[-2].interm.type));
-            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
-            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
-            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
-            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
-            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
-        }
-    }
-#line 6157 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 303:
-#line 2147 "MachineIndependent/glslang_angle.y"
-                                                                     {
-        if ((yyvsp[-2].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.isEsProfile())
-                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
-        }
-
-        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
-
-        parseContext.memberQualifierCheck((yyvsp[-3].interm.type));
-        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
-        parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true);
-        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
-
-        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-            TType type((yyvsp[-2].interm.type));
-            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
-            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
-            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
-            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
-            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
-        }
-    }
-#line 6186 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 304:
-#line 2174 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.typeList) = new TTypeList;
-        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
-    }
-#line 6195 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 305:
-#line 2178 "MachineIndependent/glslang_angle.y"
-                                                     {
-        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
-    }
-#line 6203 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 306:
-#line 2184 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.typeLine).type = new TType(EbtVoid);
-        (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
-        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
-    }
-#line 6213 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 307:
-#line 2189 "MachineIndependent/glslang_angle.y"
-                                 {
-        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
-
-        (yyval.interm.typeLine).type = new TType(EbtVoid);
-        (yyval.interm.typeLine).loc = (yyvsp[-1].lex).loc;
-        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
-        (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
-    }
-#line 6226 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 308:
-#line 2200 "MachineIndependent/glslang_angle.y"
-                            {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 6234 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 309:
-#line 2204 "MachineIndependent/glslang_angle.y"
-                                              {
-        const char* initFeature = "{ } style initializers";
-        parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
-        parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
-        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
-    }
-#line 6245 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 310:
-#line 2210 "MachineIndependent/glslang_angle.y"
-                                                    {
-        const char* initFeature = "{ } style initializers";
-        parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
-        parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
-        (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 6256 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 311:
-#line 2221 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
-    }
-#line 6264 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 312:
-#line 2224 "MachineIndependent/glslang_angle.y"
-                                         {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-    }
-#line 6272 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 313:
-#line 2231 "MachineIndependent/glslang_angle.y"
-                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6278 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 314:
-#line 2235 "MachineIndependent/glslang_angle.y"
-                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6284 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 315:
-#line 2236 "MachineIndependent/glslang_angle.y"
-                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6290 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 316:
-#line 2242 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6296 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 317:
-#line 2243 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6302 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 318:
-#line 2244 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6308 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 319:
-#line 2245 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6314 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 320:
-#line 2246 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6320 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 321:
-#line 2247 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6326 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 322:
-#line 2248 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6332 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 323:
-#line 2259 "MachineIndependent/glslang_angle.y"
-                             { (yyval.interm.intermNode) = 0; }
-#line 6338 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 324:
-#line 2260 "MachineIndependent/glslang_angle.y"
-                 {
-        parseContext.symbolTable.push();
-        ++parseContext.statementNestingLevel;
-    }
-#line 6347 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 325:
-#line 2264 "MachineIndependent/glslang_angle.y"
-                     {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        --parseContext.statementNestingLevel;
-    }
-#line 6356 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 326:
-#line 2268 "MachineIndependent/glslang_angle.y"
-                  {
-        if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
-            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
-        (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
-    }
-#line 6366 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 327:
-#line 2276 "MachineIndependent/glslang_angle.y"
-                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6372 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 328:
-#line 2277 "MachineIndependent/glslang_angle.y"
-                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6378 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 329:
-#line 2281 "MachineIndependent/glslang_angle.y"
-      {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 6386 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 330:
-#line 2284 "MachineIndependent/glslang_angle.y"
-                          {
-        --parseContext.controlFlowNestingLevel;
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6395 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 331:
-#line 2288 "MachineIndependent/glslang_angle.y"
-      {
-        parseContext.symbolTable.push();
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 6405 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 332:
-#line 2293 "MachineIndependent/glslang_angle.y"
-                       {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6416 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 333:
-#line 2302 "MachineIndependent/glslang_angle.y"
-                             {
-        (yyval.interm.intermNode) = 0;
-    }
-#line 6424 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 334:
-#line 2305 "MachineIndependent/glslang_angle.y"
-                                            {
-        if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
-            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
-        (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
-    }
-#line 6434 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 335:
-#line 2313 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
-        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
-                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
-            parseContext.wrapupSwitchSubsequence(0, (yyvsp[0].interm.intermNode));
-            (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
-        }
-    }
-#line 6447 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 336:
-#line 2321 "MachineIndependent/glslang_angle.y"
-                               {
-        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
-                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
-            parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode));
-            (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
-        } else
-            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
-    }
-#line 6460 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 337:
-#line 2332 "MachineIndependent/glslang_angle.y"
-                 { (yyval.interm.intermNode) = 0; }
-#line 6466 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 338:
-#line 2333 "MachineIndependent/glslang_angle.y"
-                            { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 6472 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 339:
-#line 2337 "MachineIndependent/glslang_angle.y"
-                                        {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6480 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 340:
-#line 2341 "MachineIndependent/glslang_angle.y"
-                                                  {
-        parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6489 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 341:
-#line 2348 "MachineIndependent/glslang_angle.y"
-                                                                    {
-        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
-        (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
-    }
-#line 6498 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 342:
-#line 2355 "MachineIndependent/glslang_angle.y"
-                                             {
-        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
-        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
-    }
-#line 6507 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 343:
-#line 2359 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
-        (yyval.interm.nodePair).node2 = 0;
-    }
-#line 6516 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 344:
-#line 2367 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
-    }
-#line 6525 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 345:
-#line 2371 "MachineIndependent/glslang_angle.y"
-                                                        {
-        parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
-
-        TType type((yyvsp[-3].interm.type));
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
-        if (initNode)
-            (yyval.interm.intermTypedNode) = initNode->getAsTyped();
-        else
-            (yyval.interm.intermTypedNode) = 0;
-    }
-#line 6540 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 346:
-#line 2384 "MachineIndependent/glslang_angle.y"
-                                     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6548 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 347:
-#line 2388 "MachineIndependent/glslang_angle.y"
-                                               {
-        parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6557 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 348:
-#line 2395 "MachineIndependent/glslang_angle.y"
-                                               {
-        // start new switch sequence on the switch stack
-        ++parseContext.controlFlowNestingLevel;
-        ++parseContext.statementNestingLevel;
-        parseContext.switchSequenceStack.push_back(new TIntermSequence);
-        parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
-        parseContext.symbolTable.push();
-    }
-#line 6570 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 349:
-#line 2403 "MachineIndependent/glslang_angle.y"
-                                                 {
-        (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
-        delete parseContext.switchSequenceStack.back();
-        parseContext.switchSequenceStack.pop_back();
-        parseContext.switchLevel.pop_back();
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-#line 6584 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 350:
-#line 2415 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.intermNode) = 0;
-    }
-#line 6592 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 351:
-#line 2418 "MachineIndependent/glslang_angle.y"
-                     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6600 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 352:
-#line 2424 "MachineIndependent/glslang_angle.y"
-                            {
-        (yyval.interm.intermNode) = 0;
-        if (parseContext.switchLevel.size() == 0)
-            parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
-        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
-            parseContext.error((yyvsp[-2].lex).loc, "cannot be nested inside control flow", "case", "");
-        else {
-            parseContext.constantValueCheck((yyvsp[-1].interm.intermTypedNode), "case");
-            parseContext.integerCheck((yyvsp[-1].interm.intermTypedNode), "case");
-            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
-        }
-    }
-#line 6617 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 353:
-#line 2436 "MachineIndependent/glslang_angle.y"
-                    {
-        (yyval.interm.intermNode) = 0;
-        if (parseContext.switchLevel.size() == 0)
-            parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
-        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
-            parseContext.error((yyvsp[-1].lex).loc, "cannot be nested inside control flow", "default", "");
-        else
-            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
-    }
-#line 6631 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 354:
-#line 2448 "MachineIndependent/glslang_angle.y"
-                                        {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6639 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 355:
-#line 2452 "MachineIndependent/glslang_angle.y"
-                                                  {
-        parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6648 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 356:
-#line 2459 "MachineIndependent/glslang_angle.y"
-                       {
-        if (! parseContext.limits.whileLoops)
-            parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
-        parseContext.symbolTable.push();
-        ++parseContext.loopNestingLevel;
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 6661 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 357:
-#line 2467 "MachineIndependent/glslang_angle.y"
-                                                   {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
-        --parseContext.loopNestingLevel;
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-#line 6673 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 358:
-#line 2474 "MachineIndependent/glslang_angle.y"
-         {
-        ++parseContext.loopNestingLevel;
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 6683 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 359:
-#line 2479 "MachineIndependent/glslang_angle.y"
-                                                                  {
-        if (! parseContext.limits.whileLoops)
-            parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
-
-        parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode));
-
-        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc);
-        --parseContext.loopNestingLevel;
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-#line 6699 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 360:
-#line 2490 "MachineIndependent/glslang_angle.y"
-                     {
-        parseContext.symbolTable.push();
-        ++parseContext.loopNestingLevel;
-        ++parseContext.statementNestingLevel;
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 6710 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 361:
-#line 2496 "MachineIndependent/glslang_angle.y"
-                                                                               {
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
-        TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node2), true, (yyvsp[-6].lex).loc);
-        if (! parseContext.limits.nonInductiveForLoops)
-            parseContext.inductiveLoopCheck((yyvsp[-6].lex).loc, (yyvsp[-3].interm.intermNode), forLoop);
-        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[-6].lex).loc);
-        (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
-        --parseContext.loopNestingLevel;
-        --parseContext.statementNestingLevel;
-        --parseContext.controlFlowNestingLevel;
-    }
-#line 6727 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 362:
-#line 2511 "MachineIndependent/glslang_angle.y"
-                           {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6735 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 363:
-#line 2514 "MachineIndependent/glslang_angle.y"
-                            {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6743 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 364:
-#line 2520 "MachineIndependent/glslang_angle.y"
-                {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 6751 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 365:
-#line 2523 "MachineIndependent/glslang_angle.y"
-                        {
-        (yyval.interm.intermTypedNode) = 0;
-    }
-#line 6759 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 366:
-#line 2529 "MachineIndependent/glslang_angle.y"
-                             {
-        (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
-        (yyval.interm.nodePair).node2 = 0;
-    }
-#line 6768 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 367:
-#line 2533 "MachineIndependent/glslang_angle.y"
-                                         {
-        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
-        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 6777 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 368:
-#line 2540 "MachineIndependent/glslang_angle.y"
-                         {
-        if (parseContext.loopNestingLevel <= 0)
-            parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
-    }
-#line 6787 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 369:
-#line 2545 "MachineIndependent/glslang_angle.y"
-                      {
-        if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
-            parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
-    }
-#line 6797 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 370:
-#line 2550 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
-        if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
-            parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", "");
-        if (parseContext.inMain)
-            parseContext.postEntryPointReturn = true;
-    }
-#line 6809 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 371:
-#line 2557 "MachineIndependent/glslang_angle.y"
-                                  {
-        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 6817 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 372:
-#line 2560 "MachineIndependent/glslang_angle.y"
-                        {
-        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
-    }
-#line 6826 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 373:
-#line 2569 "MachineIndependent/glslang_angle.y"
-                           {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-        parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
-    }
-#line 6835 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 374:
-#line 2573 "MachineIndependent/glslang_angle.y"
-                                            {
-        if ((yyvsp[0].interm.intermNode) != nullptr) {
-            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
-            parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
-        }
-    }
-#line 6846 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 375:
-#line 2582 "MachineIndependent/glslang_angle.y"
-                          {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6854 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 376:
-#line 2585 "MachineIndependent/glslang_angle.y"
-                  {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 6862 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 377:
-#line 2589 "MachineIndependent/glslang_angle.y"
-                {
-        parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
-        (yyval.interm.intermNode) = nullptr;
-    }
-#line 6872 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 378:
-#line 2598 "MachineIndependent/glslang_angle.y"
-                         {
-        (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
-        (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
-    }
-#line 6881 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 379:
-#line 2602 "MachineIndependent/glslang_angle.y"
-                                    {
-        //   May be best done as post process phase on intermediate code
-        if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
-            parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str());
-        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode));
-        parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc);
-        (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str());
-
-        // store the pragma information for debug and optimize and other vendor specific
-        // information. This information can be queried from the parse tree
-        (yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
-        (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
-        (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
-    }
-#line 6901 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 380:
-#line 2621 "MachineIndependent/glslang_angle.y"
-                                                                           {
-        (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
-        parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
-    }
-#line 6910 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 381:
-#line 2627 "MachineIndependent/glslang_angle.y"
-                       {
-        (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
-    }
-#line 6918 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 382:
-#line 2630 "MachineIndependent/glslang_angle.y"
-                                            {
-        (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
-    }
-#line 6926 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 383:
-#line 2635 "MachineIndependent/glslang_angle.y"
-                 {
-        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
-    }
-#line 6934 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-  case 384:
-#line 2638 "MachineIndependent/glslang_angle.y"
-                                                            {
-        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 6942 "MachineIndependent/glslang_angle_tab.cpp"
-    break;
-
-
-#line 6946 "MachineIndependent/glslang_angle_tab.cpp"
-
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now 'shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-  {
-    const int yylhs = yyr1[yyn] - YYNTOKENS;
-    const int yyi = yypgoto[yylhs] + *yyssp;
-    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
-               ? yytable[yyi]
-               : yydefgoto[yylhs]);
-  }
-
-  goto yynewstate;
-
-
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (pParseContext, YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (pParseContext, yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval, pParseContext);
-          yychar = YYEMPTY;
-        }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-  /* Pacify compilers when the user code never invokes YYERROR and the
-     label yyerrorlab therefore never appears in user code.  */
-  if (0)
-    YYERROR;
-
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp, pParseContext);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-
-#if !defined yyoverflow || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (pParseContext, YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result.  |
-`-----------------------------------------------------*/
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval, pParseContext);
-    }
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                  yystos[+*yyssp], yyvsp, pParseContext);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  return yyresult;
-}
-#line 2643 "MachineIndependent/glslang_angle.y"
-

+ 0 - 333
glslang/MachineIndependent/glslang_angle_tab.cpp.h

@@ -1,333 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.5.1.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
-   Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* Undocumented macros, especially those whose name start with YY_,
-   are private implementation details.  Do not rely on them.  */
-
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_ANGLE_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_ANGLE_TAB_CPP_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    CONST = 258,
-    BOOL = 259,
-    INT = 260,
-    UINT = 261,
-    FLOAT = 262,
-    BVEC2 = 263,
-    BVEC3 = 264,
-    BVEC4 = 265,
-    IVEC2 = 266,
-    IVEC3 = 267,
-    IVEC4 = 268,
-    UVEC2 = 269,
-    UVEC3 = 270,
-    UVEC4 = 271,
-    VEC2 = 272,
-    VEC3 = 273,
-    VEC4 = 274,
-    MAT2 = 275,
-    MAT3 = 276,
-    MAT4 = 277,
-    MAT2X2 = 278,
-    MAT2X3 = 279,
-    MAT2X4 = 280,
-    MAT3X2 = 281,
-    MAT3X3 = 282,
-    MAT3X4 = 283,
-    MAT4X2 = 284,
-    MAT4X3 = 285,
-    MAT4X4 = 286,
-    SAMPLER2D = 287,
-    SAMPLER3D = 288,
-    SAMPLERCUBE = 289,
-    SAMPLER2DSHADOW = 290,
-    SAMPLERCUBESHADOW = 291,
-    SAMPLER2DARRAY = 292,
-    SAMPLER2DARRAYSHADOW = 293,
-    ISAMPLER2D = 294,
-    ISAMPLER3D = 295,
-    ISAMPLERCUBE = 296,
-    ISAMPLER2DARRAY = 297,
-    USAMPLER2D = 298,
-    USAMPLER3D = 299,
-    USAMPLERCUBE = 300,
-    USAMPLER2DARRAY = 301,
-    SAMPLER = 302,
-    SAMPLERSHADOW = 303,
-    TEXTURE2D = 304,
-    TEXTURE3D = 305,
-    TEXTURECUBE = 306,
-    TEXTURE2DARRAY = 307,
-    ITEXTURE2D = 308,
-    ITEXTURE3D = 309,
-    ITEXTURECUBE = 310,
-    ITEXTURE2DARRAY = 311,
-    UTEXTURE2D = 312,
-    UTEXTURE3D = 313,
-    UTEXTURECUBE = 314,
-    UTEXTURE2DARRAY = 315,
-    ATTRIBUTE = 316,
-    VARYING = 317,
-    SAMPLERCUBEARRAY = 318,
-    SAMPLERCUBEARRAYSHADOW = 319,
-    ISAMPLERCUBEARRAY = 320,
-    USAMPLERCUBEARRAY = 321,
-    SAMPLER2DRECT = 322,
-    SAMPLER2DRECTSHADOW = 323,
-    ISAMPLER2DRECT = 324,
-    USAMPLER2DRECT = 325,
-    SAMPLERBUFFER = 326,
-    ISAMPLERBUFFER = 327,
-    USAMPLERBUFFER = 328,
-    SAMPLER2DMS = 329,
-    ISAMPLER2DMS = 330,
-    USAMPLER2DMS = 331,
-    SAMPLER2DMSARRAY = 332,
-    ISAMPLER2DMSARRAY = 333,
-    USAMPLER2DMSARRAY = 334,
-    SAMPLEREXTERNALOES = 335,
-    SAMPLEREXTERNAL2DY2YEXT = 336,
-    IMAGE1D = 337,
-    IIMAGE1D = 338,
-    UIMAGE1D = 339,
-    IMAGE2D = 340,
-    IIMAGE2D = 341,
-    UIMAGE2D = 342,
-    IMAGE3D = 343,
-    IIMAGE3D = 344,
-    UIMAGE3D = 345,
-    IMAGE2DRECT = 346,
-    IIMAGE2DRECT = 347,
-    UIMAGE2DRECT = 348,
-    IMAGECUBE = 349,
-    IIMAGECUBE = 350,
-    UIMAGECUBE = 351,
-    IMAGEBUFFER = 352,
-    IIMAGEBUFFER = 353,
-    UIMAGEBUFFER = 354,
-    IMAGE1DARRAY = 355,
-    IIMAGE1DARRAY = 356,
-    UIMAGE1DARRAY = 357,
-    IMAGE2DARRAY = 358,
-    IIMAGE2DARRAY = 359,
-    UIMAGE2DARRAY = 360,
-    IMAGECUBEARRAY = 361,
-    IIMAGECUBEARRAY = 362,
-    UIMAGECUBEARRAY = 363,
-    IMAGE2DMS = 364,
-    IIMAGE2DMS = 365,
-    UIMAGE2DMS = 366,
-    IMAGE2DMSARRAY = 367,
-    IIMAGE2DMSARRAY = 368,
-    UIMAGE2DMSARRAY = 369,
-    TEXTURECUBEARRAY = 370,
-    ITEXTURECUBEARRAY = 371,
-    UTEXTURECUBEARRAY = 372,
-    TEXTURE1D = 373,
-    ITEXTURE1D = 374,
-    UTEXTURE1D = 375,
-    TEXTURE1DARRAY = 376,
-    ITEXTURE1DARRAY = 377,
-    UTEXTURE1DARRAY = 378,
-    TEXTURE2DRECT = 379,
-    ITEXTURE2DRECT = 380,
-    UTEXTURE2DRECT = 381,
-    TEXTUREBUFFER = 382,
-    ITEXTUREBUFFER = 383,
-    UTEXTUREBUFFER = 384,
-    TEXTURE2DMS = 385,
-    ITEXTURE2DMS = 386,
-    UTEXTURE2DMS = 387,
-    TEXTURE2DMSARRAY = 388,
-    ITEXTURE2DMSARRAY = 389,
-    UTEXTURE2DMSARRAY = 390,
-    LEFT_OP = 391,
-    RIGHT_OP = 392,
-    INC_OP = 393,
-    DEC_OP = 394,
-    LE_OP = 395,
-    GE_OP = 396,
-    EQ_OP = 397,
-    NE_OP = 398,
-    AND_OP = 399,
-    OR_OP = 400,
-    XOR_OP = 401,
-    MUL_ASSIGN = 402,
-    DIV_ASSIGN = 403,
-    ADD_ASSIGN = 404,
-    MOD_ASSIGN = 405,
-    LEFT_ASSIGN = 406,
-    RIGHT_ASSIGN = 407,
-    AND_ASSIGN = 408,
-    XOR_ASSIGN = 409,
-    OR_ASSIGN = 410,
-    SUB_ASSIGN = 411,
-    STRING_LITERAL = 412,
-    LEFT_PAREN = 413,
-    RIGHT_PAREN = 414,
-    LEFT_BRACKET = 415,
-    RIGHT_BRACKET = 416,
-    LEFT_BRACE = 417,
-    RIGHT_BRACE = 418,
-    DOT = 419,
-    COMMA = 420,
-    COLON = 421,
-    EQUAL = 422,
-    SEMICOLON = 423,
-    BANG = 424,
-    DASH = 425,
-    TILDE = 426,
-    PLUS = 427,
-    STAR = 428,
-    SLASH = 429,
-    PERCENT = 430,
-    LEFT_ANGLE = 431,
-    RIGHT_ANGLE = 432,
-    VERTICAL_BAR = 433,
-    CARET = 434,
-    AMPERSAND = 435,
-    QUESTION = 436,
-    INVARIANT = 437,
-    HIGH_PRECISION = 438,
-    MEDIUM_PRECISION = 439,
-    LOW_PRECISION = 440,
-    PRECISION = 441,
-    PACKED = 442,
-    RESOURCE = 443,
-    SUPERP = 444,
-    FLOATCONSTANT = 445,
-    INTCONSTANT = 446,
-    UINTCONSTANT = 447,
-    BOOLCONSTANT = 448,
-    IDENTIFIER = 449,
-    TYPE_NAME = 450,
-    CENTROID = 451,
-    IN = 452,
-    OUT = 453,
-    INOUT = 454,
-    STRUCT = 455,
-    VOID = 456,
-    WHILE = 457,
-    BREAK = 458,
-    CONTINUE = 459,
-    DO = 460,
-    ELSE = 461,
-    FOR = 462,
-    IF = 463,
-    DISCARD = 464,
-    RETURN = 465,
-    SWITCH = 466,
-    CASE = 467,
-    DEFAULT = 468,
-    UNIFORM = 469,
-    SHARED = 470,
-    BUFFER = 471,
-    FLAT = 472,
-    SMOOTH = 473,
-    LAYOUT = 474,
-    PATCH = 475,
-    SAMPLE = 476,
-    COHERENT = 477,
-    VOLATILE = 478,
-    RESTRICT = 479,
-    READONLY = 480,
-    WRITEONLY = 481,
-    NOPERSPECTIVE = 482,
-    PRECISE = 483
-  };
-#endif
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 103 "MachineIndependent/glslang_angle.y"
-
-    struct {
-        glslang::TSourceLoc loc;
-        union {
-            glslang::TString *string;
-            int i;
-            unsigned int u;
-            long long i64;
-            unsigned long long u64;
-            bool b;
-            double d;
-        };
-        glslang::TSymbol* symbol;
-    } lex;
-    struct {
-        glslang::TSourceLoc loc;
-        glslang::TOperator op;
-        union {
-            TIntermNode* intermNode;
-            glslang::TIntermNodePair nodePair;
-            glslang::TIntermTyped* intermTypedNode;
-            glslang::TAttributes* attributes;
-        };
-        union {
-            glslang::TPublicType type;
-            glslang::TFunction* function;
-            glslang::TParameter param;
-            glslang::TTypeLoc typeLine;
-            glslang::TTypeList* typeList;
-            glslang::TArraySizes* arraySizes;
-            glslang::TIdentifierList* identifierList;
-        };
-        glslang::TArraySizes* typeParameters;
-    } interm;
-
-#line 322 "MachineIndependent/glslang_angle_tab.cpp.h"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-
-int yyparse (glslang::TParseContext* pParseContext);
-
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_ANGLE_TAB_CPP_H_INCLUDED  */

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 325 - 404
glslang/MachineIndependent/glslang_tab.cpp


+ 49 - 52
glslang/MachineIndependent/glslang_tab.cpp.h

@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.5.1.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 
 /* Bison interface for Yacc-like parsers in C
 /* Bison interface for Yacc-like parsers in C
 
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
-   Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
 
    This program is free software: you can redistribute it and/or modify
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    it under the terms of the GNU General Public License as published by
@@ -31,11 +30,8 @@
    This special exception was added by the Free Software Foundation in
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
    version 2.2 of Bison.  */
 
 
-/* Undocumented macros, especially those whose name start with YY_,
-   are private implementation details.  Do not rely on them.  */
-
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 /* Debug traces.  */
 #ifndef YYDEBUG
 #ifndef YYDEBUG
 # define YYDEBUG 1
 # define YYDEBUG 1
@@ -216,26 +212,26 @@ extern int yydebug;
     SAMPLERCUBEARRAYSHADOW = 422,
     SAMPLERCUBEARRAYSHADOW = 422,
     ISAMPLERCUBEARRAY = 423,
     ISAMPLERCUBEARRAY = 423,
     USAMPLERCUBEARRAY = 424,
     USAMPLERCUBEARRAY = 424,
-    SAMPLER2DRECT = 425,
-    SAMPLER2DRECTSHADOW = 426,
-    ISAMPLER2DRECT = 427,
-    USAMPLER2DRECT = 428,
-    SAMPLERBUFFER = 429,
-    ISAMPLERBUFFER = 430,
-    USAMPLERBUFFER = 431,
-    SAMPLER2DMS = 432,
-    ISAMPLER2DMS = 433,
-    USAMPLER2DMS = 434,
-    SAMPLER2DMSARRAY = 435,
-    ISAMPLER2DMSARRAY = 436,
-    USAMPLER2DMSARRAY = 437,
-    SAMPLEREXTERNALOES = 438,
-    SAMPLEREXTERNAL2DY2YEXT = 439,
-    SAMPLER1D = 440,
-    SAMPLER1DARRAY = 441,
-    SAMPLER1DARRAYSHADOW = 442,
-    ISAMPLER1D = 443,
-    SAMPLER1DSHADOW = 444,
+    SAMPLER1D = 425,
+    SAMPLER1DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    SAMPLER1DSHADOW = 429,
+    SAMPLER2DRECT = 430,
+    SAMPLER2DRECTSHADOW = 431,
+    ISAMPLER2DRECT = 432,
+    USAMPLER2DRECT = 433,
+    SAMPLERBUFFER = 434,
+    ISAMPLERBUFFER = 435,
+    USAMPLERBUFFER = 436,
+    SAMPLER2DMS = 437,
+    ISAMPLER2DMS = 438,
+    USAMPLER2DMS = 439,
+    SAMPLER2DMSARRAY = 440,
+    ISAMPLER2DMSARRAY = 441,
+    USAMPLER2DMSARRAY = 442,
+    SAMPLEREXTERNALOES = 443,
+    SAMPLEREXTERNAL2DY2YEXT = 444,
     ISAMPLER1DARRAY = 445,
     ISAMPLER1DARRAY = 445,
     USAMPLER1D = 446,
     USAMPLER1D = 446,
     USAMPLER1DARRAY = 447,
     USAMPLER1DARRAY = 447,
@@ -445,35 +441,36 @@ extern int yydebug;
     HITATTREXT = 651,
     HITATTREXT = 651,
     CALLDATAEXT = 652,
     CALLDATAEXT = 652,
     CALLDATAINEXT = 653,
     CALLDATAINEXT = 653,
-    NONUNIFORM = 654,
-    DEVICECOHERENT = 655,
-    QUEUEFAMILYCOHERENT = 656,
-    WORKGROUPCOHERENT = 657,
-    SUBGROUPCOHERENT = 658,
-    NONPRIVATE = 659,
-    SHADERCALLCOHERENT = 660,
-    EXPLICITINTERPAMD = 661,
-    PERVERTEXNV = 662,
-    PERPRIMITIVENV = 663,
-    PERVIEWNV = 664,
-    PERTASKNV = 665,
-    PATCH = 666,
-    SAMPLE = 667,
-    COHERENT = 668,
-    VOLATILE = 669,
-    RESTRICT = 670,
-    READONLY = 671,
-    WRITEONLY = 672,
-    NOPERSPECTIVE = 673,
+    PATCH = 654,
+    SAMPLE = 655,
+    NONUNIFORM = 656,
+    COHERENT = 657,
+    VOLATILE = 658,
+    RESTRICT = 659,
+    READONLY = 660,
+    WRITEONLY = 661,
+    DEVICECOHERENT = 662,
+    QUEUEFAMILYCOHERENT = 663,
+    WORKGROUPCOHERENT = 664,
+    SUBGROUPCOHERENT = 665,
+    NONPRIVATE = 666,
+    SHADERCALLCOHERENT = 667,
+    NOPERSPECTIVE = 668,
+    EXPLICITINTERPAMD = 669,
+    PERVERTEXNV = 670,
+    PERPRIMITIVENV = 671,
+    PERVIEWNV = 672,
+    PERTASKNV = 673,
     PRECISE = 674
     PRECISE = 674
   };
   };
 #endif
 #endif
 
 
 /* Value type.  */
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
 union YYSTYPE
 union YYSTYPE
 {
 {
-#line 103 "MachineIndependent/glslang.y"
+#line 97 "glslang.y" /* yacc.c:1909  */
 
 
     struct {
     struct {
         glslang::TSourceLoc loc;
         glslang::TSourceLoc loc;
@@ -509,9 +506,9 @@ union YYSTYPE
         glslang::TArraySizes* typeParameters;
         glslang::TArraySizes* typeParameters;
     } interm;
     } interm;
 
 
-#line 513 "MachineIndependent/glslang_tab.cpp.h"
-
+#line 510 "glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 };
+
 typedef union YYSTYPE YYSTYPE;
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_DECLARED 1
@@ -521,4 +518,4 @@ typedef union YYSTYPE YYSTYPE;
 
 
 int yyparse (glslang::TParseContext* pParseContext);
 int yyparse (glslang::TParseContext* pParseContext);
 
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */

+ 2 - 2
glslang/MachineIndependent/intermOut.cpp

@@ -36,7 +36,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 // POSSIBILITY OF SUCH DAMAGE.
 //
 //
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 #include "localintermediate.h"
 #include "localintermediate.h"
 #include "../Include/InfoSink.h"
 #include "../Include/InfoSink.h"
@@ -1562,4 +1562,4 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
 
 
 } // end namespace glslang
 } // end namespace glslang
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // not GLSLANG_WEB

+ 2 - 2
glslang/MachineIndependent/iomapper.cpp

@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 // POSSIBILITY OF SUCH DAMAGE.
 //
 //
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 #include "../Include/Common.h"
 #include "../Include/Common.h"
 #include "../Include/InfoSink.h"
 #include "../Include/InfoSink.h"
@@ -1281,4 +1281,4 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) {
 
 
 } // end namespace glslang
 } // end namespace glslang
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB

+ 3 - 3
glslang/MachineIndependent/iomapper.h

@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 // POSSIBILITY OF SUCH DAMAGE.
 //
 //
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 #ifndef _IOMAPPER_INCLUDED
 #ifndef _IOMAPPER_INCLUDED
 #define _IOMAPPER_INCLUDED
 #define _IOMAPPER_INCLUDED
@@ -186,7 +186,7 @@ protected:
     }
     }
 };
 };
 
 
-// Default I/O resolver for OpenGL
+// Defaulf I/O resolver for OpenGL
 struct TDefaultGlslIoResolver : public TDefaultIoResolverBase {
 struct TDefaultGlslIoResolver : public TDefaultIoResolverBase {
 public:
 public:
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
@@ -299,4 +299,4 @@ public:
 
 
 #endif // _IOMAPPER_INCLUDED
 #endif // _IOMAPPER_INCLUDED
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif //  GLSLANG_WEB

+ 3 - 3
glslang/MachineIndependent/linkValidate.cpp

@@ -82,7 +82,7 @@ void TIntermediate::warn(TInfoSink& infoSink, const char* message)
 //
 //
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 {
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     mergeCallGraphs(infoSink, unit);
     mergeCallGraphs(infoSink, unit);
     mergeModes(infoSink, unit);
     mergeModes(infoSink, unit);
     mergeTrees(infoSink, unit);
     mergeTrees(infoSink, unit);
@@ -104,7 +104,7 @@ void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit)
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 }
 }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 #define MERGE_MAX(member) member = std::max(member, unit.member)
 #define MERGE_MAX(member) member = std::max(member, unit.member)
 #define MERGE_TRUE(member) if (unit.member) member = unit.member;
 #define MERGE_TRUE(member) if (unit.member) member = unit.member;
@@ -533,7 +533,7 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType)
 //
 //
 void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage)
 void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage)
 {
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     bool writeTypeComparison = false;
     bool writeTypeComparison = false;
 
 
     // Types have to match
     // Types have to match

+ 3 - 22
glslang/MachineIndependent/localintermediate.h

@@ -241,10 +241,7 @@ class TIntermediate {
 public:
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
         language(l),
         language(l),
-#ifndef GLSLANG_ANGLE
-        profile(p), version(v),
-#endif
-        treeRoot(0),
+        profile(p), version(v), treeRoot(0),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invertY(false),
         invertY(false),
         useStorageBuffer(false),
         useStorageBuffer(false),
@@ -298,20 +295,9 @@ public:
 #endif
 #endif
     }
     }
 
 
-    void setVersion(int v)
-    {
-#ifndef GLSLANG_ANGLE
-        version = v;
-#endif
-    }
-    void setProfile(EProfile p)
-    {
-#ifndef GLSLANG_ANGLE
-        profile = p;
-#endif
-    }
-
+    void setVersion(int v) { version = v; }
     int getVersion() const { return version; }
     int getVersion() const { return version; }
+    void setProfile(EProfile p) { profile = p; }
     EProfile getProfile() const { return profile; }
     EProfile getProfile() const { return profile; }
     void setSpv(const SpvVersion& s)
     void setSpv(const SpvVersion& s)
     {
     {
@@ -943,13 +929,8 @@ protected:
     typedef std::list<TCall> TGraph;
     typedef std::list<TCall> TGraph;
     TGraph callGraph;
     TGraph callGraph;
 
 
-#ifdef GLSLANG_ANGLE
-    const EProfile profile = ECoreProfile;
-    const int version = 450;
-#else
     EProfile profile;                           // source profile
     EProfile profile;                           // source profile
     int version;                                // source version
     int version;                                // source version
-#endif
     SpvVersion spvVersion;
     SpvVersion spvVersion;
     TIntermNode* treeRoot;
     TIntermNode* treeRoot;
     std::map<std::string, TExtensionBehavior> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
     std::map<std::string, TExtensionBehavior> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them

+ 1 - 6
glslang/MachineIndependent/parseVersions.h

@@ -58,7 +58,7 @@ public:
                    const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
                    const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
                    bool forwardCompatible, EShMessages messages)
                    bool forwardCompatible, EShMessages messages)
         :
         :
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         forwardCompatible(forwardCompatible),
         forwardCompatible(forwardCompatible),
         profile(profile),
         profile(profile),
 #endif
 #endif
@@ -116,14 +116,9 @@ public:
     bool relaxedErrors()    const { return false; }
     bool relaxedErrors()    const { return false; }
     bool suppressWarnings() const { return true; }
     bool suppressWarnings() const { return true; }
     bool isForwardCompatible() const { return false; }
     bool isForwardCompatible() const { return false; }
-#else
-#ifdef GLSLANG_ANGLE
-    const bool forwardCompatible = true;
-    const EProfile profile = ECoreProfile;
 #else
 #else
     bool forwardCompatible;      // true if errors are to be given for use of deprecated features
     bool forwardCompatible;      // true if errors are to be given for use of deprecated features
     EProfile profile;            // the declared profile in the shader (core by default)
     EProfile profile;            // the declared profile in the shader (core by default)
-#endif
     bool isEsProfile() const { return profile == EEsProfile; }
     bool isEsProfile() const { return profile == EEsProfile; }
     void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc);
     void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc);
     void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
     void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,

+ 2 - 2
glslang/MachineIndependent/reflection.cpp

@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 // POSSIBILITY OF SUCH DAMAGE.
 //
 //
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 #include "../Include/Common.h"
 #include "../Include/Common.h"
 #include "reflection.h"
 #include "reflection.h"
@@ -1266,4 +1266,4 @@ void TReflection::dump()
 
 
 } // end namespace glslang
 } // end namespace glslang
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB

+ 2 - 2
glslang/MachineIndependent/reflection.h

@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 // POSSIBILITY OF SUCH DAMAGE.
 //
 //
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 #ifndef _REFLECTION_INCLUDED
 #ifndef _REFLECTION_INCLUDED
 #define _REFLECTION_INCLUDED
 #define _REFLECTION_INCLUDED
@@ -220,4 +220,4 @@ protected:
 
 
 #endif // _REFLECTION_INCLUDED
 #endif // _REFLECTION_INCLUDED
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB

+ 5 - 5
glslang/Public/ShaderLang.h

@@ -690,7 +690,7 @@ private:
     TShader& operator=(TShader&);
     TShader& operator=(TShader&);
 };
 };
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
 //
 //
 // A reflection database and its interface, consistent with the OpenGL API reflection queries.
 // A reflection database and its interface, consistent with the OpenGL API reflection queries.
@@ -808,7 +808,7 @@ public:
     virtual void addStage(EShLanguage stage) = 0;
     virtual void addStage(EShLanguage stage) = 0;
 };
 };
 
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB
 
 
 // Make one TProgram per set of shaders that will get linked together.  Add all
 // Make one TProgram per set of shaders that will get linked together.  Add all
 // the shaders that are to be linked together.  After calling shader.parse()
 // the shaders that are to be linked together.  After calling shader.parse()
@@ -829,7 +829,7 @@ public:
 
 
     TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
     TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 
     // Reflection Interface
     // Reflection Interface
 
 
@@ -923,7 +923,7 @@ public:
     // If resolver is not provided it uses the previous approach
     // If resolver is not provided it uses the previous approach
     // and respects auto assignment and offsets.
     // and respects auto assignment and offsets.
     GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
     GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif
 
 
 protected:
 protected:
     GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages);
     GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages);
@@ -933,7 +933,7 @@ protected:
     TIntermediate* intermediate[EShLangCount];
     TIntermediate* intermediate[EShLangCount];
     bool newedIntermediate[EShLangCount];      // track which intermediate were "new" versus reusing a singleton unit in a stage
     bool newedIntermediate[EShLangCount];      // track which intermediate were "new" versus reusing a singleton unit in a stage
     TInfoSink* infoSink;
     TInfoSink* infoSink;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     TReflection* reflection;
     TReflection* reflection;
 #endif
 #endif
     bool linked;
     bool linked;

+ 0 - 5
glslang/updateGrammar

@@ -39,7 +39,6 @@ then
 elif [ "$#" -eq 0 ]
 elif [ "$#" -eq 0 ]
 then
 then
     m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
     m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
-    m4 -P -DGLSLANG_ANGLE MachineIndependent/glslang.m4 > MachineIndependent/glslang_angle.y
 else
 else
     echo usage:
     echo usage:
     echo $0 web
     echo $0 web
@@ -48,7 +47,3 @@ else
 fi
 fi
 
 
 bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp
 bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp
-if [ "$1" != 'web' ]
-then
-    bison --defines=MachineIndependent/glslang_angle_tab.cpp.h -t MachineIndependent/glslang_angle.y -o MachineIndependent/glslang_angle_tab.cpp
-fi

+ 1 - 1
gtests/Link.FromFile.Vk.cpp

@@ -75,7 +75,7 @@ TEST_P(LinkTestVulkan, FromFile)
     result.linkingOutput = program.getInfoLog();
     result.linkingOutput = program.getInfoLog();
     result.linkingError = program.getInfoDebugLog();
     result.linkingError = program.getInfoDebugLog();
 
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
         if (success)
             program.mapIO();
             program.mapIO();
 #endif
 #endif

+ 3 - 3
gtests/TestFixture.h

@@ -253,7 +253,7 @@ public:
         glslang::TProgram program;
         glslang::TProgram program;
         program.addShader(&shader);
         program.addShader(&shader);
         success &= program.link(controls);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
         if (success)
             program.mapIO();
             program.mapIO();
 #endif
 #endif
@@ -315,7 +315,7 @@ public:
         program.addShader(&shader);
         program.addShader(&shader);
         
         
         success &= program.link(controls);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
         if (success)
             program.mapIO();
             program.mapIO();
 #endif
 #endif
@@ -360,7 +360,7 @@ public:
         glslang::TProgram program;
         glslang::TProgram program;
         program.addShader(&shader);
         program.addShader(&shader);
         success &= program.link(controls);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
         if (success)
             program.mapIO();
             program.mapIO();
 #endif
 #endif

+ 1 - 4
license-checker.cfg

@@ -22,9 +22,6 @@
 
 
                 "glslang/MachineIndependent/glslang_tab.cpp",
                 "glslang/MachineIndependent/glslang_tab.cpp",
                 "glslang/MachineIndependent/glslang_tab.cpp.h",
                 "glslang/MachineIndependent/glslang_tab.cpp.h",
-
-                "glslang/MachineIndependent/glslang_angle_tab.cpp",
-                "glslang/MachineIndependent/glslang_angle_tab.cpp.h"
             ]
             ]
         }
         }
     ],
     ],
@@ -35,4 +32,4 @@
         "MIT-0",
         "MIT-0",
         "MIT"
         "MIT"
     ]
     ]
-}
+}

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott