diff --git a/BUILD.gn b/BUILD.gn
index dc3eb06..7242b6f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -109,6 +109,7 @@
       "SPIRV/SpvBuilder.cpp",
       "SPIRV/SpvBuilder.h",
       "SPIRV/SpvPostProcess.cpp",
+      "SPIRV/SpvTools.cpp",
       "SPIRV/SpvTools.h",
       "SPIRV/bitutils.h",
       "SPIRV/disassemble.cpp",
@@ -155,7 +156,7 @@
       "glslang/MachineIndependent/attribute.cpp",
       "glslang/MachineIndependent/attribute.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/intermOut.cpp",
       "glslang/MachineIndependent/iomapper.cpp",
@@ -206,25 +207,9 @@
     }
 
     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) {
-      sources += [ "SPIRV/SpvTools.cpp" ]
       defines += [ "ENABLE_OPT=1" ]
     }
-    if (invoker.is_angle) {
-      defines += [ "GLSLANG_ANGLE" ]
-    }
 
     if (is_win) {
       sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
@@ -272,13 +257,11 @@
 glslang_sources_common("glslang_lib_sources") {
   enable_opt = !glslang_angle
   enable_hlsl = !glslang_angle
-  is_angle = glslang_angle
 }
 
 glslang_sources_common("glslang_sources") {
   enable_opt = true
   enable_hlsl = true
-  is_angle = false
 }
 
 source_set("glslang_default_resource_limits_sources") {
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index ba60b82..5a70914 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -283,8 +283,6 @@
 {
 #ifdef GLSLANG_WEB
     return spv::SourceLanguageESSL;
-#elif defined(GLSLANG_ANGLE)
-    return spv::SourceLanguageGLSL;
 #endif
 
     switch (source) {
@@ -8688,7 +8686,7 @@
 // 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)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     std::ofstream out;
     out.open(baseName, std::ios::binary | std::ios::out);
     if (out.fail())
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 174937a..78eacac 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -147,10 +147,6 @@
 #ifdef GLSLANG_WEB
     const Versioning* Es300Desktop130 = nullptr;
     const Versioning* Es310Desktop420 = nullptr;
-#elif defined(GLSLANG_ANGLE)
-    const Versioning* Es300Desktop130 = nullptr;
-    const Versioning* Es310Desktop420 = nullptr;
-    const Versioning* Es310Desktop450 = nullptr;
 #else
     const Versioning Es300Desktop130Version[] = { { EEsProfile,      0, 300, 0, nullptr },
                                                   { EDesktopProfile, 0, 130, 0, nullptr },
@@ -419,7 +415,7 @@
 // See if the tabled versioning information allows the current version.
 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
     return true;
 #endif
@@ -503,7 +499,7 @@
     prefixes[EbtFloat] =  "";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     prefixes[EbtFloat16] = "f16";
     prefixes[EbtInt8]  = "i8";
     prefixes[EbtUint8] = "u8";
@@ -520,9 +516,7 @@
     dimMap[Esd3D] = 3;
     dimMap[EsdCube] = 3;
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     dimMap[Esd1D] = 1;
-#endif
     dimMap[EsdRect] = 2;
     dimMap[EsdBuffer] = 1;
     dimMap[EsdSubpass] = 2;  // potentially unused for now
@@ -547,9 +541,6 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
     addTabledBuiltins(version, profile, spvVersion);
 
@@ -595,7 +586,6 @@
         "vec4  fwidthCoarse(vec4  p);"
     );
 
-#ifndef GLSLANG_ANGLE
     TString derivativesAndControl16bits (
         "float16_t dFdx(float16_t);"
         "f16vec2   dFdx(f16vec2);"
@@ -1183,7 +1173,6 @@
             "\n"
         );
     }
-#endif // !GLSLANG_ANGLE
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
@@ -1221,7 +1210,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 440) {
         commonBuiltins.append(
             "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
@@ -1271,8 +1259,7 @@
             "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
-#endif // !GLSLANG_WEB
+#endif
 
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
@@ -1312,7 +1299,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
             commonBuiltins.append(
                 "double fma(double, double, double);"
@@ -1321,7 +1307,6 @@
                 "dvec4  fma(dvec4,  dvec4,  dvec4 );"
                 "\n");
     }
-#endif
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
@@ -1339,7 +1324,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
         commonBuiltins.append(
             "double frexp(double, out int);"
@@ -1358,7 +1342,6 @@
             "\n");
     }
 #endif
-#endif
 
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) {
@@ -1467,7 +1450,6 @@
     }
 
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     //
     // Original-style texture functions existing in all stages.
     // (Per-stage functions below.)
@@ -1616,7 +1598,6 @@
                 "\n");
         }
     }
-#endif // !GLSLANG_ANGLE
 
     // Bitfield
     if ((profile == EEsProfile && version >= 310) ||
@@ -1759,7 +1740,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3080,7 +3060,6 @@
             "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 
     if ((profile == EEsProfile && version >= 300 && version < 310) ||
         (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
@@ -3100,7 +3079,6 @@
                               "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3951,30 +3929,28 @@
             "f64vec3   log2(f64vec3);"
             "f64vec4   log2(f64vec4);"
             "\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 @@
     if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
-#ifndef GLSLANG_ANGLE
     //
     // Original-style texture Functions with lod.
     //
@@ -4050,7 +4025,6 @@
                 "\n");
         }
     }
-#endif // !GLSLANG_ANGLE
 
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
@@ -4071,7 +4045,7 @@
             "void EndPrimitive();"
             "\n");
     }
-#endif // !GLSLANG_WEB
+#endif
 
     //============================================================================
     //
@@ -4131,7 +4105,6 @@
 
     commonBuiltins.append("void debugPrintfEXT();\n");
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 450) {
         // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
         // adding it introduces undesirable tempArgs on the stack. What we want
@@ -4255,7 +4228,6 @@
 
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 
     // GL_ARB_derivative_control
     if (profile != EEsProfile && version >= 400) {
@@ -4293,7 +4265,6 @@
         "bool helperInvocationEXT();"
         "\n");
 
-#ifndef GLSLANG_ANGLE
     // GL_AMD_shader_explicit_vertex_parameter
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangFragment].append(
@@ -4428,14 +4399,12 @@
             "void executeCallableEXT(uint, int);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 
     //E_SPV_NV_compute_shader_derivatives
     if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
         stageBuiltins[EShLangCompute].append(derivativeControls);
         stageBuiltins[EShLangCompute].append("\n");
     }
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
         stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
@@ -4448,8 +4417,7 @@
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
-#endif // !GLSLANG_WEB
+#endif
 
     //============================================================================
     //
@@ -4486,7 +4454,7 @@
             "\n");
     }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
         //
         // Matrix state. p. 31, 32, 37, 39, 40.
@@ -4604,7 +4572,7 @@
 
             "\n");
     }
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif
 
     //============================================================================
     //
@@ -4635,7 +4603,6 @@
     }
 
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     //============================================================================
     //
     // Define the interface to the mesh/task shader.
@@ -4723,7 +4690,6 @@
                 "\n");
         }
     }
-#endif // !GLSLANG_ANGLE
 
     //============================================================================
     //
@@ -5394,15 +5360,6 @@
 
 #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
     if (profile != EEsProfile && version >= 450) {
         const char* ballotDecls =
@@ -5433,6 +5390,14 @@
         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
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 140)) {
@@ -5636,7 +5601,6 @@
         stageBuiltins[EShLangCallable].append(callableDecls);
 
     }
-
     if ((profile != EEsProfile && version >= 140)) {
         const char *deviceIndex =
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
@@ -5649,6 +5613,12 @@
         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) ||
         (profile == EEsProfile && version >= 310)) {
         commonBuiltins.append("const int gl_ScopeDevice      = 1;\n");
@@ -5672,15 +5642,7 @@
         commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\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", stageBuiltins[EShLangFragment].c_str());
@@ -5698,16 +5660,13 @@
     //
 
     // enumerate all the types
-    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint,
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
-        EbtFloat16
-#endif
-    };
 #ifdef GLSLANG_WEB
+    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint };
     bool skipBuffer = true;
     bool skipCubeArrayed = true;
     const int image = 0;
 #else
+    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, EbtFloat16 };
     bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
     bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
     for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
@@ -5733,12 +5692,7 @@
 #ifdef GLSLANG_WEB
                     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
                     for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
-#endif
                         if (dim == EsdSubpass && spvVersion.vulkan == 0)
                             continue;
                         if (dim == EsdSubpass && (image || shadow || arrayed))
@@ -6132,9 +6086,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     //
@@ -6211,8 +6162,8 @@
                                     continue;
 
                                 // 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
                                 for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
 #endif
@@ -6224,8 +6175,8 @@
                                         totalDims--;
                                     }
                                     // loop over "bool" lod clamp
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
-                                    const bool lodClamp = false;
+#ifdef GLSLANG_WEB
+                                    const int lodClamp = 0;
 #else
                                     for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
 #endif
@@ -6236,8 +6187,8 @@
                                             continue;
 
                                         // 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
                                         for (int sparse = 0; sparse <= 1; ++sparse)
 #endif
@@ -6420,9 +6371,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     switch (sampler.dim) {
@@ -6666,9 +6614,6 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 
     //
@@ -7097,7 +7042,6 @@
         s.append("\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // atomic counters (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 420)) {
@@ -7134,7 +7078,6 @@
 
         s.append("\n");
     }
-#endif // !GLSLANG_ANGLE
 
     // GL_ARB_cull_distance
     if (profile != EEsProfile && version >= 450) {
@@ -7151,7 +7094,6 @@
         s.append(builtInConstant);
     }
 
-#ifndef GLSLANG_ANGLE
     // SPV_NV_mesh_shader
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
@@ -7175,7 +7117,6 @@
         s.append("\n");
     }
 #endif
-#endif
 
     s.append("\n");
 }
@@ -7259,9 +7200,6 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 
     //
@@ -7451,7 +7389,7 @@
 
     case EShLangTessEvaluation:
     case EShLangGeometry:
-#endif // !GLSLANG_WEB
+#endif
         SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
         SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
 
@@ -7612,7 +7550,7 @@
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
-#endif // !GLSLANG_WEB
+#endif
         break;
 
     case EShLangFragment:
@@ -8118,7 +8056,7 @@
         }
 
         symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
-#endif // !GLSLANG_WEB
+#endif
         break;
 
     case EShLangCompute:
@@ -8250,10 +8188,10 @@
             symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
         }
-#endif // !GLSLANG_WEB
+#endif
         break;
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     case EShLangRayGen:
     case EShLangIntersect:
     case EShLangAnyHit:
@@ -9156,7 +9094,7 @@
     default:
         assert(false && "Language not supported");
     }
-#endif // !GLSLANG_WEB
+#endif
 }
 
 //
@@ -9171,10 +9109,6 @@
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
 {
 #ifndef GLSLANG_WEB
-#if defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
-#endif
     if (profile != EEsProfile && version >= 430 && version < 440) {
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index ba03332..bd3181a 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -49,15 +49,10 @@
 #include "SymbolTable.h"
 #include "ParseHelper.h"
 #include "attribute.h"
+#include "glslang_tab.cpp.h"
 #include "ScanContext.h"
 #include "Scan.h"
 
-#ifdef GLSLANG_ANGLE
-#include "glslang_angle_tab.cpp.h"
-#else
-#include "glslang_tab.cpp.h"
-#endif
-
 // preprocessor includes
 #include "preprocessor/PpContext.h"
 #include "preprocessor/PpTokens.h"
@@ -411,28 +406,25 @@
     (*KeywordMap)["uvec4"] =                   UVEC4;
 
 #ifndef GLSLANG_WEB
+    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
+    (*KeywordMap)["demote"] =                  DEMOTE;
     (*KeywordMap)["attribute"] =               ATTRIBUTE;
     (*KeywordMap)["varying"] =                 VARYING;
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
-    (*KeywordMap)["precise"] =                 PRECISE;
     (*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)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
     (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
     (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
     (*KeywordMap)["shadercallcoherent"] =      SHADERCALLCOHERENT;
     (*KeywordMap)["nonprivate"] =              NONPRIVATE;
+    (*KeywordMap)["restrict"] =                RESTRICT;
+    (*KeywordMap)["readonly"] =                READONLY;
+    (*KeywordMap)["writeonly"] =               WRITEONLY;
     (*KeywordMap)["atomic_uint"] =             ATOMIC_UINT;
+    (*KeywordMap)["volatile"] =                VOLATILE;
+    (*KeywordMap)["patch"] =                   PATCH;
+    (*KeywordMap)["sample"] =                  SAMPLE;
     (*KeywordMap)["subroutine"] =              SUBROUTINE;
     (*KeywordMap)["dmat2"] =                   DMAT2;
     (*KeywordMap)["dmat3"] =                   DMAT3;
@@ -449,10 +441,6 @@
     (*KeywordMap)["image1D"] =                 IMAGE1D;
     (*KeywordMap)["iimage1D"] =                IIMAGE1D;
     (*KeywordMap)["uimage1D"] =                UIMAGE1D;
-    (*KeywordMap)["image1DArray"] =            IMAGE1DARRAY;
-    (*KeywordMap)["iimage1DArray"] =           IIMAGE1DARRAY;
-    (*KeywordMap)["uimage1DArray"] =           UIMAGE1DARRAY;
-#endif
     (*KeywordMap)["image2D"] =                 IMAGE2D;
     (*KeywordMap)["iimage2D"] =                IIMAGE2D;
     (*KeywordMap)["uimage2D"] =                UIMAGE2D;
@@ -468,6 +456,9 @@
     (*KeywordMap)["imageBuffer"] =             IMAGEBUFFER;
     (*KeywordMap)["iimageBuffer"] =            IIMAGEBUFFER;
     (*KeywordMap)["uimageBuffer"] =            UIMAGEBUFFER;
+    (*KeywordMap)["image1DArray"] =            IMAGE1DARRAY;
+    (*KeywordMap)["iimage1DArray"] =           IIMAGE1DARRAY;
+    (*KeywordMap)["uimage1DArray"] =           UIMAGE1DARRAY;
     (*KeywordMap)["image2DArray"] =            IMAGE2DARRAY;
     (*KeywordMap)["iimage2DArray"] =           IIMAGE2DARRAY;
     (*KeywordMap)["uimage2DArray"] =           UIMAGE2DARRAY;
@@ -480,7 +471,6 @@
     (*KeywordMap)["image2DMSArray"] =          IMAGE2DMSARRAY;
     (*KeywordMap)["iimage2DMSArray"] =         IIMAGE2DMSARRAY;
     (*KeywordMap)["uimage2DMSArray"] =         UIMAGE2DMSARRAY;
-#ifndef GLSLANG_ANGLE
     (*KeywordMap)["double"] =                  DOUBLE;
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec3"] =                   DVEC3;
@@ -572,7 +562,6 @@
     (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
     (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
 #endif
-#endif
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
@@ -614,16 +603,11 @@
     (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
     (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
     (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
-#ifndef GLSLANG_ANGLE
-    (*KeywordMap)["sampler1D"] =               SAMPLER1D;
-    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
-    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
-    (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
-    (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
-    (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
-    (*KeywordMap)["sampler1DShadow"] =         SAMPLER1DSHADOW;
     (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
-#endif
+    (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
+    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
+    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
+    (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
     (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
     (*KeywordMap)["isampler2DRect"] =          ISAMPLER2DRECT;
     (*KeywordMap)["usampler2DRect"] =          USAMPLER2DRECT;
@@ -635,21 +619,20 @@
     (*KeywordMap)["sampler2DMSArray"] =        SAMPLER2DMSARRAY;
     (*KeywordMap)["isampler2DMSArray"] =       ISAMPLER2DMSARRAY;
     (*KeywordMap)["usampler2DMSArray"] =       USAMPLER2DMSARRAY;
+    (*KeywordMap)["sampler1D"] =               SAMPLER1D;
+    (*KeywordMap)["sampler1DShadow"] =         SAMPLER1DSHADOW;
     (*KeywordMap)["sampler2DRect"] =           SAMPLER2DRECT;
     (*KeywordMap)["sampler2DRectShadow"] =     SAMPLER2DRECTSHADOW;
+    (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
 
     (*KeywordMap)["samplerExternalOES"] =      SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
 
     (*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)["utexture1D"] =              UTEXTURE1D;
+    (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
     (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
-#endif
     (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
     (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
     (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
@@ -661,9 +644,10 @@
     (*KeywordMap)["texture2DMSArray"] =        TEXTURE2DMSARRAY;
     (*KeywordMap)["itexture2DMSArray"] =       ITEXTURE2DMSARRAY;
     (*KeywordMap)["utexture2DMSArray"] =       UTEXTURE2DMSARRAY;
+    (*KeywordMap)["texture1D"] =               TEXTURE1D;
     (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
+    (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
 
-#ifndef GLSLANG_ANGLE
     (*KeywordMap)["subpassInput"] =            SUBPASSINPUT;
     (*KeywordMap)["subpassInputMS"] =          SUBPASSINPUTMS;
     (*KeywordMap)["isubpassInput"] =           ISUBPASSINPUT;
@@ -718,6 +702,7 @@
     (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
     (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
     (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
+    (*KeywordMap)["precise"] =                 PRECISE;
 
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
     (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
@@ -739,7 +724,6 @@
     (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
     (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
-#endif
 
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
 
@@ -871,7 +855,7 @@
         case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
         case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
         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 PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
         case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
@@ -1020,17 +1004,16 @@
             return keyword;
         return es30ReservedFromGLSL(130);
 
-    case ATTRIBUTE:
-    case VARYING:
-        if (parseContext.isEsProfile() && parseContext.version >= 300)
-            reservedWord();
-        return keyword;
-#ifndef GLSLANG_ANGLE
     case NONUNIFORM:
         if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
             return keyword;
         else
             return identifierOrType();
+    case ATTRIBUTE:
+    case VARYING:
+        if (parseContext.isEsProfile() && parseContext.version >= 300)
+            reservedWord();
+        return keyword;
     case PAYLOADNV:
     case PAYLOADINNV:
     case HITATTRNV:
@@ -1064,17 +1047,13 @@
             return keyword;
         return es30ReservedFromGLSL(420);
 
-    case SUBROUTINE:
-        return es30ReservedFromGLSL(400);
-
+    case COHERENT:
     case DEVICECOHERENT:
     case QUEUEFAMILYCOHERENT:
     case WORKGROUPCOHERENT:
     case SUBGROUPCOHERENT:
     case SHADERCALLCOHERENT:
     case NONPRIVATE:
-#endif
-    case COHERENT:
     case RESTRICT:
     case READONLY:
     case WRITEONLY:
@@ -1103,6 +1082,9 @@
             parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
             return keyword;
         return es30ReservedFromGLSL(400);
+
+    case SUBROUTINE:
+        return es30ReservedFromGLSL(400);
 #endif
     case SHARED:
         if ((parseContext.isEsProfile() && parseContext.version < 300) ||
@@ -1139,7 +1121,6 @@
         return matNxM();
 
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     case DMAT2:
     case DMAT3:
     case DMAT4:
@@ -1160,7 +1141,6 @@
     case IMAGE1DARRAY:
     case IIMAGE1DARRAY:
     case UIMAGE1DARRAY:
-#endif
     case IMAGE2DRECT:
     case IIMAGE2DRECT:
     case UIMAGE2DRECT:
@@ -1209,7 +1189,6 @@
         afterType = true;
         return secondGenerationImage();
 
-#ifndef GLSLANG_ANGLE
     case DOUBLE:
     case DVEC2:
     case DVEC3:
@@ -1364,7 +1343,6 @@
             return keyword;
 
         return identifierOrType();
-#endif
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
@@ -1441,7 +1419,6 @@
             return identifierOrType();
 
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     case ISAMPLER1D:
     case ISAMPLER1DARRAY:
     case SAMPLER1DARRAYSHADOW:
@@ -1449,23 +1426,6 @@
     case USAMPLER1DARRAY:
         afterType = true;
         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 USAMPLER2DRECT:
         afterType = true;
@@ -1509,6 +1469,13 @@
             return keyword;
         return es30ReservedFromGLSL(150);
 
+    case SAMPLER1D:
+    case SAMPLER1DSHADOW:
+        afterType = true;
+        if (parseContext.isEsProfile())
+            reservedWord();
+        return keyword;
+
     case SAMPLER2DRECT:
     case SAMPLER2DRECTSHADOW:
         afterType = true;
@@ -1522,6 +1489,15 @@
         }
         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:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
@@ -1537,14 +1513,10 @@
             return keyword;
         return identifierOrType();
 
-#ifndef GLSLANG_ANGLE
-    case TEXTURE1D:
-    case ITEXTURE1D:
-    case UTEXTURE1D:
-    case TEXTURE1DARRAY:
     case ITEXTURE1DARRAY:
+    case UTEXTURE1D:
+    case ITEXTURE1D:
     case UTEXTURE1DARRAY:
-#endif
     case TEXTUREBUFFER:
     case ITEXTURE2DRECT:
     case UTEXTURE2DRECT:
@@ -1556,24 +1528,14 @@
     case TEXTURE2DMSARRAY:
     case ITEXTURE2DMSARRAY:
     case UTEXTURE2DMSARRAY:
+    case TEXTURE1D:
     case TEXTURE2DRECT:
+    case TEXTURE1DARRAY:
         if (parseContext.spvVersion.vulkan > 0)
             return keyword;
         else
             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 SUBPASSINPUTMS:
     case ISUBPASSINPUT:
@@ -1647,6 +1609,17 @@
             return keyword;
         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 PERVIEWNV:
     case PERTASKNV:
@@ -1677,7 +1650,6 @@
         else
             return identifierOrType();
 #endif
-#endif
 
     default:
         parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 9d7f37b..9c8610c 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -294,9 +294,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
@@ -318,9 +315,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
@@ -360,6 +354,7 @@
         (profile == EEsProfile && version >= 310))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
                                    infoSink, commonTable, symbolTables);
+#endif
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
@@ -367,7 +362,6 @@
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
                                    infoSink, commonTable, symbolTables);
 
-#ifndef GLSLANG_ANGLE
     // check for ray tracing stages
     if (profile != EEsProfile && version >= 450) {
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
@@ -395,8 +389,6 @@
         (profile == EEsProfile && version >= 320))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
                                    infoSink, commonTable, symbolTables);
-#endif // !GLSLANG_ANGLE
-#endif // !GLSLANG_WEB
 
     return true;
 }
@@ -498,7 +490,7 @@
 // Function to Print all builtins
 void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     infoSink.debug << "BuiltinSymbolTable {\n";
 
     symbolTable.dump(infoSink, true);
@@ -602,7 +594,7 @@
         break;
     }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     // Correct for stage type...
     switch (stage) {
     case EShLangGeometry:
@@ -878,7 +870,7 @@
                                 : userInput.scanVersion(version, profile, versionNotFirstToken);
     bool versionNotFound = version == 0;
     if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
             (version != defaultVersion || profile != defaultProfile)) {
             compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -901,13 +893,10 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     bool warnVersionNotFirst = false;
     if (! versionWillBeError && versionNotFirstToken) {
         if (messages & EShMsgRelaxedErrors)
@@ -977,7 +966,7 @@
     parseContext->setLimits(*resources);
     if (! goodVersion)
         parseContext->addError();
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     if (warnVersionNotFirst) {
         TSourceLoc loc;
         loc.init();
@@ -1014,7 +1003,7 @@
     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
 // the preprocessor and outputting newlines appropriately if the source string
@@ -1237,16 +1226,14 @@
             parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
         }
 
-#ifndef GLSLANG_ANGLE
         if (messages & EShMsgAST)
             intermediate.output(parseContext.infoSink, true);
-#endif
 
         return success;
     }
 };
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 // Take a single compilation unit, and run the preprocessor on it.
 // Return: True if there were no issues found in preprocessing,
 //         False if during preprocessing any unknown version, pragmas or
@@ -1886,7 +1873,7 @@
                            &environment);
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 // Fill in a string with the result of preprocessing ShaderStrings
 // Returns true if all extensions, pragmas and version strings were valid.
 //
@@ -1924,7 +1911,7 @@
 }
 
 TProgram::TProgram() :
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     reflection(0),
 #endif
     linked(false)
@@ -1940,7 +1927,7 @@
 TProgram::~TProgram()
 {
     delete infoSink;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     delete reflection;
 #endif
 
@@ -1987,7 +1974,7 @@
     if (stages[stage].size() == 0)
         return true;
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     int numEsShaders = 0, numNonEsShaders = 0;
     for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
         if ((*it)->intermediate->getProfile() == EEsProfile) {
@@ -2041,10 +2028,8 @@
 #endif
     intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
 
-#ifndef GLSLANG_ANGLE
     if (messages & EShMsgAST)
         intermediate[stage]->output(*infoSink, true);
-#endif
 
     return intermediate[stage]->getNumErrors() == 0;
 }
@@ -2059,7 +2044,7 @@
     return infoSink->debug.c_str();
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 //
 // Reflection implementation.
@@ -2141,6 +2126,6 @@
     return ioMapper->doMap(pResolver, *infoSink);
 }
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 007f22c..06b5a81 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -178,7 +178,7 @@
     }
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 //
 // Dump functions.
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index ec4bc3c..40ca3da 100644
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -117,7 +117,7 @@
     virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); }
     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;
     void dumpExtensions(TInfoSink& infoSink) const;
 #endif
@@ -196,7 +196,7 @@
     }
     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;
 #endif
 
@@ -319,7 +319,7 @@
     virtual TParameter& operator[](int i) { assert(writable); 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;
 #endif
 
@@ -381,7 +381,7 @@
     virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); }
 
     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;
 #endif
 
@@ -551,7 +551,7 @@
 
     void relateToOperator(const char* name, TOperator op);
     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;
 #endif
     TSymbolTableLevel* clone() const;
@@ -854,7 +854,7 @@
     }
 
     int getMaxSymbolId() { return uniqueId; }
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
     void copyTable(const TSymbolTable& copyOf);
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index f42b17c..1432bf6 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -58,16 +58,10 @@
 //
 //    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_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
  * GLSL shading languages.
@@ -183,9 +177,6 @@
 GLSLANG_WEB_EXCLUDE_ON
 
 %token <lex> ATTRIBUTE VARYING
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %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> I64VEC2 I64VEC3 I64VEC4
@@ -218,31 +209,23 @@
 %token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %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
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
-%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
-
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 // images
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
@@ -255,14 +238,10 @@
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 // texture without sampler
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@@ -272,8 +251,6 @@
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
 %token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
 %token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
@@ -282,8 +259,6 @@
 %token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
 %token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
 
-GLSLANG_ANGLE_EXCLUDE_OFF
-
 GLSLANG_WEB_EXCLUDE_OFF
 
 %token <lex> LEFT_OP RIGHT_OP
@@ -310,26 +285,16 @@
 %token <lex> FLAT SMOOTH LAYOUT
 
 GLSLANG_WEB_EXCLUDE_ON
-
-GLSLANG_ANGLE_EXCLUDE_ON
-
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
 %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> 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
-
 GLSLANG_WEB_EXCLUDE_OFF
 
 %type <interm> assignment_operator unary_operator
@@ -378,19 +343,11 @@
 %type <interm.identifierList> identifier_list
 
 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.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
 %type <interm.intermTypedNode> initializer_list
-
 GLSLANG_WEB_EXCLUDE_OFF
 
 %start translation_unit
@@ -425,7 +382,6 @@
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | STRING_LITERAL {
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
     }
@@ -463,7 +419,6 @@
         parseContext.float16Check($1.loc, "half float literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -591,13 +546,11 @@
         }
     }
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | non_uniform_qualifier {
         // Constructor
         $$.intermNode = 0;
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -1254,7 +1207,6 @@
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | EXPLICITINTERPAMD {
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -1294,7 +1246,6 @@
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -1379,11 +1330,9 @@
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | non_uniform_qualifier {
         $$ = $1;
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -1472,7 +1421,6 @@
         $$.init($1.loc);
         $$.qualifier.sample = true;
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -1551,6 +1499,10 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqCallableDataIn;
     }
+    | COHERENT {
+        $$.init($1.loc);
+        $$.qualifier.coherent = true;
+    }
     | DEVICECOHERENT {
         $$.init($1.loc);
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
@@ -1581,23 +1533,6 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         $$.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 {
         $$.init($1.loc);
         $$.qualifier.volatil = true;
@@ -1614,18 +1549,28 @@
         $$.init($1.loc);
         $$.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_ON
-GLSLANG_ANGLE_EXCLUDE_ON
 non_uniform_qualifier
     : NONUNIFORM {
         $$.init($1.loc);
         $$.qualifier.nonUniform = true;
     }
     ;
-GLSLANG_ANGLE_EXCLUDE_OFF
 
 type_name_list
     : IDENTIFIER {
@@ -1859,7 +1804,6 @@
         $$.setMatrix(4, 4);
     }
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | DOUBLE {
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -2478,7 +2422,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D);
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2516,17 +2459,6 @@
         $$.sampler.set(EbtFloat, Esd2D, true, true);
     }
 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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2542,6 +2474,16 @@
         $$.basicType = EbtSampler;
         $$.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 {
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2625,7 +2567,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd1D);
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2663,11 +2604,26 @@
         $$.sampler.set(EbtUint, EsdCube);
     }
 GLSLANG_WEB_EXCLUDE_ON
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
     | ISAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2688,23 +2644,6 @@
         $$.basicType = EbtSampler;
         $$.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
     | USAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2792,6 +2731,18 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2807,6 +2758,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2822,6 +2779,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2837,6 +2800,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2847,129 +2816,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
     }
-GLSLANG_ANGLE_EXCLUDE_ON
-    | 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);
-    }
-    | F16SAMPLERBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdBuffer);
-    }
-    | 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);
-    }
-    | 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);
-    }
     | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd1D);
     }
-    | TEXTURE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd1D, true);
-    }
-    | ITEXTURE1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd1D);
-    }
-    | ITEXTURE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd1D, true);
-    }
-    | UTEXTURE1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd1D);
-    }
-    | UTEXTURE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd1D, true);
-    }
-GLSLANG_ANGLE_EXCLUDE_OFF
-    | 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);
-    }
-GLSLANG_ANGLE_EXCLUDE_ON
     | F16TEXTURE1D {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2994,6 +2845,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdCube);
     }
+    | TEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd1D, true);
+    }
     | F16TEXTURE1DARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3012,35 +2868,121 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdCube, true);
     }
+    | ITEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd1D);
+    }
+    | ITEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd1D, true);
+    }
+    | UTEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd1D);
+    }
+    | UTEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd1D, true);
+    }
+    | TEXTURE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.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 {
+        $$.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);
+    }
     | F16TEXTUREBUFFER {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, 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);
+    }
     | 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 {
+        $$.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);
+    }
     | F16TEXTURE2DMSARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, 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);
+    }
     | IMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd1D);
     }
+    | F16IMAGE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D);
+    }
     | IIMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3051,12 +2993,17 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtUint, Esd1D);
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
     | IMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3072,6 +3019,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3087,6 +3040,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3102,6 +3061,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3117,6 +3082,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3132,6 +3103,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3147,6 +3124,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3162,6 +3145,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3177,6 +3166,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3192,6 +3187,12 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
+    | F16IMAGE2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+    }
     | IIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3202,74 +3203,6 @@
         $$.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 {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdCube, 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);
-    }
-    | F16IMAGE2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
-    }
-GLSLANG_ANGLE_EXCLUDE_OFF
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3282,7 +3215,6 @@
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
     }
-GLSLANG_ANGLE_EXCLUDE_ON
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3351,7 +3283,6 @@
         $$.basicType = EbtUint;
         $$.coopmat = true;
     }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | struct_specifier {
         $$ = $1;
@@ -3554,14 +3485,11 @@
     | iteration_statement   { $$ = $1; }
     | jump_statement        { $$ = $1; }
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
     | demote_statement      { $$ = $1; }
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
 GLSLANG_WEB_EXCLUDE_ON
-GLSLANG_ANGLE_EXCLUDE_ON
 demote_statement
     : DEMOTE SEMICOLON {
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
@@ -3569,7 +3497,6 @@
         $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
     }
     ;
-GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
 
 compound_statement
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 0a25963..e33d7d1 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -58,12 +58,6 @@
 //
 //    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 @@
 
 
 %token <lex> ATTRIBUTE VARYING
-
-
-
 %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> I64VEC2 I64VEC3 I64VEC4
@@ -218,31 +209,23 @@
 %token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
-
-
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %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
-
-
-
-%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
-
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 
-
-
 // images
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
@@ -255,14 +238,10 @@
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 
-
-
 %token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
-
-
 // texture without sampler
 %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@@ -272,8 +251,6 @@
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
-
-
 %token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
 %token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
 %token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
@@ -284,8 +261,6 @@
 
 
 
-
-
 %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
@@ -310,28 +285,18 @@
 %token <lex> FLAT SMOOTH LAYOUT
 
 
-
-
-
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
 %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> 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
 
 
-
 %type <interm> assignment_operator unary_operator
 %type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
 %type <interm.intermTypedNode> expression integer_expression assignment_expression
@@ -378,21 +343,13 @@
 %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.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
 %type <interm.intermTypedNode> initializer_list
 
 
-
 %start translation_unit
 %%
 
@@ -425,7 +382,6 @@
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
 
-
     | STRING_LITERAL {
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
     }
@@ -464,7 +420,6 @@
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
 
-
     ;
 
 postfix_expression
@@ -591,14 +546,12 @@
         }
     }
 
-
     | non_uniform_qualifier {
         // Constructor
         $$.intermNode = 0;
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
     }
 
-
     ;
 
 unary_expression
@@ -1254,7 +1207,6 @@
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
     }
-
     | EXPLICITINTERPAMD {
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -1295,7 +1247,6 @@
         $$.qualifier.perTaskNV = true;
     }
 
-
     ;
 
 layout_qualifier
@@ -1379,12 +1330,10 @@
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
     }
-
     | non_uniform_qualifier {
         $$ = $1;
     }
 
-
     ;
 
 storage_qualifier
@@ -1472,7 +1421,6 @@
         $$.init($1.loc);
         $$.qualifier.sample = true;
     }
-
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -1551,6 +1499,10 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqCallableDataIn;
     }
+    | COHERENT {
+        $$.init($1.loc);
+        $$.qualifier.coherent = true;
+    }
     | DEVICECOHERENT {
         $$.init($1.loc);
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
@@ -1581,23 +1533,6 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         $$.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 {
         $$.init($1.loc);
         $$.qualifier.volatil = true;
@@ -1614,11 +1549,22 @@
         $$.init($1.loc);
         $$.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
     : NONUNIFORM {
         $$.init($1.loc);
@@ -1626,7 +1572,6 @@
     }
     ;
 
-
 type_name_list
     : IDENTIFIER {
         // TODO
@@ -1859,7 +1804,6 @@
         $$.setMatrix(4, 4);
     }
 
-
     | DOUBLE {
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -2479,7 +2423,6 @@
         $$.sampler.set(EbtFloat, Esd1D);
     }
 
-
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2516,17 +2459,6 @@
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2542,6 +2474,16 @@
         $$.basicType = EbtSampler;
         $$.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 {
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2626,7 +2568,6 @@
         $$.sampler.set(EbtInt, Esd1D);
     }
 
-
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2663,11 +2604,26 @@
         $$.sampler.set(EbtUint, EsdCube);
     }
 
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
     | ISAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2689,23 +2645,6 @@
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2792,6 +2731,18 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2807,6 +2758,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2822,6 +2779,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2837,6 +2800,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2847,129 +2816,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, 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);
-    }
-    | F16SAMPLERBUFFER {
-        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat16, EsdBuffer);
-    }
-    | 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);
-    }
-    | 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);
-    }
     | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd1D);
     }
-    | TEXTURE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd1D, true);
-    }
-    | ITEXTURE1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd1D);
-    }
-    | ITEXTURE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd1D, true);
-    }
-    | UTEXTURE1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd1D);
-    }
-    | UTEXTURE1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd1D, 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);
-    }
-
     | F16TEXTURE1D {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2994,6 +2845,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdCube);
     }
+    | TEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd1D, true);
+    }
     | F16TEXTURE1DARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3012,35 +2868,121 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdCube, true);
     }
+    | ITEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd1D);
+    }
+    | ITEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd1D, true);
+    }
+    | UTEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd1D);
+    }
+    | UTEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd1D, true);
+    }
+    | TEXTURE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.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 {
+        $$.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);
+    }
     | F16TEXTUREBUFFER {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, 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);
+    }
     | 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 {
+        $$.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);
+    }
     | F16TEXTURE2DMSARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, 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);
+    }
     | IMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd1D);
     }
+    | F16IMAGE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D);
+    }
     | IIMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3051,12 +2993,17 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtUint, Esd1D);
     }
-
     | IMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3072,6 +3019,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3087,6 +3040,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3102,6 +3061,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3117,6 +3082,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3132,6 +3103,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3147,6 +3124,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3162,6 +3145,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3177,6 +3166,12 @@
         $$.basicType = EbtSampler;
         $$.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 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3192,6 +3187,12 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
+    | F16IMAGE2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+    }
     | IIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3202,74 +3203,6 @@
         $$.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 {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, EsdCube, 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);
-    }
-    | F16IMAGE2DMSARRAY {
-        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
-    }
-
     | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3282,7 +3215,6 @@
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
     }
-
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3352,7 +3284,6 @@
         $$.coopmat = true;
     }
 
-
     | struct_specifier {
         $$ = $1;
         $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3554,14 +3485,11 @@
     | iteration_statement   { $$ = $1; }
     | jump_statement        { $$ = $1; }
 
-
     | demote_statement      { $$ = $1; }
 
-
     ;
 
 
-
 demote_statement
     : DEMOTE SEMICOLON {
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
@@ -3571,7 +3499,6 @@
     ;
 
 
-
 compound_statement
     : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
     | LEFT_BRACE {
@@ -3958,3 +3885,4 @@
 
 
 %%
+
diff --git a/glslang/MachineIndependent/glslang_angle.y b/glslang/MachineIndependent/glslang_angle.y
deleted file mode 100644
index 81edc06..0000000
--- a/glslang/MachineIndependent/glslang_angle.y
+++ /dev/null
@@ -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);
-    }
-
-
-%%
diff --git a/glslang/MachineIndependent/glslang_angle_tab.cpp b/glslang/MachineIndependent/glslang_angle_tab.cpp
deleted file mode 100644
index 26c1047..0000000
--- a/glslang/MachineIndependent/glslang_angle_tab.cpp
+++ /dev/null
@@ -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"
-
diff --git a/glslang/MachineIndependent/glslang_angle_tab.cpp.h b/glslang/MachineIndependent/glslang_angle_tab.cpp.h
deleted file mode 100644
index 9d6721a..0000000
--- a/glslang/MachineIndependent/glslang_angle_tab.cpp.h
+++ /dev/null
@@ -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  */
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 8462e40..69f7f8e 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -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 implementation 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
    it under the terms of the GNU General Public License as published by
@@ -41,14 +40,11 @@
    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"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -65,8 +61,8 @@
 
 
 
-/* First part of user prologue.  */
-#line 75 "MachineIndependent/glslang.y"
+/* Copy the first part of user declarations.  */
+#line 69 "glslang.y" /* yacc.c:339  */
 
 
 /* Based on:
@@ -92,26 +88,13 @@
 using namespace glslang;
 
 
-#line 96 "MachineIndependent/glslang_tab.cpp"
+#line 92 "glslang_tab.cpp" /* yacc.c:339  */
 
-# 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
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULLPTR ((void*)0)
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
@@ -123,10 +106,10 @@
 # define YYERROR_VERBOSE 1
 #endif
 
-/* Use api.header.include to #include this header
-   instead of duplicating it here.  */
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+/* In a future release of Bison, this section will be replaced
+   by #include "glslang_tab.cpp.h".  */
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -307,26 +290,26 @@
     SAMPLERCUBEARRAYSHADOW = 422,
     ISAMPLERCUBEARRAY = 423,
     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,
     USAMPLER1D = 446,
     USAMPLER1DARRAY = 447,
@@ -536,35 +519,36 @@
     HITATTREXT = 651,
     CALLDATAEXT = 652,
     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
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
 union YYSTYPE
 {
-#line 103 "MachineIndependent/glslang.y"
+#line 97 "glslang.y" /* yacc.c:355  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -600,9 +584,9 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 604 "MachineIndependent/glslang_tab.cpp"
-
+#line 588 "glslang_tab.cpp" /* yacc.c:355  */
 };
+
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -612,10 +596,10 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
 
-/* Second part of user prologue.  */
-#line 139 "MachineIndependent/glslang.y"
+/* Copy the second part of user declarations.  */
+#line 133 "glslang.y" /* yacc.c:358  */
 
 
 /* windows only pragma */
@@ -631,82 +615,34 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 635 "MachineIndependent/glslang_tab.cpp"
-
+#line 619 "glslang_tab.cpp" /* yacc.c:358  */
 
 #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
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
 #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;
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 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;
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
 #else
-typedef short yytype_int16;
+typedef unsigned short int yytype_uint16;
 #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;
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
 #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
+typedef short int yytype_int16;
 #endif
 
 #ifndef YYSIZE_T
@@ -714,27 +650,15 @@
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned
+#  define YYSIZE_T unsigned int
 # 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;
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -748,19 +672,30 @@
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE_PURE
-# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
 # else
-#  define YY_ATTRIBUTE_PURE
+#  define YY_ATTRIBUTE(Spec) /* empty */
 # endif
 #endif
 
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
 #ifndef YY_ATTRIBUTE_UNUSED
-# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
 # else
-#  define YY_ATTRIBUTE_UNUSED
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
 # endif
 #endif
 
@@ -771,13 +706,13 @@
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && 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\"")              \
+# 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      \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
     _Pragma ("GCC diagnostic pop")
 #else
 # define YY_INITIAL_VALUE(Value) Value
@@ -790,20 +725,6 @@
 # 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
 
@@ -880,17 +801,17 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yy_state_t yyss_alloc;
+  yytype_int16 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)
+# define YYSTACK_GAP_MAXIMUM (sizeof (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)) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -903,11 +824,11 @@
 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     do                                                                  \
       {                                                                 \
-        YYPTRDIFF_T yynewbytes;                                         \
+        YYSIZE_T yynewbytes;                                            \
         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
         Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
       }                                                                 \
     while (0)
 
@@ -919,12 +840,12 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYPTRDIFF_T yyi;                      \
+          YYSIZE_T yyi;                         \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
@@ -936,7 +857,7 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  394
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9538
+#define YYLAST   9550
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  420
@@ -947,18 +868,17 @@
 /* YYNSTATES -- Number of states.  */
 #define YYNSTATES  736
 
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   674
 
-
-/* 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)
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex.  */
-static const yytype_int16 yytranslate[] =
+   as returned by yylex, without out-of-bounds checking.  */
+static const yytype_uint16 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1032,68 +952,68 @@
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_int16 yyrline[] =
+static const yytype_uint16 yyrline[] =
 {
-       0,   400,   400,   406,   409,   414,   417,   420,   424,   429,
-     432,   436,   440,   444,   448,   452,   456,   462,   471,   474,
-     477,   480,   483,   488,   496,   503,   510,   516,   520,   527,
-     530,   536,   543,   553,   561,   566,   595,   605,   611,   615,
-     619,   639,   640,   641,   642,   648,   649,   654,   659,   668,
-     669,   674,   682,   683,   689,   698,   699,   704,   709,   714,
-     722,   723,   732,   744,   745,   754,   755,   764,   765,   774,
-     775,   783,   784,   792,   793,   801,   802,   802,   820,   821,
-     837,   841,   845,   849,   854,   858,   862,   866,   870,   874,
-     878,   885,   888,   899,   906,   911,   916,   923,   927,   931,
-     935,   940,   945,   954,   954,   965,   969,   976,   983,   986,
-     993,  1001,  1021,  1044,  1059,  1084,  1095,  1105,  1115,  1125,
-    1134,  1137,  1141,  1145,  1150,  1158,  1165,  1170,  1175,  1180,
-    1189,  1199,  1226,  1235,  1242,  1250,  1258,  1265,  1273,  1283,
-    1290,  1302,  1308,  1311,  1318,  1322,  1326,  1335,  1345,  1348,
-    1359,  1362,  1365,  1369,  1373,  1378,  1383,  1391,  1395,  1400,
-    1406,  1412,  1419,  1424,  1432,  1438,  1450,  1464,  1470,  1476,
-    1484,  1492,  1500,  1508,  1516,  1524,  1532,  1540,  1547,  1554,
-    1559,  1564,  1569,  1574,  1579,  1584,  1590,  1597,  1601,  1605,
-    1609,  1613,  1623,  1631,  1634,  1643,  1648,  1658,  1663,  1671,
-    1675,  1685,  1688,  1694,  1700,  1707,  1717,  1721,  1725,  1729,
-    1734,  1738,  1743,  1748,  1753,  1758,  1763,  1768,  1773,  1778,
-    1783,  1789,  1795,  1801,  1806,  1811,  1816,  1821,  1826,  1831,
-    1836,  1841,  1846,  1851,  1856,  1863,  1870,  1875,  1880,  1885,
-    1890,  1895,  1900,  1905,  1910,  1915,  1920,  1925,  1933,  1941,
-    1949,  1955,  1961,  1967,  1973,  1979,  1985,  1991,  1997,  2003,
-    2009,  2015,  2021,  2027,  2033,  2039,  2045,  2051,  2057,  2063,
-    2069,  2075,  2081,  2087,  2093,  2099,  2105,  2111,  2117,  2123,
-    2129,  2135,  2141,  2147,  2155,  2163,  2171,  2179,  2187,  2195,
-    2203,  2211,  2219,  2227,  2235,  2243,  2249,  2255,  2261,  2267,
-    2273,  2279,  2285,  2291,  2297,  2303,  2309,  2315,  2321,  2327,
-    2333,  2339,  2345,  2351,  2357,  2363,  2369,  2375,  2381,  2387,
-    2393,  2399,  2405,  2411,  2417,  2423,  2429,  2435,  2441,  2447,
-    2453,  2459,  2463,  2467,  2471,  2476,  2483,  2488,  2493,  2498,
-    2503,  2508,  2513,  2519,  2524,  2530,  2535,  2540,  2545,  2551,
-    2557,  2563,  2569,  2575,  2581,  2587,  2593,  2599,  2605,  2611,
-    2617,  2623,  2630,  2635,  2640,  2645,  2650,  2655,  2660,  2666,
-    2671,  2676,  2681,  2686,  2692,  2697,  2702,  2709,  2714,  2719,
-    2724,  2729,  2734,  2739,  2744,  2749,  2754,  2759,  2764,  2769,
-    2774,  2779,  2785,  2790,  2795,  2800,  2805,  2810,  2815,  2820,
-    2825,  2830,  2835,  2840,  2845,  2851,  2857,  2863,  2869,  2875,
-    2881,  2886,  2891,  2896,  2901,  2906,  2912,  2917,  2922,  2927,
-    2932,  2937,  2942,  2947,  2952,  2957,  2962,  2967,  2973,  2979,
-    2985,  2991,  2997,  3003,  3009,  3015,  3021,  3027,  3033,  3039,
-    3044,  3049,  3055,  3060,  3065,  3070,  3075,  3080,  3085,  3090,
-    3095,  3100,  3105,  3110,  3115,  3120,  3125,  3130,  3135,  3140,
-    3145,  3150,  3155,  3160,  3165,  3170,  3175,  3180,  3185,  3190,
-    3195,  3200,  3206,  3212,  3218,  3224,  3230,  3236,  3242,  3248,
-    3254,  3260,  3266,  3273,  3279,  3286,  3292,  3298,  3305,  3312,
-    3318,  3324,  3330,  3336,  3342,  3348,  3356,  3361,  3377,  3382,
-    3387,  3395,  3395,  3406,  3406,  3416,  3419,  3432,  3454,  3481,
-    3485,  3491,  3496,  3507,  3511,  3517,  3528,  3531,  3538,  3542,
-    3543,  3549,  3550,  3551,  3552,  3553,  3554,  3555,  3558,  3566,
-    3576,  3577,  3581,  3577,  3593,  3594,  3598,  3598,  3605,  3605,
-    3619,  3622,  3630,  3638,  3649,  3650,  3654,  3658,  3665,  3672,
-    3676,  3684,  3688,  3701,  3705,  3712,  3712,  3732,  3735,  3741,
-    3753,  3765,  3769,  3776,  3776,  3791,  3791,  3807,  3807,  3828,
-    3831,  3837,  3840,  3846,  3850,  3857,  3862,  3867,  3874,  3877,
-    3886,  3890,  3899,  3902,  3906,  3915,  3915,  3938,  3944,  3947,
-    3952,  3955
+       0,   357,   357,   363,   366,   371,   374,   377,   381,   385,
+     388,   392,   396,   400,   404,   408,   412,   418,   426,   429,
+     432,   435,   438,   443,   451,   458,   465,   471,   475,   482,
+     485,   491,   498,   508,   516,   521,   549,   558,   564,   568,
+     572,   592,   593,   594,   595,   601,   602,   607,   612,   621,
+     622,   627,   635,   636,   642,   651,   652,   657,   662,   667,
+     675,   676,   685,   697,   698,   707,   708,   717,   718,   727,
+     728,   736,   737,   745,   746,   754,   755,   755,   773,   774,
+     790,   794,   798,   802,   807,   811,   815,   819,   823,   827,
+     831,   838,   841,   852,   859,   864,   869,   876,   880,   884,
+     888,   893,   898,   907,   907,   918,   922,   929,   936,   939,
+     946,   954,   974,   997,  1012,  1037,  1048,  1058,  1068,  1078,
+    1087,  1090,  1094,  1098,  1103,  1111,  1118,  1123,  1128,  1133,
+    1142,  1152,  1179,  1188,  1195,  1203,  1210,  1217,  1225,  1235,
+    1242,  1253,  1259,  1262,  1269,  1273,  1277,  1286,  1296,  1299,
+    1310,  1313,  1316,  1320,  1324,  1329,  1333,  1340,  1344,  1349,
+    1355,  1361,  1368,  1373,  1381,  1387,  1399,  1413,  1419,  1424,
+    1432,  1440,  1448,  1456,  1464,  1472,  1480,  1488,  1495,  1502,
+    1506,  1511,  1516,  1521,  1526,  1531,  1536,  1540,  1544,  1548,
+    1552,  1558,  1569,  1576,  1579,  1588,  1593,  1603,  1608,  1616,
+    1620,  1630,  1633,  1639,  1645,  1652,  1662,  1666,  1670,  1674,
+    1679,  1683,  1688,  1693,  1698,  1703,  1708,  1713,  1718,  1723,
+    1728,  1734,  1740,  1746,  1751,  1756,  1761,  1766,  1771,  1776,
+    1781,  1786,  1791,  1796,  1801,  1807,  1814,  1819,  1824,  1829,
+    1834,  1839,  1844,  1849,  1854,  1859,  1864,  1869,  1877,  1885,
+    1893,  1899,  1905,  1911,  1917,  1923,  1929,  1935,  1941,  1947,
+    1953,  1959,  1965,  1971,  1977,  1983,  1989,  1995,  2001,  2007,
+    2013,  2019,  2025,  2031,  2037,  2043,  2049,  2055,  2061,  2067,
+    2073,  2079,  2085,  2091,  2099,  2107,  2115,  2123,  2131,  2139,
+    2147,  2155,  2163,  2171,  2179,  2187,  2193,  2199,  2205,  2211,
+    2217,  2223,  2229,  2235,  2241,  2247,  2253,  2259,  2265,  2271,
+    2277,  2283,  2289,  2295,  2301,  2307,  2313,  2319,  2325,  2331,
+    2337,  2343,  2349,  2355,  2361,  2367,  2373,  2379,  2385,  2391,
+    2397,  2403,  2407,  2411,  2415,  2420,  2426,  2431,  2436,  2441,
+    2446,  2451,  2456,  2462,  2467,  2472,  2477,  2482,  2487,  2493,
+    2499,  2505,  2511,  2517,  2523,  2529,  2535,  2541,  2547,  2553,
+    2559,  2565,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2607,
+    2612,  2617,  2622,  2627,  2632,  2637,  2642,  2648,  2653,  2658,
+    2663,  2668,  2673,  2678,  2683,  2688,  2693,  2698,  2703,  2708,
+    2713,  2718,  2724,  2729,  2734,  2740,  2746,  2751,  2756,  2761,
+    2767,  2772,  2777,  2782,  2788,  2793,  2798,  2803,  2809,  2814,
+    2819,  2824,  2830,  2836,  2842,  2848,  2853,  2859,  2865,  2871,
+    2876,  2881,  2886,  2891,  2896,  2902,  2907,  2912,  2917,  2923,
+    2928,  2933,  2938,  2944,  2949,  2954,  2959,  2965,  2970,  2975,
+    2980,  2986,  2991,  2996,  3001,  3007,  3012,  3017,  3022,  3028,
+    3033,  3038,  3043,  3049,  3054,  3059,  3064,  3070,  3075,  3080,
+    3085,  3091,  3096,  3101,  3106,  3112,  3117,  3122,  3127,  3133,
+    3138,  3143,  3148,  3154,  3159,  3164,  3169,  3175,  3180,  3185,
+    3190,  3196,  3201,  3206,  3212,  3218,  3224,  3230,  3237,  3244,
+    3250,  3256,  3262,  3268,  3274,  3280,  3287,  3292,  3308,  3313,
+    3318,  3326,  3326,  3337,  3337,  3347,  3350,  3363,  3385,  3412,
+    3416,  3422,  3427,  3438,  3442,  3448,  3459,  3462,  3469,  3473,
+    3474,  3480,  3481,  3482,  3483,  3484,  3485,  3486,  3488,  3494,
+    3503,  3504,  3508,  3504,  3520,  3521,  3525,  3525,  3532,  3532,
+    3546,  3549,  3557,  3565,  3576,  3577,  3581,  3585,  3592,  3599,
+    3603,  3611,  3615,  3628,  3632,  3639,  3639,  3659,  3662,  3668,
+    3680,  3692,  3696,  3703,  3703,  3718,  3718,  3734,  3734,  3755,
+    3758,  3764,  3767,  3773,  3777,  3784,  3789,  3794,  3801,  3804,
+    3813,  3817,  3826,  3829,  3833,  3842,  3842,  3865,  3871,  3874,
+    3879,  3882
 };
 #endif
 
@@ -1133,14 +1053,14 @@
   "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT",
   "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "SAMPLERCUBEARRAY",
   "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
-  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
-  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
-  "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS", "SAMPLER2DMSARRAY",
-  "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES",
-  "SAMPLEREXTERNAL2DY2YEXT", "SAMPLER1D", "SAMPLER1DARRAY",
-  "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW",
-  "ISAMPLER1DARRAY", "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D",
-  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D",
+  "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
+  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
+  "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
+  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
+  "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY",
+  "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D",
+  "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
   "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
   "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
   "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
@@ -1185,15 +1105,15 @@
   "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
   "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
   "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT",
-  "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT",
-  "NONUNIFORM", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
+  "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH",
+  "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
+  "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
   "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE",
-  "SHADERCALLCOHERENT", "EXPLICITINTERPAMD", "PERVERTEXNV",
-  "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "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",
+  "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD",
+  "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "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",
@@ -1236,7 +1156,7 @@
 # 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[] =
+static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -1283,14 +1203,14 @@
 };
 # endif
 
-#define YYPACT_NINF (-457)
+#define YYPACT_NINF -457
 
-#define yypact_value_is_default(Yyn) \
-  ((Yyn) == YYPACT_NINF)
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-457)))
 
-#define YYTABLE_NINF (-537)
+#define YYTABLE_NINF -537
 
-#define yytable_value_is_error(Yyn) \
+#define yytable_value_is_error(Yytable_value) \
   0
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -1336,47 +1256,47 @@
     -457,  -457,    50,  -457,  -457,   739,  -457,  -457,    16,  -457,
       81,   -29,    69,  -457,  -313,  -457,   111,  -457,  6160,  -457,
     -457,  -457,  6160,   103,   106,  -457,  -314,  -457,    72,  -457,
-    -457,  8556,   142,  -457,  -457,  -457,   136,  6160,  -457,   144,
-    -457,    53,  -457,  -457,    76,  6972,  -457,  -312,  1156,  -457,
-    -457,  -457,  -457,   142,  -309,  -457,  7368,  -308,  -457,   119,
-    -457,    65,  8556,  8556,  -457,  8556,  -457,  -457,  -457,  -457,
+    -457,  8566,   142,  -457,  -457,  -457,   136,  6160,  -457,   144,
+    -457,    53,  -457,  -457,    76,  6974,  -457,  -312,  1156,  -457,
+    -457,  -457,  -457,   142,  -309,  -457,  7372,  -308,  -457,   119,
+    -457,    65,  8566,  8566,  -457,  8566,  -457,  -457,  -457,  -457,
     -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
     -457,  -457,  -457,  -457,  -457,    36,  -457,  -457,  -457,   171,
-      85,  8952,   173,  -457,  8556,  -457,  -457,  -323,   174,  -457,
-    6160,   139,  4909,  -457,  6160,  8556,  -457,   -29,  -457,   141,
+      85,  8964,   173,  -457,  8566,  -457,  -457,  -323,   174,  -457,
+    6160,   139,  4909,  -457,  6160,  8566,  -457,   -29,  -457,   141,
     -457,  -457,   145,    99,    35,    26,    71,   156,   159,   161,
-     196,   195,    23,   181,  7764,  -457,   183,   182,  -457,  -457,
-     186,   179,   180,  -457,   191,   192,   187,  8160,   193,  8556,
+     196,   195,    23,   181,  7770,  -457,   183,   182,  -457,  -457,
+     186,   179,   180,  -457,   191,   192,   187,  8168,   193,  8566,
      188,   189,   127,  -457,  -457,    96,  -457,  -249,   200,   201,
     -457,  -457,  -457,  -457,  -457,  1573,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,   -24,   174,  7368,    13,  7368,
-    -457,  -457,  7368,  6160,  -457,   166,  -457,  -457,  -457,    86,
-    -457,  -457,  8556,   168,  -457,  -457,  8556,   205,  -457,  -457,
-    -457,  8556,  -457,   139,   142,   124,  -457,  -457,  -457,  5326,
-    -457,  -457,  -457,  -457,  8556,  8556,  8556,  8556,  8556,  8556,
-    8556,  8556,  8556,  8556,  8556,  8556,  8556,  8556,  8556,  8556,
-    8556,  8556,  8556,  -457,  -457,  -457,   206,   172,  -457,  1990,
-    -457,  -457,  -457,  1990,  -457,  8556,  -457,  -457,   130,  8556,
+    -457,  -457,  -457,  -457,  -457,   -24,   174,  7372,    13,  7372,
+    -457,  -457,  7372,  6160,  -457,   166,  -457,  -457,  -457,    86,
+    -457,  -457,  8566,   168,  -457,  -457,  8566,   205,  -457,  -457,
+    -457,  8566,  -457,   139,   142,   124,  -457,  -457,  -457,  5326,
+    -457,  -457,  -457,  -457,  8566,  8566,  8566,  8566,  8566,  8566,
+    8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,
+    8566,  8566,  8566,  -457,  -457,  -457,   206,   172,  -457,  1990,
+    -457,  -457,  -457,  1990,  -457,  8566,  -457,  -457,   130,  8566,
      125,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  8556,  8556,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  7368,  -457,    94,  -457,  5743,  -457,  -457,
+    -457,  -457,  -457,  -457,  8566,  8566,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  7372,  -457,    94,  -457,  5743,  -457,  -457,
      207,   204,  -457,  -457,  -457,   131,   174,   139,  -457,  -457,
     -457,  -457,  -457,   145,   145,    99,    99,    35,    35,    35,
-      35,    26,    26,    71,   156,   159,   161,   196,   195,  8556,
+      35,    26,    26,    71,   156,   159,   161,   196,   195,  8566,
     -457,   212,    60,  -457,  1990,  3658,   169,  3241,    87,  -457,
       89,  -457,  -457,  -457,  -457,  -457,  6576,  -457,  -457,  -457,
-    -457,   143,  8556,   211,   172,   210,   204,   184,  6160,   217,
-     219,  -457,  -457,  3658,   218,  -457,  -457,  -457,  8556,   220,
-    -457,  -457,  -457,   214,  2407,  8556,  -457,   216,   223,   185,
-     224,  2824,  -457,   225,  -457,  -457,  7368,  -457,  -457,  -457,
-      97,  8556,  2407,   218,  -457,  -457,  1990,  -457,   222,   204,
+    -457,   143,  8566,   211,   172,   210,   204,   184,  6160,   217,
+     219,  -457,  -457,  3658,   218,  -457,  -457,  -457,  8566,   220,
+    -457,  -457,  -457,   214,  2407,  8566,  -457,   216,   223,   185,
+     224,  2824,  -457,   225,  -457,  -457,  7372,  -457,  -457,  -457,
+      97,  8566,  2407,   218,  -457,  -457,  1990,  -457,   222,   204,
     -457,  -457,  1990,   229,  -457,  -457
 };
 
   /* 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[] =
+static const yytype_uint16 yydefact[] =
 {
        0,   157,   210,   208,   209,   207,   214,   215,   216,   217,
      218,   219,   220,   221,   222,   211,   212,   213,   223,   224,
@@ -1394,25 +1314,25 @@
      298,   299,   300,   301,   302,   303,   304,   305,   306,   310,
      311,   312,   313,   314,   315,   316,   317,   318,   322,   323,
      324,   325,   326,   327,   328,   329,   330,   334,   331,   332,
-     333,   493,   494,   495,   343,   344,   369,   370,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   483,   484,   335,   346,   347,   361,   345,   374,   375,
-     376,   348,   349,   350,   405,   351,   355,   356,   359,   407,
-     408,   409,   352,   353,   357,   358,   406,   354,   360,   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,   478,   479,   480,
-     477,   481,   482,   371,   372,   373,   410,   412,   414,   411,
-     413,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,   430,   435,   431,   432,
-     433,   434,   436,   437,   438,   485,   486,   489,   490,   491,
+     333,   493,   494,   495,   346,   347,   370,   373,   335,   344,
+     345,   361,   343,   392,   393,   396,   397,   398,   400,   401,
+     402,   404,   405,   406,   408,   409,   483,   484,   369,   371,
+     372,   348,   349,   350,   394,   351,   355,   356,   359,   399,
+     403,   407,   352,   353,   357,   358,   395,   354,   360,   439,
+     441,   442,   443,   445,   446,   447,   449,   450,   451,   453,
+     454,   455,   457,   458,   459,   461,   462,   463,   465,   466,
+     467,   469,   470,   471,   473,   474,   475,   477,   478,   479,
+     481,   482,   440,   444,   448,   452,   456,   464,   468,   472,
+     460,   476,   480,   374,   375,   376,   410,   419,   421,   415,
+     420,   422,   423,   425,   426,   427,   429,   430,   431,   433,
+     434,   435,   437,   438,   411,   412,   413,   424,   414,   416,
+     417,   418,   428,   432,   436,   485,   486,   489,   490,   491,
      492,   487,   488,   584,   132,   498,   499,   500,     0,   497,
      161,   159,   160,   158,     0,   206,   162,   163,   164,   134,
-     133,     0,   185,   171,   173,   169,   175,   177,   172,   174,
-     170,   176,   178,   192,   179,   180,   181,   182,   183,   184,
-     136,   137,   138,   139,   140,   167,   168,   187,   188,   189,
-     190,   191,   135,   147,   583,     0,   585,     0,   109,   108,
+     133,     0,   190,   171,   173,   169,   175,   177,   172,   174,
+     170,   176,   178,   167,   168,   192,   179,   186,   187,   188,
+     189,   180,   181,   182,   183,   184,   185,   135,   136,   137,
+     138,   139,   140,   147,   583,     0,   585,     0,   109,   108,
        0,   120,   125,   154,   153,   151,   155,     0,   148,   150,
      156,   130,   202,   152,   496,     0,   580,   582,     0,   503,
        0,     0,     0,    97,     0,    94,     0,   107,     0,   116,
@@ -1424,7 +1344,7 @@
        5,     6,     7,     8,     2,    16,    14,    15,    17,    10,
       11,    12,    13,     3,    18,    37,    20,    25,    26,     0,
        0,    30,     0,   204,     0,    36,    34,     0,   196,    96,
-       0,     0,     0,   505,     0,     0,   141,     0,   186,     0,
+       0,     0,     0,   505,     0,     0,   141,     0,   191,     0,
      197,    45,    49,    52,    55,    60,    63,    65,    67,    69,
       71,    73,    75,     0,     0,    99,     0,   531,   540,   544,
        0,     0,     0,   565,     0,     0,     0,     0,     0,     0,
@@ -1458,7 +1378,7 @@
 static const yytype_int16 yypgoto[] =
 {
     -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  8856,  -457,   -87,   -84,  -127,   -93,   -33,   -31,
+    -457,  -457,  8868,  -457,   -87,   -84,  -127,   -93,   -33,   -31,
      -27,   -25,   -28,   -26,  -457,   -86,  -457,  -103,  -457,  -111,
     -125,     2,  -457,  -457,  -457,     4,  -457,  -457,  -457,   176,
      194,   178,  -457,  -457,  -337,  -457,  -457,  -457,  -457,    95,
@@ -2190,86 +2110,7 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
      440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   323,     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,    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,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     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,     0,     0,   422,
-     423,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   424,   425,
-       0,     0,   470,     0,     0,     0,     0,     0,     0,     0,
-     426,   427,   428,   429,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   430,   431,   432,   433,   434,   299,     0,     0,     0,
-       0,   304,   305,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   435,   436,   437,   438,   439,   440,   441,   442,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   323,     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,
-      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,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   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,     0,     0,   422,   423,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   424,   425,     0,     0,     0,   529,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   430,   431,   432,
-     433,   434,   299,     0,     0,     0,     0,   304,   305,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   435,   436,   437,
-     438,   439,   440,   441,   442,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   323,     2,     3,
+       0,     0,     0,     0,     0,     0,     0,   325,     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,
@@ -2301,7 +2142,7 @@
      284,   285,   286,   287,   288,   289,   290,   291,   292,     0,
        0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     424,   425,     0,     0,   585,     0,     0,     0,     0,     0,
+     424,   425,     0,     0,   470,     0,     0,     0,     0,     0,
        0,     0,   426,   427,   428,   429,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
@@ -2309,7 +2150,47 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
      442,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   323,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,     0,     0,   325,     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,    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,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     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,     0,     0,   422,
+     423,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   424,   425,
+       0,     0,     0,   529,     0,     0,     0,     0,     0,     0,
+     426,   427,   428,   429,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   430,   431,   432,   433,   434,   299,     0,     0,     0,
+       0,   304,   305,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   435,   436,   437,   438,   439,   440,   441,   442,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   325,     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,
@@ -2341,14 +2222,54 @@
      288,   289,   290,   291,   292,     0,     0,   422,   423,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   424,   425,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   597,   426,   427,
+     585,     0,     0,     0,     0,     0,     0,     0,   426,   427,
      428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   430,
      431,   432,   433,   434,   299,     0,     0,     0,     0,   304,
      305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   435,
      436,   437,   438,   439,   440,   441,   442,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   323,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   325,     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,
+      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,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   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,     0,     0,   422,   423,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   597,   426,   427,   428,   429,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   430,   431,   432,
+     433,   434,   299,     0,     0,     0,     0,   304,   305,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   435,   436,   437,
+     438,   439,   440,   441,   442,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
        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,
@@ -2388,55 +2309,56 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
      440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   323,     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,    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,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     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,   453,     0,   422,
-     423,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   471,     0,     0,     0,     0,     0,     0,   424,   425,
-       0,     0,     0,     0,     0,     0,     0,     0,   537,   538,
-     426,   427,   428,   429,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   325,     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,    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,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   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,   453,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,     0,     0,     0,     0,     0,     0,     0,
+     537,   538,   426,   427,   428,   429,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   430,   431,   432,   433,   434,   299,     0,     0,     0,
-     550,   304,   547,     0,     0,     0,     0,     0,     0,     0,
-       0,   471,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   435,   436,   437,   438,   439,   440,   441,   442,     0,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
+       0,     0,   550,   304,   547,     0,     0,     0,     0,     0,
+       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
+     442,     0,   471,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   325,     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,   634,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   640,   641,   642,   471,   471,   471,   471,   471,
+     471,   471,   471,   471,   471,   471,   471,   471,   471,   471,
      471,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   323,     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,   634,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     640,   641,   642,   471,   471,   471,   471,   471,   471,   471,
-     471,   471,   471,   471,   471,   471,   471,   471,   471,     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,
@@ -2446,7 +2368,7 @@
        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,   471
+     471
 };
 
 static const yytype_int16 yycheck[] =
@@ -3148,86 +3070,7 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
      384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   399,     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,    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,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   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,    -1,    -1,   297,
-     298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,
-      -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   349,   350,   351,   352,   353,   354,    -1,    -1,    -1,
-      -1,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,   383,   384,   385,   386,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   399,     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,
-      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,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   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,    -1,    -1,   297,   298,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,   321,
-      -1,    -1,    -1,    -1,    -1,    -1,   328,   329,   330,   331,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,   350,   351,
-     352,   353,   354,    -1,    -1,    -1,    -1,   359,   360,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
-     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   399,     4,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     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,
@@ -3267,7 +3110,47 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
      386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   399,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,   401,     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,    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,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   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,    -1,    -1,   297,
+     298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,
+      -1,    -1,    -1,   321,    -1,    -1,    -1,    -1,    -1,    -1,
+     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   349,   350,   351,   352,   353,   354,    -1,    -1,    -1,
+      -1,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   379,   380,   381,   382,   383,   384,   385,   386,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   401,     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,
@@ -3299,14 +3182,54 @@
      290,   291,   292,   293,   294,    -1,    -1,   297,   298,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   327,   328,   329,
+     320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   328,   329,
      330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,
      350,   351,   352,   353,   354,    -1,    -1,    -1,    -1,   359,
      360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
      380,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   399,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   401,     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,
+      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,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   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,    -1,    -1,   297,   298,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,   350,   351,
+     352,   353,   354,    -1,    -1,    -1,    -1,   359,   360,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
+     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,
        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,
@@ -3346,55 +3269,56 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
      384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   399,     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,    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,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   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,   391,    -1,   297,
-     298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   405,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,   423,
-     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     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,    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,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     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,   391,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   405,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     422,   423,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   349,   350,   351,   352,   353,   354,    -1,    -1,    -1,
-     454,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,   383,   384,   385,   386,    -1,
-     484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   399,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
+      -1,    -1,   454,   359,   360,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
+     386,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   401,    -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,   551,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   551,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     564,   565,   566,   567,   568,   569,   570,   571,   572,   573,
-     574,   575,   576,   577,   578,   579,   580,   581,   582,    -1,
+      -1,    -1,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
+     582,    -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,
@@ -3404,12 +3328,12 @@
       -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,   682
+     682
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_int16 yystos[] =
+static const yytype_uint16 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -3488,7 +3412,7 @@
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_int16 yyr1[] =
+static const yytype_uint16 yyr1[] =
 {
        0,   420,   421,   422,   422,   422,   422,   422,   422,   422,
      422,   422,   422,   422,   422,   422,   422,   422,   423,   423,
@@ -3553,7 +3477,7 @@
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_int8 yyr2[] =
+static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
@@ -3573,8 +3497,8 @@
        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,     4,     1,     1,     1,
-       1,     1,     1,     1,     3,     2,     3,     2,     3,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     4,     1,     1,     3,     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,
@@ -3630,22 +3554,22 @@
 
 #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)
+#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
@@ -3685,40 +3609,38 @@
 } while (0)
 
 
-/*-----------------------------------.
-| Print this symbol's value on YYO.  |
-`-----------------------------------*/
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
 {
-  FILE *yyoutput = yyo;
-  YYUSE (yyoutput);
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   YYUSE (pParseContext);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
 # endif
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*---------------------------.
-| Print this symbol on YYO.  |
-`---------------------------*/
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
 static void
-yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
 {
-  YYFPRINTF (yyo, "%s %s (",
+  YYFPRINTF (yyoutput, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyo, yytype, yyvaluep, pParseContext);
-  YYFPRINTF (yyo, ")");
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext);
+  YYFPRINTF (yyoutput, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -3727,7 +3649,7 @@
 `------------------------------------------------------------------*/
 
 static void
-yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -3750,20 +3672,20 @@
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
 {
-  int yylno = yyrline[yyrule];
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\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)]
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
                                               , pParseContext);
       YYFPRINTF (stderr, "\n");
     }
@@ -3807,13 +3729,13 @@
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
+#   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-static YYPTRDIFF_T
+static YYSIZE_T
 yystrlen (const char *yystr)
 {
-  YYPTRDIFF_T yylen;
+  YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -3849,12 +3771,12 @@
    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
+static YYSIZE_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYPTRDIFF_T yyn = 0;
+      YYSIZE_T yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -3867,10 +3789,7 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            else
-              goto append;
-
-          append:
+            /* Fall through.  */
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -3885,10 +3804,10 @@
     do_not_strip_quotes: ;
     }
 
-  if (yyres)
-    return yystpcpy (yyres, yystr) - yyres;
-  else
+  if (! yyres)
     return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -3901,19 +3820,19 @@
    *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)
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
   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"). */
+  /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Actual size of YYARG. */
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
   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
@@ -3940,9 +3859,7 @@
   */
   if (yytoken != YYEMPTY)
     {
-      int yyn = yypact[+*yyssp];
-      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-      yysize = yysize0;
+      int yyn = yypact[*yyssp];
       yyarg[yycount++] = yytname[yytoken];
       if (!yypact_value_is_default (yyn))
         {
@@ -3967,12 +3884,11 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYPTRDIFF_T yysize1
-                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-                    yysize = yysize1;
-                  else
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
+                  yysize = yysize1;
                 }
               }
         }
@@ -3984,7 +3900,6 @@
       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"));
@@ -3995,13 +3910,10 @@
     }
 
   {
-    /* 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
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
       return 2;
+    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -4027,8 +3939,8 @@
         }
       else
         {
-          ++yyp;
-          ++yyformat;
+          yyp++;
+          yyformat++;
         }
   }
   return 0;
@@ -4076,7 +3988,7 @@
     /* Number of syntax errors so far.  */
     int yynerrs;
 
-    yy_state_fast_t yystate;
+    int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
@@ -4088,16 +4000,16 @@
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
-    yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss;
-    yy_state_t *yyssp;
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYPTRDIFF_T yystacksize;
+    YYSIZE_T yystacksize;
 
   int yyn;
   int yyresult;
@@ -4111,7 +4023,7 @@
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
@@ -4132,54 +4044,46 @@
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
-
 /*------------------------------------------------------------.
-| yynewstate -- push a new state, which is found in yystate.  |
+| yynewstate -- Push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
-yynewstate:
+ 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
+ yysetstate:
+  *yyssp = yystate;
 
   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;
+      YYSIZE_T yysize = yyssp - yyss + 1;
 
-# if defined yyoverflow
+#ifdef 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;
+        yytype_int16 *yyss1 = yyss;
 
         /* 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),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
                     &yystacksize);
+
         yyss = yyss1;
         yyvs = yyvs1;
       }
-# else /* defined YYSTACK_RELOCATE */
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -4188,43 +4092,42 @@
         yystacksize = YYMAXDEPTH;
 
       {
-        yy_state_t *yyss1 = yyss;
+        yytype_int16 *yyss1 = yyss;
         union yyalloc *yyptr =
-          YY_CAST (union yyalloc *,
-                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
         if (! yyptr)
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
+#  undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
 # endif
+#endif /* no yyoverflow */
 
       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
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
     }
-#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
   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.  */
 
@@ -4274,13 +4177,15 @@
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
   yystate = yyn;
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -4295,7 +4200,7 @@
 
 
 /*-----------------------------.
-| yyreduce -- do a reduction.  |
+| yyreduce -- Do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -4315,304 +4220,304 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-  case 2:
-#line 400 "MachineIndependent/glslang.y"
-                 {
+        case 2:
+#line 357 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4324 "MachineIndependent/glslang_tab.cpp"
+#line 4229 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 406 "MachineIndependent/glslang.y"
-                          {
+#line 363 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4332 "MachineIndependent/glslang_tab.cpp"
+#line 4237 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 409 "MachineIndependent/glslang.y"
-                                        {
+#line 366 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4342 "MachineIndependent/glslang_tab.cpp"
+#line 4247 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 414 "MachineIndependent/glslang.y"
-                    {
+#line 371 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 4350 "MachineIndependent/glslang_tab.cpp"
+#line 4255 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 417 "MachineIndependent/glslang.y"
-                  {
+#line 374 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4358 "MachineIndependent/glslang_tab.cpp"
+#line 4263 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 420 "MachineIndependent/glslang.y"
-                   {
+#line 377 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4367 "MachineIndependent/glslang_tab.cpp"
+#line 4272 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 424 "MachineIndependent/glslang.y"
-                   {
+#line 381 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 4375 "MachineIndependent/glslang_tab.cpp"
+#line 4280 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 429 "MachineIndependent/glslang.y"
-                     {
+#line 385 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 4383 "MachineIndependent/glslang_tab.cpp"
+#line 4288 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 432 "MachineIndependent/glslang.y"
-                    {
+#line 388 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4392 "MachineIndependent/glslang_tab.cpp"
+#line 4297 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 436 "MachineIndependent/glslang.y"
-                     {
+#line 392 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4401 "MachineIndependent/glslang_tab.cpp"
+#line 4306 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 440 "MachineIndependent/glslang.y"
-                    {
+#line 396 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 4410 "MachineIndependent/glslang_tab.cpp"
+#line 4315 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 444 "MachineIndependent/glslang.y"
-                     {
+#line 400 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 4419 "MachineIndependent/glslang_tab.cpp"
+#line 4324 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 448 "MachineIndependent/glslang.y"
-                    {
+#line 404 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4428 "MachineIndependent/glslang_tab.cpp"
+#line 4333 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 452 "MachineIndependent/glslang.y"
-                     {
+#line 408 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4437 "MachineIndependent/glslang_tab.cpp"
+#line 4342 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 456 "MachineIndependent/glslang.y"
-                     {
+#line 412 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 4448 "MachineIndependent/glslang_tab.cpp"
+#line 4353 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 462 "MachineIndependent/glslang.y"
-                      {
+#line 418 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 4457 "MachineIndependent/glslang_tab.cpp"
+#line 4362 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 471 "MachineIndependent/glslang.y"
-                         {
+#line 426 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4465 "MachineIndependent/glslang_tab.cpp"
+#line 4370 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 474 "MachineIndependent/glslang.y"
-                                                                       {
+#line 429 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4473 "MachineIndependent/glslang_tab.cpp"
+#line 4378 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 477 "MachineIndependent/glslang.y"
-                    {
+#line 432 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4481 "MachineIndependent/glslang_tab.cpp"
+#line 4386 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 480 "MachineIndependent/glslang.y"
-                                        {
+#line 435 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 4489 "MachineIndependent/glslang_tab.cpp"
+#line 4394 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 483 "MachineIndependent/glslang.y"
-                                {
+#line 438 "glslang.y" /* yacc.c:1646  */
+    {
         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 4499 "MachineIndependent/glslang_tab.cpp"
+#line 4404 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 488 "MachineIndependent/glslang.y"
-                                {
+#line 443 "glslang.y" /* yacc.c:1646  */
+    {
         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 4509 "MachineIndependent/glslang_tab.cpp"
+#line 4414 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 496 "MachineIndependent/glslang.y"
-                 {
+#line 451 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4518 "MachineIndependent/glslang_tab.cpp"
+#line 4423 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 503 "MachineIndependent/glslang.y"
-                              {
+#line 458 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4527 "MachineIndependent/glslang_tab.cpp"
+#line 4432 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 510 "MachineIndependent/glslang.y"
-                            {
+#line 465 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4535 "MachineIndependent/glslang_tab.cpp"
+#line 4440 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 516 "MachineIndependent/glslang.y"
-                                                       {
+#line 471 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4544 "MachineIndependent/glslang_tab.cpp"
+#line 4449 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 520 "MachineIndependent/glslang.y"
-                                                     {
+#line 475 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4553 "MachineIndependent/glslang_tab.cpp"
+#line 4458 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 527 "MachineIndependent/glslang.y"
-                                {
+#line 482 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4561 "MachineIndependent/glslang_tab.cpp"
+#line 4466 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 530 "MachineIndependent/glslang.y"
-                           {
+#line 485 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4569 "MachineIndependent/glslang_tab.cpp"
+#line 4474 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 536 "MachineIndependent/glslang.y"
-                                                 {
+#line 491 "glslang.y" /* yacc.c:1646  */
+    {
         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 4581 "MachineIndependent/glslang_tab.cpp"
+#line 4486 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 543 "MachineIndependent/glslang.y"
-                                                                       {
+#line 498 "glslang.y" /* yacc.c:1646  */
+    {
         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 4593 "MachineIndependent/glslang_tab.cpp"
+#line 4498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 553 "MachineIndependent/glslang.y"
-                                     {
+#line 508 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4601 "MachineIndependent/glslang_tab.cpp"
+#line 4506 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 561 "MachineIndependent/glslang.y"
-                     {
+#line 516 "glslang.y" /* yacc.c:1646  */
+    {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4611 "MachineIndependent/glslang_tab.cpp"
+#line 4516 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 566 "MachineIndependent/glslang.y"
-                         {
+#line 521 "glslang.y" /* yacc.c:1646  */
+    {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
         //
@@ -4639,51 +4544,51 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4643 "MachineIndependent/glslang_tab.cpp"
+#line 4548 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 595 "MachineIndependent/glslang.y"
-                            {
+#line 549 "glslang.y" /* yacc.c:1646  */
+    {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4653 "MachineIndependent/glslang_tab.cpp"
+#line 4558 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 605 "MachineIndependent/glslang.y"
-                         {
+#line 558 "glslang.y" /* yacc.c:1646  */
+    {
         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 4664 "MachineIndependent/glslang_tab.cpp"
+#line 4569 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 611 "MachineIndependent/glslang.y"
-                              {
+#line 564 "glslang.y" /* yacc.c:1646  */
+    {
         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 4673 "MachineIndependent/glslang_tab.cpp"
+#line 4578 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 615 "MachineIndependent/glslang.y"
-                              {
+#line 568 "glslang.y" /* yacc.c:1646  */
+    {
         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 4682 "MachineIndependent/glslang_tab.cpp"
+#line 4587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 619 "MachineIndependent/glslang.y"
-                                      {
+#line 572 "glslang.y" /* yacc.c:1646  */
+    {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
             switch((yyvsp[-1].interm).op) {
@@ -4699,180 +4604,180 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4703 "MachineIndependent/glslang_tab.cpp"
+#line 4608 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 639 "MachineIndependent/glslang.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4709 "MachineIndependent/glslang_tab.cpp"
+#line 592 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4614 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 640 "MachineIndependent/glslang.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4715 "MachineIndependent/glslang_tab.cpp"
+#line 593 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4620 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 641 "MachineIndependent/glslang.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4721 "MachineIndependent/glslang_tab.cpp"
+#line 594 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4626 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 642 "MachineIndependent/glslang.y"
-            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+#line 595 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4728 "MachineIndependent/glslang_tab.cpp"
+#line 4633 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 648 "MachineIndependent/glslang.y"
-                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4734 "MachineIndependent/glslang_tab.cpp"
+#line 601 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4639 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 649 "MachineIndependent/glslang.y"
-                                                      {
+#line 602 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4744 "MachineIndependent/glslang_tab.cpp"
+#line 4649 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 654 "MachineIndependent/glslang.y"
-                                                       {
+#line 607 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4754 "MachineIndependent/glslang_tab.cpp"
+#line 4659 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 659 "MachineIndependent/glslang.y"
-                                                         {
+#line 612 "glslang.y" /* yacc.c:1646  */
+    {
         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 4765 "MachineIndependent/glslang_tab.cpp"
+#line 4670 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 668 "MachineIndependent/glslang.y"
-                                { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4771 "MachineIndependent/glslang_tab.cpp"
+#line 621 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4676 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 669 "MachineIndependent/glslang.y"
-                                                         {
+#line 622 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4781 "MachineIndependent/glslang_tab.cpp"
+#line 4686 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 674 "MachineIndependent/glslang.y"
-                                                         {
+#line 627 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4791 "MachineIndependent/glslang_tab.cpp"
+#line 4696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 682 "MachineIndependent/glslang.y"
-                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4797 "MachineIndependent/glslang_tab.cpp"
+#line 635 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4702 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 683 "MachineIndependent/glslang.y"
-                                                   {
+#line 636 "glslang.y" /* yacc.c:1646  */
+    {
         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 4808 "MachineIndependent/glslang_tab.cpp"
+#line 4713 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 689 "MachineIndependent/glslang.y"
-                                                    {
+#line 642 "glslang.y" /* yacc.c:1646  */
+    {
         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 4819 "MachineIndependent/glslang_tab.cpp"
+#line 4724 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 698 "MachineIndependent/glslang.y"
-                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4825 "MachineIndependent/glslang_tab.cpp"
+#line 651 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4730 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 699 "MachineIndependent/glslang.y"
-                                                        {
+#line 652 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4835 "MachineIndependent/glslang_tab.cpp"
+#line 4740 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 704 "MachineIndependent/glslang.y"
-                                                          {
+#line 657 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4845 "MachineIndependent/glslang_tab.cpp"
+#line 4750 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 709 "MachineIndependent/glslang.y"
-                                                    {
+#line 662 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4855 "MachineIndependent/glslang_tab.cpp"
+#line 4760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 714 "MachineIndependent/glslang.y"
-                                                    {
+#line 667 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4865 "MachineIndependent/glslang_tab.cpp"
+#line 4770 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 722 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4871 "MachineIndependent/glslang_tab.cpp"
+#line 675 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4776 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 723 "MachineIndependent/glslang.y"
-                                                       {
+#line 676 "glslang.y" /* yacc.c:1646  */
+    {
         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(), "==");
@@ -4881,12 +4786,12 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4885 "MachineIndependent/glslang_tab.cpp"
+#line 4790 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 732 "MachineIndependent/glslang.y"
-                                                      {
+#line 685 "glslang.y" /* yacc.c:1646  */
+    {
         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(), "!=");
@@ -4895,125 +4800,125 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4899 "MachineIndependent/glslang_tab.cpp"
+#line 4804 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 744 "MachineIndependent/glslang.y"
-                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4905 "MachineIndependent/glslang_tab.cpp"
+#line 697 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4810 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 745 "MachineIndependent/glslang.y"
-                                                   {
+#line 698 "glslang.y" /* yacc.c:1646  */
+    {
         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 4916 "MachineIndependent/glslang_tab.cpp"
+#line 4821 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 754 "MachineIndependent/glslang.y"
-                     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4922 "MachineIndependent/glslang_tab.cpp"
+#line 707 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4827 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 755 "MachineIndependent/glslang.y"
-                                                   {
+#line 708 "glslang.y" /* yacc.c:1646  */
+    {
         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 4933 "MachineIndependent/glslang_tab.cpp"
+#line 4838 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 764 "MachineIndependent/glslang.y"
-                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4939 "MachineIndependent/glslang_tab.cpp"
+#line 717 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4844 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 765 "MachineIndependent/glslang.y"
-                                                                   {
+#line 718 "glslang.y" /* yacc.c:1646  */
+    {
         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 4950 "MachineIndependent/glslang_tab.cpp"
+#line 4855 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 774 "MachineIndependent/glslang.y"
-                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4956 "MachineIndependent/glslang_tab.cpp"
+#line 727 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4861 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 775 "MachineIndependent/glslang.y"
-                                                            {
+#line 728 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4966 "MachineIndependent/glslang_tab.cpp"
+#line 4871 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 783 "MachineIndependent/glslang.y"
-                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4972 "MachineIndependent/glslang_tab.cpp"
+#line 736 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4877 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 784 "MachineIndependent/glslang.y"
-                                                            {
+#line 737 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4982 "MachineIndependent/glslang_tab.cpp"
+#line 4887 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 792 "MachineIndependent/glslang.y"
-                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4988 "MachineIndependent/glslang_tab.cpp"
+#line 745 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4893 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 793 "MachineIndependent/glslang.y"
-                                                          {
+#line 746 "glslang.y" /* yacc.c:1646  */
+    {
         (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 4998 "MachineIndependent/glslang_tab.cpp"
+#line 4903 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 801 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5004 "MachineIndependent/glslang_tab.cpp"
+#line 754 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4909 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 802 "MachineIndependent/glslang.y"
-                                     {
+#line 755 "glslang.y" /* yacc.c:1646  */
+    {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 5012 "MachineIndependent/glslang_tab.cpp"
+#line 4917 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 805 "MachineIndependent/glslang.y"
-                                             {
+#line 758 "glslang.y" /* yacc.c:1646  */
+    {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
         parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
@@ -5025,18 +4930,18 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5029 "MachineIndependent/glslang_tab.cpp"
+#line 4934 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 820 "MachineIndependent/glslang.y"
-                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5035 "MachineIndependent/glslang_tab.cpp"
+#line 773 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4940 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 821 "MachineIndependent/glslang.y"
-                                                                 {
+#line 774 "glslang.y" /* yacc.c:1646  */
+    {
         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(), "=");
@@ -5049,120 +4954,120 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 5053 "MachineIndependent/glslang_tab.cpp"
+#line 4958 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 837 "MachineIndependent/glslang.y"
-            {
+#line 790 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 5062 "MachineIndependent/glslang_tab.cpp"
+#line 4967 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 841 "MachineIndependent/glslang.y"
-                 {
+#line 794 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 5071 "MachineIndependent/glslang_tab.cpp"
+#line 4976 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 845 "MachineIndependent/glslang.y"
-                 {
+#line 798 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 5080 "MachineIndependent/glslang_tab.cpp"
+#line 4985 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 849 "MachineIndependent/glslang.y"
-                 {
+#line 802 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 5090 "MachineIndependent/glslang_tab.cpp"
+#line 4995 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 854 "MachineIndependent/glslang.y"
-                 {
+#line 807 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5099 "MachineIndependent/glslang_tab.cpp"
+#line 5004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 858 "MachineIndependent/glslang.y"
-                 {
+#line 811 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 5108 "MachineIndependent/glslang_tab.cpp"
+#line 5013 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 862 "MachineIndependent/glslang.y"
-                  {
+#line 815 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 5117 "MachineIndependent/glslang_tab.cpp"
+#line 5022 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 866 "MachineIndependent/glslang.y"
-                   {
+#line 819 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 5126 "MachineIndependent/glslang_tab.cpp"
+#line 5031 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 870 "MachineIndependent/glslang.y"
-                 {
+#line 823 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 5135 "MachineIndependent/glslang_tab.cpp"
+#line 5040 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 874 "MachineIndependent/glslang.y"
-                 {
+#line 827 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 5144 "MachineIndependent/glslang_tab.cpp"
+#line 5049 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 878 "MachineIndependent/glslang.y"
-                {
+#line 831 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 5153 "MachineIndependent/glslang_tab.cpp"
+#line 5058 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 885 "MachineIndependent/glslang.y"
-                            {
+#line 838 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5161 "MachineIndependent/glslang_tab.cpp"
+#line 5066 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 888 "MachineIndependent/glslang.y"
-                                             {
+#line 841 "glslang.y" /* yacc.c:1646  */
+    {
         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) {
@@ -5170,117 +5075,117 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5174 "MachineIndependent/glslang_tab.cpp"
+#line 5079 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 899 "MachineIndependent/glslang.y"
-                             {
+#line 852 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5183 "MachineIndependent/glslang_tab.cpp"
+#line 5088 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 906 "MachineIndependent/glslang.y"
-                                   {
+#line 859 "glslang.y" /* yacc.c:1646  */
+    {
         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 5193 "MachineIndependent/glslang_tab.cpp"
+#line 5098 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 911 "MachineIndependent/glslang.y"
-                                     {
+#line 864 "glslang.y" /* yacc.c:1646  */
+    {
         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 5203 "MachineIndependent/glslang_tab.cpp"
+#line 5108 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 916 "MachineIndependent/glslang.y"
-                                                             {
+#line 869 "glslang.y" /* yacc.c:1646  */
+    {
         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 5215 "MachineIndependent/glslang_tab.cpp"
+#line 5120 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 923 "MachineIndependent/glslang.y"
-                                {
+#line 876 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 5224 "MachineIndependent/glslang_tab.cpp"
+#line 5129 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 927 "MachineIndependent/glslang.y"
-                                           {
+#line 880 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5233 "MachineIndependent/glslang_tab.cpp"
+#line 5138 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 931 "MachineIndependent/glslang.y"
-                                                           {
+#line 884 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 5242 "MachineIndependent/glslang_tab.cpp"
+#line 5147 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 935 "MachineIndependent/glslang.y"
-                               {
+#line 888 "glslang.y" /* yacc.c:1646  */
+    {
         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 5252 "MachineIndependent/glslang_tab.cpp"
+#line 5157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 940 "MachineIndependent/glslang.y"
-                                          {
+#line 893 "glslang.y" /* yacc.c:1646  */
+    {
         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 5262 "MachineIndependent/glslang_tab.cpp"
+#line 5167 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 945 "MachineIndependent/glslang.y"
-                                                          {
+#line 898 "glslang.y" /* yacc.c:1646  */
+    {
         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 5273 "MachineIndependent/glslang_tab.cpp"
+#line 5178 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 954 "MachineIndependent/glslang.y"
-                                           { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5279 "MachineIndependent/glslang_tab.cpp"
+#line 907 "glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 5184 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 954 "MachineIndependent/glslang.y"
-                                                                                                                          {
+#line 907 "glslang.y" /* yacc.c:1646  */
+    {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
         parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
@@ -5289,55 +5194,55 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 5293 "MachineIndependent/glslang_tab.cpp"
+#line 5198 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 965 "MachineIndependent/glslang.y"
-                       {
+#line 918 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5302 "MachineIndependent/glslang_tab.cpp"
+#line 5207 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 969 "MachineIndependent/glslang.y"
-                                       {
+#line 922 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5311 "MachineIndependent/glslang_tab.cpp"
+#line 5216 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 976 "MachineIndependent/glslang.y"
-                                       {
+#line 929 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5320 "MachineIndependent/glslang_tab.cpp"
+#line 5225 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 983 "MachineIndependent/glslang.y"
-                      {
+#line 936 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5328 "MachineIndependent/glslang_tab.cpp"
+#line 5233 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 986 "MachineIndependent/glslang.y"
-                                      {
+#line 939 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5336 "MachineIndependent/glslang_tab.cpp"
+#line 5241 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 993 "MachineIndependent/glslang.y"
-                                            {
+#line 946 "glslang.y" /* yacc.c:1646  */
+    {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
         if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
@@ -5345,12 +5250,12 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5349 "MachineIndependent/glslang_tab.cpp"
+#line 5254 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 1001 "MachineIndependent/glslang.y"
-                                                                  {
+#line 954 "glslang.y" /* yacc.c:1646  */
+    {
         //
         // Only first parameter of one-parameter functions can be void
         // The check for named parameters not being void is done in parameter_declarator
@@ -5367,12 +5272,12 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5371 "MachineIndependent/glslang_tab.cpp"
+#line 5276 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 1021 "MachineIndependent/glslang.y"
-                                                 {
+#line 974 "glslang.y" /* yacc.c:1646  */
+    {
         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), "");
@@ -5391,12 +5296,12 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5395 "MachineIndependent/glslang_tab.cpp"
+#line 5300 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 1044 "MachineIndependent/glslang.y"
-                                {
+#line 997 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -5411,12 +5316,12 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5415 "MachineIndependent/glslang_tab.cpp"
+#line 5320 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 1059 "MachineIndependent/glslang.y"
-                                                {
+#line 1012 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -5435,12 +5340,12 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5439 "MachineIndependent/glslang_tab.cpp"
+#line 5344 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 1084 "MachineIndependent/glslang.y"
-                                          {
+#line 1037 "glslang.y" /* yacc.c:1646  */
+    {
         (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;
@@ -5451,24 +5356,24 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5455 "MachineIndependent/glslang_tab.cpp"
+#line 5360 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 1095 "MachineIndependent/glslang.y"
-                           {
+#line 1048 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5467 "MachineIndependent/glslang_tab.cpp"
+#line 5372 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 1105 "MachineIndependent/glslang.y"
-                                              {
+#line 1058 "glslang.y" /* yacc.c:1646  */
+    {
         (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;
@@ -5478,133 +5383,133 @@
         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 5482 "MachineIndependent/glslang_tab.cpp"
+#line 5387 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1115 "MachineIndependent/glslang.y"
-                               {
+#line 1068 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5494 "MachineIndependent/glslang_tab.cpp"
+#line 5399 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1125 "MachineIndependent/glslang.y"
-                     {
+#line 1078 "glslang.y" /* yacc.c:1646  */
+    {
         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 5505 "MachineIndependent/glslang_tab.cpp"
+#line 5410 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1134 "MachineIndependent/glslang.y"
-                         {
+#line 1087 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5513 "MachineIndependent/glslang_tab.cpp"
+#line 5418 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1137 "MachineIndependent/glslang.y"
-                                            {
+#line 1090 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5522 "MachineIndependent/glslang_tab.cpp"
+#line 5427 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1141 "MachineIndependent/glslang.y"
-                                                            {
+#line 1094 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5531 "MachineIndependent/glslang_tab.cpp"
+#line 5436 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1145 "MachineIndependent/glslang.y"
-                                                                              {
+#line 1098 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5541 "MachineIndependent/glslang_tab.cpp"
+#line 5446 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1150 "MachineIndependent/glslang.y"
-                                                              {
+#line 1103 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5551 "MachineIndependent/glslang_tab.cpp"
+#line 5456 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1158 "MachineIndependent/glslang.y"
-                           {
+#line 1111 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
 
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 5563 "MachineIndependent/glslang_tab.cpp"
+#line 5468 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1165 "MachineIndependent/glslang.y"
-                                      {
+#line 1118 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5573 "MachineIndependent/glslang_tab.cpp"
+#line 5478 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1170 "MachineIndependent/glslang.y"
-                                                      {
+#line 1123 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5583 "MachineIndependent/glslang_tab.cpp"
+#line 5488 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1175 "MachineIndependent/glslang.y"
-                                                                        {
+#line 1128 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5593 "MachineIndependent/glslang_tab.cpp"
+#line 5498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1180 "MachineIndependent/glslang.y"
-                                                        {
+#line 1133 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5603 "MachineIndependent/glslang_tab.cpp"
+#line 5508 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1189 "MachineIndependent/glslang.y"
-                     {
+#line 1142 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
         parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
@@ -5614,12 +5519,12 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5618 "MachineIndependent/glslang_tab.cpp"
+#line 5523 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1199 "MachineIndependent/glslang.y"
-                                     {
+#line 1152 "glslang.y" /* yacc.c:1646  */
+    {
         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));
 
@@ -5643,71 +5548,71 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5647 "MachineIndependent/glslang_tab.cpp"
+#line 5552 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1226 "MachineIndependent/glslang.y"
-                {
+#line 1179 "glslang.y" /* yacc.c:1646  */
+    {
         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 5658 "MachineIndependent/glslang_tab.cpp"
+#line 5563 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1235 "MachineIndependent/glslang.y"
-             {
+#line 1188 "glslang.y" /* yacc.c:1646  */
+    {
         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 5670 "MachineIndependent/glslang_tab.cpp"
+#line 5575 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1242 "MachineIndependent/glslang.y"
-           {
+#line 1195 "glslang.y" /* yacc.c:1646  */
+    {
         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 5682 "MachineIndependent/glslang_tab.cpp"
+#line 5587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1250 "MachineIndependent/glslang.y"
-                    {
+#line 1203 "glslang.y" /* yacc.c:1646  */
+    {
         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 5694 "MachineIndependent/glslang_tab.cpp"
+#line 5599 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1258 "MachineIndependent/glslang.y"
-                        {
+#line 1210 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 5706 "MachineIndependent/glslang_tab.cpp"
+#line 5611 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1265 "MachineIndependent/glslang.y"
-                  {
+#line 1217 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
@@ -5715,12 +5620,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 5719 "MachineIndependent/glslang_tab.cpp"
+#line 5624 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1273 "MachineIndependent/glslang.y"
-                     {
+#line 1225 "glslang.y" /* yacc.c:1646  */
+    {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
@@ -5730,109 +5635,109 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 5734 "MachineIndependent/glslang_tab.cpp"
+#line 5639 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1283 "MachineIndependent/glslang.y"
-                {
+#line 1235 "glslang.y" /* yacc.c:1646  */
+    {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 5746 "MachineIndependent/glslang_tab.cpp"
+#line 5651 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1290 "MachineIndependent/glslang.y"
-                {
+#line 1242 "glslang.y" /* yacc.c:1646  */
+    {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 5758 "MachineIndependent/glslang_tab.cpp"
+#line 5663 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1302 "MachineIndependent/glslang.y"
-                                                             {
+#line 1253 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5766 "MachineIndependent/glslang_tab.cpp"
+#line 5671 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1308 "MachineIndependent/glslang.y"
-                          {
+#line 1259 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5774 "MachineIndependent/glslang_tab.cpp"
+#line 5679 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1311 "MachineIndependent/glslang.y"
-                                                         {
+#line 1262 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5784 "MachineIndependent/glslang_tab.cpp"
+#line 5689 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1318 "MachineIndependent/glslang.y"
-                 {
+#line 1269 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5793 "MachineIndependent/glslang_tab.cpp"
+#line 5698 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1322 "MachineIndependent/glslang.y"
-                                           {
+#line 1273 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5802 "MachineIndependent/glslang_tab.cpp"
+#line 5707 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1326 "MachineIndependent/glslang.y"
-             { // because "shared" is both an identifier and a keyword
+#line 1277 "glslang.y" /* yacc.c:1646  */
+    { // 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 5812 "MachineIndependent/glslang_tab.cpp"
+#line 5717 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1335 "MachineIndependent/glslang.y"
-              {
+#line 1286 "glslang.y" /* yacc.c:1646  */
+    {
         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 5823 "MachineIndependent/glslang_tab.cpp"
+#line 5728 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1345 "MachineIndependent/glslang.y"
-                            {
+#line 1296 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5831 "MachineIndependent/glslang_tab.cpp"
+#line 5736 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1348 "MachineIndependent/glslang.y"
-                                           {
+#line 1299 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
             (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
@@ -5840,135 +5745,135 @@
         (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 5844 "MachineIndependent/glslang_tab.cpp"
+#line 5749 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1359 "MachineIndependent/glslang.y"
-                        {
+#line 1310 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5852 "MachineIndependent/glslang_tab.cpp"
+#line 5757 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1362 "MachineIndependent/glslang.y"
-                       {
+#line 1313 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5860 "MachineIndependent/glslang_tab.cpp"
+#line 5765 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1365 "MachineIndependent/glslang.y"
-                          {
+#line 1316 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5869 "MachineIndependent/glslang_tab.cpp"
+#line 5774 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1369 "MachineIndependent/glslang.y"
-                              {
+#line 1320 "glslang.y" /* yacc.c:1646  */
+    {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5878 "MachineIndependent/glslang_tab.cpp"
+#line 5783 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1373 "MachineIndependent/glslang.y"
-                          {
+#line 1324 "glslang.y" /* yacc.c:1646  */
+    {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5887 "MachineIndependent/glslang_tab.cpp"
+#line 5792 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1378 "MachineIndependent/glslang.y"
-                        {
+#line 1329 "glslang.y" /* yacc.c:1646  */
+    {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5896 "MachineIndependent/glslang_tab.cpp"
+#line 5801 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1383 "MachineIndependent/glslang.y"
-                            {
+#line 1333 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5904 "MachineIndependent/glslang_tab.cpp"
+#line 5809 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1391 "MachineIndependent/glslang.y"
-            {
+#line 1340 "glslang.y" /* yacc.c:1646  */
+    {
         (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 5913 "MachineIndependent/glslang_tab.cpp"
+#line 5818 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1395 "MachineIndependent/glslang.y"
-            {
+#line 1344 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5923 "MachineIndependent/glslang_tab.cpp"
+#line 5828 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1400 "MachineIndependent/glslang.y"
-         {
+#line 1349 "glslang.y" /* yacc.c:1646  */
+    {
         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 5934 "MachineIndependent/glslang_tab.cpp"
+#line 5839 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1406 "MachineIndependent/glslang.y"
-          {
+#line 1355 "glslang.y" /* yacc.c:1646  */
+    {
         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 5945 "MachineIndependent/glslang_tab.cpp"
+#line 5850 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1412 "MachineIndependent/glslang.y"
-               {
+#line 1361 "glslang.y" /* yacc.c:1646  */
+    {
         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 5957 "MachineIndependent/glslang_tab.cpp"
+#line 5862 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1419 "MachineIndependent/glslang.y"
-              {
+#line 1368 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5967 "MachineIndependent/glslang_tab.cpp"
+#line 5872 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1424 "MachineIndependent/glslang.y"
-             {
+#line 1373 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -5976,22 +5881,22 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5980 "MachineIndependent/glslang_tab.cpp"
+#line 5885 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1432 "MachineIndependent/glslang.y"
-             {
+#line 1381 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5990 "MachineIndependent/glslang_tab.cpp"
+#line 5895 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1438 "MachineIndependent/glslang.y"
-                {
+#line 1387 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -6003,12 +5908,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 6007 "MachineIndependent/glslang_tab.cpp"
+#line 5912 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1450 "MachineIndependent/glslang.y"
-              {
+#line 1399 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -6022,33 +5927,33 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 6026 "MachineIndependent/glslang_tab.cpp"
+#line 5931 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1464 "MachineIndependent/glslang.y"
-            {
+#line 1413 "glslang.y" /* yacc.c:1646  */
+    {
         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 6037 "MachineIndependent/glslang_tab.cpp"
+#line 5942 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1470 "MachineIndependent/glslang.y"
-             {
+#line 1419 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 6047 "MachineIndependent/glslang_tab.cpp"
+#line 5952 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1476 "MachineIndependent/glslang.y"
-                {
+#line 1424 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
             | EShLangAnyHitMask), "hitAttributeNV");
@@ -6056,12 +5961,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 6060 "MachineIndependent/glslang_tab.cpp"
+#line 5965 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1484 "MachineIndependent/glslang.y"
-                 {
+#line 1432 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
             | EShLangAnyHitMask), "hitAttributeEXT");
@@ -6069,12 +5974,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 6073 "MachineIndependent/glslang_tab.cpp"
+#line 5978 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1492 "MachineIndependent/glslang.y"
-                {
+#line 1440 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
@@ -6082,12 +5987,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 6086 "MachineIndependent/glslang_tab.cpp"
+#line 5991 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1500 "MachineIndependent/glslang.y"
-                 {
+#line 1448 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
@@ -6095,12 +6000,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 6099 "MachineIndependent/glslang_tab.cpp"
+#line 6004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1508 "MachineIndependent/glslang.y"
-                  {
+#line 1456 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
@@ -6108,12 +6013,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 6112 "MachineIndependent/glslang_tab.cpp"
+#line 6017 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1516 "MachineIndependent/glslang.y"
-                   {
+#line 1464 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
@@ -6121,12 +6026,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 6125 "MachineIndependent/glslang_tab.cpp"
+#line 6030 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1524 "MachineIndependent/glslang.y"
-                 {
+#line 1472 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
             EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
@@ -6134,12 +6039,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 6138 "MachineIndependent/glslang_tab.cpp"
+#line 6043 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1532 "MachineIndependent/glslang.y"
-                  {
+#line 1480 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
             EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
@@ -6147,222 +6052,222 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 6151 "MachineIndependent/glslang_tab.cpp"
+#line 6056 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1540 "MachineIndependent/glslang.y"
-                   {
+#line 1488 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 6163 "MachineIndependent/glslang_tab.cpp"
+#line 6068 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1547 "MachineIndependent/glslang.y"
-                    {
+#line 1495 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 6175 "MachineIndependent/glslang_tab.cpp"
+#line 6080 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1554 "MachineIndependent/glslang.y"
-                     {
+#line 1502 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.coherent = true;
+    }
+#line 6089 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 180:
+#line 1506 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 6185 "MachineIndependent/glslang_tab.cpp"
+#line 6099 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1559 "MachineIndependent/glslang.y"
-                          {
+  case 181:
+#line 1511 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 6195 "MachineIndependent/glslang_tab.cpp"
+#line 6109 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1564 "MachineIndependent/glslang.y"
-                        {
+  case 182:
+#line 1516 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
         (yyval.interm.type).qualifier.workgroupcoherent = true;
     }
-#line 6205 "MachineIndependent/glslang_tab.cpp"
+#line 6119 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1569 "MachineIndependent/glslang.y"
-                       {
+  case 183:
+#line 1521 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
         (yyval.interm.type).qualifier.subgroupcoherent = true;
     }
-#line 6215 "MachineIndependent/glslang_tab.cpp"
+#line 6129 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1574 "MachineIndependent/glslang.y"
-                 {
+  case 184:
+#line 1526 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         (yyval.interm.type).qualifier.nonprivate = true;
     }
-#line 6225 "MachineIndependent/glslang_tab.cpp"
+#line 6139 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1579 "MachineIndependent/glslang.y"
-                         {
+  case 185:
+#line 1531 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         (yyval.interm.type).qualifier.shadercallcoherent = true;
     }
-#line 6235 "MachineIndependent/glslang_tab.cpp"
+#line 6149 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1584 "MachineIndependent/glslang.y"
-                 {
+  case 186:
+#line 1536 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.volatil = true;
+    }
+#line 6158 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 187:
+#line 1540 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.restrict = true;
+    }
+#line 6167 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 188:
+#line 1544 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.readonly = true;
+    }
+#line 6176 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 189:
+#line 1548 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.writeonly = true;
+    }
+#line 6185 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 190:
+#line 1552 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 6246 "MachineIndependent/glslang_tab.cpp"
+#line 6196 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1590 "MachineIndependent/glslang.y"
-                                                       {
+  case 191:
+#line 1558 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 6257 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 187:
-#line 1597 "MachineIndependent/glslang.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.coherent = true;
-    }
-#line 6266 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 188:
-#line 1601 "MachineIndependent/glslang.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.volatil = true;
-    }
-#line 6275 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 189:
-#line 1605 "MachineIndependent/glslang.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.restrict = true;
-    }
-#line 6284 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 190:
-#line 1609 "MachineIndependent/glslang.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.readonly = true;
-    }
-#line 6293 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 191:
-#line 1613 "MachineIndependent/glslang.y"
-                {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.writeonly = true;
-    }
-#line 6302 "MachineIndependent/glslang_tab.cpp"
+#line 6207 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1623 "MachineIndependent/glslang.y"
-                 {
+#line 1569 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 6311 "MachineIndependent/glslang_tab.cpp"
+#line 6216 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1631 "MachineIndependent/glslang.y"
-                 {
+#line 1576 "glslang.y" /* yacc.c:1646  */
+    {
         // TODO
     }
-#line 6319 "MachineIndependent/glslang_tab.cpp"
+#line 6224 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1634 "MachineIndependent/glslang.y"
-                                      {
+#line 1579 "glslang.y" /* yacc.c:1646  */
+    {
         // 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
     }
-#line 6329 "MachineIndependent/glslang_tab.cpp"
+#line 6234 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 1643 "MachineIndependent/glslang.y"
-                                                           {
+#line 1588 "glslang.y" /* yacc.c:1646  */
+    {
         (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 6339 "MachineIndependent/glslang_tab.cpp"
+#line 6244 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 1648 "MachineIndependent/glslang.y"
-                                                                           {
+#line 1593 "glslang.y" /* yacc.c:1646  */
+    {
         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 6351 "MachineIndependent/glslang_tab.cpp"
+#line 6256 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1658 "MachineIndependent/glslang.y"
-                                 {
+#line 1603 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6361 "MachineIndependent/glslang_tab.cpp"
+#line 6266 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 1663 "MachineIndependent/glslang.y"
-                                                        {
+#line 1608 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
 
@@ -6370,492 +6275,492 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6374 "MachineIndependent/glslang_tab.cpp"
+#line 6279 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 1671 "MachineIndependent/glslang.y"
-                                                 {
+#line 1616 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6383 "MachineIndependent/glslang_tab.cpp"
+#line 6288 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 1675 "MachineIndependent/glslang.y"
-                                                                        {
+#line 1620 "glslang.y" /* yacc.c:1646  */
+    {
         (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 6395 "MachineIndependent/glslang_tab.cpp"
+#line 6300 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 1685 "MachineIndependent/glslang.y"
-                               {
+#line 1630 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 6403 "MachineIndependent/glslang_tab.cpp"
+#line 6308 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 1688 "MachineIndependent/glslang.y"
-                        {
+#line 1633 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.typeParameters) = 0;
     }
-#line 6411 "MachineIndependent/glslang_tab.cpp"
+#line 6316 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 1694 "MachineIndependent/glslang.y"
-                                                           {
+#line 1639 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 6419 "MachineIndependent/glslang_tab.cpp"
+#line 6324 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 1700 "MachineIndependent/glslang.y"
-                       {
+#line 1645 "glslang.y" /* yacc.c:1646  */
+    {
         (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 6431 "MachineIndependent/glslang_tab.cpp"
+#line 6336 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 1707 "MachineIndependent/glslang.y"
-                                                           {
+#line 1652 "glslang.y" /* yacc.c:1646  */
+    {
         (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 6443 "MachineIndependent/glslang_tab.cpp"
+#line 6348 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 1717 "MachineIndependent/glslang.y"
-           {
+#line 1662 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 6452 "MachineIndependent/glslang_tab.cpp"
+#line 6357 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 1721 "MachineIndependent/glslang.y"
-            {
+#line 1666 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6461 "MachineIndependent/glslang_tab.cpp"
+#line 6366 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 1725 "MachineIndependent/glslang.y"
-          {
+#line 1670 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6470 "MachineIndependent/glslang_tab.cpp"
+#line 6375 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 1729 "MachineIndependent/glslang.y"
-           {
+#line 1674 "glslang.y" /* yacc.c:1646  */
+    {
         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 6480 "MachineIndependent/glslang_tab.cpp"
+#line 6385 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1734 "MachineIndependent/glslang.y"
-           {
+#line 1679 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 6489 "MachineIndependent/glslang_tab.cpp"
+#line 6394 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 1738 "MachineIndependent/glslang.y"
-           {
+#line 1683 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6499 "MachineIndependent/glslang_tab.cpp"
+#line 6404 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 1743 "MachineIndependent/glslang.y"
-           {
+#line 1688 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6509 "MachineIndependent/glslang_tab.cpp"
+#line 6414 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 1748 "MachineIndependent/glslang.y"
-           {
+#line 1693 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6519 "MachineIndependent/glslang_tab.cpp"
+#line 6424 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 1753 "MachineIndependent/glslang.y"
-            {
+#line 1698 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 6529 "MachineIndependent/glslang_tab.cpp"
+#line 6434 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 1758 "MachineIndependent/glslang.y"
-            {
+#line 1703 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 6539 "MachineIndependent/glslang_tab.cpp"
+#line 6444 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 1763 "MachineIndependent/glslang.y"
-            {
+#line 1708 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 6549 "MachineIndependent/glslang_tab.cpp"
+#line 6454 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 1768 "MachineIndependent/glslang.y"
-            {
+#line 1713 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6559 "MachineIndependent/glslang_tab.cpp"
+#line 6464 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 1773 "MachineIndependent/glslang.y"
-            {
+#line 1718 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6569 "MachineIndependent/glslang_tab.cpp"
+#line 6474 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 1778 "MachineIndependent/glslang.y"
-            {
+#line 1723 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6579 "MachineIndependent/glslang_tab.cpp"
+#line 6484 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 1783 "MachineIndependent/glslang.y"
-            {
+#line 1728 "glslang.y" /* yacc.c:1646  */
+    {
         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 6590 "MachineIndependent/glslang_tab.cpp"
+#line 6495 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 221:
-#line 1789 "MachineIndependent/glslang.y"
-            {
+#line 1734 "glslang.y" /* yacc.c:1646  */
+    {
         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 6601 "MachineIndependent/glslang_tab.cpp"
+#line 6506 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 222:
-#line 1795 "MachineIndependent/glslang.y"
-            {
+#line 1740 "glslang.y" /* yacc.c:1646  */
+    {
         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 6612 "MachineIndependent/glslang_tab.cpp"
+#line 6517 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 223:
-#line 1801 "MachineIndependent/glslang.y"
-           {
+#line 1746 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6622 "MachineIndependent/glslang_tab.cpp"
+#line 6527 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 1806 "MachineIndependent/glslang.y"
-           {
+#line 1751 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6632 "MachineIndependent/glslang_tab.cpp"
+#line 6537 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 1811 "MachineIndependent/glslang.y"
-           {
+#line 1756 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6642 "MachineIndependent/glslang_tab.cpp"
+#line 6547 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 1816 "MachineIndependent/glslang.y"
-             {
+#line 1761 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6652 "MachineIndependent/glslang_tab.cpp"
+#line 6557 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 1821 "MachineIndependent/glslang.y"
-             {
+#line 1766 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6662 "MachineIndependent/glslang_tab.cpp"
+#line 6567 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 1826 "MachineIndependent/glslang.y"
-             {
+#line 1771 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6672 "MachineIndependent/glslang_tab.cpp"
+#line 6577 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 1831 "MachineIndependent/glslang.y"
-             {
+#line 1776 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6682 "MachineIndependent/glslang_tab.cpp"
+#line 6587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 1836 "MachineIndependent/glslang.y"
-             {
+#line 1781 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6692 "MachineIndependent/glslang_tab.cpp"
+#line 6597 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 1841 "MachineIndependent/glslang.y"
-             {
+#line 1786 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6702 "MachineIndependent/glslang_tab.cpp"
+#line 6607 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 1846 "MachineIndependent/glslang.y"
-             {
+#line 1791 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6712 "MachineIndependent/glslang_tab.cpp"
+#line 6617 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 1851 "MachineIndependent/glslang.y"
-             {
+#line 1796 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6722 "MachineIndependent/glslang_tab.cpp"
+#line 6627 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 1856 "MachineIndependent/glslang.y"
-             {
+#line 1801 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6732 "MachineIndependent/glslang_tab.cpp"
+#line 6637 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 1863 "MachineIndependent/glslang.y"
-             {
+#line 1807 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6744 "MachineIndependent/glslang_tab.cpp"
+#line 6649 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 1870 "MachineIndependent/glslang.y"
-                {
+#line 1814 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
     }
-#line 6754 "MachineIndependent/glslang_tab.cpp"
+#line 6659 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 1875 "MachineIndependent/glslang.y"
-                {
+#line 1819 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6764 "MachineIndependent/glslang_tab.cpp"
+#line 6669 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 1880 "MachineIndependent/glslang.y"
-                {
+#line 1824 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6774 "MachineIndependent/glslang_tab.cpp"
+#line 6679 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 1885 "MachineIndependent/glslang.y"
-             {
+#line 1829 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 6784 "MachineIndependent/glslang_tab.cpp"
+#line 6689 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 1890 "MachineIndependent/glslang.y"
-              {
+#line 1834 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 6794 "MachineIndependent/glslang_tab.cpp"
+#line 6699 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 1895 "MachineIndependent/glslang.y"
-              {
+#line 1839 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 6804 "MachineIndependent/glslang_tab.cpp"
+#line 6709 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 1900 "MachineIndependent/glslang.y"
-               {
+#line 1844 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 6814 "MachineIndependent/glslang_tab.cpp"
+#line 6719 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 1905 "MachineIndependent/glslang.y"
-              {
+#line 1849 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6824 "MachineIndependent/glslang_tab.cpp"
+#line 6729 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 1910 "MachineIndependent/glslang.y"
-               {
+#line 1854 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6834 "MachineIndependent/glslang_tab.cpp"
+#line 6739 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 1915 "MachineIndependent/glslang.y"
-              {
+#line 1859 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 6844 "MachineIndependent/glslang_tab.cpp"
+#line 6749 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1920 "MachineIndependent/glslang.y"
-               {
+#line 1864 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 6854 "MachineIndependent/glslang_tab.cpp"
+#line 6759 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1925 "MachineIndependent/glslang.y"
-            {
+#line 1869 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6863,12 +6768,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6867 "MachineIndependent/glslang_tab.cpp"
+#line 6772 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1933 "MachineIndependent/glslang.y"
-            {
+#line 1877 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6876,12 +6781,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6880 "MachineIndependent/glslang_tab.cpp"
+#line 6785 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 1941 "MachineIndependent/glslang.y"
-            {
+#line 1885 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6889,375 +6794,375 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6893 "MachineIndependent/glslang_tab.cpp"
+#line 6798 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 1949 "MachineIndependent/glslang.y"
-              {
+#line 1893 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(2);
     }
-#line 6904 "MachineIndependent/glslang_tab.cpp"
+#line 6809 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 1955 "MachineIndependent/glslang.y"
-              {
+#line 1899 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(3);
     }
-#line 6915 "MachineIndependent/glslang_tab.cpp"
+#line 6820 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 1961 "MachineIndependent/glslang.y"
-              {
+#line 1905 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
     }
-#line 6926 "MachineIndependent/glslang_tab.cpp"
+#line 6831 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 1967 "MachineIndependent/glslang.y"
-              {
+#line 1911 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6937 "MachineIndependent/glslang_tab.cpp"
+#line 6842 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1973 "MachineIndependent/glslang.y"
-              {
+#line 1917 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6948 "MachineIndependent/glslang_tab.cpp"
+#line 6853 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 1979 "MachineIndependent/glslang.y"
-              {
+#line 1923 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6959 "MachineIndependent/glslang_tab.cpp"
+#line 6864 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1985 "MachineIndependent/glslang.y"
-              {
+#line 1929 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6970 "MachineIndependent/glslang_tab.cpp"
+#line 6875 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1991 "MachineIndependent/glslang.y"
-              {
+#line 1935 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6981 "MachineIndependent/glslang_tab.cpp"
+#line 6886 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 1997 "MachineIndependent/glslang.y"
-              {
+#line 1941 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6992 "MachineIndependent/glslang_tab.cpp"
+#line 6897 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 2003 "MachineIndependent/glslang.y"
-             {
+#line 1947 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(2);
     }
-#line 7003 "MachineIndependent/glslang_tab.cpp"
+#line 6908 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 2009 "MachineIndependent/glslang.y"
-             {
+#line 1953 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(3);
     }
-#line 7014 "MachineIndependent/glslang_tab.cpp"
+#line 6919 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 2015 "MachineIndependent/glslang.y"
-             {
+#line 1959 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(4);
     }
-#line 7025 "MachineIndependent/glslang_tab.cpp"
+#line 6930 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 2021 "MachineIndependent/glslang.y"
-              {
+#line 1965 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(2);
     }
-#line 7036 "MachineIndependent/glslang_tab.cpp"
+#line 6941 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 2027 "MachineIndependent/glslang.y"
-              {
+#line 1971 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(3);
     }
-#line 7047 "MachineIndependent/glslang_tab.cpp"
+#line 6952 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 2033 "MachineIndependent/glslang.y"
-              {
+#line 1977 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(4);
     }
-#line 7058 "MachineIndependent/glslang_tab.cpp"
+#line 6963 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 2039 "MachineIndependent/glslang.y"
-              {
+#line 1983 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 7069 "MachineIndependent/glslang_tab.cpp"
+#line 6974 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 2045 "MachineIndependent/glslang.y"
-              {
+#line 1989 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 7080 "MachineIndependent/glslang_tab.cpp"
+#line 6985 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 2051 "MachineIndependent/glslang.y"
-              {
+#line 1995 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 7091 "MachineIndependent/glslang_tab.cpp"
+#line 6996 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 2057 "MachineIndependent/glslang.y"
-              {
+#line 2001 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 7102 "MachineIndependent/glslang_tab.cpp"
+#line 7007 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 2063 "MachineIndependent/glslang.y"
-              {
+#line 2007 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 7113 "MachineIndependent/glslang_tab.cpp"
+#line 7018 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 2069 "MachineIndependent/glslang.y"
-              {
+#line 2013 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 7124 "MachineIndependent/glslang_tab.cpp"
+#line 7029 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 2075 "MachineIndependent/glslang.y"
-             {
+#line 2019 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 7135 "MachineIndependent/glslang_tab.cpp"
+#line 7040 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 2081 "MachineIndependent/glslang.y"
-             {
+#line 2025 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(3);
     }
-#line 7146 "MachineIndependent/glslang_tab.cpp"
+#line 7051 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 2087 "MachineIndependent/glslang.y"
-             {
+#line 2031 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 7157 "MachineIndependent/glslang_tab.cpp"
+#line 7062 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 2093 "MachineIndependent/glslang.y"
-              {
+#line 2037 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 7168 "MachineIndependent/glslang_tab.cpp"
+#line 7073 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 2099 "MachineIndependent/glslang.y"
-              {
+#line 2043 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(3);
     }
-#line 7179 "MachineIndependent/glslang_tab.cpp"
+#line 7084 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 2105 "MachineIndependent/glslang.y"
-              {
+#line 2049 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(4);
     }
-#line 7190 "MachineIndependent/glslang_tab.cpp"
+#line 7095 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 2111 "MachineIndependent/glslang.y"
-              {
+#line 2055 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 7201 "MachineIndependent/glslang_tab.cpp"
+#line 7106 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 2117 "MachineIndependent/glslang.y"
-              {
+#line 2061 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 7212 "MachineIndependent/glslang_tab.cpp"
+#line 7117 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 2123 "MachineIndependent/glslang.y"
-              {
+#line 2067 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 7223 "MachineIndependent/glslang_tab.cpp"
+#line 7128 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 2129 "MachineIndependent/glslang.y"
-              {
+#line 2073 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 7234 "MachineIndependent/glslang_tab.cpp"
+#line 7139 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 2135 "MachineIndependent/glslang.y"
-              {
+#line 2079 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 7245 "MachineIndependent/glslang_tab.cpp"
+#line 7150 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 2141 "MachineIndependent/glslang.y"
-              {
+#line 2085 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 7256 "MachineIndependent/glslang_tab.cpp"
+#line 7161 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 2147 "MachineIndependent/glslang.y"
-            {
+#line 2091 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7265,12 +7170,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7269 "MachineIndependent/glslang_tab.cpp"
+#line 7174 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 2155 "MachineIndependent/glslang.y"
-            {
+#line 2099 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7278,12 +7183,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7282 "MachineIndependent/glslang_tab.cpp"
+#line 7187 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 2163 "MachineIndependent/glslang.y"
-            {
+#line 2107 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7291,12 +7196,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7295 "MachineIndependent/glslang_tab.cpp"
+#line 7200 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 2171 "MachineIndependent/glslang.y"
-              {
+#line 2115 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7304,12 +7209,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7308 "MachineIndependent/glslang_tab.cpp"
+#line 7213 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 2179 "MachineIndependent/glslang.y"
-              {
+#line 2123 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7317,12 +7222,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7321 "MachineIndependent/glslang_tab.cpp"
+#line 7226 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 2187 "MachineIndependent/glslang.y"
-              {
+#line 2131 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7330,12 +7235,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7334 "MachineIndependent/glslang_tab.cpp"
+#line 7239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 2195 "MachineIndependent/glslang.y"
-              {
+#line 2139 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7343,12 +7248,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7347 "MachineIndependent/glslang_tab.cpp"
+#line 7252 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 2203 "MachineIndependent/glslang.y"
-              {
+#line 2147 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7356,12 +7261,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7360 "MachineIndependent/glslang_tab.cpp"
+#line 7265 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 2211 "MachineIndependent/glslang.y"
-              {
+#line 2155 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7369,12 +7274,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7373 "MachineIndependent/glslang_tab.cpp"
+#line 7278 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 2219 "MachineIndependent/glslang.y"
-              {
+#line 2163 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7382,12 +7287,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7386 "MachineIndependent/glslang_tab.cpp"
+#line 7291 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 2227 "MachineIndependent/glslang.y"
-              {
+#line 2171 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7395,12 +7300,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7399 "MachineIndependent/glslang_tab.cpp"
+#line 7304 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 2235 "MachineIndependent/glslang.y"
-              {
+#line 2179 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7408,2120 +7313,2120 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7412 "MachineIndependent/glslang_tab.cpp"
+#line 7317 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 2243 "MachineIndependent/glslang.y"
-              {
+#line 2187 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7423 "MachineIndependent/glslang_tab.cpp"
+#line 7328 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 2249 "MachineIndependent/glslang.y"
-              {
+#line 2193 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7434 "MachineIndependent/glslang_tab.cpp"
+#line 7339 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 2255 "MachineIndependent/glslang.y"
-              {
+#line 2199 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7445 "MachineIndependent/glslang_tab.cpp"
+#line 7350 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 2261 "MachineIndependent/glslang.y"
-                {
+#line 2205 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7456 "MachineIndependent/glslang_tab.cpp"
+#line 7361 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 2267 "MachineIndependent/glslang.y"
-                {
+#line 2211 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7467 "MachineIndependent/glslang_tab.cpp"
+#line 7372 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 2273 "MachineIndependent/glslang.y"
-                {
+#line 2217 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7478 "MachineIndependent/glslang_tab.cpp"
+#line 7383 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 301:
-#line 2279 "MachineIndependent/glslang.y"
-                {
+#line 2223 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7489 "MachineIndependent/glslang_tab.cpp"
+#line 7394 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 302:
-#line 2285 "MachineIndependent/glslang.y"
-                {
+#line 2229 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7500 "MachineIndependent/glslang_tab.cpp"
+#line 7405 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 2291 "MachineIndependent/glslang.y"
-                {
+#line 2235 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7511 "MachineIndependent/glslang_tab.cpp"
+#line 7416 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 2297 "MachineIndependent/glslang.y"
-                {
+#line 2241 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7522 "MachineIndependent/glslang_tab.cpp"
+#line 7427 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 2303 "MachineIndependent/glslang.y"
-                {
+#line 2247 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7533 "MachineIndependent/glslang_tab.cpp"
+#line 7438 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 2309 "MachineIndependent/glslang.y"
-                {
+#line 2253 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7544 "MachineIndependent/glslang_tab.cpp"
+#line 7449 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 2315 "MachineIndependent/glslang.y"
-              {
+#line 2259 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7555 "MachineIndependent/glslang_tab.cpp"
+#line 7460 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 2321 "MachineIndependent/glslang.y"
-              {
+#line 2265 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7566 "MachineIndependent/glslang_tab.cpp"
+#line 7471 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 2327 "MachineIndependent/glslang.y"
-              {
+#line 2271 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7577 "MachineIndependent/glslang_tab.cpp"
+#line 7482 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 2333 "MachineIndependent/glslang.y"
-                {
+#line 2277 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7588 "MachineIndependent/glslang_tab.cpp"
+#line 7493 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 2339 "MachineIndependent/glslang.y"
-                {
+#line 2283 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7599 "MachineIndependent/glslang_tab.cpp"
+#line 7504 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 2345 "MachineIndependent/glslang.y"
-                {
+#line 2289 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7610 "MachineIndependent/glslang_tab.cpp"
+#line 7515 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 2351 "MachineIndependent/glslang.y"
-                {
+#line 2295 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7621 "MachineIndependent/glslang_tab.cpp"
+#line 7526 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 314:
-#line 2357 "MachineIndependent/glslang.y"
-                {
+#line 2301 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7632 "MachineIndependent/glslang_tab.cpp"
+#line 7537 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 315:
-#line 2363 "MachineIndependent/glslang.y"
-                {
+#line 2307 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7643 "MachineIndependent/glslang_tab.cpp"
+#line 7548 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 316:
-#line 2369 "MachineIndependent/glslang.y"
-                {
+#line 2313 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7654 "MachineIndependent/glslang_tab.cpp"
+#line 7559 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 317:
-#line 2375 "MachineIndependent/glslang.y"
-                {
+#line 2319 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7665 "MachineIndependent/glslang_tab.cpp"
+#line 7570 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 318:
-#line 2381 "MachineIndependent/glslang.y"
-                {
+#line 2325 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7676 "MachineIndependent/glslang_tab.cpp"
+#line 7581 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 319:
-#line 2387 "MachineIndependent/glslang.y"
-              {
+#line 2331 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7687 "MachineIndependent/glslang_tab.cpp"
+#line 7592 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 320:
-#line 2393 "MachineIndependent/glslang.y"
-              {
+#line 2337 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7698 "MachineIndependent/glslang_tab.cpp"
+#line 7603 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 321:
-#line 2399 "MachineIndependent/glslang.y"
-              {
+#line 2343 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7709 "MachineIndependent/glslang_tab.cpp"
+#line 7614 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 322:
-#line 2405 "MachineIndependent/glslang.y"
-                {
+#line 2349 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7720 "MachineIndependent/glslang_tab.cpp"
+#line 7625 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 323:
-#line 2411 "MachineIndependent/glslang.y"
-                {
+#line 2355 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7731 "MachineIndependent/glslang_tab.cpp"
+#line 7636 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 324:
-#line 2417 "MachineIndependent/glslang.y"
-                {
+#line 2361 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7742 "MachineIndependent/glslang_tab.cpp"
+#line 7647 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 325:
-#line 2423 "MachineIndependent/glslang.y"
-                {
+#line 2367 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7753 "MachineIndependent/glslang_tab.cpp"
+#line 7658 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 2429 "MachineIndependent/glslang.y"
-                {
+#line 2373 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7764 "MachineIndependent/glslang_tab.cpp"
+#line 7669 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 2435 "MachineIndependent/glslang.y"
-                {
+#line 2379 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7775 "MachineIndependent/glslang_tab.cpp"
+#line 7680 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 2441 "MachineIndependent/glslang.y"
-                {
+#line 2385 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7786 "MachineIndependent/glslang_tab.cpp"
+#line 7691 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 2447 "MachineIndependent/glslang.y"
-                {
+#line 2391 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7797 "MachineIndependent/glslang_tab.cpp"
+#line 7702 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 2453 "MachineIndependent/glslang.y"
-                {
+#line 2397 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7808 "MachineIndependent/glslang_tab.cpp"
+#line 7713 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 2459 "MachineIndependent/glslang.y"
-                  {
+#line 2403 "glslang.y" /* yacc.c:1646  */
+    {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7817 "MachineIndependent/glslang_tab.cpp"
+#line 7722 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 2463 "MachineIndependent/glslang.y"
-                   {
+#line 2407 "glslang.y" /* yacc.c:1646  */
+    {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7826 "MachineIndependent/glslang_tab.cpp"
+#line 7731 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 2467 "MachineIndependent/glslang.y"
-                  {
+#line 2411 "glslang.y" /* yacc.c:1646  */
+    {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtRayQuery;
     }
-#line 7835 "MachineIndependent/glslang_tab.cpp"
+#line 7740 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 2471 "MachineIndependent/glslang.y"
-                  {
+#line 2415 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 7845 "MachineIndependent/glslang_tab.cpp"
+#line 7750 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 2476 "MachineIndependent/glslang.y"
-                {
+#line 2420 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 7855 "MachineIndependent/glslang_tab.cpp"
+#line 7760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 2483 "MachineIndependent/glslang.y"
-                {
+#line 2426 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7865 "MachineIndependent/glslang_tab.cpp"
+#line 7770 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 2488 "MachineIndependent/glslang.y"
-                {
+#line 2431 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7875 "MachineIndependent/glslang_tab.cpp"
+#line 7780 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 2493 "MachineIndependent/glslang.y"
-                  {
+#line 2436 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7885 "MachineIndependent/glslang_tab.cpp"
+#line 7790 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 339:
-#line 2498 "MachineIndependent/glslang.y"
-                      {
+#line 2441 "glslang.y" /* yacc.c:1646  */
+    {
         (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 7895 "MachineIndependent/glslang_tab.cpp"
+#line 7800 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 340:
-#line 2503 "MachineIndependent/glslang.y"
-                        {
+#line 2446 "glslang.y" /* yacc.c:1646  */
+    {
         (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 7905 "MachineIndependent/glslang_tab.cpp"
+#line 7810 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 341:
-#line 2508 "MachineIndependent/glslang.y"
-                     {
+#line 2451 "glslang.y" /* yacc.c:1646  */
+    {
         (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 7915 "MachineIndependent/glslang_tab.cpp"
+#line 7820 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 2513 "MachineIndependent/glslang.y"
-                           {
+#line 2456 "glslang.y" /* yacc.c:1646  */
+    {
         (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 7925 "MachineIndependent/glslang_tab.cpp"
+#line 7830 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 2519 "MachineIndependent/glslang.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 7935 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 344:
-#line 2524 "MachineIndependent/glslang.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 7945 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 345:
-#line 2530 "MachineIndependent/glslang.y"
-                      {
+#line 2462 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 7955 "MachineIndependent/glslang_tab.cpp"
+#line 7840 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2535 "MachineIndependent/glslang.y"
-                     {
+  case 344:
+#line 2467 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 7965 "MachineIndependent/glslang_tab.cpp"
+#line 7850 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2540 "MachineIndependent/glslang.y"
-                           {
+  case 345:
+#line 2472 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 7975 "MachineIndependent/glslang_tab.cpp"
+#line 7860 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 346:
+#line 2477 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 7870 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 347:
+#line 2482 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 7880 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 2545 "MachineIndependent/glslang.y"
-                   {
+#line 2487 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
     }
-#line 7986 "MachineIndependent/glslang_tab.cpp"
+#line 7891 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 349:
-#line 2551 "MachineIndependent/glslang.y"
-                   {
+#line 2493 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
     }
-#line 7997 "MachineIndependent/glslang_tab.cpp"
+#line 7902 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 2557 "MachineIndependent/glslang.y"
-                   {
+#line 2499 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
     }
-#line 8008 "MachineIndependent/glslang_tab.cpp"
+#line 7913 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 351:
-#line 2563 "MachineIndependent/glslang.y"
-                     {
+#line 2505 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
     }
-#line 8019 "MachineIndependent/glslang_tab.cpp"
+#line 7924 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 352:
-#line 2569 "MachineIndependent/glslang.y"
-                         {
+#line 2511 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
     }
-#line 8030 "MachineIndependent/glslang_tab.cpp"
+#line 7935 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 353:
-#line 2575 "MachineIndependent/glslang.y"
-                         {
+#line 2517 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
     }
-#line 8041 "MachineIndependent/glslang_tab.cpp"
+#line 7946 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 354:
-#line 2581 "MachineIndependent/glslang.y"
-                           {
+#line 2523 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
     }
-#line 8052 "MachineIndependent/glslang_tab.cpp"
+#line 7957 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 2587 "MachineIndependent/glslang.y"
-                        {
+#line 2529 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
     }
-#line 8063 "MachineIndependent/glslang_tab.cpp"
+#line 7968 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 356:
-#line 2593 "MachineIndependent/glslang.y"
-                        {
+#line 2535 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
     }
-#line 8074 "MachineIndependent/glslang_tab.cpp"
+#line 7979 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 357:
-#line 2599 "MachineIndependent/glslang.y"
-                              {
+#line 2541 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
     }
-#line 8085 "MachineIndependent/glslang_tab.cpp"
+#line 7990 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 2605 "MachineIndependent/glslang.y"
-                              {
+#line 2547 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
     }
-#line 8096 "MachineIndependent/glslang_tab.cpp"
+#line 8001 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 359:
-#line 2611 "MachineIndependent/glslang.y"
-                          {
+#line 2553 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
     }
-#line 8107 "MachineIndependent/glslang_tab.cpp"
+#line 8012 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 360:
-#line 2617 "MachineIndependent/glslang.y"
-                                {
+#line 2559 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
     }
-#line 8118 "MachineIndependent/glslang_tab.cpp"
+#line 8023 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 361:
-#line 2623 "MachineIndependent/glslang.y"
-                 {
+#line 2565 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 8128 "MachineIndependent/glslang_tab.cpp"
+#line 8033 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 362:
-#line 2630 "MachineIndependent/glslang.y"
-                 {
+#line 2571 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 8138 "MachineIndependent/glslang_tab.cpp"
+#line 8043 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 363:
-#line 2635 "MachineIndependent/glslang.y"
-                 {
+#line 2576 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 8148 "MachineIndependent/glslang_tab.cpp"
+#line 8053 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 2640 "MachineIndependent/glslang.y"
-                   {
+#line 2581 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 8158 "MachineIndependent/glslang_tab.cpp"
+#line 8063 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 2645 "MachineIndependent/glslang.y"
-                      {
+#line 2586 "glslang.y" /* yacc.c:1646  */
+    {
         (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 8168 "MachineIndependent/glslang_tab.cpp"
+#line 8073 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 2650 "MachineIndependent/glslang.y"
-                 {
+#line 2591 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 8178 "MachineIndependent/glslang_tab.cpp"
+#line 8083 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 2655 "MachineIndependent/glslang.y"
-                 {
+#line 2596 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 8188 "MachineIndependent/glslang_tab.cpp"
+#line 8093 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 2660 "MachineIndependent/glslang.y"
-                   {
+#line 2601 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 8198 "MachineIndependent/glslang_tab.cpp"
+#line 8103 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 2666 "MachineIndependent/glslang.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 8208 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 370:
-#line 2671 "MachineIndependent/glslang.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 8218 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 371:
-#line 2676 "MachineIndependent/glslang.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 8228 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 372:
-#line 2681 "MachineIndependent/glslang.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 8238 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 373:
-#line 2686 "MachineIndependent/glslang.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 8248 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 374:
-#line 2692 "MachineIndependent/glslang.y"
-                      {
+#line 2607 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 8258 "MachineIndependent/glslang_tab.cpp"
+#line 8113 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2697 "MachineIndependent/glslang.y"
-                 {
+  case 370:
+#line 2612 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8123 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 371:
+#line 2617 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 8268 "MachineIndependent/glslang_tab.cpp"
+#line 8133 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2702 "MachineIndependent/glslang.y"
-                      {
+  case 372:
+#line 2622 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 8278 "MachineIndependent/glslang_tab.cpp"
+#line 8143 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 373:
+#line 2627 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8153 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 374:
+#line 2632 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8163 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 375:
+#line 2637 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8173 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 376:
+#line 2642 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8183 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 2709 "MachineIndependent/glslang.y"
-                      {
+#line 2648 "glslang.y" /* yacc.c:1646  */
+    {
         (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 8288 "MachineIndependent/glslang_tab.cpp"
+#line 8193 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 2714 "MachineIndependent/glslang.y"
-                {
+#line 2653 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 8298 "MachineIndependent/glslang_tab.cpp"
+#line 8203 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 2719 "MachineIndependent/glslang.y"
-                {
+#line 2658 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 8308 "MachineIndependent/glslang_tab.cpp"
+#line 8213 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 380:
-#line 2724 "MachineIndependent/glslang.y"
-                     {
+#line 2663 "glslang.y" /* yacc.c:1646  */
+    {
         (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 8318 "MachineIndependent/glslang_tab.cpp"
+#line 8223 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 381:
-#line 2729 "MachineIndependent/glslang.y"
-                  {
+#line 2668 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 8328 "MachineIndependent/glslang_tab.cpp"
+#line 8233 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 382:
-#line 2734 "MachineIndependent/glslang.y"
-                 {
+#line 2673 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 8338 "MachineIndependent/glslang_tab.cpp"
+#line 8243 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 383:
-#line 2739 "MachineIndependent/glslang.y"
-                 {
+#line 2678 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 8348 "MachineIndependent/glslang_tab.cpp"
+#line 8253 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 384:
-#line 2744 "MachineIndependent/glslang.y"
-                   {
+#line 2683 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 8358 "MachineIndependent/glslang_tab.cpp"
+#line 8263 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 385:
-#line 2749 "MachineIndependent/glslang.y"
-                      {
+#line 2688 "glslang.y" /* yacc.c:1646  */
+    {
         (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 8368 "MachineIndependent/glslang_tab.cpp"
+#line 8273 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 386:
-#line 2754 "MachineIndependent/glslang.y"
-                 {
+#line 2693 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 8378 "MachineIndependent/glslang_tab.cpp"
+#line 8283 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 387:
-#line 2759 "MachineIndependent/glslang.y"
-                 {
+#line 2698 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 8388 "MachineIndependent/glslang_tab.cpp"
+#line 8293 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 388:
-#line 2764 "MachineIndependent/glslang.y"
-                   {
+#line 2703 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 8398 "MachineIndependent/glslang_tab.cpp"
+#line 8303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 389:
-#line 2769 "MachineIndependent/glslang.y"
-                      {
+#line 2708 "glslang.y" /* yacc.c:1646  */
+    {
         (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 8408 "MachineIndependent/glslang_tab.cpp"
+#line 8313 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 390:
-#line 2774 "MachineIndependent/glslang.y"
-              {
+#line 2713 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 8418 "MachineIndependent/glslang_tab.cpp"
+#line 8323 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 391:
-#line 2779 "MachineIndependent/glslang.y"
-                    {
+#line 2718 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 8428 "MachineIndependent/glslang_tab.cpp"
+#line 8333 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 392:
-#line 2785 "MachineIndependent/glslang.y"
-                    {
+#line 2724 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 8438 "MachineIndependent/glslang_tab.cpp"
+#line 8343 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 393:
-#line 2790 "MachineIndependent/glslang.y"
-                          {
+#line 2729 "glslang.y" /* yacc.c:1646  */
+    {
         (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 8448 "MachineIndependent/glslang_tab.cpp"
+#line 8353 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 394:
-#line 2795 "MachineIndependent/glslang.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 8458 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 395:
-#line 2800 "MachineIndependent/glslang.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 8468 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 396:
-#line 2805 "MachineIndependent/glslang.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 8478 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 397:
-#line 2810 "MachineIndependent/glslang.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 8488 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 398:
-#line 2815 "MachineIndependent/glslang.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 8498 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 399:
-#line 2820 "MachineIndependent/glslang.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 8508 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 400:
-#line 2825 "MachineIndependent/glslang.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 8518 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 401:
-#line 2830 "MachineIndependent/glslang.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 8528 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 402:
-#line 2835 "MachineIndependent/glslang.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 8538 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 403:
-#line 2840 "MachineIndependent/glslang.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 8548 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 404:
-#line 2845 "MachineIndependent/glslang.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 8558 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 405:
-#line 2851 "MachineIndependent/glslang.y"
-                       {
+#line 2734 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
     }
-#line 8569 "MachineIndependent/glslang_tab.cpp"
+#line 8364 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2857 "MachineIndependent/glslang.y"
-                             {
+  case 395:
+#line 2740 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
     }
-#line 8580 "MachineIndependent/glslang_tab.cpp"
+#line 8375 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2863 "MachineIndependent/glslang.y"
-                       {
+  case 396:
+#line 2746 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
+    }
+#line 8385 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 397:
+#line 2751 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
+    }
+#line 8395 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 398:
+#line 2756 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
+    }
+#line 8405 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 399:
+#line 2761 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
     }
-#line 8591 "MachineIndependent/glslang_tab.cpp"
+#line 8416 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2869 "MachineIndependent/glslang.y"
-                     {
+  case 400:
+#line 2767 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
+    }
+#line 8426 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 401:
+#line 2772 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
+    }
+#line 8436 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 402:
+#line 2777 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8446 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 403:
+#line 2782 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
     }
-#line 8602 "MachineIndependent/glslang_tab.cpp"
+#line 8457 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2875 "MachineIndependent/glslang.y"
-                          {
+  case 404:
+#line 2788 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8467 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 405:
+#line 2793 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8477 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 406:
+#line 2798 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8487 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 407:
+#line 2803 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
     }
-#line 8613 "MachineIndependent/glslang_tab.cpp"
+#line 8498 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 408:
+#line 2809 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8508 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 409:
+#line 2814 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8518 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 410:
-#line 2881 "MachineIndependent/glslang.y"
-                {
+#line 2819 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 8623 "MachineIndependent/glslang_tab.cpp"
+#line 8528 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 411:
-#line 2886 "MachineIndependent/glslang.y"
-                     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
-    }
-#line 8633 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 412:
-#line 2891 "MachineIndependent/glslang.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
-    }
-#line 8643 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 413:
-#line 2896 "MachineIndependent/glslang.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
-    }
-#line 8653 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 414:
-#line 2901 "MachineIndependent/glslang.y"
-                 {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
-    }
-#line 8663 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 415:
-#line 2906 "MachineIndependent/glslang.y"
-                      {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
-    }
-#line 8673 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 416:
-#line 2912 "MachineIndependent/glslang.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 8683 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 417:
-#line 2917 "MachineIndependent/glslang.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 8693 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 418:
-#line 2922 "MachineIndependent/glslang.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 8703 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 419:
-#line 2927 "MachineIndependent/glslang.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 8713 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 420:
-#line 2932 "MachineIndependent/glslang.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 8723 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 421:
-#line 2937 "MachineIndependent/glslang.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 8733 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 422:
-#line 2942 "MachineIndependent/glslang.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 8743 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 423:
-#line 2947 "MachineIndependent/glslang.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 8753 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 424:
-#line 2952 "MachineIndependent/glslang.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 8763 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 425:
-#line 2957 "MachineIndependent/glslang.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 8773 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 426:
-#line 2962 "MachineIndependent/glslang.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 8783 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 427:
-#line 2967 "MachineIndependent/glslang.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 8793 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 428:
-#line 2973 "MachineIndependent/glslang.y"
-                   {
+#line 2824 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
     }
-#line 8804 "MachineIndependent/glslang_tab.cpp"
+#line 8539 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2979 "MachineIndependent/glslang.y"
-                   {
+  case 412:
+#line 2830 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
     }
-#line 8815 "MachineIndependent/glslang_tab.cpp"
+#line 8550 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2985 "MachineIndependent/glslang.y"
-                   {
+  case 413:
+#line 2836 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
     }
-#line 8826 "MachineIndependent/glslang_tab.cpp"
+#line 8561 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2991 "MachineIndependent/glslang.y"
-                     {
+  case 414:
+#line 2842 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
     }
-#line 8837 "MachineIndependent/glslang_tab.cpp"
+#line 8572 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2997 "MachineIndependent/glslang.y"
-                        {
+  case 415:
+#line 2848 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
+    }
+#line 8582 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 416:
+#line 2853 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
     }
-#line 8848 "MachineIndependent/glslang_tab.cpp"
+#line 8593 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 3003 "MachineIndependent/glslang.y"
-                        {
+  case 417:
+#line 2859 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
     }
-#line 8859 "MachineIndependent/glslang_tab.cpp"
+#line 8604 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 3009 "MachineIndependent/glslang.y"
-                          {
+  case 418:
+#line 2865 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
     }
-#line 8870 "MachineIndependent/glslang_tab.cpp"
+#line 8615 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 3015 "MachineIndependent/glslang.y"
-                       {
+  case 419:
+#line 2871 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
+    }
+#line 8625 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 420:
+#line 2876 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
+    }
+#line 8635 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 421:
+#line 2881 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
+    }
+#line 8645 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 422:
+#line 2886 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
+    }
+#line 8655 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 423:
+#line 2891 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
+    }
+#line 8665 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 424:
+#line 2896 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
     }
-#line 8881 "MachineIndependent/glslang_tab.cpp"
+#line 8676 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 3021 "MachineIndependent/glslang.y"
-                       {
+  case 425:
+#line 2902 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
+    }
+#line 8686 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 426:
+#line 2907 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
+    }
+#line 8696 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 427:
+#line 2912 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
+    }
+#line 8706 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 428:
+#line 2917 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
     }
-#line 8892 "MachineIndependent/glslang_tab.cpp"
+#line 8717 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 3027 "MachineIndependent/glslang.y"
-                     {
+  case 429:
+#line 2923 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
+    }
+#line 8727 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 430:
+#line 2928 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
+    }
+#line 8737 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 431:
+#line 2933 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8747 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 432:
+#line 2938 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
     }
-#line 8903 "MachineIndependent/glslang_tab.cpp"
+#line 8758 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 3033 "MachineIndependent/glslang.y"
-                          {
+  case 433:
+#line 2944 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8768 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 434:
+#line 2949 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8778 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 435:
+#line 2954 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8788 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 436:
+#line 2959 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
     }
-#line 8914 "MachineIndependent/glslang_tab.cpp"
+#line 8799 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 437:
+#line 2965 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8809 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 438:
+#line 2970 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 8819 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 439:
-#line 3039 "MachineIndependent/glslang.y"
-              {
+#line 2975 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 8924 "MachineIndependent/glslang_tab.cpp"
+#line 8829 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 440:
-#line 3044 "MachineIndependent/glslang.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
-    }
-#line 8934 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 441:
-#line 3049 "MachineIndependent/glslang.y"
-               {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
-    }
-#line 8944 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 442:
-#line 3055 "MachineIndependent/glslang.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 8954 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 443:
-#line 3060 "MachineIndependent/glslang.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 8964 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 444:
-#line 3065 "MachineIndependent/glslang.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 8974 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 445:
-#line 3070 "MachineIndependent/glslang.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 8984 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 446:
-#line 3075 "MachineIndependent/glslang.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 8994 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 447:
-#line 3080 "MachineIndependent/glslang.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 9004 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 448:
-#line 3085 "MachineIndependent/glslang.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 9014 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 449:
-#line 3090 "MachineIndependent/glslang.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 9024 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 450:
-#line 3095 "MachineIndependent/glslang.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 9034 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 451:
-#line 3100 "MachineIndependent/glslang.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 9044 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 452:
-#line 3105 "MachineIndependent/glslang.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 9054 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 453:
-#line 3110 "MachineIndependent/glslang.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 9064 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 454:
-#line 3115 "MachineIndependent/glslang.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 9074 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 455:
-#line 3120 "MachineIndependent/glslang.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 9084 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 456:
-#line 3125 "MachineIndependent/glslang.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 9094 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 457:
-#line 3130 "MachineIndependent/glslang.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 9104 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 458:
-#line 3135 "MachineIndependent/glslang.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 9114 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 459:
-#line 3140 "MachineIndependent/glslang.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 9124 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 460:
-#line 3145 "MachineIndependent/glslang.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 9134 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 461:
-#line 3150 "MachineIndependent/glslang.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 9144 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 462:
-#line 3155 "MachineIndependent/glslang.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 9154 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 463:
-#line 3160 "MachineIndependent/glslang.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 9164 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 464:
-#line 3165 "MachineIndependent/glslang.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 9174 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 465:
-#line 3170 "MachineIndependent/glslang.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 9184 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 466:
-#line 3175 "MachineIndependent/glslang.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 9194 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 467:
-#line 3180 "MachineIndependent/glslang.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 9204 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 468:
-#line 3185 "MachineIndependent/glslang.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 9214 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 469:
-#line 3190 "MachineIndependent/glslang.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 9224 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 470:
-#line 3195 "MachineIndependent/glslang.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 9234 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 471:
-#line 3200 "MachineIndependent/glslang.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 9244 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 472:
-#line 3206 "MachineIndependent/glslang.y"
-                 {
+#line 2980 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
     }
-#line 9255 "MachineIndependent/glslang_tab.cpp"
+#line 8840 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 3212 "MachineIndependent/glslang.y"
-                 {
+  case 441:
+#line 2986 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
+    }
+#line 8850 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 442:
+#line 2991 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
+    }
+#line 8860 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 443:
+#line 2996 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
+    }
+#line 8870 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 444:
+#line 3001 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
     }
-#line 9266 "MachineIndependent/glslang_tab.cpp"
+#line 8881 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 3218 "MachineIndependent/glslang.y"
-                 {
+  case 445:
+#line 3007 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
+    }
+#line 8891 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 446:
+#line 3012 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
+    }
+#line 8901 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 447:
+#line 3017 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
+    }
+#line 8911 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 448:
+#line 3022 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
     }
-#line 9277 "MachineIndependent/glslang_tab.cpp"
+#line 8922 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 3224 "MachineIndependent/glslang.y"
-                     {
+  case 449:
+#line 3028 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
+    }
+#line 8932 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 450:
+#line 3033 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
+    }
+#line 8942 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 451:
+#line 3038 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
+    }
+#line 8952 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 452:
+#line 3043 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
     }
-#line 9288 "MachineIndependent/glslang_tab.cpp"
+#line 8963 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 3230 "MachineIndependent/glslang.y"
-                   {
+  case 453:
+#line 3049 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
+    }
+#line 8973 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 454:
+#line 3054 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
+    }
+#line 8983 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 455:
+#line 3059 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
+    }
+#line 8993 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 456:
+#line 3064 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
     }
-#line 9299 "MachineIndependent/glslang_tab.cpp"
+#line 9004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 3236 "MachineIndependent/glslang.y"
-                     {
+  case 457:
+#line 3070 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
+    }
+#line 9014 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 458:
+#line 3075 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
+    }
+#line 9024 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 459:
+#line 3080 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
+    }
+#line 9034 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 460:
+#line 3085 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
     }
-#line 9310 "MachineIndependent/glslang_tab.cpp"
+#line 9045 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 3242 "MachineIndependent/glslang.y"
-                      {
+  case 461:
+#line 3091 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
+    }
+#line 9055 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 462:
+#line 3096 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
+    }
+#line 9065 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 463:
+#line 3101 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9075 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 464:
+#line 3106 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
     }
-#line 9321 "MachineIndependent/glslang_tab.cpp"
+#line 9086 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 3248 "MachineIndependent/glslang.y"
-                      {
+  case 465:
+#line 3112 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9096 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 466:
+#line 3117 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9106 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 467:
+#line 3122 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9116 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 468:
+#line 3127 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
     }
-#line 9332 "MachineIndependent/glslang_tab.cpp"
+#line 9127 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 3254 "MachineIndependent/glslang.y"
-                        {
+  case 469:
+#line 3133 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9137 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 470:
+#line 3138 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9147 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 471:
+#line 3143 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9157 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 472:
+#line 3148 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
     }
-#line 9343 "MachineIndependent/glslang_tab.cpp"
+#line 9168 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 3260 "MachineIndependent/glslang.y"
-                   {
+  case 473:
+#line 3154 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9178 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 474:
+#line 3159 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9188 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 475:
+#line 3164 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9198 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 476:
+#line 3169 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
     }
-#line 9354 "MachineIndependent/glslang_tab.cpp"
+#line 9209 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 3266 "MachineIndependent/glslang.y"
-                        {
+  case 477:
+#line 3175 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9219 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 478:
+#line 3180 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9229 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 479:
+#line 3185 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9239 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 480:
+#line 3190 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
     }
-#line 9365 "MachineIndependent/glslang_tab.cpp"
+#line 9250 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 481:
+#line 3196 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9260 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 482:
+#line 3201 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 9270 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 483:
-#line 3273 "MachineIndependent/glslang.y"
-                         {  // GL_OES_EGL_image_external
+#line 3206 "glslang.y" /* yacc.c:1646  */
+    {  // 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 9376 "MachineIndependent/glslang_tab.cpp"
+#line 9281 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 484:
-#line 3279 "MachineIndependent/glslang.y"
-                              { // GL_EXT_YUV_target
+#line 3212 "glslang.y" /* yacc.c:1646  */
+    { // 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 9387 "MachineIndependent/glslang_tab.cpp"
+#line 9292 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 485:
-#line 3286 "MachineIndependent/glslang.y"
-                   {
+#line 3218 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 9398 "MachineIndependent/glslang_tab.cpp"
+#line 9303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 486:
-#line 3292 "MachineIndependent/glslang.y"
-                     {
+#line 3224 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 9409 "MachineIndependent/glslang_tab.cpp"
+#line 9314 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 487:
-#line 3298 "MachineIndependent/glslang.y"
-                      {
+#line 3230 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 9421 "MachineIndependent/glslang_tab.cpp"
+#line 9326 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 488:
-#line 3305 "MachineIndependent/glslang.y"
-                        {
+#line 3237 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 9433 "MachineIndependent/glslang_tab.cpp"
+#line 9338 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 489:
-#line 3312 "MachineIndependent/glslang.y"
-                    {
+#line 3244 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 9444 "MachineIndependent/glslang_tab.cpp"
+#line 9349 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 490:
-#line 3318 "MachineIndependent/glslang.y"
-                      {
+#line 3250 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 9455 "MachineIndependent/glslang_tab.cpp"
+#line 9360 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 491:
-#line 3324 "MachineIndependent/glslang.y"
-                    {
+#line 3256 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 9466 "MachineIndependent/glslang_tab.cpp"
+#line 9371 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 492:
-#line 3330 "MachineIndependent/glslang.y"
-                      {
+#line 3262 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 9477 "MachineIndependent/glslang_tab.cpp"
+#line 9382 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 493:
-#line 3336 "MachineIndependent/glslang.y"
-                 {
+#line 3268 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).coopmat = true;
     }
-#line 9488 "MachineIndependent/glslang_tab.cpp"
+#line 9393 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 494:
-#line 3342 "MachineIndependent/glslang.y"
-                 {
+#line 3274 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).coopmat = true;
     }
-#line 9499 "MachineIndependent/glslang_tab.cpp"
+#line 9404 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 495:
-#line 3348 "MachineIndependent/glslang.y"
-                 {
+#line 3280 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).coopmat = true;
     }
-#line 9510 "MachineIndependent/glslang_tab.cpp"
+#line 9415 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 496:
-#line 3356 "MachineIndependent/glslang.y"
-                       {
+#line 3287 "glslang.y" /* yacc.c:1646  */
+    {
         (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 9520 "MachineIndependent/glslang_tab.cpp"
+#line 9425 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 497:
-#line 3361 "MachineIndependent/glslang.y"
-                {
+#line 3292 "glslang.y" /* yacc.c:1646  */
+    {
         //
         // This is for user defined type names.  The lexical phase looked up the
         // type.
@@ -9534,48 +9439,48 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 9538 "MachineIndependent/glslang_tab.cpp"
+#line 9443 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 498:
-#line 3377 "MachineIndependent/glslang.y"
-                     {
+#line 3308 "glslang.y" /* yacc.c:1646  */
+    {
         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 9548 "MachineIndependent/glslang_tab.cpp"
+#line 9453 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 499:
-#line 3382 "MachineIndependent/glslang.y"
-                       {
+#line 3313 "glslang.y" /* yacc.c:1646  */
+    {
         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 9558 "MachineIndependent/glslang_tab.cpp"
+#line 9463 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 500:
-#line 3387 "MachineIndependent/glslang.y"
-                    {
+#line 3318 "glslang.y" /* yacc.c:1646  */
+    {
         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 9568 "MachineIndependent/glslang_tab.cpp"
+#line 9473 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 501:
-#line 3395 "MachineIndependent/glslang.y"
-                                   { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9574 "MachineIndependent/glslang_tab.cpp"
+#line 3326 "glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
+#line 9479 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 502:
-#line 3395 "MachineIndependent/glslang.y"
-                                                                                                                   {
+#line 3326 "glslang.y" /* yacc.c:1646  */
+    {
         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);
@@ -9586,38 +9491,38 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9590 "MachineIndependent/glslang_tab.cpp"
+#line 9495 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 503:
-#line 3406 "MachineIndependent/glslang.y"
-                        { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9596 "MachineIndependent/glslang_tab.cpp"
+#line 3337 "glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
+#line 9501 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 504:
-#line 3406 "MachineIndependent/glslang.y"
-                                                                                                        {
+#line 3337 "glslang.y" /* yacc.c:1646  */
+    {
         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 9608 "MachineIndependent/glslang_tab.cpp"
+#line 9513 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 505:
-#line 3416 "MachineIndependent/glslang.y"
-                         {
+#line 3347 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 9616 "MachineIndependent/glslang_tab.cpp"
+#line 9521 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 506:
-#line 3419 "MachineIndependent/glslang.y"
-                                                 {
+#line 3350 "glslang.y" /* yacc.c:1646  */
+    {
         (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) {
@@ -9627,12 +9532,12 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9631 "MachineIndependent/glslang_tab.cpp"
+#line 9536 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 507:
-#line 3432 "MachineIndependent/glslang.y"
-                                                      {
+#line 3363 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -9654,12 +9559,12 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9658 "MachineIndependent/glslang_tab.cpp"
+#line 9563 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 508:
-#line 3454 "MachineIndependent/glslang.y"
-                                                                     {
+#line 3385 "glslang.y" /* yacc.c:1646  */
+    {
         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");
@@ -9683,39 +9588,39 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9687 "MachineIndependent/glslang_tab.cpp"
+#line 9592 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 509:
-#line 3481 "MachineIndependent/glslang.y"
-                        {
+#line 3412 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9696 "MachineIndependent/glslang_tab.cpp"
+#line 9601 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 510:
-#line 3485 "MachineIndependent/glslang.y"
-                                                     {
+#line 3416 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9704 "MachineIndependent/glslang_tab.cpp"
+#line 9609 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 511:
-#line 3491 "MachineIndependent/glslang.y"
-                 {
+#line 3422 "glslang.y" /* yacc.c:1646  */
+    {
         (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 9714 "MachineIndependent/glslang_tab.cpp"
+#line 9619 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 512:
-#line 3496 "MachineIndependent/glslang.y"
-                                 {
+#line 3427 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
         (yyval.interm.typeLine).type = new TType(EbtVoid);
@@ -9723,236 +9628,236 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9727 "MachineIndependent/glslang_tab.cpp"
+#line 9632 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 513:
-#line 3507 "MachineIndependent/glslang.y"
-                            {
+#line 3438 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9735 "MachineIndependent/glslang_tab.cpp"
+#line 9640 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 514:
-#line 3511 "MachineIndependent/glslang.y"
-                                              {
+#line 3442 "glslang.y" /* yacc.c:1646  */
+    {
         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 9746 "MachineIndependent/glslang_tab.cpp"
+#line 9651 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 515:
-#line 3517 "MachineIndependent/glslang.y"
-                                                    {
+#line 3448 "glslang.y" /* yacc.c:1646  */
+    {
         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 9757 "MachineIndependent/glslang_tab.cpp"
+#line 9662 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 516:
-#line 3528 "MachineIndependent/glslang.y"
-                  {
+#line 3459 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 9765 "MachineIndependent/glslang_tab.cpp"
+#line 9670 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 517:
-#line 3531 "MachineIndependent/glslang.y"
-                                         {
+#line 3462 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9773 "MachineIndependent/glslang_tab.cpp"
+#line 9678 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 518:
-#line 3538 "MachineIndependent/glslang.y"
-                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9779 "MachineIndependent/glslang_tab.cpp"
+#line 3469 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9684 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 519:
-#line 3542 "MachineIndependent/glslang.y"
-                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9785 "MachineIndependent/glslang_tab.cpp"
+#line 3473 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9690 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 520:
-#line 3543 "MachineIndependent/glslang.y"
-                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9791 "MachineIndependent/glslang_tab.cpp"
+#line 3474 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 521:
-#line 3549 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9797 "MachineIndependent/glslang_tab.cpp"
+#line 3480 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9702 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 522:
-#line 3550 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9803 "MachineIndependent/glslang_tab.cpp"
+#line 3481 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9708 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 523:
-#line 3551 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9809 "MachineIndependent/glslang_tab.cpp"
+#line 3482 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9714 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 524:
-#line 3552 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9815 "MachineIndependent/glslang_tab.cpp"
+#line 3483 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9720 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 525:
-#line 3553 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9821 "MachineIndependent/glslang_tab.cpp"
+#line 3484 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9726 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 526:
-#line 3554 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9827 "MachineIndependent/glslang_tab.cpp"
+#line 3485 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9732 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 527:
-#line 3555 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9833 "MachineIndependent/glslang_tab.cpp"
+#line 3486 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9738 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 528:
-#line 3558 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9839 "MachineIndependent/glslang_tab.cpp"
+#line 3488 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9744 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 529:
-#line 3566 "MachineIndependent/glslang.y"
-                       {
+#line 3494 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
         parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
     }
-#line 9849 "MachineIndependent/glslang_tab.cpp"
+#line 9754 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 530:
-#line 3576 "MachineIndependent/glslang.y"
-                             { (yyval.interm.intermNode) = 0; }
-#line 9855 "MachineIndependent/glslang_tab.cpp"
+#line 3503 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = 0; }
+#line 9760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 531:
-#line 3577 "MachineIndependent/glslang.y"
-                 {
+#line 3504 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9864 "MachineIndependent/glslang_tab.cpp"
+#line 9769 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 532:
-#line 3581 "MachineIndependent/glslang.y"
-                     {
+#line 3508 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9873 "MachineIndependent/glslang_tab.cpp"
+#line 9778 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 533:
-#line 3585 "MachineIndependent/glslang.y"
-                  {
+#line 3512 "glslang.y" /* yacc.c:1646  */
+    {
         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 9883 "MachineIndependent/glslang_tab.cpp"
+#line 9788 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 534:
-#line 3593 "MachineIndependent/glslang.y"
-                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9889 "MachineIndependent/glslang_tab.cpp"
+#line 3520 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9794 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 535:
-#line 3594 "MachineIndependent/glslang.y"
-                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9895 "MachineIndependent/glslang_tab.cpp"
+#line 3521 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9800 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 536:
-#line 3598 "MachineIndependent/glslang.y"
-      {
+#line 3525 "glslang.y" /* yacc.c:1646  */
+    {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9903 "MachineIndependent/glslang_tab.cpp"
+#line 9808 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 537:
-#line 3601 "MachineIndependent/glslang.y"
-                          {
+#line 3528 "glslang.y" /* yacc.c:1646  */
+    {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9912 "MachineIndependent/glslang_tab.cpp"
+#line 9817 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 538:
-#line 3605 "MachineIndependent/glslang.y"
-      {
+#line 3532 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9922 "MachineIndependent/glslang_tab.cpp"
+#line 9827 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 539:
-#line 3610 "MachineIndependent/glslang.y"
-                       {
+#line 3537 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9933 "MachineIndependent/glslang_tab.cpp"
+#line 9838 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 540:
-#line 3619 "MachineIndependent/glslang.y"
-                             {
+#line 3546 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = 0;
     }
-#line 9941 "MachineIndependent/glslang_tab.cpp"
+#line 9846 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 541:
-#line 3622 "MachineIndependent/glslang.y"
-                                            {
+#line 3549 "glslang.y" /* yacc.c:1646  */
+    {
         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 9951 "MachineIndependent/glslang_tab.cpp"
+#line 9856 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 542:
-#line 3630 "MachineIndependent/glslang.y"
-                {
+#line 3557 "glslang.y" /* yacc.c:1646  */
+    {
         (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)) {
@@ -9960,12 +9865,12 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9964 "MachineIndependent/glslang_tab.cpp"
+#line 9869 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 543:
-#line 3638 "MachineIndependent/glslang.y"
-                               {
+#line 3565 "glslang.y" /* yacc.c:1646  */
+    {
         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));
@@ -9973,77 +9878,77 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9977 "MachineIndependent/glslang_tab.cpp"
+#line 9882 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 544:
-#line 3649 "MachineIndependent/glslang.y"
-                 { (yyval.interm.intermNode) = 0; }
-#line 9983 "MachineIndependent/glslang_tab.cpp"
+#line 3576 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = 0; }
+#line 9888 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 545:
-#line 3650 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9989 "MachineIndependent/glslang_tab.cpp"
+#line 3577 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
+#line 9894 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 546:
-#line 3654 "MachineIndependent/glslang.y"
-                                        {
+#line 3581 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9997 "MachineIndependent/glslang_tab.cpp"
+#line 9902 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 547:
-#line 3658 "MachineIndependent/glslang.y"
-                                                  {
+#line 3585 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10006 "MachineIndependent/glslang_tab.cpp"
+#line 9911 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 548:
-#line 3665 "MachineIndependent/glslang.y"
-                                                                    {
+#line 3592 "glslang.y" /* yacc.c:1646  */
+    {
         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 10015 "MachineIndependent/glslang_tab.cpp"
+#line 9920 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 549:
-#line 3672 "MachineIndependent/glslang.y"
-                                             {
+#line 3599 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 10024 "MachineIndependent/glslang_tab.cpp"
+#line 9929 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 550:
-#line 3676 "MachineIndependent/glslang.y"
-                       {
+#line 3603 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 10033 "MachineIndependent/glslang_tab.cpp"
+#line 9938 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 551:
-#line 3684 "MachineIndependent/glslang.y"
-                 {
+#line 3611 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 10042 "MachineIndependent/glslang_tab.cpp"
+#line 9947 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 552:
-#line 3688 "MachineIndependent/glslang.y"
-                                                        {
+#line 3615 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
         TType type((yyvsp[-3].interm.type));
@@ -10053,29 +9958,29 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 10057 "MachineIndependent/glslang_tab.cpp"
+#line 9962 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 553:
-#line 3701 "MachineIndependent/glslang.y"
-                                     {
+#line 3628 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10065 "MachineIndependent/glslang_tab.cpp"
+#line 9970 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 554:
-#line 3705 "MachineIndependent/glslang.y"
-                                               {
+#line 3632 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10074 "MachineIndependent/glslang_tab.cpp"
+#line 9979 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 555:
-#line 3712 "MachineIndependent/glslang.y"
-                                               {
+#line 3639 "glslang.y" /* yacc.c:1646  */
+    {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
         ++parseContext.statementNestingLevel;
@@ -10083,12 +9988,12 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 10087 "MachineIndependent/glslang_tab.cpp"
+#line 9992 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 556:
-#line 3720 "MachineIndependent/glslang.y"
-                                                 {
+#line 3647 "glslang.y" /* yacc.c:1646  */
+    {
         (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();
@@ -10097,28 +10002,28 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10101 "MachineIndependent/glslang_tab.cpp"
+#line 10006 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 557:
-#line 3732 "MachineIndependent/glslang.y"
-                    {
+#line 3659 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = 0;
     }
-#line 10109 "MachineIndependent/glslang_tab.cpp"
+#line 10014 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 558:
-#line 3735 "MachineIndependent/glslang.y"
-                     {
+#line 3662 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10117 "MachineIndependent/glslang_tab.cpp"
+#line 10022 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 559:
-#line 3741 "MachineIndependent/glslang.y"
-                            {
+#line 3668 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
             parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
@@ -10130,12 +10035,12 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 10134 "MachineIndependent/glslang_tab.cpp"
+#line 10039 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 560:
-#line 3753 "MachineIndependent/glslang.y"
-                    {
+#line 3680 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
             parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
@@ -10144,29 +10049,29 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 10148 "MachineIndependent/glslang_tab.cpp"
+#line 10053 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 561:
-#line 3765 "MachineIndependent/glslang.y"
-                                        {
+#line 3692 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10156 "MachineIndependent/glslang_tab.cpp"
+#line 10061 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 562:
-#line 3769 "MachineIndependent/glslang.y"
-                                                  {
+#line 3696 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10165 "MachineIndependent/glslang_tab.cpp"
+#line 10070 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 563:
-#line 3776 "MachineIndependent/glslang.y"
-                       {
+#line 3703 "glslang.y" /* yacc.c:1646  */
+    {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
         parseContext.symbolTable.push();
@@ -10174,34 +10079,34 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10178 "MachineIndependent/glslang_tab.cpp"
+#line 10083 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 564:
-#line 3784 "MachineIndependent/glslang.y"
-                                                   {
+#line 3711 "glslang.y" /* yacc.c:1646  */
+    {
         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 10190 "MachineIndependent/glslang_tab.cpp"
+#line 10095 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 565:
-#line 3791 "MachineIndependent/glslang.y"
-         {
+#line 3718 "glslang.y" /* yacc.c:1646  */
+    {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10200 "MachineIndependent/glslang_tab.cpp"
+#line 10105 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 566:
-#line 3796 "MachineIndependent/glslang.y"
-                                                                  {
+#line 3723 "glslang.y" /* yacc.c:1646  */
+    {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
 
@@ -10212,23 +10117,23 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10216 "MachineIndependent/glslang_tab.cpp"
+#line 10121 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 567:
-#line 3807 "MachineIndependent/glslang.y"
-                     {
+#line 3734 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10227 "MachineIndependent/glslang_tab.cpp"
+#line 10132 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 568:
-#line 3813 "MachineIndependent/glslang.y"
-                                                                               {
+#line 3740 "glslang.y" /* yacc.c:1646  */
+    {
         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);
@@ -10240,166 +10145,166 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10244 "MachineIndependent/glslang_tab.cpp"
+#line 10149 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 569:
-#line 3828 "MachineIndependent/glslang.y"
-                           {
+#line 3755 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10252 "MachineIndependent/glslang_tab.cpp"
+#line 10157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 570:
-#line 3831 "MachineIndependent/glslang.y"
-                            {
+#line 3758 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10260 "MachineIndependent/glslang_tab.cpp"
+#line 10165 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 571:
-#line 3837 "MachineIndependent/glslang.y"
-                {
+#line 3764 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10268 "MachineIndependent/glslang_tab.cpp"
+#line 10173 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 572:
-#line 3840 "MachineIndependent/glslang.y"
-                        {
+#line 3767 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 10276 "MachineIndependent/glslang_tab.cpp"
+#line 10181 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 573:
-#line 3846 "MachineIndependent/glslang.y"
-                             {
+#line 3773 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 10285 "MachineIndependent/glslang_tab.cpp"
+#line 10190 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 574:
-#line 3850 "MachineIndependent/glslang.y"
-                                         {
+#line 3777 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10294 "MachineIndependent/glslang_tab.cpp"
+#line 10199 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 575:
-#line 3857 "MachineIndependent/glslang.y"
-                         {
+#line 3784 "glslang.y" /* yacc.c:1646  */
+    {
         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 10304 "MachineIndependent/glslang_tab.cpp"
+#line 10209 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 576:
-#line 3862 "MachineIndependent/glslang.y"
-                      {
+#line 3789 "glslang.y" /* yacc.c:1646  */
+    {
         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 10314 "MachineIndependent/glslang_tab.cpp"
+#line 10219 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 577:
-#line 3867 "MachineIndependent/glslang.y"
-                       {
+#line 3794 "glslang.y" /* yacc.c:1646  */
+    {
         (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 10326 "MachineIndependent/glslang_tab.cpp"
+#line 10231 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 578:
-#line 3874 "MachineIndependent/glslang.y"
-                                  {
+#line 3801 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10334 "MachineIndependent/glslang_tab.cpp"
+#line 10239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 579:
-#line 3877 "MachineIndependent/glslang.y"
-                        {
+#line 3804 "glslang.y" /* yacc.c:1646  */
+    {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 10343 "MachineIndependent/glslang_tab.cpp"
+#line 10248 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 580:
-#line 3886 "MachineIndependent/glslang.y"
-                           {
+#line 3813 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 10352 "MachineIndependent/glslang_tab.cpp"
+#line 10257 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 581:
-#line 3890 "MachineIndependent/glslang.y"
-                                            {
+#line 3817 "glslang.y" /* yacc.c:1646  */
+    {
         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 10363 "MachineIndependent/glslang_tab.cpp"
+#line 10268 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 582:
-#line 3899 "MachineIndependent/glslang.y"
-                          {
+#line 3826 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10371 "MachineIndependent/glslang_tab.cpp"
+#line 10276 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 583:
-#line 3902 "MachineIndependent/glslang.y"
-                  {
+#line 3829 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10379 "MachineIndependent/glslang_tab.cpp"
+#line 10284 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 584:
-#line 3906 "MachineIndependent/glslang.y"
-                {
+#line 3833 "glslang.y" /* yacc.c:1646  */
+    {
         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 10389 "MachineIndependent/glslang_tab.cpp"
+#line 10294 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 585:
-#line 3915 "MachineIndependent/glslang.y"
-                         {
+#line 3842 "glslang.y" /* yacc.c:1646  */
+    {
         (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 10398 "MachineIndependent/glslang_tab.cpp"
+#line 10303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 586:
-#line 3919 "MachineIndependent/glslang.y"
-                                    {
+#line 3846 "glslang.y" /* yacc.c:1646  */
+    {
         //   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());
@@ -10414,53 +10319,52 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 10418 "MachineIndependent/glslang_tab.cpp"
+#line 10323 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 587:
-#line 3938 "MachineIndependent/glslang.y"
-                                                                           {
+#line 3865 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 10427 "MachineIndependent/glslang_tab.cpp"
+#line 10332 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 588:
-#line 3944 "MachineIndependent/glslang.y"
-                       {
+#line 3871 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 10435 "MachineIndependent/glslang_tab.cpp"
+#line 10340 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 589:
-#line 3947 "MachineIndependent/glslang.y"
-                                            {
+#line 3874 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 10443 "MachineIndependent/glslang_tab.cpp"
+#line 10348 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 590:
-#line 3952 "MachineIndependent/glslang.y"
-                 {
+#line 3879 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 10451 "MachineIndependent/glslang_tab.cpp"
+#line 10356 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 591:
-#line 3955 "MachineIndependent/glslang.y"
-                                                            {
+#line 3882 "glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10459 "MachineIndependent/glslang_tab.cpp"
+#line 10364 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 10463 "MachineIndependent/glslang_tab.cpp"
-
+#line 10368 "glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10485,13 +10389,14 @@
   /* 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]);
-  }
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
 
   goto yynewstate;
 
@@ -10523,7 +10428,7 @@
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -10574,10 +10479,12 @@
 | 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;
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -10639,7 +10546,6 @@
   yyresult = 0;
   goto yyreturn;
 
-
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -10647,7 +10553,6 @@
   yyresult = 1;
   goto yyreturn;
 
-
 #if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -10658,10 +10563,6 @@
   /* Fall through.  */
 #endif
 
-
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result.  |
-`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -10678,7 +10579,7 @@
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[+*yyssp], yyvsp, pParseContext);
+                  yystos[*yyssp], yyvsp, pParseContext);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -10691,5 +10592,6 @@
 #endif
   return yyresult;
 }
-#line 3960 "MachineIndependent/glslang.y"
+#line 3887 "glslang.y" /* yacc.c:1906  */
+
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index f8b4142..31c8f90 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/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
 
-   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
    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
    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.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -216,26 +212,26 @@
     SAMPLERCUBEARRAYSHADOW = 422,
     ISAMPLERCUBEARRAY = 423,
     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,
     USAMPLER1D = 446,
     USAMPLER1DARRAY = 447,
@@ -445,35 +441,36 @@
     HITATTREXT = 651,
     CALLDATAEXT = 652,
     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
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
 union YYSTYPE
 {
-#line 103 "MachineIndependent/glslang.y"
+#line 97 "glslang.y" /* yacc.c:1909  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -509,9 +506,9 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 513 "MachineIndependent/glslang_tab.cpp.h"
-
+#line 510 "glslang_tab.cpp.h" /* yacc.c:1909  */
 };
+
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -521,4 +518,4 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 1b409df..86edcfe 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -36,7 +36,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 #include "localintermediate.h"
 #include "../Include/InfoSink.h"
@@ -1562,4 +1562,4 @@
 
 } // end namespace glslang
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // not GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 93cb83c..fadcb1b 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 #include "../Include/Common.h"
 #include "../Include/InfoSink.h"
@@ -1281,4 +1281,4 @@
 
 } // end namespace glslang
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 6741327..7ca18b8 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 #ifndef _IOMAPPER_INCLUDED
 #define _IOMAPPER_INCLUDED
@@ -186,7 +186,7 @@
     }
 };
 
-// Default I/O resolver for OpenGL
+// Defaulf I/O resolver for OpenGL
 struct TDefaultGlslIoResolver : public TDefaultIoResolverBase {
 public:
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
@@ -299,4 +299,4 @@
 
 #endif // _IOMAPPER_INCLUDED
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif //  GLSLANG_WEB
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index a8e031b..f0bede5 100755
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -82,7 +82,7 @@
 //
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     mergeCallGraphs(infoSink, unit);
     mergeModes(infoSink, unit);
     mergeTrees(infoSink, unit);
@@ -104,7 +104,7 @@
     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_TRUE(member) if (unit.member) member = unit.member;
@@ -533,7 +533,7 @@
 //
 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;
 
     // Types have to match
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 53be3f5..a3ff886 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -241,10 +241,7 @@
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
         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),
         invertY(false),
         useStorageBuffer(false),
@@ -298,20 +295,9 @@
 #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; }
+    void setProfile(EProfile p) { profile = p; }
     EProfile getProfile() const { return profile; }
     void setSpv(const SpvVersion& s)
     {
@@ -943,13 +929,8 @@
     typedef std::list<TCall> TGraph;
     TGraph callGraph;
 
-#ifdef GLSLANG_ANGLE
-    const EProfile profile = ECoreProfile;
-    const int version = 450;
-#else
     EProfile profile;                           // source profile
     int version;                                // source version
-#endif
     SpvVersion spvVersion;
     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
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index 957aaef..0d006a7 100644
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -58,7 +58,7 @@
                    const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
                    bool forwardCompatible, EShMessages messages)
         :
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         forwardCompatible(forwardCompatible),
         profile(profile),
 #endif
@@ -117,13 +117,8 @@
     bool suppressWarnings() const { return true; }
     bool isForwardCompatible() const { return false; }
 #else
-#ifdef GLSLANG_ANGLE
-    const bool forwardCompatible = true;
-    const EProfile profile = ECoreProfile;
-#else
     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)
-#endif
     bool isEsProfile() const { return profile == EEsProfile; }
     void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc);
     void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 5e544b6..03d6fe1 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 #include "../Include/Common.h"
 #include "reflection.h"
@@ -1266,4 +1266,4 @@
 
 } // end namespace glslang
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 5af4467..0c33de4 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
 #ifndef _REFLECTION_INCLUDED
 #define _REFLECTION_INCLUDED
@@ -220,4 +220,4 @@
 
 #endif // _REFLECTION_INCLUDED
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // GLSLANG_WEB
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 273f156..e3909f6 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -690,7 +690,7 @@
     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.
@@ -808,7 +808,7 @@
     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
 // the shaders that are to be linked together.  After calling shader.parse()
@@ -829,7 +829,7 @@
 
     TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
 
     // Reflection Interface
 
@@ -923,7 +923,7 @@
     // If resolver is not provided it uses the previous approach
     // and respects auto assignment and offsets.
     GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif
 
 protected:
     GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages);
@@ -933,7 +933,7 @@
     TIntermediate* intermediate[EShLangCount];
     bool newedIntermediate[EShLangCount];      // track which intermediate were "new" versus reusing a singleton unit in a stage
     TInfoSink* infoSink;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
     TReflection* reflection;
 #endif
     bool linked;
diff --git a/glslang/updateGrammar b/glslang/updateGrammar
index 202a608..9209493 100755
--- a/glslang/updateGrammar
+++ b/glslang/updateGrammar
@@ -39,7 +39,6 @@
 elif [ "$#" -eq 0 ]
 then
     m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
-    m4 -P -DGLSLANG_ANGLE MachineIndependent/glslang.m4 > MachineIndependent/glslang_angle.y
 else
     echo usage:
     echo $0 web
@@ -48,7 +47,3 @@
 fi
 
 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
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
index dc0988e..ee868c2 100755
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -75,7 +75,7 @@
     result.linkingOutput = program.getInfoLog();
     result.linkingError = program.getInfoDebugLog();
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
             program.mapIO();
 #endif
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 2b057dc..c8e72d3 100755
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -253,7 +253,7 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
             program.mapIO();
 #endif
@@ -315,7 +315,7 @@
         program.addShader(&shader);
         
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
             program.mapIO();
 #endif
@@ -360,7 +360,7 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
         if (success)
             program.mapIO();
 #endif
diff --git a/license-checker.cfg b/license-checker.cfg
index 876f158..7e4dcd2 100644
--- a/license-checker.cfg
+++ b/license-checker.cfg
@@ -22,9 +22,6 @@
 
                 "glslang/MachineIndependent/glslang_tab.cpp",
                 "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"
     ]
-}
+}
\ No newline at end of file
