Merge pull request #2330 from ShabbyX/optimize_for_angle

Optimize for angle
diff --git a/BUILD.gn b/BUILD.gn
index 7242b6f..dc3eb06 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -109,7 +109,6 @@
       "SPIRV/SpvBuilder.cpp",
       "SPIRV/SpvBuilder.h",
       "SPIRV/SpvPostProcess.cpp",
-      "SPIRV/SpvTools.cpp",
       "SPIRV/SpvTools.h",
       "SPIRV/bitutils.h",
       "SPIRV/disassemble.cpp",
@@ -156,7 +155,7 @@
       "glslang/MachineIndependent/attribute.cpp",
       "glslang/MachineIndependent/attribute.h",
       "glslang/MachineIndependent/gl_types.h",
-      "glslang/MachineIndependent/glslang_tab.cpp",
+      "glslang/MachineIndependent/glslang_angle_tab.cpp.h",
       "glslang/MachineIndependent/glslang_tab.cpp.h",
       "glslang/MachineIndependent/intermOut.cpp",
       "glslang/MachineIndependent/iomapper.cpp",
@@ -207,9 +206,25 @@
     }
 
     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" ]
@@ -257,11 +272,13 @@
 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 18d64f9..c3b48d6 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -283,6 +283,8 @@
 {
 #ifdef GLSLANG_WEB
     return spv::SourceLanguageESSL;
+#elif defined(GLSLANG_ANGLE)
+    return spv::SourceLanguageGLSL;
 #endif
 
     switch (source) {
@@ -8686,7 +8688,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)
 {
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     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 78eacac..174937a 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -147,6 +147,10 @@
 #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 },
@@ -415,7 +419,7 @@
 // See if the tabled versioning information allows the current version.
 bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
 {
-#ifdef GLSLANG_WEB
+#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
     // all entries in table are valid
     return true;
 #endif
@@ -499,7 +503,7 @@
     prefixes[EbtFloat] =  "";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     prefixes[EbtFloat16] = "f16";
     prefixes[EbtInt8]  = "i8";
     prefixes[EbtUint8] = "u8";
@@ -516,7 +520,9 @@
     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
@@ -541,6 +547,9 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
+#elif defined(GLSLANG_ANGLE)
+    version = 450;
+    profile = ECoreProfile;
 #endif
     addTabledBuiltins(version, profile, spvVersion);
 
@@ -586,6 +595,7 @@
         "vec4  fwidthCoarse(vec4  p);"
     );
 
+#ifndef GLSLANG_ANGLE
     TString derivativesAndControl16bits (
         "float16_t dFdx(float16_t);"
         "f16vec2   dFdx(f16vec2);"
@@ -1173,6 +1183,7 @@
             "\n"
         );
     }
+#endif // !GLSLANG_ANGLE
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
@@ -1210,6 +1221,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 440) {
         commonBuiltins.append(
             "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
@@ -1259,7 +1271,8 @@
             "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
             "\n");
     }
-#endif
+#endif // !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
@@ -1299,6 +1312,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
             commonBuiltins.append(
                 "double fma(double, double, double);"
@@ -1307,6 +1321,7 @@
                 "dvec4  fma(dvec4,  dvec4,  dvec4 );"
                 "\n");
     }
+#endif
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
@@ -1324,6 +1339,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
         commonBuiltins.append(
             "double frexp(double, out int);"
@@ -1342,6 +1358,7 @@
             "\n");
     }
 #endif
+#endif
 
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) {
@@ -1450,6 +1467,7 @@
     }
 
 #ifndef GLSLANG_WEB
+#ifndef GLSLANG_ANGLE
     //
     // Original-style texture functions existing in all stages.
     // (Per-stage functions below.)
@@ -1598,6 +1616,7 @@
                 "\n");
         }
     }
+#endif // !GLSLANG_ANGLE
 
     // Bitfield
     if ((profile == EEsProfile && version >= 310) ||
@@ -1740,6 +1759,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3060,6 +3080,7 @@
             "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
@@ -3079,6 +3100,7 @@
                               "\n");
     }
 
+#ifndef GLSLANG_ANGLE
     // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3929,28 +3951,30 @@
             "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);"
+    }
 
-                "float64_t interpolateAtSample(float64_t, int);"
-                "f64vec2   interpolateAtSample(f64vec2,   int);"
-                "f64vec3   interpolateAtSample(f64vec3,   int);"
-                "f64vec4   interpolateAtSample(f64vec4,   int);"
+    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 interpolateAtOffset(float64_t, f64vec2);"
-                "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
-                "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
-                "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
+            "float64_t interpolateAtSample(float64_t, int);"
+            "f64vec2   interpolateAtSample(f64vec2,   int);"
+            "f64vec3   interpolateAtSample(f64vec3,   int);"
+            "f64vec4   interpolateAtSample(f64vec4,   int);"
 
-                "\n");
+            "float64_t interpolateAtOffset(float64_t, f64vec2);"
+            "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
+            "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
+            "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
+
+            "\n");
 
     }
+#endif // !GLSLANG_ANGLE
 
     //============================================================================
     //
@@ -3966,6 +3990,7 @@
     if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
+#ifndef GLSLANG_ANGLE
     //
     // Original-style texture Functions with lod.
     //
@@ -4025,6 +4050,7 @@
                 "\n");
         }
     }
+#endif // !GLSLANG_ANGLE
 
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
@@ -4045,7 +4071,7 @@
             "void EndPrimitive();"
             "\n");
     }
-#endif
+#endif // !GLSLANG_WEB
 
     //============================================================================
     //
@@ -4105,6 +4131,7 @@
 
     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
@@ -4228,6 +4255,7 @@
 
             "\n");
     }
+#endif // !GLSLANG_ANGLE
 
     // GL_ARB_derivative_control
     if (profile != EEsProfile && version >= 400) {
@@ -4265,6 +4293,7 @@
         "bool helperInvocationEXT();"
         "\n");
 
+#ifndef GLSLANG_ANGLE
     // GL_AMD_shader_explicit_vertex_parameter
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangFragment].append(
@@ -4399,12 +4428,14 @@
             "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);
@@ -4417,7 +4448,8 @@
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
             "\n");
     }
-#endif
+#endif // !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
     //============================================================================
     //
@@ -4454,7 +4486,7 @@
             "\n");
     }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
         //
         // Matrix state. p. 31, 32, 37, 39, 40.
@@ -4572,7 +4604,7 @@
 
             "\n");
     }
-#endif
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
 
     //============================================================================
     //
@@ -4603,6 +4635,7 @@
     }
 
 #ifndef GLSLANG_WEB
+#ifndef GLSLANG_ANGLE
     //============================================================================
     //
     // Define the interface to the mesh/task shader.
@@ -4690,6 +4723,7 @@
                 "\n");
         }
     }
+#endif // !GLSLANG_ANGLE
 
     //============================================================================
     //
@@ -5360,6 +5394,15 @@
 
 #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 =
@@ -5390,14 +5433,6 @@
         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)) {
@@ -5601,6 +5636,7 @@
         stageBuiltins[EShLangCallable].append(callableDecls);
 
     }
+
     if ((profile != EEsProfile && version >= 140)) {
         const char *deviceIndex =
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
@@ -5613,12 +5649,6 @@
         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");
@@ -5642,7 +5672,15 @@
         commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
         commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
     }
-#endif
+
+#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
 
     // printf("%s\n", commonBuiltins.c_str());
     // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
@@ -5660,13 +5698,16 @@
     //
 
     // 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
@@ -5692,7 +5733,12 @@
 #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))
@@ -6086,6 +6132,9 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
+#elif defined(GLSLANG_ANGLE)
+    profile = ECoreProfile;
+    version = 450;
 #endif
 
     //
@@ -6162,8 +6211,8 @@
                                     continue;
 
                                 // loop over 16-bit floating-point texel addressing
-#ifdef GLSLANG_WEB
-                                const int f16TexAddr = 0;
+#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+                                const bool f16TexAddr = false;
 #else
                                 for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
 #endif
@@ -6175,8 +6224,8 @@
                                         totalDims--;
                                     }
                                     // loop over "bool" lod clamp
-#ifdef GLSLANG_WEB
-                                    const int lodClamp = 0;
+#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+                                    const bool lodClamp = false;
 #else
                                     for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
 #endif
@@ -6187,8 +6236,8 @@
                                             continue;
 
                                         // loop over "bool" sparse or not
-#ifdef GLSLANG_WEB
-                                        const int sparse = 0;
+#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+                                        const bool sparse = false;
 #else
                                         for (int sparse = 0; sparse <= 1; ++sparse)
 #endif
@@ -6371,6 +6420,9 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
+#elif defined(GLSLANG_ANGLE)
+    profile = ECoreProfile;
+    version = 450;
 #endif
 
     switch (sampler.dim) {
@@ -6614,6 +6666,9 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
+#elif defined(GLSLANG_ANGLE)
+    version = 450;
+    profile = ECoreProfile;
 #endif
 
     //
@@ -7042,6 +7097,7 @@
         s.append("\n");
     }
 
+#ifndef GLSLANG_ANGLE
     // atomic counters (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 420)) {
@@ -7078,6 +7134,7 @@
 
         s.append("\n");
     }
+#endif // !GLSLANG_ANGLE
 
     // GL_ARB_cull_distance
     if (profile != EEsProfile && version >= 450) {
@@ -7094,6 +7151,7 @@
         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);
@@ -7117,6 +7175,7 @@
         s.append("\n");
     }
 #endif
+#endif
 
     s.append("\n");
 }
@@ -7200,6 +7259,9 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
+#elif defined(GLSLANG_ANGLE)
+    version = 450;
+    profile = ECoreProfile;
 #endif
 
     //
@@ -7389,7 +7451,7 @@
 
     case EShLangTessEvaluation:
     case EShLangGeometry:
-#endif
+#endif // !GLSLANG_WEB
         SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
         SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
 
@@ -7550,7 +7612,7 @@
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
-#endif
+#endif // !GLSLANG_WEB
         break;
 
     case EShLangFragment:
@@ -8056,7 +8118,7 @@
         }
 
         symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
-#endif
+#endif // !GLSLANG_WEB
         break;
 
     case EShLangCompute:
@@ -8188,10 +8250,10 @@
             symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
         }
-#endif
+#endif // !GLSLANG_WEB
         break;
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     case EShLangRayGen:
     case EShLangIntersect:
     case EShLangAnyHit:
@@ -9094,7 +9156,7 @@
     default:
         assert(false && "Language not supported");
     }
-#endif
+#endif // !GLSLANG_WEB
 }
 
 //
@@ -9109,6 +9171,10 @@
 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 bd3181a..ba03332 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -49,10 +49,15 @@
 #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"
@@ -406,25 +411,28 @@
     (*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;
@@ -441,6 +449,10 @@
     (*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;
@@ -456,9 +468,6 @@
     (*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;
@@ -471,6 +480,7 @@
     (*KeywordMap)["image2DMSArray"] =          IMAGE2DMSARRAY;
     (*KeywordMap)["iimage2DMSArray"] =         IIMAGE2DMSARRAY;
     (*KeywordMap)["uimage2DMSArray"] =         UIMAGE2DMSARRAY;
+#ifndef GLSLANG_ANGLE
     (*KeywordMap)["double"] =                  DOUBLE;
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec3"] =                   DVEC3;
@@ -562,6 +572,7 @@
     (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
     (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
 #endif
+#endif
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
@@ -603,11 +614,16 @@
     (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
     (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
     (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
-    (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
-    (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
-    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
+#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)["samplerBuffer"] =           SAMPLERBUFFER;
     (*KeywordMap)["isampler2DRect"] =          ISAMPLER2DRECT;
     (*KeywordMap)["usampler2DRect"] =          USAMPLER2DRECT;
@@ -619,20 +635,21 @@
     (*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
 
-    (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
-    (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
+#ifndef GLSLANG_ANGLE
+    (*KeywordMap)["texture1D"] =               TEXTURE1D;
     (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
+    (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
+    (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
+    (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
     (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
+#endif
     (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
     (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
     (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
@@ -644,10 +661,9 @@
     (*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;
@@ -702,7 +718,6 @@
     (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
     (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
     (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
-    (*KeywordMap)["precise"] =                 PRECISE;
 
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
     (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
@@ -724,6 +739,7 @@
     (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
     (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
+#endif
 
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
 
@@ -855,7 +871,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;
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         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;
@@ -1004,16 +1020,17 @@
             return keyword;
         return es30ReservedFromGLSL(130);
 
-    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;
+#ifndef GLSLANG_ANGLE
+    case NONUNIFORM:
+        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
+            return keyword;
+        else
+            return identifierOrType();
     case PAYLOADNV:
     case PAYLOADINNV:
     case HITATTRNV:
@@ -1047,13 +1064,17 @@
             return keyword;
         return es30ReservedFromGLSL(420);
 
-    case COHERENT:
+    case SUBROUTINE:
+        return es30ReservedFromGLSL(400);
+
     case DEVICECOHERENT:
     case QUEUEFAMILYCOHERENT:
     case WORKGROUPCOHERENT:
     case SUBGROUPCOHERENT:
     case SHADERCALLCOHERENT:
     case NONPRIVATE:
+#endif
+    case COHERENT:
     case RESTRICT:
     case READONLY:
     case WRITEONLY:
@@ -1082,9 +1103,6 @@
             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) ||
@@ -1121,6 +1139,7 @@
         return matNxM();
 
 #ifndef GLSLANG_WEB
+#ifndef GLSLANG_ANGLE
     case DMAT2:
     case DMAT3:
     case DMAT4:
@@ -1141,6 +1160,7 @@
     case IMAGE1DARRAY:
     case IIMAGE1DARRAY:
     case UIMAGE1DARRAY:
+#endif
     case IMAGE2DRECT:
     case IIMAGE2DRECT:
     case UIMAGE2DRECT:
@@ -1189,6 +1209,7 @@
         afterType = true;
         return secondGenerationImage();
 
+#ifndef GLSLANG_ANGLE
     case DOUBLE:
     case DVEC2:
     case DVEC3:
@@ -1343,6 +1364,7 @@
             return keyword;
 
         return identifierOrType();
+#endif
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
@@ -1419,6 +1441,7 @@
             return identifierOrType();
 
 #ifndef GLSLANG_WEB
+#ifndef GLSLANG_ANGLE
     case ISAMPLER1D:
     case ISAMPLER1DARRAY:
     case SAMPLER1DARRAYSHADOW:
@@ -1426,6 +1449,23 @@
     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;
@@ -1469,13 +1509,6 @@
             return keyword;
         return es30ReservedFromGLSL(150);
 
-    case SAMPLER1D:
-    case SAMPLER1DSHADOW:
-        afterType = true;
-        if (parseContext.isEsProfile())
-            reservedWord();
-        return keyword;
-
     case SAMPLER2DRECT:
     case SAMPLER2DRECTSHADOW:
         afterType = true;
@@ -1489,15 +1522,6 @@
         }
         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() ||
@@ -1513,10 +1537,14 @@
             return keyword;
         return identifierOrType();
 
-    case ITEXTURE1DARRAY:
-    case UTEXTURE1D:
+#ifndef GLSLANG_ANGLE
+    case TEXTURE1D:
     case ITEXTURE1D:
+    case UTEXTURE1D:
+    case TEXTURE1DARRAY:
+    case ITEXTURE1DARRAY:
     case UTEXTURE1DARRAY:
+#endif
     case TEXTUREBUFFER:
     case ITEXTURE2DRECT:
     case UTEXTURE2DRECT:
@@ -1528,14 +1556,24 @@
     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:
@@ -1609,17 +1647,6 @@
             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:
@@ -1650,6 +1677,7 @@
         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 9c8610c..9d7f37b 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -294,6 +294,9 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
+#elif defined(GLSLANG_ANGLE)
+    profile = ECoreProfile;
+    version = 450;
 #endif
 
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
@@ -315,6 +318,9 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
+#elif defined(GLSLANG_ANGLE)
+    profile = ECoreProfile;
+    version = 450;
 #endif
 
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
@@ -354,7 +360,6 @@
         (profile == EEsProfile && version >= 310))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
                                    infoSink, commonTable, symbolTables);
-#endif
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
@@ -362,6 +367,7 @@
         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,
@@ -389,6 +395,8 @@
         (profile == EEsProfile && version >= 320))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
                                    infoSink, commonTable, symbolTables);
+#endif // !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
     return true;
 }
@@ -490,7 +498,7 @@
 // Function to Print all builtins
 void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
 {
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     infoSink.debug << "BuiltinSymbolTable {\n";
 
     symbolTable.dump(infoSink, true);
@@ -594,7 +602,7 @@
         break;
     }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     // Correct for stage type...
     switch (stage) {
     case EShLangGeometry:
@@ -870,7 +878,7 @@
                                 : userInput.scanVersion(version, profile, versionNotFirstToken);
     bool versionNotFound = version == 0;
     if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
             (version != defaultVersion || profile != defaultProfile)) {
             compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -893,10 +901,13 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
+#elif defined(GLSLANG_ANGLE)
+    profile = ECoreProfile;
+    version = 450;
 #endif
 
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     bool warnVersionNotFirst = false;
     if (! versionWillBeError && versionNotFirstToken) {
         if (messages & EShMsgRelaxedErrors)
@@ -966,7 +977,7 @@
     parseContext->setLimits(*resources);
     if (! goodVersion)
         parseContext->addError();
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     if (warnVersionNotFirst) {
         TSourceLoc loc;
         loc.init();
@@ -1003,7 +1014,7 @@
     return success;
 }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 // Responsible for keeping track of the most recent source string and line in
 // the preprocessor and outputting newlines appropriately if the source string
@@ -1226,14 +1237,16 @@
             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;
     }
 };
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 // 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
@@ -1873,7 +1886,7 @@
                            &environment);
 }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 // Fill in a string with the result of preprocessing ShaderStrings
 // Returns true if all extensions, pragmas and version strings were valid.
 //
@@ -1911,7 +1924,7 @@
 }
 
 TProgram::TProgram() :
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     reflection(0),
 #endif
     linked(false)
@@ -1927,7 +1940,7 @@
 TProgram::~TProgram()
 {
     delete infoSink;
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     delete reflection;
 #endif
 
@@ -1974,7 +1987,7 @@
     if (stages[stage].size() == 0)
         return true;
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     int numEsShaders = 0, numNonEsShaders = 0;
     for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
         if ((*it)->intermediate->getProfile() == EEsProfile) {
@@ -2028,8 +2041,10 @@
 #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;
 }
@@ -2044,7 +2059,7 @@
     return infoSink->debug.c_str();
 }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 //
 // Reflection implementation.
@@ -2126,6 +2141,6 @@
     return ioMapper->doMap(pResolver, *infoSink);
 }
 
-#endif // GLSLANG_WEB
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 06b5a81..007f22c 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -178,7 +178,7 @@
     }
 }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 //
 // Dump functions.
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index 40ca3da..ec4bc3c 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(); }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     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(); }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     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]; }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     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; }
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     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[]);
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
     TSymbolTableLevel* clone() const;
@@ -854,7 +854,7 @@
     }
 
     int getMaxSymbolId() { return uniqueId; }
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     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 1432bf6..f42b17c 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -58,10 +58,16 @@
 //
 //    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.
@@ -177,6 +183,9 @@
 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
@@ -209,23 +218,31 @@
 %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
@@ -238,10 +255,14 @@
 %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
@@ -251,6 +272,8 @@
 %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
@@ -259,6 +282,8 @@
 %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
@@ -285,16 +310,26 @@
 %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> PATCH SAMPLE NONUNIFORM
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> NONUNIFORM
+%token <lex> DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%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> PRECISE
+
 GLSLANG_WEB_EXCLUDE_OFF
 
 %type <interm> assignment_operator unary_operator
@@ -343,11 +378,19 @@
 %type <interm.identifierList> identifier_list
 
 GLSLANG_WEB_EXCLUDE_ON
-%type <interm.type> precise_qualifier non_uniform_qualifier
+
+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.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
@@ -382,6 +425,7 @@
         $$ = 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);
     }
@@ -419,6 +463,7 @@
         parseContext.float16Check($1.loc, "half float literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
+GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -546,11 +591,13 @@
         }
     }
 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
     ;
 
@@ -1207,6 +1254,7 @@
         $$.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");
@@ -1246,6 +1294,7 @@
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
     }
+GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -1330,9 +1379,11 @@
         // 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
     ;
 
@@ -1421,6 +1472,7 @@
         $$.init($1.loc);
         $$.qualifier.sample = true;
     }
+GLSLANG_ANGLE_EXCLUDE_ON
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -1499,10 +1551,6 @@
         $$.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");
@@ -1533,6 +1581,23 @@
         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;
@@ -1549,28 +1614,18 @@
         $$.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 {
@@ -1804,6 +1859,7 @@
         $$.setMatrix(4, 4);
     }
 GLSLANG_WEB_EXCLUDE_ON
+GLSLANG_ANGLE_EXCLUDE_ON
     | DOUBLE {
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -2422,6 +2478,7 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D);
     }
+GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2459,6 +2516,17 @@
         $$.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;
@@ -2474,16 +2542,6 @@
         $$.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());
@@ -2567,6 +2625,7 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd1D);
     }
+GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2604,26 +2663,11 @@
         $$.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;
@@ -2644,6 +2688,23 @@
         $$.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());
@@ -2731,18 +2792,6 @@
         $$.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;
@@ -2758,12 +2807,6 @@
         $$.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;
@@ -2779,12 +2822,6 @@
         $$.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;
@@ -2800,12 +2837,6 @@
         $$.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;
@@ -2816,11 +2847,129 @@
         $$.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());
@@ -2845,11 +2994,6 @@
         $$.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());
@@ -2868,121 +3012,35 @@
         $$.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;
@@ -2993,17 +3051,12 @@
         $$.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;
@@ -3019,12 +3072,6 @@
         $$.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;
@@ -3040,12 +3087,6 @@
         $$.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;
@@ -3061,12 +3102,6 @@
         $$.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;
@@ -3082,12 +3117,6 @@
         $$.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;
@@ -3103,12 +3132,6 @@
         $$.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;
@@ -3124,12 +3147,6 @@
         $$.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;
@@ -3145,12 +3162,6 @@
         $$.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;
@@ -3166,12 +3177,6 @@
         $$.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;
@@ -3187,12 +3192,6 @@
         $$.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;
@@ -3203,6 +3202,74 @@
         $$.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;
@@ -3215,6 +3282,7 @@
         $$.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());
@@ -3283,6 +3351,7 @@
         $$.basicType = EbtUint;
         $$.coopmat = true;
     }
+GLSLANG_ANGLE_EXCLUDE_OFF
 GLSLANG_WEB_EXCLUDE_OFF
     | struct_specifier {
         $$ = $1;
@@ -3485,11 +3554,14 @@
     | 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");
@@ -3497,6 +3569,7 @@
         $$ = 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 e33d7d1..0a25963 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -58,6 +58,12 @@
 //
 //    m4 -P
 //
+// A similar mechanism is used to exclude grammar for ANGLE with
+// GLSLANG_ANGLE_EXCLUDE_ON, GLSLANG_ANGLE_EXCLUDE_OFF and -DGLSLANG_ANGLE
+//
+
+
+
 
 
 
@@ -177,6 +183,9 @@
 
 
 %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
@@ -209,23 +218,31 @@
 %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
@@ -238,10 +255,14 @@
 %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
@@ -251,6 +272,8 @@
 %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
@@ -261,6 +284,8 @@
 
 
 
+
+
 %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
@@ -285,18 +310,28 @@
 %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> PATCH SAMPLE NONUNIFORM
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> NONUNIFORM
+%token <lex> DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+
+
+
+%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
@@ -343,13 +378,21 @@
 %type <interm.identifierList> identifier_list
 
 
-%type <interm.type> precise_qualifier non_uniform_qualifier
+
+
+
+%type <interm.type> non_uniform_qualifier
+%type <interm.intermNode> demote_statement
+
+
+
+%type <interm.type> precise_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
 %%
 
@@ -382,6 +425,7 @@
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
 
+
     | STRING_LITERAL {
         $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
     }
@@ -420,6 +464,7 @@
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
 
+
     ;
 
 postfix_expression
@@ -546,12 +591,14 @@
         }
     }
 
+
     | non_uniform_qualifier {
         // Constructor
         $$.intermNode = 0;
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
     }
 
+
     ;
 
 unary_expression
@@ -1207,6 +1254,7 @@
         $$.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");
@@ -1247,6 +1295,7 @@
         $$.qualifier.perTaskNV = true;
     }
 
+
     ;
 
 layout_qualifier
@@ -1330,10 +1379,12 @@
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
     }
+
     | non_uniform_qualifier {
         $$ = $1;
     }
 
+
     ;
 
 storage_qualifier
@@ -1421,6 +1472,7 @@
         $$.init($1.loc);
         $$.qualifier.sample = true;
     }
+
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -1499,10 +1551,6 @@
         $$.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");
@@ -1533,6 +1581,23 @@
         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;
@@ -1549,22 +1614,11 @@
         $$.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);
@@ -1572,6 +1626,7 @@
     }
     ;
 
+
 type_name_list
     : IDENTIFIER {
         // TODO
@@ -1804,6 +1859,7 @@
         $$.setMatrix(4, 4);
     }
 
+
     | DOUBLE {
         parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -2423,6 +2479,7 @@
         $$.sampler.set(EbtFloat, Esd1D);
     }
 
+
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2459,6 +2516,17 @@
         $$.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;
@@ -2474,16 +2542,6 @@
         $$.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());
@@ -2568,6 +2626,7 @@
         $$.sampler.set(EbtInt, Esd1D);
     }
 
+
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2604,26 +2663,11 @@
         $$.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;
@@ -2645,6 +2689,23 @@
         $$.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;
@@ -2731,18 +2792,6 @@
         $$.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;
@@ -2758,12 +2807,6 @@
         $$.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;
@@ -2779,12 +2822,6 @@
         $$.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;
@@ -2800,12 +2837,6 @@
         $$.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;
@@ -2816,11 +2847,129 @@
         $$.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());
@@ -2845,11 +2994,6 @@
         $$.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());
@@ -2868,121 +3012,35 @@
         $$.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;
@@ -2993,17 +3051,12 @@
         $$.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;
@@ -3019,12 +3072,6 @@
         $$.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;
@@ -3040,12 +3087,6 @@
         $$.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;
@@ -3061,12 +3102,6 @@
         $$.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;
@@ -3082,12 +3117,6 @@
         $$.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;
@@ -3103,12 +3132,6 @@
         $$.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;
@@ -3124,12 +3147,6 @@
         $$.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;
@@ -3145,12 +3162,6 @@
         $$.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;
@@ -3166,12 +3177,6 @@
         $$.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;
@@ -3187,12 +3192,6 @@
         $$.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;
@@ -3203,6 +3202,74 @@
         $$.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;
@@ -3215,6 +3282,7 @@
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
     }
+
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3284,6 +3352,7 @@
         $$.coopmat = true;
     }
 
+
     | struct_specifier {
         $$ = $1;
         $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3485,11 +3554,14 @@
     | iteration_statement   { $$ = $1; }
     | jump_statement        { $$ = $1; }
 
+
     | demote_statement      { $$ = $1; }
 
+
     ;
 
 
+
 demote_statement
     : DEMOTE SEMICOLON {
         parseContext.requireStage($1.loc, EShLangFragment, "demote");
@@ -3499,6 +3571,7 @@
     ;
 
 
+
 compound_statement
     : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
     | LEFT_BRACE {
@@ -3885,4 +3958,3 @@
 
 
 %%
-
diff --git a/glslang/MachineIndependent/glslang_angle.y b/glslang/MachineIndependent/glslang_angle.y
new file mode 100644
index 0000000..81edc06
--- /dev/null
+++ b/glslang/MachineIndependent/glslang_angle.y
@@ -0,0 +1,2643 @@
+//
+// 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
new file mode 100644
index 0000000..26c1047
--- /dev/null
+++ b/glslang/MachineIndependent/glslang_angle_tab.cpp
@@ -0,0 +1,7178 @@
+/* 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
new file mode 100644
index 0000000..9d6721a
--- /dev/null
+++ b/glslang/MachineIndependent/glslang_angle_tab.cpp.h
@@ -0,0 +1,333 @@
+/* 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 69f7f8e..8462e40 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* 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 Free Software Foundation, Inc.
+   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
@@ -40,11 +41,14 @@
    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.0.4"
+#define YYBISON_VERSION "3.5.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -61,8 +65,8 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 69 "glslang.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 75 "MachineIndependent/glslang.y"
 
 
 /* Based on:
@@ -88,13 +92,26 @@
 using namespace glslang;
 
 
-#line 92 "glslang_tab.cpp" /* yacc.c:339  */
+#line 96 "MachineIndependent/glslang_tab.cpp"
 
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+# 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_NULLPTR 0
+#   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
 
@@ -106,10 +123,10 @@
 # define YYERROR_VERBOSE 1
 #endif
 
-/* 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
+/* 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
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -290,26 +307,26 @@
     SAMPLERCUBEARRAYSHADOW = 422,
     ISAMPLERCUBEARRAY = 423,
     USAMPLERCUBEARRAY = 424,
-    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,
+    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,
     ISAMPLER1DARRAY = 445,
     USAMPLER1D = 446,
     USAMPLER1DARRAY = 447,
@@ -519,36 +536,35 @@
     HITATTREXT = 651,
     CALLDATAEXT = 652,
     CALLDATAINEXT = 653,
-    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,
+    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,
     PRECISE = 674
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 97 "glslang.y" /* yacc.c:355  */
+#line 103 "MachineIndependent/glslang.y"
 
     struct {
         glslang::TSourceLoc loc;
@@ -584,9 +600,9 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 588 "glslang_tab.cpp" /* yacc.c:355  */
-};
+#line 604 "MachineIndependent/glslang_tab.cpp"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -596,10 +612,10 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
 
-/* Copy the second part of user declarations.  */
-#line 133 "glslang.y" /* yacc.c:358  */
+/* Second part of user prologue.  */
+#line 139 "MachineIndependent/glslang.y"
 
 
 /* windows only pragma */
@@ -615,34 +631,82 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 619 "glslang_tab.cpp" /* yacc.c:358  */
+#line 635 "MachineIndependent/glslang_tab.cpp"
+
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* 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
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* 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 YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#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 int yytype_int16;
+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
@@ -650,15 +714,27 @@
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_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 int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#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
@@ -672,30 +748,19 @@
 # endif
 #endif
 
-#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)
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
 # else
-#  define YY_ATTRIBUTE(Spec) /* empty */
+#  define YY_ATTRIBUTE_PURE
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
 #ifndef YY_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)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
 # else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#  define YY_ATTRIBUTE_UNUSED
 # endif
 #endif
 
@@ -706,13 +771,13 @@
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#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\"")\
+# 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
@@ -725,6 +790,20 @@
 # 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
 
@@ -801,17 +880,17 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  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 (sizeof (union yyalloc) - 1)
+# 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) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -824,11 +903,11 @@
 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     do                                                                  \
       {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
+        YYPTRDIFF_T yynewbytes;                                         \
         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
         Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
       }                                                                 \
     while (0)
 
@@ -840,12 +919,12 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYSIZE_T yyi;                         \
+          YYPTRDIFF_T yyi;                      \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
@@ -857,7 +936,7 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  394
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9550
+#define YYLAST   9538
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  420
@@ -868,17 +947,18 @@
 /* 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)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint16 yytranslate[] =
+   as returned by yylex.  */
+static const yytype_int16 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -952,68 +1032,68 @@
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
+static const yytype_int16 yyrline[] =
 {
-       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
+       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
 };
 #endif
 
@@ -1053,14 +1133,14 @@
   "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT",
   "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "SAMPLERCUBEARRAY",
   "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
-  "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",
+  "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",
   "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
   "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
   "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
@@ -1105,15 +1185,15 @@
   "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
   "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
   "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT",
-  "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH",
-  "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
-  "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
+  "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT",
+  "NONUNIFORM", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
   "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE",
-  "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",
+  "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",
   "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
@@ -1156,7 +1236,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_uint16 yytoknum[] =
+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,
@@ -1203,14 +1283,14 @@
 };
 # endif
 
-#define YYPACT_NINF -457
+#define YYPACT_NINF (-457)
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-457)))
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF -537
+#define YYTABLE_NINF (-537)
 
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
   0
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -1256,47 +1336,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,  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,  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,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
     -457,  -457,  -457,  -457,  -457,    36,  -457,  -457,  -457,   171,
-      85,  8964,   173,  -457,  8566,  -457,  -457,  -323,   174,  -457,
-    6160,   139,  4909,  -457,  6160,  8566,  -457,   -29,  -457,   141,
+      85,  8952,   173,  -457,  8556,  -457,  -457,  -323,   174,  -457,
+    6160,   139,  4909,  -457,  6160,  8556,  -457,   -29,  -457,   141,
     -457,  -457,   145,    99,    35,    26,    71,   156,   159,   161,
-     196,   195,    23,   181,  7770,  -457,   183,   182,  -457,  -457,
-     186,   179,   180,  -457,   191,   192,   187,  8168,   193,  8566,
+     196,   195,    23,   181,  7764,  -457,   183,   182,  -457,  -457,
+     186,   179,   180,  -457,   191,   192,   187,  8160,   193,  8556,
      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,  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,
+    -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,
      125,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  8566,  8566,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  7372,  -457,    94,  -457,  5743,  -457,  -457,
+    -457,  -457,  -457,  -457,  8556,  8556,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  7368,  -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,  8566,
+      35,    26,    26,    71,   156,   159,   161,   196,   195,  8556,
     -457,   212,    60,  -457,  1990,  3658,   169,  3241,    87,  -457,
       89,  -457,  -457,  -457,  -457,  -457,  6576,  -457,  -457,  -457,
-    -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,   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,  -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_uint16 yydefact[] =
+static const yytype_int16 yydefact[] =
 {
        0,   157,   210,   208,   209,   207,   214,   215,   216,   217,
      218,   219,   220,   221,   222,   211,   212,   213,   223,   224,
@@ -1314,25 +1394,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,   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,
+     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,
      492,   487,   488,   584,   132,   498,   499,   500,     0,   497,
      161,   159,   160,   158,     0,   206,   162,   163,   164,   134,
-     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,
+     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,
        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,
@@ -1344,7 +1424,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,   191,     0,
+       0,     0,     0,   505,     0,     0,   141,     0,   186,     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,
@@ -1378,7 +1458,7 @@
 static const yytype_int16 yypgoto[] =
 {
     -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  8868,  -457,   -87,   -84,  -127,   -93,   -33,   -31,
+    -457,  -457,  8856,  -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,
@@ -2110,47 +2190,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,     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,   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,     0,     0,   325,     2,     3,     4,     5,
+       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,
@@ -2182,7 +2222,7 @@
      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,
+       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,
@@ -2190,7 +2230,86 @@
        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,
+       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,
+       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,   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,     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,
@@ -2222,54 +2341,14 @@
      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,     0,     0,   426,   427,
+       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,    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,
+       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,
@@ -2309,56 +2388,55 @@
        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,    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,   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,     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,   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,
+       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,   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,
@@ -2368,7 +2446,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,
-     471
+       0,     0,     0,     0,     0,     0,     0,     0,   471
 };
 
 static const yytype_int16 yycheck[] =
@@ -3070,7 +3148,86 @@
       -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,
+      -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,
        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,
@@ -3110,47 +3267,7 @@
       -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,    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,
+      -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,
@@ -3182,54 +3299,14 @@
      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,
+      -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,    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,
+      -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,
@@ -3269,56 +3346,55 @@
       -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,    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,   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,    -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,   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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -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,   551,    -1,    -1,
       -1,    -1,    -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,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -3328,12 +3404,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,
-     682
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   682
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
+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,
@@ -3412,7 +3488,7 @@
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint16 yyr1[] =
+static const yytype_int16 yyr1[] =
 {
        0,   420,   421,   422,   422,   422,   422,   422,   422,   422,
      422,   422,   422,   422,   422,   422,   422,   422,   423,   423,
@@ -3477,7 +3553,7 @@
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
 {
        0,     2,     1,     1,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
@@ -3497,8 +3573,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,     1,     1,     1,     1,
-       1,     4,     1,     1,     3,     2,     3,     2,     3,     3,
+       1,     1,     1,     1,     1,     1,     4,     1,     1,     1,
+       1,     1,     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,
@@ -3554,22 +3630,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
@@ -3609,38 +3685,40 @@
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   YYUSE (pParseContext);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
+  YYFPRINTF (yyo, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yytype, yyvaluep, pParseContext);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -3649,7 +3727,7 @@
 `------------------------------------------------------------------*/
 
 static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -3672,20 +3750,20 @@
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
 {
-  unsigned long int yylno = yyrline[yyrule];
+  int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+  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)])
+                       yystos[+yyssp[yyi + 1 - yynrhs]],
+                       &yyvsp[(yyi + 1) - (yynrhs)]
                                               , pParseContext);
       YYFPRINTF (stderr, "\n");
     }
@@ -3729,13 +3807,13 @@
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
+#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
 #  else
 /* Return the length of YYSTR.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yystrlen (const char *yystr)
 {
-  YYSIZE_T yylen;
+  YYPTRDIFF_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -3771,12 +3849,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 YYSIZE_T
+static YYPTRDIFF_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYSIZE_T yyn = 0;
+      YYPTRDIFF_T yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -3789,7 +3867,10 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            /* Fall through.  */
+            else
+              goto append;
+
+          append:
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -3804,10 +3885,10 @@
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
     return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -3820,19 +3901,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 (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+                yy_state_t *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. */
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
+  /* 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
@@ -3859,7 +3940,9 @@
   */
   if (yytoken != YYEMPTY)
     {
-      int yyn = yypact[*yyssp];
+      int yyn = yypact[+*yyssp];
+      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+      yysize = yysize0;
       yyarg[yycount++] = yytname[yytoken];
       if (!yypact_value_is_default (yyn))
         {
@@ -3884,11 +3967,12 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  YYPTRDIFF_T yysize1
+                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+                    yysize = yysize1;
+                  else
                     return 2;
-                  yysize = yysize1;
                 }
               }
         }
@@ -3900,6 +3984,7 @@
       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"));
@@ -3910,10 +3995,13 @@
     }
 
   {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    /* 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;
-    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -3939,8 +4027,8 @@
         }
       else
         {
-          yyp++;
-          yyformat++;
+          ++yyp;
+          ++yyformat;
         }
   }
   return 0;
@@ -3988,7 +4076,7 @@
     /* Number of syntax errors so far.  */
     int yynerrs;
 
-    int yystate;
+    yy_state_fast_t yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
@@ -4000,16 +4088,16 @@
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
+    YYPTRDIFF_T yystacksize;
 
   int yyn;
   int yyresult;
@@ -4023,7 +4111,7 @@
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
@@ -4044,46 +4132,54 @@
   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:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| 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.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# 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;
-        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 * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yyss1, yysize * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -4092,42 +4188,43 @@
         yystacksize = YYMAXDEPTH;
 
       {
-        yytype_int16 *yyss1 = yyss;
+        yy_state_t *yyss1 = yyss;
         union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+          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
+# undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+      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;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#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.  */
 
@@ -4177,15 +4274,13 @@
 
   /* 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;
 
 
@@ -4200,7 +4295,7 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -4220,304 +4315,304 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
-#line 357 "glslang.y" /* yacc.c:1646  */
-    {
+  case 2:
+#line 400 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4229 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4324 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 3:
-#line 363 "glslang.y" /* yacc.c:1646  */
-    {
+#line 406 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4237 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4332 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 4:
-#line 366 "glslang.y" /* yacc.c:1646  */
-    {
+#line 409 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4247 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4342 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 5:
-#line 371 "glslang.y" /* yacc.c:1646  */
-    {
+#line 414 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 4255 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4350 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 6:
-#line 374 "glslang.y" /* yacc.c:1646  */
-    {
+#line 417 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4263 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4358 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 7:
-#line 377 "glslang.y" /* yacc.c:1646  */
-    {
+#line 420 "MachineIndependent/glslang.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 4272 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4367 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 8:
-#line 381 "glslang.y" /* yacc.c:1646  */
-    {
+#line 424 "MachineIndependent/glslang.y"
+                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 4280 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4375 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 9:
-#line 385 "glslang.y" /* yacc.c:1646  */
-    {
+#line 429 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 4288 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4383 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 10:
-#line 388 "glslang.y" /* yacc.c:1646  */
-    {
+#line 432 "MachineIndependent/glslang.y"
+                    {
         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 4297 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4392 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 11:
-#line 392 "glslang.y" /* yacc.c:1646  */
-    {
+#line 436 "MachineIndependent/glslang.y"
+                     {
         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 4306 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4401 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 12:
-#line 396 "glslang.y" /* yacc.c:1646  */
-    {
+#line 440 "MachineIndependent/glslang.y"
+                    {
         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 4315 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4410 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 13:
-#line 400 "glslang.y" /* yacc.c:1646  */
-    {
+#line 444 "MachineIndependent/glslang.y"
+                     {
         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 4324 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4419 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 14:
-#line 404 "glslang.y" /* yacc.c:1646  */
-    {
+#line 448 "MachineIndependent/glslang.y"
+                    {
         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 4333 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4428 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 15:
-#line 408 "glslang.y" /* yacc.c:1646  */
-    {
+#line 452 "MachineIndependent/glslang.y"
+                     {
         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 4342 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4437 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 16:
-#line 412 "glslang.y" /* yacc.c:1646  */
-    {
+#line 456 "MachineIndependent/glslang.y"
+                     {
         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 4353 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4448 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 17:
-#line 418 "glslang.y" /* yacc.c:1646  */
-    {
+#line 462 "MachineIndependent/glslang.y"
+                      {
         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 4362 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4457 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 18:
-#line 426 "glslang.y" /* yacc.c:1646  */
-    {
+#line 471 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4370 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4465 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 19:
-#line 429 "glslang.y" /* yacc.c:1646  */
-    {
+#line 474 "MachineIndependent/glslang.y"
+                                                                       {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4378 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4473 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 20:
-#line 432 "glslang.y" /* yacc.c:1646  */
-    {
+#line 477 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4386 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4481 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 21:
-#line 435 "glslang.y" /* yacc.c:1646  */
-    {
+#line 480 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 4394 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4489 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 22:
-#line 438 "glslang.y" /* yacc.c:1646  */
-    {
+#line 483 "MachineIndependent/glslang.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 4404 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4499 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 23:
-#line 443 "glslang.y" /* yacc.c:1646  */
-    {
+#line 488 "MachineIndependent/glslang.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 4414 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4509 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 24:
-#line 451 "glslang.y" /* yacc.c:1646  */
-    {
+#line 496 "MachineIndependent/glslang.y"
+                 {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4423 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4518 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 25:
-#line 458 "glslang.y" /* yacc.c:1646  */
-    {
+#line 503 "MachineIndependent/glslang.y"
+                              {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4432 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4527 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 26:
-#line 465 "glslang.y" /* yacc.c:1646  */
-    {
+#line 510 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4440 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4535 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 27:
-#line 471 "glslang.y" /* yacc.c:1646  */
-    {
+#line 516 "MachineIndependent/glslang.y"
+                                                       {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4449 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4544 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 28:
-#line 475 "glslang.y" /* yacc.c:1646  */
-    {
+#line 520 "MachineIndependent/glslang.y"
+                                                     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4458 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4553 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 29:
-#line 482 "glslang.y" /* yacc.c:1646  */
-    {
+#line 527 "MachineIndependent/glslang.y"
+                                {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4466 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4561 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 30:
-#line 485 "glslang.y" /* yacc.c:1646  */
-    {
+#line 530 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4474 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4569 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 31:
-#line 491 "glslang.y" /* yacc.c:1646  */
-    {
+#line 536 "MachineIndependent/glslang.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 4486 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4581 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 32:
-#line 498 "glslang.y" /* yacc.c:1646  */
-    {
+#line 543 "MachineIndependent/glslang.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 4498 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4593 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 33:
-#line 508 "glslang.y" /* yacc.c:1646  */
-    {
+#line 553 "MachineIndependent/glslang.y"
+                                     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4506 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4601 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 34:
-#line 516 "glslang.y" /* yacc.c:1646  */
-    {
+#line 561 "MachineIndependent/glslang.y"
+                     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4516 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4611 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 35:
-#line 521 "glslang.y" /* yacc.c:1646  */
-    {
+#line 566 "MachineIndependent/glslang.y"
+                         {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
         //
@@ -4544,51 +4639,51 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4548 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4643 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 36:
-#line 549 "glslang.y" /* yacc.c:1646  */
-    {
+#line 595 "MachineIndependent/glslang.y"
+                            {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4558 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4653 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 37:
-#line 558 "glslang.y" /* yacc.c:1646  */
-    {
+#line 605 "MachineIndependent/glslang.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 4569 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4664 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 38:
-#line 564 "glslang.y" /* yacc.c:1646  */
-    {
+#line 611 "MachineIndependent/glslang.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 4578 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4673 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 39:
-#line 568 "glslang.y" /* yacc.c:1646  */
-    {
+#line 615 "MachineIndependent/glslang.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 4587 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4682 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 40:
-#line 572 "glslang.y" /* yacc.c:1646  */
-    {
+#line 619 "MachineIndependent/glslang.y"
+                                      {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
             switch((yyvsp[-1].interm).op) {
@@ -4604,180 +4699,180 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4608 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4703 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 41:
-#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  */
+#line 639 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4709 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 42:
-#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  */
+#line 640 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4715 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 43:
-#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  */
+#line 641 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4721 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 44:
-#line 595 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+#line 642 "MachineIndependent/glslang.y"
+            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4633 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4728 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 45:
-#line 601 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4639 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 648 "MachineIndependent/glslang.y"
+                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4734 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 46:
-#line 602 "glslang.y" /* yacc.c:1646  */
-    {
+#line 649 "MachineIndependent/glslang.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 4649 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4744 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 47:
-#line 607 "glslang.y" /* yacc.c:1646  */
-    {
+#line 654 "MachineIndependent/glslang.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 4659 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4754 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 48:
-#line 612 "glslang.y" /* yacc.c:1646  */
-    {
+#line 659 "MachineIndependent/glslang.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 4670 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4765 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 49:
-#line 621 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4676 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 668 "MachineIndependent/glslang.y"
+                                { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4771 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 50:
-#line 622 "glslang.y" /* yacc.c:1646  */
-    {
+#line 669 "MachineIndependent/glslang.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 4686 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4781 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 51:
-#line 627 "glslang.y" /* yacc.c:1646  */
-    {
+#line 674 "MachineIndependent/glslang.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 4696 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4791 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 52:
-#line 635 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4702 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 682 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4797 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 53:
-#line 636 "glslang.y" /* yacc.c:1646  */
-    {
+#line 683 "MachineIndependent/glslang.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 4713 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4808 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 54:
-#line 642 "glslang.y" /* yacc.c:1646  */
-    {
+#line 689 "MachineIndependent/glslang.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 4724 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4819 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 55:
-#line 651 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4730 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 698 "MachineIndependent/glslang.y"
+                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4825 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 56:
-#line 652 "glslang.y" /* yacc.c:1646  */
-    {
+#line 699 "MachineIndependent/glslang.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 4740 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4835 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 57:
-#line 657 "glslang.y" /* yacc.c:1646  */
-    {
+#line 704 "MachineIndependent/glslang.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 4750 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4845 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 58:
-#line 662 "glslang.y" /* yacc.c:1646  */
-    {
+#line 709 "MachineIndependent/glslang.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 4760 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4855 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 59:
-#line 667 "glslang.y" /* yacc.c:1646  */
-    {
+#line 714 "MachineIndependent/glslang.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 4770 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4865 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 60:
-#line 675 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4776 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 722 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4871 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 61:
-#line 676 "glslang.y" /* yacc.c:1646  */
-    {
+#line 723 "MachineIndependent/glslang.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(), "==");
@@ -4786,12 +4881,12 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4790 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4885 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 62:
-#line 685 "glslang.y" /* yacc.c:1646  */
-    {
+#line 732 "MachineIndependent/glslang.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(), "!=");
@@ -4800,125 +4895,125 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4804 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4899 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 63:
-#line 697 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4810 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 744 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4905 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 64:
-#line 698 "glslang.y" /* yacc.c:1646  */
-    {
+#line 745 "MachineIndependent/glslang.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 4821 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4916 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 65:
-#line 707 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4827 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 754 "MachineIndependent/glslang.y"
+                     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4922 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 66:
-#line 708 "glslang.y" /* yacc.c:1646  */
-    {
+#line 755 "MachineIndependent/glslang.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 4838 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4933 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 67:
-#line 717 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4844 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 764 "MachineIndependent/glslang.y"
+                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4939 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 68:
-#line 718 "glslang.y" /* yacc.c:1646  */
-    {
+#line 765 "MachineIndependent/glslang.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 4855 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4950 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 69:
-#line 727 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4861 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 774 "MachineIndependent/glslang.y"
+                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4956 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 70:
-#line 728 "glslang.y" /* yacc.c:1646  */
-    {
+#line 775 "MachineIndependent/glslang.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 4871 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4966 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 71:
-#line 736 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4877 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 783 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4972 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 72:
-#line 737 "glslang.y" /* yacc.c:1646  */
-    {
+#line 784 "MachineIndependent/glslang.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 4887 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4982 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 73:
-#line 745 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4893 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 792 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4988 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 74:
-#line 746 "glslang.y" /* yacc.c:1646  */
-    {
+#line 793 "MachineIndependent/glslang.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 4903 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4998 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 75:
-#line 754 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4909 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 801 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5004 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 76:
-#line 755 "glslang.y" /* yacc.c:1646  */
-    {
+#line 802 "MachineIndependent/glslang.y"
+                                     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 4917 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5012 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 77:
-#line 758 "glslang.y" /* yacc.c:1646  */
-    {
+#line 805 "MachineIndependent/glslang.y"
+                                             {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
         parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
@@ -4930,18 +5025,18 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4934 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5029 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 78:
-#line 773 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4940 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 820 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 5035 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 79:
-#line 774 "glslang.y" /* yacc.c:1646  */
-    {
+#line 821 "MachineIndependent/glslang.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(), "=");
@@ -4954,120 +5049,120 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4958 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5053 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 80:
-#line 790 "glslang.y" /* yacc.c:1646  */
-    {
+#line 837 "MachineIndependent/glslang.y"
+            {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4967 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5062 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 81:
-#line 794 "glslang.y" /* yacc.c:1646  */
-    {
+#line 841 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4976 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5071 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 82:
-#line 798 "glslang.y" /* yacc.c:1646  */
-    {
+#line 845 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4985 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5080 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 83:
-#line 802 "glslang.y" /* yacc.c:1646  */
-    {
+#line 849 "MachineIndependent/glslang.y"
+                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4995 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5090 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 84:
-#line 807 "glslang.y" /* yacc.c:1646  */
-    {
+#line 854 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5004 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5099 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 85:
-#line 811 "glslang.y" /* yacc.c:1646  */
-    {
+#line 858 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 5013 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5108 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 86:
-#line 815 "glslang.y" /* yacc.c:1646  */
-    {
+#line 862 "MachineIndependent/glslang.y"
+                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 5022 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5117 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 87:
-#line 819 "glslang.y" /* yacc.c:1646  */
-    {
+#line 866 "MachineIndependent/glslang.y"
+                   {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 5031 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5126 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 88:
-#line 823 "glslang.y" /* yacc.c:1646  */
-    {
+#line 870 "MachineIndependent/glslang.y"
+                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 5040 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5135 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 89:
-#line 827 "glslang.y" /* yacc.c:1646  */
-    {
+#line 874 "MachineIndependent/glslang.y"
+                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 5049 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5144 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 90:
-#line 831 "glslang.y" /* yacc.c:1646  */
-    {
+#line 878 "MachineIndependent/glslang.y"
+                {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 5058 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5153 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 91:
-#line 838 "glslang.y" /* yacc.c:1646  */
-    {
+#line 885 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5066 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5161 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 92:
-#line 841 "glslang.y" /* yacc.c:1646  */
-    {
+#line 888 "MachineIndependent/glslang.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) {
@@ -5075,117 +5170,117 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5079 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5174 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 93:
-#line 852 "glslang.y" /* yacc.c:1646  */
-    {
+#line 899 "MachineIndependent/glslang.y"
+                             {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5088 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5183 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 94:
-#line 859 "glslang.y" /* yacc.c:1646  */
-    {
+#line 906 "MachineIndependent/glslang.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 5098 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5193 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 95:
-#line 864 "glslang.y" /* yacc.c:1646  */
-    {
+#line 911 "MachineIndependent/glslang.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 5108 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5203 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 96:
-#line 869 "glslang.y" /* yacc.c:1646  */
-    {
+#line 916 "MachineIndependent/glslang.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 5120 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5215 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 97:
-#line 876 "glslang.y" /* yacc.c:1646  */
-    {
+#line 923 "MachineIndependent/glslang.y"
+                                {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 5129 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5224 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 98:
-#line 880 "glslang.y" /* yacc.c:1646  */
-    {
+#line 927 "MachineIndependent/glslang.y"
+                                           {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5138 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5233 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 99:
-#line 884 "glslang.y" /* yacc.c:1646  */
-    {
+#line 931 "MachineIndependent/glslang.y"
+                                                           {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 5147 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5242 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 100:
-#line 888 "glslang.y" /* yacc.c:1646  */
-    {
+#line 935 "MachineIndependent/glslang.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 5157 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5252 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 101:
-#line 893 "glslang.y" /* yacc.c:1646  */
-    {
+#line 940 "MachineIndependent/glslang.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 5167 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5262 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 102:
-#line 898 "glslang.y" /* yacc.c:1646  */
-    {
+#line 945 "MachineIndependent/glslang.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 5178 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5273 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 103:
-#line 907 "glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5184 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 954 "MachineIndependent/glslang.y"
+                                           { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 5279 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 104:
-#line 907 "glslang.y" /* yacc.c:1646  */
-    {
+#line 954 "MachineIndependent/glslang.y"
+                                                                                                                          {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
         parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
@@ -5194,55 +5289,55 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 5198 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5293 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 105:
-#line 918 "glslang.y" /* yacc.c:1646  */
-    {
+#line 965 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5207 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5302 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 106:
-#line 922 "glslang.y" /* yacc.c:1646  */
-    {
+#line 969 "MachineIndependent/glslang.y"
+                                       {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5216 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5311 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 107:
-#line 929 "glslang.y" /* yacc.c:1646  */
-    {
+#line 976 "MachineIndependent/glslang.y"
+                                       {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5225 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5320 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 108:
-#line 936 "glslang.y" /* yacc.c:1646  */
-    {
+#line 983 "MachineIndependent/glslang.y"
+                      {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5233 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5328 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 109:
-#line 939 "glslang.y" /* yacc.c:1646  */
-    {
+#line 986 "MachineIndependent/glslang.y"
+                                      {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5241 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5336 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 110:
-#line 946 "glslang.y" /* yacc.c:1646  */
-    {
+#line 993 "MachineIndependent/glslang.y"
+                                            {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
         if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
@@ -5250,12 +5345,12 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5254 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5349 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 111:
-#line 954 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1001 "MachineIndependent/glslang.y"
+                                                                  {
         //
         // Only first parameter of one-parameter functions can be void
         // The check for named parameters not being void is done in parameter_declarator
@@ -5272,12 +5367,12 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5276 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5371 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 112:
-#line 974 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1021 "MachineIndependent/glslang.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), "");
@@ -5296,12 +5391,12 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5300 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5395 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 113:
-#line 997 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1044 "MachineIndependent/glslang.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");
@@ -5316,12 +5411,12 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5320 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5415 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 114:
-#line 1012 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1059 "MachineIndependent/glslang.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");
@@ -5340,12 +5435,12 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5344 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5439 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 115:
-#line 1037 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1084 "MachineIndependent/glslang.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;
@@ -5356,24 +5451,24 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5360 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5455 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 116:
-#line 1048 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1095 "MachineIndependent/glslang.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 5372 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5467 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 117:
-#line 1058 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1105 "MachineIndependent/glslang.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;
@@ -5383,133 +5478,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 5387 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5482 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 118:
-#line 1068 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1115 "MachineIndependent/glslang.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 5399 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5494 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 119:
-#line 1078 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1125 "MachineIndependent/glslang.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 5410 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5505 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 120:
-#line 1087 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1134 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5418 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5513 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 121:
-#line 1090 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1137 "MachineIndependent/glslang.y"
+                                            {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5427 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5522 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 122:
-#line 1094 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1141 "MachineIndependent/glslang.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 5436 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5531 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 123:
-#line 1098 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1145 "MachineIndependent/glslang.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 5446 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5541 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 124:
-#line 1103 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1150 "MachineIndependent/glslang.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 5456 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5551 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 125:
-#line 1111 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1158 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
 
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 5468 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5563 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 126:
-#line 1118 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1165 "MachineIndependent/glslang.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 5478 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5573 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 127:
-#line 1123 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1170 "MachineIndependent/glslang.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 5488 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5583 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 128:
-#line 1128 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1175 "MachineIndependent/glslang.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 5498 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5593 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 129:
-#line 1133 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1180 "MachineIndependent/glslang.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 5508 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5603 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 130:
-#line 1142 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1189 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
         parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
@@ -5519,12 +5614,12 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5523 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5618 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 131:
-#line 1152 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1199 "MachineIndependent/glslang.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));
 
@@ -5548,71 +5643,71 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5552 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5647 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 132:
-#line 1179 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1226 "MachineIndependent/glslang.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 5563 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5658 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 133:
-#line 1188 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1235 "MachineIndependent/glslang.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 5575 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5670 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 134:
-#line 1195 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1242 "MachineIndependent/glslang.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 5587 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5682 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 135:
-#line 1203 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1250 "MachineIndependent/glslang.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 5599 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5694 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 136:
-#line 1210 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1258 "MachineIndependent/glslang.y"
+                        {
         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 5611 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5706 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 137:
-#line 1217 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1265 "MachineIndependent/glslang.y"
+                  {
         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");
@@ -5620,12 +5715,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 5624 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5719 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 138:
-#line 1225 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1273 "MachineIndependent/glslang.y"
+                     {
         // 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");
@@ -5635,109 +5730,109 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 5639 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5734 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 139:
-#line 1235 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1283 "MachineIndependent/glslang.y"
+                {
         // 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 5651 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5746 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 140:
-#line 1242 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1290 "MachineIndependent/glslang.y"
+                {
         // 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 5663 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5758 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 141:
-#line 1253 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1302 "MachineIndependent/glslang.y"
+                                                             {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5671 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5766 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 142:
-#line 1259 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1308 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5679 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 143:
-#line 1262 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1311 "MachineIndependent/glslang.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 5689 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5784 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 144:
-#line 1269 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1318 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5698 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5793 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 145:
-#line 1273 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1322 "MachineIndependent/glslang.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 5707 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5802 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 146:
-#line 1277 "glslang.y" /* yacc.c:1646  */
-    { // because "shared" is both an identifier and a keyword
+#line 1326 "MachineIndependent/glslang.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 5717 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5812 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 147:
-#line 1286 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1335 "MachineIndependent/glslang.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 5728 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5823 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 148:
-#line 1296 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1345 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5736 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5831 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 149:
-#line 1299 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1348 "MachineIndependent/glslang.y"
+                                           {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
             (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
@@ -5745,135 +5840,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 5749 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5844 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 150:
-#line 1310 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1359 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5757 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5852 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 151:
-#line 1313 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1362 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5765 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5860 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 152:
-#line 1316 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1365 "MachineIndependent/glslang.y"
+                          {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5774 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5869 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 153:
-#line 1320 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1369 "MachineIndependent/glslang.y"
+                              {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5783 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5878 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 154:
-#line 1324 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1373 "MachineIndependent/glslang.y"
+                          {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5792 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5887 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 155:
-#line 1329 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1378 "MachineIndependent/glslang.y"
+                        {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5801 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5896 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 156:
-#line 1333 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1383 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5809 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5904 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 157:
-#line 1340 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1391 "MachineIndependent/glslang.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 5818 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5913 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 158:
-#line 1344 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1395 "MachineIndependent/glslang.y"
+            {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5828 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5923 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 159:
-#line 1349 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1400 "MachineIndependent/glslang.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 5839 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5934 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 160:
-#line 1355 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1406 "MachineIndependent/glslang.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 5850 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5945 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 161:
-#line 1361 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1412 "MachineIndependent/glslang.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 5862 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5957 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 162:
-#line 1368 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1419 "MachineIndependent/glslang.y"
+              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5872 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5967 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 163:
-#line 1373 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1424 "MachineIndependent/glslang.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");
@@ -5881,22 +5976,22 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5885 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5980 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 164:
-#line 1381 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1432 "MachineIndependent/glslang.y"
+             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5895 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5990 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 165:
-#line 1387 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1438 "MachineIndependent/glslang.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");
@@ -5908,12 +6003,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5912 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6007 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 166:
-#line 1399 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1450 "MachineIndependent/glslang.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");
@@ -5927,33 +6022,33 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5931 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6026 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 167:
-#line 1413 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1464 "MachineIndependent/glslang.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 5942 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6037 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 168:
-#line 1419 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1470 "MachineIndependent/glslang.y"
+             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5952 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6047 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 169:
-#line 1424 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1476 "MachineIndependent/glslang.y"
+                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
             | EShLangAnyHitMask), "hitAttributeNV");
@@ -5961,12 +6056,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5965 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6060 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 170:
-#line 1432 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1484 "MachineIndependent/glslang.y"
+                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
             | EShLangAnyHitMask), "hitAttributeEXT");
@@ -5974,12 +6069,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5978 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6073 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 171:
-#line 1440 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1492 "MachineIndependent/glslang.y"
+                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
@@ -5987,12 +6082,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 5991 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6086 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 172:
-#line 1448 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1500 "MachineIndependent/glslang.y"
+                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
@@ -6000,12 +6095,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 6004 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6099 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 173:
-#line 1456 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1508 "MachineIndependent/glslang.y"
+                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
@@ -6013,12 +6108,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 6017 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6112 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 174:
-#line 1464 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1516 "MachineIndependent/glslang.y"
+                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
             EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
@@ -6026,12 +6121,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 6030 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6125 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 175:
-#line 1472 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1524 "MachineIndependent/glslang.y"
+                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
             EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
@@ -6039,12 +6134,12 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 6043 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6138 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 176:
-#line 1480 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1532 "MachineIndependent/glslang.y"
+                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
             EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
@@ -6052,222 +6147,222 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 6056 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6151 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 177:
-#line 1488 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1540 "MachineIndependent/glslang.y"
+                   {
         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 6068 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6163 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 178:
-#line 1495 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1547 "MachineIndependent/glslang.y"
+                    {
         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 6080 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6175 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 179:
-#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  */
-    {
+#line 1554 "MachineIndependent/glslang.y"
+                     {
         (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 6099 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6185 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 181:
-#line 1511 "glslang.y" /* yacc.c:1646  */
-    {
+  case 180:
+#line 1559 "MachineIndependent/glslang.y"
+                          {
         (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 6109 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6195 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 182:
-#line 1516 "glslang.y" /* yacc.c:1646  */
-    {
+  case 181:
+#line 1564 "MachineIndependent/glslang.y"
+                        {
         (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 6119 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6205 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 183:
-#line 1521 "glslang.y" /* yacc.c:1646  */
-    {
+  case 182:
+#line 1569 "MachineIndependent/glslang.y"
+                       {
         (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 6129 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6215 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 184:
-#line 1526 "glslang.y" /* yacc.c:1646  */
-    {
+  case 183:
+#line 1574 "MachineIndependent/glslang.y"
+                 {
         (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 6139 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6225 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 185:
-#line 1531 "glslang.y" /* yacc.c:1646  */
-    {
+  case 184:
+#line 1579 "MachineIndependent/glslang.y"
+                         {
         (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 6149 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6235 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 185:
+#line 1584 "MachineIndependent/glslang.y"
+                 {
         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 6196 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6246 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 191:
-#line 1558 "glslang.y" /* yacc.c:1646  */
-    {
+  case 186:
+#line 1590 "MachineIndependent/glslang.y"
+                                                       {
         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 6207 "glslang_tab.cpp" /* yacc.c:1646  */
+#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"
     break;
 
   case 192:
-#line 1569 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1623 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 6216 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6311 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 193:
-#line 1576 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1631 "MachineIndependent/glslang.y"
+                 {
         // TODO
     }
-#line 6224 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6319 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 194:
-#line 1579 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1634 "MachineIndependent/glslang.y"
+                                      {
         // 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 6234 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6329 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 195:
-#line 1588 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1643 "MachineIndependent/glslang.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 6244 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6339 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 196:
-#line 1593 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1648 "MachineIndependent/glslang.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 6256 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6351 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 197:
-#line 1603 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1658 "MachineIndependent/glslang.y"
+                                 {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6266 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6361 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 198:
-#line 1608 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1663 "MachineIndependent/glslang.y"
+                                                        {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
 
@@ -6275,492 +6370,492 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6279 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6374 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 199:
-#line 1616 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1671 "MachineIndependent/glslang.y"
+                                                 {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6288 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6383 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 200:
-#line 1620 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1675 "MachineIndependent/glslang.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 6300 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6395 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 201:
-#line 1630 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1685 "MachineIndependent/glslang.y"
+                               {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 6308 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6403 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 202:
-#line 1633 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1688 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.typeParameters) = 0;
     }
-#line 6316 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6411 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 203:
-#line 1639 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1694 "MachineIndependent/glslang.y"
+                                                           {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 6324 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6419 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 204:
-#line 1645 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1700 "MachineIndependent/glslang.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 6336 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6431 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 205:
-#line 1652 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1707 "MachineIndependent/glslang.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 6348 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6443 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 206:
-#line 1662 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1717 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 6357 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6452 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 207:
-#line 1666 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1721 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6366 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6461 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 208:
-#line 1670 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1725 "MachineIndependent/glslang.y"
+          {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6375 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6470 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 209:
-#line 1674 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1729 "MachineIndependent/glslang.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 6385 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6480 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 210:
-#line 1679 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1734 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 6394 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6489 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 211:
-#line 1683 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1738 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6404 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6499 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 212:
-#line 1688 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1743 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6414 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6509 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 213:
-#line 1693 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1748 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6424 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6519 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 214:
-#line 1698 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1753 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 6434 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6529 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 215:
-#line 1703 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1758 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 6444 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6539 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 216:
-#line 1708 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1763 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 6454 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6549 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 217:
-#line 1713 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1768 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6464 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6559 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 218:
-#line 1718 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1773 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6474 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6569 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 219:
-#line 1723 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1778 "MachineIndependent/glslang.y"
+            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6484 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6579 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 220:
-#line 1728 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1783 "MachineIndependent/glslang.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 6495 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6590 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 221:
-#line 1734 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1789 "MachineIndependent/glslang.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 6506 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6601 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 222:
-#line 1740 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1795 "MachineIndependent/glslang.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 6517 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6612 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 223:
-#line 1746 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1801 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6527 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6622 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 224:
-#line 1751 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1806 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6537 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6632 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 225:
-#line 1756 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1811 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6547 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6642 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 226:
-#line 1761 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1816 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6557 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6652 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 227:
-#line 1766 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1821 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6567 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6662 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 228:
-#line 1771 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1826 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6577 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6672 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 229:
-#line 1776 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1831 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6587 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6682 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 230:
-#line 1781 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1836 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6597 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6692 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 231:
-#line 1786 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1841 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6607 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6702 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 232:
-#line 1791 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1846 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6617 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6712 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 233:
-#line 1796 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1851 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6627 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6722 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 234:
-#line 1801 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1856 "MachineIndependent/glslang.y"
+             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6637 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6732 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 235:
-#line 1807 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1863 "MachineIndependent/glslang.y"
+             {
         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 6649 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6744 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 236:
-#line 1814 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1870 "MachineIndependent/glslang.y"
+                {
         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 6659 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6754 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 237:
-#line 1819 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1875 "MachineIndependent/glslang.y"
+                {
         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 6669 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6764 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 238:
-#line 1824 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1880 "MachineIndependent/glslang.y"
+                {
         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 6679 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6774 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 239:
-#line 1829 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1885 "MachineIndependent/glslang.y"
+             {
         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 6689 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6784 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 240:
-#line 1834 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1890 "MachineIndependent/glslang.y"
+              {
         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 6699 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6794 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 241:
-#line 1839 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1895 "MachineIndependent/glslang.y"
+              {
         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 6709 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6804 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 242:
-#line 1844 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1900 "MachineIndependent/glslang.y"
+               {
         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 6719 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6814 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 243:
-#line 1849 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1905 "MachineIndependent/glslang.y"
+              {
         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 6729 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6824 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 244:
-#line 1854 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1910 "MachineIndependent/glslang.y"
+               {
         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 6739 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6834 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 245:
-#line 1859 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1915 "MachineIndependent/glslang.y"
+              {
         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 6749 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6844 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 246:
-#line 1864 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1920 "MachineIndependent/glslang.y"
+               {
         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 6759 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6854 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 247:
-#line 1869 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1925 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6768,12 +6863,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6772 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6867 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 248:
-#line 1877 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1933 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6781,12 +6876,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6785 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6880 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 249:
-#line 1885 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1941 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
@@ -6794,375 +6889,375 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6798 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6893 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 250:
-#line 1893 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1949 "MachineIndependent/glslang.y"
+              {
         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 6809 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6904 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 251:
-#line 1899 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1955 "MachineIndependent/glslang.y"
+              {
         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 6820 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6915 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 252:
-#line 1905 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1961 "MachineIndependent/glslang.y"
+              {
         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 6831 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6926 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 253:
-#line 1911 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1967 "MachineIndependent/glslang.y"
+              {
         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 6842 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6937 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 254:
-#line 1917 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1973 "MachineIndependent/glslang.y"
+              {
         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 6853 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6948 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 255:
-#line 1923 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1979 "MachineIndependent/glslang.y"
+              {
         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 6864 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6959 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 256:
-#line 1929 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1985 "MachineIndependent/glslang.y"
+              {
         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 6875 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6970 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 257:
-#line 1935 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1991 "MachineIndependent/glslang.y"
+              {
         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 6886 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6981 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 258:
-#line 1941 "glslang.y" /* yacc.c:1646  */
-    {
+#line 1997 "MachineIndependent/glslang.y"
+              {
         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 6897 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6992 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 259:
-#line 1947 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2003 "MachineIndependent/glslang.y"
+             {
         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 6908 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7003 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 260:
-#line 1953 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2009 "MachineIndependent/glslang.y"
+             {
         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 6919 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7014 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 261:
-#line 1959 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2015 "MachineIndependent/glslang.y"
+             {
         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 6930 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7025 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 262:
-#line 1965 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2021 "MachineIndependent/glslang.y"
+              {
         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 6941 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7036 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 263:
-#line 1971 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2027 "MachineIndependent/glslang.y"
+              {
         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 6952 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7047 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 264:
-#line 1977 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2033 "MachineIndependent/glslang.y"
+              {
         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 6963 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7058 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 265:
-#line 1983 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2039 "MachineIndependent/glslang.y"
+              {
         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 6974 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7069 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 266:
-#line 1989 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2045 "MachineIndependent/glslang.y"
+              {
         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 6985 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7080 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 267:
-#line 1995 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2051 "MachineIndependent/glslang.y"
+              {
         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 6996 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7091 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 268:
-#line 2001 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2057 "MachineIndependent/glslang.y"
+              {
         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 7007 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7102 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 269:
-#line 2007 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2063 "MachineIndependent/glslang.y"
+              {
         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 7018 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7113 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 270:
-#line 2013 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2069 "MachineIndependent/glslang.y"
+              {
         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 7029 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7124 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 271:
-#line 2019 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2075 "MachineIndependent/glslang.y"
+             {
         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 7040 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7135 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 272:
-#line 2025 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2081 "MachineIndependent/glslang.y"
+             {
         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 7051 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7146 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 273:
-#line 2031 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2087 "MachineIndependent/glslang.y"
+             {
         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 7062 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7157 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 274:
-#line 2037 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2093 "MachineIndependent/glslang.y"
+              {
         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 7073 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7168 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 275:
-#line 2043 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2099 "MachineIndependent/glslang.y"
+              {
         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 7084 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7179 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 276:
-#line 2049 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2105 "MachineIndependent/glslang.y"
+              {
         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 7095 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7190 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 277:
-#line 2055 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2111 "MachineIndependent/glslang.y"
+              {
         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 7106 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7201 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 278:
-#line 2061 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2117 "MachineIndependent/glslang.y"
+              {
         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 7117 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7212 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 279:
-#line 2067 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2123 "MachineIndependent/glslang.y"
+              {
         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 7128 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7223 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 280:
-#line 2073 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2129 "MachineIndependent/glslang.y"
+              {
         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 7139 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7234 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 281:
-#line 2079 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2135 "MachineIndependent/glslang.y"
+              {
         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 7150 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7245 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 282:
-#line 2085 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2141 "MachineIndependent/glslang.y"
+              {
         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 7161 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7256 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 283:
-#line 2091 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2147 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7170,12 +7265,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7174 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7269 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 284:
-#line 2099 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2155 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7183,12 +7278,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7187 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7282 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 285:
-#line 2107 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2163 "MachineIndependent/glslang.y"
+            {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7196,12 +7291,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7200 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7295 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 286:
-#line 2115 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2171 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7209,12 +7304,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7213 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7308 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 287:
-#line 2123 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2179 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7222,12 +7317,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7226 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7321 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 288:
-#line 2131 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2187 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7235,12 +7330,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7239 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7334 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 289:
-#line 2139 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2195 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7248,12 +7343,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7252 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7347 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 290:
-#line 2147 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2203 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7261,12 +7356,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7265 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7360 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 291:
-#line 2155 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2211 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7274,12 +7369,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7278 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7373 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 292:
-#line 2163 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2219 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7287,12 +7382,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7291 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7386 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 293:
-#line 2171 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2227 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7300,12 +7395,12 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7304 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7399 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 294:
-#line 2179 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2235 "MachineIndependent/glslang.y"
+              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
@@ -7313,2120 +7408,2120 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7317 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7412 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 295:
-#line 2187 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2243 "MachineIndependent/glslang.y"
+              {
         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 7328 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7423 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 296:
-#line 2193 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2249 "MachineIndependent/glslang.y"
+              {
         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 7339 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7434 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 297:
-#line 2199 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2255 "MachineIndependent/glslang.y"
+              {
         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 7350 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7445 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 298:
-#line 2205 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2261 "MachineIndependent/glslang.y"
+                {
         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 7361 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7456 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 299:
-#line 2211 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2267 "MachineIndependent/glslang.y"
+                {
         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 7372 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7467 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 300:
-#line 2217 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2273 "MachineIndependent/glslang.y"
+                {
         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 7383 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7478 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 301:
-#line 2223 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2279 "MachineIndependent/glslang.y"
+                {
         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 7394 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7489 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 302:
-#line 2229 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2285 "MachineIndependent/glslang.y"
+                {
         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 7405 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7500 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 303:
-#line 2235 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2291 "MachineIndependent/glslang.y"
+                {
         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 7416 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7511 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 304:
-#line 2241 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2297 "MachineIndependent/glslang.y"
+                {
         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 7427 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7522 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 305:
-#line 2247 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2303 "MachineIndependent/glslang.y"
+                {
         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 7438 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7533 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 306:
-#line 2253 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2309 "MachineIndependent/glslang.y"
+                {
         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 7449 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7544 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 307:
-#line 2259 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2315 "MachineIndependent/glslang.y"
+              {
         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 7460 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7555 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 308:
-#line 2265 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2321 "MachineIndependent/glslang.y"
+              {
         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 7471 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7566 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 309:
-#line 2271 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2327 "MachineIndependent/glslang.y"
+              {
         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 7482 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7577 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 310:
-#line 2277 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2333 "MachineIndependent/glslang.y"
+                {
         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 7493 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7588 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 311:
-#line 2283 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2339 "MachineIndependent/glslang.y"
+                {
         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 7504 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7599 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 312:
-#line 2289 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2345 "MachineIndependent/glslang.y"
+                {
         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 7515 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7610 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 313:
-#line 2295 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2351 "MachineIndependent/glslang.y"
+                {
         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 7526 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7621 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 314:
-#line 2301 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2357 "MachineIndependent/glslang.y"
+                {
         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 7537 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7632 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 315:
-#line 2307 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2363 "MachineIndependent/glslang.y"
+                {
         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 7548 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7643 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 316:
-#line 2313 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2369 "MachineIndependent/glslang.y"
+                {
         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 7559 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7654 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 317:
-#line 2319 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2375 "MachineIndependent/glslang.y"
+                {
         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 7570 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7665 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 318:
-#line 2325 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2381 "MachineIndependent/glslang.y"
+                {
         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 7581 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7676 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 319:
-#line 2331 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2387 "MachineIndependent/glslang.y"
+              {
         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 7592 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7687 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 320:
-#line 2337 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2393 "MachineIndependent/glslang.y"
+              {
         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 7603 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7698 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 321:
-#line 2343 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2399 "MachineIndependent/glslang.y"
+              {
         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 7614 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7709 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 322:
-#line 2349 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2405 "MachineIndependent/glslang.y"
+                {
         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 7625 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7720 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 323:
-#line 2355 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2411 "MachineIndependent/glslang.y"
+                {
         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 7636 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7731 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 324:
-#line 2361 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2417 "MachineIndependent/glslang.y"
+                {
         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 7647 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7742 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 325:
-#line 2367 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2423 "MachineIndependent/glslang.y"
+                {
         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 7658 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7753 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 326:
-#line 2373 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2429 "MachineIndependent/glslang.y"
+                {
         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 7669 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7764 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 327:
-#line 2379 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2435 "MachineIndependent/glslang.y"
+                {
         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 7680 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7775 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 328:
-#line 2385 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2441 "MachineIndependent/glslang.y"
+                {
         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 7691 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7786 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 329:
-#line 2391 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2447 "MachineIndependent/glslang.y"
+                {
         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 7702 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7797 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 330:
-#line 2397 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2453 "MachineIndependent/glslang.y"
+                {
         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 7713 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7808 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 331:
-#line 2403 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2459 "MachineIndependent/glslang.y"
+                  {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7722 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7817 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 332:
-#line 2407 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2463 "MachineIndependent/glslang.y"
+                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7731 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7826 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 333:
-#line 2411 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2467 "MachineIndependent/glslang.y"
+                  {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtRayQuery;
     }
-#line 7740 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7835 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 334:
-#line 2415 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2471 "MachineIndependent/glslang.y"
+                  {
         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 7750 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7845 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 335:
-#line 2420 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2476 "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, Esd1D);
     }
-#line 7760 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7855 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 336:
-#line 2426 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2483 "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);
     }
-#line 7770 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7865 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 337:
-#line 2431 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2488 "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, Esd3D);
     }
-#line 7780 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7875 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 338:
-#line 2436 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2493 "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);
     }
-#line 7790 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7885 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 339:
-#line 2441 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2498 "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, true);
     }
-#line 7800 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7895 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 340:
-#line 2446 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2503 "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, false, true);
     }
-#line 7810 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7905 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 341:
-#line 2451 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2508 "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);
     }
-#line 7820 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7915 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 342:
-#line 2456 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2513 "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, true);
     }
-#line 7830 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7925 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 343:
-#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 7840 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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 7850 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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 7860 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 346:
-#line 2477 "glslang.y" /* yacc.c:1646  */
-    {
+#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 7870 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 347:
-#line 2482 "glslang.y" /* yacc.c:1646  */
-    {
+  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 7880 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7945 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 345:
+#line 2530 "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, Esd1D, false, true);
+    }
+#line 7955 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 346:
+#line 2535 "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, Esd1D, true);
+    }
+#line 7965 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 347:
+#line 2540 "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, Esd1D, true, true);
+    }
+#line 7975 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 348:
-#line 2487 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2545 "MachineIndependent/glslang.y"
+                   {
         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 7891 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7986 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 349:
-#line 2493 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2551 "MachineIndependent/glslang.y"
+                   {
         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 7902 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7997 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 350:
-#line 2499 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2557 "MachineIndependent/glslang.y"
+                   {
         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 7913 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8008 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 351:
-#line 2505 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2563 "MachineIndependent/glslang.y"
+                     {
         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 7924 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8019 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 352:
-#line 2511 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2569 "MachineIndependent/glslang.y"
+                         {
         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 7935 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8030 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 353:
-#line 2517 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2575 "MachineIndependent/glslang.y"
+                         {
         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 7946 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8041 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 354:
-#line 2523 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2581 "MachineIndependent/glslang.y"
+                           {
         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 7957 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8052 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 355:
-#line 2529 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2587 "MachineIndependent/glslang.y"
+                        {
         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 7968 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8063 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 356:
-#line 2535 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2593 "MachineIndependent/glslang.y"
+                        {
         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 7979 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8074 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 357:
-#line 2541 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2599 "MachineIndependent/glslang.y"
+                              {
         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 7990 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8085 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 358:
-#line 2547 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2605 "MachineIndependent/glslang.y"
+                              {
         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 8001 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8096 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 359:
-#line 2553 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2611 "MachineIndependent/glslang.y"
+                          {
         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 8012 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8107 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 360:
-#line 2559 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2617 "MachineIndependent/glslang.y"
+                                {
         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 8023 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8118 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 361:
-#line 2565 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2623 "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, Esd1D);
     }
-#line 8033 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8128 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 362:
-#line 2571 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2630 "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);
     }
-#line 8043 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8138 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 363:
-#line 2576 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2635 "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, Esd3D);
     }
-#line 8053 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8148 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 364:
-#line 2581 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2640 "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);
     }
-#line 8063 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8158 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 365:
-#line 2586 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2645 "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);
     }
-#line 8073 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8168 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 366:
-#line 2591 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2650 "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);
     }
-#line 8083 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8178 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 367:
-#line 2596 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2655 "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, Esd3D);
     }
-#line 8093 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8188 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 368:
-#line 2601 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2660 "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);
     }
-#line 8103 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8198 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 369:
-#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 8113 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 370:
-#line 2612 "glslang.y" /* yacc.c:1646  */
-    {
+#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 8123 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8208 "MachineIndependent/glslang_tab.cpp"
     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 8133 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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 8143 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 373:
-#line 2627 "glslang.y" /* yacc.c:1646  */
-    {
+  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 8153 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8218 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 374:
-#line 2632 "glslang.y" /* yacc.c:1646  */
-    {
+  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 8163 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8228 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 375:
-#line 2637 "glslang.y" /* yacc.c:1646  */
-    {
+  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 8173 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8238 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 376:
-#line 2642 "glslang.y" /* yacc.c:1646  */
-    {
+  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 8183 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8248 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 374:
+#line 2692 "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, Esd1D, true);
+    }
+#line 8258 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 375:
+#line 2697 "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, Esd1D);
+    }
+#line 8268 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 376:
+#line 2702 "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, Esd1D, true);
+    }
+#line 8278 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 377:
-#line 2648 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2709 "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);
     }
-#line 8193 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8288 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 378:
-#line 2653 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2714 "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);
     }
-#line 8203 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8298 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 379:
-#line 2658 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2719 "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, Esd3D);
     }
-#line 8213 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8308 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 380:
-#line 2663 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2724 "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);
     }
-#line 8223 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8318 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 381:
-#line 2668 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2729 "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);
     }
-#line 8233 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8328 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 382:
-#line 2673 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2734 "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);
     }
-#line 8243 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8338 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 383:
-#line 2678 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2739 "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, Esd3D);
     }
-#line 8253 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8348 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 384:
-#line 2683 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2744 "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);
     }
-#line 8263 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8358 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 385:
-#line 2688 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2749 "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);
     }
-#line 8273 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8368 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 386:
-#line 2693 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2754 "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);
     }
-#line 8283 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8378 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 387:
-#line 2698 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2759 "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, Esd3D);
     }
-#line 8293 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8388 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 388:
-#line 2703 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2764 "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);
     }
-#line 8303 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8398 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 389:
-#line 2708 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2769 "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);
     }
-#line 8313 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8408 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 390:
-#line 2713 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2774 "MachineIndependent/glslang.y"
+              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 8323 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8418 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 391:
-#line 2718 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2779 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 8333 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8428 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 392:
-#line 2724 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2785 "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, EsdRect);
     }
-#line 8343 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8438 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 393:
-#line 2729 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2790 "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, EsdRect, false, true);
     }
-#line 8353 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8448 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 394:
-#line 2734 "glslang.y" /* yacc.c:1646  */
-    {
+#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"
+                       {
         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 8364 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8569 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 395:
-#line 2740 "glslang.y" /* yacc.c:1646  */
-    {
+  case 406:
+#line 2857 "MachineIndependent/glslang.y"
+                             {
         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 8375 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8580 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 407:
+#line 2863 "MachineIndependent/glslang.y"
+                       {
         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 8416 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8591 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 408:
+#line 2869 "MachineIndependent/glslang.y"
+                     {
         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 8457 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8602 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 409:
+#line 2875 "MachineIndependent/glslang.y"
+                          {
         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 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  */
+#line 8613 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 410:
-#line 2819 "glslang.y" /* yacc.c:1646  */
-    {
+#line 2881 "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);
     }
-#line 8528 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8623 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 411:
-#line 2824 "glslang.y" /* yacc.c:1646  */
-    {
+#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"
+                   {
         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 8539 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8804 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 412:
-#line 2830 "glslang.y" /* yacc.c:1646  */
-    {
+  case 429:
+#line 2979 "MachineIndependent/glslang.y"
+                   {
         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 8550 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8815 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 413:
-#line 2836 "glslang.y" /* yacc.c:1646  */
-    {
+  case 430:
+#line 2985 "MachineIndependent/glslang.y"
+                   {
         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 8561 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8826 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 414:
-#line 2842 "glslang.y" /* yacc.c:1646  */
-    {
+  case 431:
+#line 2991 "MachineIndependent/glslang.y"
+                     {
         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 8572 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8837 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 432:
+#line 2997 "MachineIndependent/glslang.y"
+                        {
         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 8593 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8848 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 417:
-#line 2859 "glslang.y" /* yacc.c:1646  */
-    {
+  case 433:
+#line 3003 "MachineIndependent/glslang.y"
+                        {
         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 8604 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8859 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 418:
-#line 2865 "glslang.y" /* yacc.c:1646  */
-    {
+  case 434:
+#line 3009 "MachineIndependent/glslang.y"
+                          {
         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 8615 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8870 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 435:
+#line 3015 "MachineIndependent/glslang.y"
+                       {
         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 8676 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8881 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 436:
+#line 3021 "MachineIndependent/glslang.y"
+                       {
         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 8717 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8892 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 437:
+#line 3027 "MachineIndependent/glslang.y"
+                     {
         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 8758 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8903 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 438:
+#line 3033 "MachineIndependent/glslang.y"
+                          {
         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 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  */
+#line 8914 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 439:
-#line 2975 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3039 "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);
     }
-#line 8829 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8924 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 440:
-#line 2980 "glslang.y" /* yacc.c:1646  */
-    {
+#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"
+                 {
         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 8840 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 473:
+#line 3212 "MachineIndependent/glslang.y"
+                 {
         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 8881 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 474:
+#line 3218 "MachineIndependent/glslang.y"
+                 {
         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 8922 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9277 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 475:
+#line 3224 "MachineIndependent/glslang.y"
+                     {
         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 8963 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9288 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 476:
+#line 3230 "MachineIndependent/glslang.y"
+                   {
         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 9004 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9299 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 477:
+#line 3236 "MachineIndependent/glslang.y"
+                     {
         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 9045 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9310 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 478:
+#line 3242 "MachineIndependent/glslang.y"
+                      {
         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 9086 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9321 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 479:
+#line 3248 "MachineIndependent/glslang.y"
+                      {
         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 9127 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9332 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 480:
+#line 3254 "MachineIndependent/glslang.y"
+                        {
         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 9168 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9343 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 481:
+#line 3260 "MachineIndependent/glslang.y"
+                   {
         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 9209 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9354 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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  */
-    {
+  case 482:
+#line 3266 "MachineIndependent/glslang.y"
+                        {
         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 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  */
+#line 9365 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 483:
-#line 3206 "glslang.y" /* yacc.c:1646  */
-    {  // GL_OES_EGL_image_external
+#line 3273 "MachineIndependent/glslang.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 9281 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9376 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 484:
-#line 3212 "glslang.y" /* yacc.c:1646  */
-    { // GL_EXT_YUV_target
+#line 3279 "MachineIndependent/glslang.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 9292 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9387 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 485:
-#line 3218 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3286 "MachineIndependent/glslang.y"
+                   {
         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 9303 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9398 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 486:
-#line 3224 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3292 "MachineIndependent/glslang.y"
+                     {
         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 9314 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9409 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 487:
-#line 3230 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3298 "MachineIndependent/glslang.y"
+                      {
         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 9326 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9421 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 488:
-#line 3237 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3305 "MachineIndependent/glslang.y"
+                        {
         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 9338 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9433 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 489:
-#line 3244 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3312 "MachineIndependent/glslang.y"
+                    {
         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 9349 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9444 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 490:
-#line 3250 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3318 "MachineIndependent/glslang.y"
+                      {
         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 9360 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9455 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 491:
-#line 3256 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3324 "MachineIndependent/glslang.y"
+                    {
         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 9371 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9466 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 492:
-#line 3262 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3330 "MachineIndependent/glslang.y"
+                      {
         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 9382 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9477 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 493:
-#line 3268 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3336 "MachineIndependent/glslang.y"
+                 {
         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 9393 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9488 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 494:
-#line 3274 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3342 "MachineIndependent/glslang.y"
+                 {
         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 9404 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9499 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 495:
-#line 3280 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3348 "MachineIndependent/glslang.y"
+                 {
         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 9415 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9510 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 496:
-#line 3287 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3356 "MachineIndependent/glslang.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 9425 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9520 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 497:
-#line 3292 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3361 "MachineIndependent/glslang.y"
+                {
         //
         // This is for user defined type names.  The lexical phase looked up the
         // type.
@@ -9439,48 +9534,48 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 9443 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9538 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 498:
-#line 3308 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3377 "MachineIndependent/glslang.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 9453 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9548 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 499:
-#line 3313 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3382 "MachineIndependent/glslang.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 9463 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9558 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 500:
-#line 3318 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3387 "MachineIndependent/glslang.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 9473 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9568 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 501:
-#line 3326 "glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9479 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3395 "MachineIndependent/glslang.y"
+                                   { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
+#line 9574 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 502:
-#line 3326 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3395 "MachineIndependent/glslang.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);
@@ -9491,38 +9586,38 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9495 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9590 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 503:
-#line 3337 "glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9501 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3406 "MachineIndependent/glslang.y"
+                        { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
+#line 9596 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 504:
-#line 3337 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3406 "MachineIndependent/glslang.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 9513 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9608 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 505:
-#line 3347 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3416 "MachineIndependent/glslang.y"
+                         {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 9521 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9616 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 506:
-#line 3350 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3419 "MachineIndependent/glslang.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) {
@@ -9532,12 +9627,12 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9536 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9631 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 507:
-#line 3363 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3432 "MachineIndependent/glslang.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");
@@ -9559,12 +9654,12 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9563 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9658 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 508:
-#line 3385 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3454 "MachineIndependent/glslang.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");
@@ -9588,39 +9683,39 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9592 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9687 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 509:
-#line 3412 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3481 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9601 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9696 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 510:
-#line 3416 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3485 "MachineIndependent/glslang.y"
+                                                     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9609 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9704 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 511:
-#line 3422 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3491 "MachineIndependent/glslang.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 9619 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9714 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 512:
-#line 3427 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3496 "MachineIndependent/glslang.y"
+                                 {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
         (yyval.interm.typeLine).type = new TType(EbtVoid);
@@ -9628,236 +9723,236 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9632 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9727 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 513:
-#line 3438 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3507 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9640 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9735 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 514:
-#line 3442 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3511 "MachineIndependent/glslang.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 9651 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9746 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 515:
-#line 3448 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3517 "MachineIndependent/glslang.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 9662 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9757 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 516:
-#line 3459 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3528 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 9670 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9765 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 517:
-#line 3462 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3531 "MachineIndependent/glslang.y"
+                                         {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9678 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9773 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 518:
-#line 3469 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9684 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3538 "MachineIndependent/glslang.y"
+                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9779 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 519:
-#line 3473 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9690 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3542 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9785 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 520:
-#line 3474 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9696 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3543 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9791 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 521:
-#line 3480 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9702 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3549 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9797 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 522:
-#line 3481 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9708 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3550 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9803 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 523:
-#line 3482 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9714 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3551 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9809 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 524:
-#line 3483 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9720 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3552 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9815 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 525:
-#line 3484 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9726 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3553 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9821 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 526:
-#line 3485 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9732 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3554 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9827 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 527:
-#line 3486 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9738 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3555 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9833 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 528:
-#line 3488 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9744 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3558 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9839 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 529:
-#line 3494 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3566 "MachineIndependent/glslang.y"
+                       {
         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 9754 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9849 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 530:
-#line 3503 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 9760 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3576 "MachineIndependent/glslang.y"
+                             { (yyval.interm.intermNode) = 0; }
+#line 9855 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 531:
-#line 3504 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3577 "MachineIndependent/glslang.y"
+                 {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9769 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9864 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 532:
-#line 3508 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3581 "MachineIndependent/glslang.y"
+                     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9778 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9873 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 533:
-#line 3512 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3585 "MachineIndependent/glslang.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 9788 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9883 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 534:
-#line 3520 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9794 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3593 "MachineIndependent/glslang.y"
+                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9889 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 535:
-#line 3521 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9800 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3594 "MachineIndependent/glslang.y"
+                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9895 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 536:
-#line 3525 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3598 "MachineIndependent/glslang.y"
+      {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9808 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9903 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 537:
-#line 3528 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3601 "MachineIndependent/glslang.y"
+                          {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9817 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9912 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 538:
-#line 3532 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3605 "MachineIndependent/glslang.y"
+      {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9827 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9922 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 539:
-#line 3537 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3610 "MachineIndependent/glslang.y"
+                       {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9838 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9933 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 540:
-#line 3546 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3619 "MachineIndependent/glslang.y"
+                             {
         (yyval.interm.intermNode) = 0;
     }
-#line 9846 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9941 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 541:
-#line 3549 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3622 "MachineIndependent/glslang.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 9856 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9951 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 542:
-#line 3557 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3630 "MachineIndependent/glslang.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)) {
@@ -9865,12 +9960,12 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9869 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9964 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 543:
-#line 3565 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3638 "MachineIndependent/glslang.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));
@@ -9878,77 +9973,77 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9882 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9977 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 544:
-#line 3576 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 9888 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3649 "MachineIndependent/glslang.y"
+                 { (yyval.interm.intermNode) = 0; }
+#line 9983 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 545:
-#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  */
+#line 3650 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
+#line 9989 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 546:
-#line 3581 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3654 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9902 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9997 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 547:
-#line 3585 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3658 "MachineIndependent/glslang.y"
+                                                  {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9911 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10006 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 548:
-#line 3592 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3665 "MachineIndependent/glslang.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 9920 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10015 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 549:
-#line 3599 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3672 "MachineIndependent/glslang.y"
+                                             {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9929 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10024 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 550:
-#line 3603 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3676 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9938 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10033 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 551:
-#line 3611 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3684 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9947 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10042 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 552:
-#line 3615 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3688 "MachineIndependent/glslang.y"
+                                                        {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
         TType type((yyvsp[-3].interm.type));
@@ -9958,29 +10053,29 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9962 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10057 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 553:
-#line 3628 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3701 "MachineIndependent/glslang.y"
+                                     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9970 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10065 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 554:
-#line 3632 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3705 "MachineIndependent/glslang.y"
+                                               {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9979 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10074 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 555:
-#line 3639 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3712 "MachineIndependent/glslang.y"
+                                               {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
         ++parseContext.statementNestingLevel;
@@ -9988,12 +10083,12 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9992 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10087 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 556:
-#line 3647 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3720 "MachineIndependent/glslang.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();
@@ -10002,28 +10097,28 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10006 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10101 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 557:
-#line 3659 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3732 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermNode) = 0;
     }
-#line 10014 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10109 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 558:
-#line 3662 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3735 "MachineIndependent/glslang.y"
+                     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10022 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10117 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 559:
-#line 3668 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3741 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
             parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
@@ -10035,12 +10130,12 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 10039 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10134 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 560:
-#line 3680 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3753 "MachineIndependent/glslang.y"
+                    {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
             parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
@@ -10049,29 +10144,29 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 10053 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10148 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 561:
-#line 3692 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3765 "MachineIndependent/glslang.y"
+                                        {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10061 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10156 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 562:
-#line 3696 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3769 "MachineIndependent/glslang.y"
+                                                  {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10070 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10165 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 563:
-#line 3703 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3776 "MachineIndependent/glslang.y"
+                       {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
         parseContext.symbolTable.push();
@@ -10079,34 +10174,34 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10083 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10178 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 564:
-#line 3711 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3784 "MachineIndependent/glslang.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 10095 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10190 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 565:
-#line 3718 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3791 "MachineIndependent/glslang.y"
+         {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10105 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10200 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 566:
-#line 3723 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3796 "MachineIndependent/glslang.y"
+                                                                  {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
 
@@ -10117,23 +10212,23 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10121 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10216 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 567:
-#line 3734 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3807 "MachineIndependent/glslang.y"
+                     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 10132 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10227 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 568:
-#line 3740 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3813 "MachineIndependent/glslang.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);
@@ -10145,166 +10240,166 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 10149 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10244 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 569:
-#line 3755 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3828 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10157 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10252 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 570:
-#line 3758 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3831 "MachineIndependent/glslang.y"
+                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10165 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10260 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 571:
-#line 3764 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3837 "MachineIndependent/glslang.y"
+                {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10173 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10268 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 572:
-#line 3767 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3840 "MachineIndependent/glslang.y"
+                        {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 10181 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10276 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 573:
-#line 3773 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3846 "MachineIndependent/glslang.y"
+                             {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 10190 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10285 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 574:
-#line 3777 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3850 "MachineIndependent/glslang.y"
+                                         {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10199 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10294 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 575:
-#line 3784 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3857 "MachineIndependent/glslang.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 10209 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10304 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 576:
-#line 3789 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3862 "MachineIndependent/glslang.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 10219 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10314 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 577:
-#line 3794 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3867 "MachineIndependent/glslang.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 10231 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10326 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 578:
-#line 3801 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3874 "MachineIndependent/glslang.y"
+                                  {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10239 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10334 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 579:
-#line 3804 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3877 "MachineIndependent/glslang.y"
+                        {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 10248 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10343 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 580:
-#line 3813 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3886 "MachineIndependent/glslang.y"
+                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 10257 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10352 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 581:
-#line 3817 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3890 "MachineIndependent/glslang.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 10268 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10363 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 582:
-#line 3826 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3899 "MachineIndependent/glslang.y"
+                          {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10276 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10371 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 583:
-#line 3829 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3902 "MachineIndependent/glslang.y"
+                  {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10284 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10379 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 584:
-#line 3833 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3906 "MachineIndependent/glslang.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 10294 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10389 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 585:
-#line 3842 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3915 "MachineIndependent/glslang.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 10303 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10398 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 586:
-#line 3846 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3919 "MachineIndependent/glslang.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());
@@ -10319,52 +10414,53 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 10323 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10418 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 587:
-#line 3865 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3938 "MachineIndependent/glslang.y"
+                                                                           {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 10332 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10427 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 588:
-#line 3871 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3944 "MachineIndependent/glslang.y"
+                       {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 10340 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10435 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 589:
-#line 3874 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3947 "MachineIndependent/glslang.y"
+                                            {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 10348 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10443 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 590:
-#line 3879 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3952 "MachineIndependent/glslang.y"
+                 {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 10356 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10451 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 591:
-#line 3882 "glslang.y" /* yacc.c:1646  */
-    {
+#line 3955 "MachineIndependent/glslang.y"
+                                                            {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10364 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10459 "MachineIndependent/glslang_tab.cpp"
     break;
 
 
-#line 10368 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 10463 "MachineIndependent/glslang_tab.cpp"
+
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10389,14 +10485,13 @@
   /* 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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    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;
 
@@ -10428,7 +10523,7 @@
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -10479,12 +10574,10 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
-
-  /* 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;
+  /* 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.  */
@@ -10546,6 +10639,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -10553,6 +10647,7 @@
   yyresult = 1;
   goto yyreturn;
 
+
 #if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -10563,6 +10658,10 @@
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -10579,7 +10678,7 @@
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp, pParseContext);
+                  yystos[+*yyssp], yyvsp, pParseContext);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -10592,6 +10691,5 @@
 #endif
   return yyresult;
 }
-#line 3887 "glslang.y" /* yacc.c:1906  */
-
+#line 3960 "MachineIndependent/glslang.y"
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 31c8f90..f8b4142 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* 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 Free Software Foundation, Inc.
+   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
@@ -30,8 +31,11 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+/* 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
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -212,26 +216,26 @@
     SAMPLERCUBEARRAYSHADOW = 422,
     ISAMPLERCUBEARRAY = 423,
     USAMPLERCUBEARRAY = 424,
-    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,
+    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,
     ISAMPLER1DARRAY = 445,
     USAMPLER1D = 446,
     USAMPLER1DARRAY = 447,
@@ -441,36 +445,35 @@
     HITATTREXT = 651,
     CALLDATAEXT = 652,
     CALLDATAINEXT = 653,
-    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,
+    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,
     PRECISE = 674
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 97 "glslang.y" /* yacc.c:1909  */
+#line 103 "MachineIndependent/glslang.y"
 
     struct {
         glslang::TSourceLoc loc;
@@ -506,9 +509,9 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 510 "glslang_tab.cpp.h" /* yacc.c:1909  */
-};
+#line 513 "MachineIndependent/glslang_tab.cpp.h"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -518,4 +521,4 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 86edcfe..1b409df 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -36,7 +36,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 #include "localintermediate.h"
 #include "../Include/InfoSink.h"
@@ -1562,4 +1562,4 @@
 
 } // end namespace glslang
 
-#endif // not GLSLANG_WEB
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index fadcb1b..93cb83c 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 #include "../Include/Common.h"
 #include "../Include/InfoSink.h"
@@ -1281,4 +1281,4 @@
 
 } // end namespace glslang
 
-#endif // GLSLANG_WEB
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 7ca18b8..6741327 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 #ifndef _IOMAPPER_INCLUDED
 #define _IOMAPPER_INCLUDED
@@ -186,7 +186,7 @@
     }
 };
 
-// Defaulf I/O resolver for OpenGL
+// Default 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
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index f0bede5..a8e031b 100755
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -82,7 +82,7 @@
 //
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 {
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     mergeCallGraphs(infoSink, unit);
     mergeModes(infoSink, unit);
     mergeTrees(infoSink, unit);
@@ -104,7 +104,7 @@
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 #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)
 {
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     bool writeTypeComparison = false;
 
     // Types have to match
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index a3ff886..53be3f5 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -241,7 +241,10 @@
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
         language(l),
-        profile(p), version(v), treeRoot(0),
+#ifndef GLSLANG_ANGLE
+        profile(p), version(v),
+#endif
+        treeRoot(0),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invertY(false),
         useStorageBuffer(false),
@@ -295,9 +298,20 @@
 #endif
     }
 
-    void setVersion(int v) { version = v; }
+    void setVersion(int v)
+    {
+#ifndef GLSLANG_ANGLE
+        version = v;
+#endif
+    }
+    void setProfile(EProfile p)
+    {
+#ifndef GLSLANG_ANGLE
+        profile = p;
+#endif
+    }
+
     int getVersion() const { return version; }
-    void setProfile(EProfile p) { profile = p; }
     EProfile getProfile() const { return profile; }
     void setSpv(const SpvVersion& s)
     {
@@ -929,8 +943,13 @@
     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 0d006a7..957aaef 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)
         :
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         forwardCompatible(forwardCompatible),
         profile(profile),
 #endif
@@ -117,8 +117,13 @@
     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 03d6fe1..5e544b6 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 #include "../Include/Common.h"
 #include "reflection.h"
@@ -1266,4 +1266,4 @@
 
 } // end namespace glslang
 
-#endif // GLSLANG_WEB
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 0c33de4..5af4467 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 #ifndef _REFLECTION_INCLUDED
 #define _REFLECTION_INCLUDED
@@ -220,4 +220,4 @@
 
 #endif // _REFLECTION_INCLUDED
 
-#endif // GLSLANG_WEB
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index e3909f6..273f156 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -690,7 +690,7 @@
     TShader& operator=(TShader&);
 };
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
 //
 // 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
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
 
 // 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]; }
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
 
     // 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
+#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
 
 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;
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     TReflection* reflection;
 #endif
     bool linked;
diff --git a/glslang/updateGrammar b/glslang/updateGrammar
index 9209493..202a608 100755
--- a/glslang/updateGrammar
+++ b/glslang/updateGrammar
@@ -39,6 +39,7 @@
 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
@@ -47,3 +48,7 @@
 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 ee868c2..dc0988e 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();
 
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         if (success)
             program.mapIO();
 #endif
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index c8e72d3..2b057dc 100755
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -253,7 +253,7 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         if (success)
             program.mapIO();
 #endif
@@ -315,7 +315,7 @@
         program.addShader(&shader);
         
         success &= program.link(controls);
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         if (success)
             program.mapIO();
 #endif
@@ -360,7 +360,7 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-#ifndef GLSLANG_WEB
+#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
         if (success)
             program.mapIO();
 #endif
diff --git a/license-checker.cfg b/license-checker.cfg
index 53d52b6..8eae353 100644
--- a/license-checker.cfg
+++ b/license-checker.cfg
@@ -22,6 +22,9 @@
 

                 "glslang/MachineIndependent/glslang_tab.cpp",

                 "glslang/MachineIndependent/glslang_tab.cpp.h"

+

+                "glslang/MachineIndependent/glslang_angle_tab.cpp",

+                "glslang/MachineIndependent/glslang_angle_tab.cpp.h"

             ]

         }

     ],

@@ -32,4 +35,4 @@
         "MIT-0",

         "MIT"

     ]

-}
\ No newline at end of file
+}