OSDN Git Service

Completing GLES 3.0 language parser
authorAlexis Hetu <sugoi@google.com>
Mon, 13 Apr 2015 17:23:20 +0000 (13:23 -0400)
committerAlexis Hétu <sugoi@google.com>
Wed, 15 Apr 2015 17:37:55 +0000 (17:37 +0000)
Added new matrix and sampler types in
glslang parsed files, along with related
code and new types in the C++ code.

Change-Id: Id70c73fac04d000d508236bc9bf1b39a46beda6f
Reviewed-on: https://swiftshader-review.googlesource.com/2826
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
15 files changed:
src/OpenGL/compiler/Compiler.cpp
src/OpenGL/compiler/Initialize.cpp
src/OpenGL/compiler/Intermediate.cpp
src/OpenGL/compiler/OutputASM.cpp
src/OpenGL/compiler/ParseHelper.cpp
src/OpenGL/compiler/SymbolTable.cpp
src/OpenGL/compiler/SymbolTable.h
src/OpenGL/compiler/Types.h
src/OpenGL/compiler/glslang.l
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_lex.cpp
src/OpenGL/compiler/glslang_tab.cpp
src/OpenGL/compiler/glslang_tab.h
src/OpenGL/compiler/intermOut.cpp
src/OpenGL/compiler/intermediate.h

index 32e8e69..5bb5865 100644 (file)
@@ -156,14 +156,14 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
 
        TPublicType integer;
        integer.type = EbtInt;
-       integer.size = 1;
-       integer.matrix = false;
+       integer.primarySize = 1;
+       integer.secondarySize = 1;
        integer.array = false;
 
        TPublicType floatingPoint;
        floatingPoint.type = EbtFloat;
-       floatingPoint.size = 1;
-       floatingPoint.matrix = false;
+       floatingPoint.primarySize = 1;
+       floatingPoint.secondarySize = 1;
        floatingPoint.array = false;
 
        switch(shaderType)
index ebc1415..0373f2d 100644 (file)
@@ -81,9 +81,9 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS
     symbolTable.insertBuiltIn(COMMON_BUILTINS, EOpReflect, genType, "reflect", genType, genType);
     symbolTable.insertBuiltIn(COMMON_BUILTINS, EOpRefract, genType, "refract", genType, genType, float1);
 
-       TType *mat2 = new TType(EbtFloat, 2, true);
-       TType *mat3 = new TType(EbtFloat, 3, true);
-       TType *mat4 = new TType(EbtFloat, 4, true);
+       TType *mat2 = new TType(EbtFloat, 2, 2);
+       TType *mat3 = new TType(EbtFloat, 3, 3);
+       TType *mat4 = new TType(EbtFloat, 4, 4);
 
     //
     // Matrix Functions.
@@ -260,7 +260,7 @@ void IdentifyBuiltIns(GLenum shaderType,
     case GL_FRAGMENT_SHADER:
                {
             // Set up gl_FragData.  The array size.
-            TType fragData(EbtFloat, EbpMedium, EvqFragData, 4, false, true);
+            TType fragData(EbtFloat, EbpMedium, EvqFragData, 4, 1, true);
             fragData.setArraySize(resources.MaxDrawBuffers);
             symbolTable.insert(ESSL1_BUILTINS, *new TVariable(NewPoolTString("gl_FragData"), fragData));
                }
index 73e44ce..37de4ae 100644 (file)
@@ -697,6 +697,7 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
     }
 
     int size = std::max(left->getNominalSize(), right->getNominalSize());
+       int matrixSize = std::max(left->getSecondarySize(), right->getSecondarySize()); // FIXME: This will have to change for NxM matrices
 
     //
     // All scalars. Code after this test assumes this case is removed!
@@ -746,6 +747,12 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
             return false;
     }
 
+       if (left->getSecondarySize() != right->getSecondarySize()) {
+        // Operator cannot be of type pure assignment.
+        if (op == EOpAssign || op == EOpInitialize)
+            return false;
+    }
+
     //
     // Can these two operands be combined?
     //
@@ -757,12 +764,12 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
                     op = EOpVectorTimesMatrix;
                 else {
                     op = EOpMatrixTimesScalar;
-                    setType(TType(basicType, higherPrecision, EvqTemporary, size, true));
+                    setType(TType(basicType, higherPrecision, EvqTemporary, size, matrixSize));
                 }
             } else if (left->isMatrix() && !right->isMatrix()) {
                 if (right->isVector()) {
                     op = EOpMatrixTimesVector;
-                    setType(TType(basicType, higherPrecision, EvqTemporary, size, false));
+                    setType(TType(basicType, higherPrecision, EvqTemporary, size, 1));
                 } else {
                     op = EOpMatrixTimesScalar;
                 }
@@ -773,7 +780,7 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
                     // leave as component product
                 } else if (left->isVector() || right->isVector()) {
                     op = EOpVectorTimesScalar;
-                    setType(TType(basicType, higherPrecision, EvqTemporary, size, false));
+                    setType(TType(basicType, higherPrecision, EvqTemporary, size, 1));
                 }
             } else {
                 infoSink.info.message(EPrefixInternalError, "Missing elses", getLine());
@@ -802,7 +809,7 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
                     if (! left->isVector())
                         return false;
                     op = EOpVectorTimesScalarAssign;
-                    setType(TType(basicType, higherPrecision, EvqTemporary, size, false));
+                    setType(TType(basicType, higherPrecision, EvqTemporary, size, 1));
                 }
             } else {
                 infoSink.info.message(EPrefixInternalError, "Missing elses", getLine());
@@ -821,7 +828,7 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
             if ((left->isMatrix() && right->isVector()) ||
                 (left->isVector() && right->isMatrix()))
                 return false;
-            setType(TType(basicType, higherPrecision, EvqTemporary, size, left->isMatrix() || right->isMatrix()));
+            setType(TType(basicType, higherPrecision, EvqTemporary, size, matrixSize));
             break;
 
         case EOpEqual:
@@ -1288,6 +1295,6 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
 
     const TType& t = node->getType();
 
-    return addConstantUnion(leftUnionArray, TType(promoteTo, t.getPrecision(), t.getQualifier(), t.getNominalSize(), t.isMatrix(), t.isArray()), node->getLine());
+       return addConstantUnion(leftUnionArray, TType(promoteTo, t.getPrecision(), t.getQualifier(), t.getNominalSize(), t.getSecondarySize(), t.isArray()), node->getLine());
 }
 
index db6ff74..aae86fe 100644 (file)
@@ -19,6 +19,7 @@
 #define GL_APICALL\r
 #include <GLES2/gl2.h>\r
 #include <GLES2/gl2ext.h>\r
+#include <GLES3/gl3.h>\r
 \r
 namespace glsl\r
 {\r
@@ -33,7 +34,7 @@ namespace glsl
        class Temporary : public TIntermSymbol\r
        {\r
        public:\r
-               Temporary(OutputASM *assembler) : TIntermSymbol(0, "tmp", TType(EbtFloat, EbpHigh, EvqTemporary, 4, false, false)), assembler(assembler)\r
+               Temporary(OutputASM *assembler) : TIntermSymbol(0, "tmp", TType(EbtFloat, EbpHigh, EvqTemporary, 4, 1, false)), assembler(assembler)\r
                {\r
                }\r
 \r
@@ -49,7 +50,7 @@ namespace glsl
        class Constant : public TIntermConstantUnion\r
        {\r
        public:\r
-               Constant(float x, float y, float z, float w) : TIntermConstantUnion(constants, TType(EbtFloat, EbpHigh, EvqConstExpr, 4, false, false))\r
+               Constant(float x, float y, float z, float w) : TIntermConstantUnion(constants, TType(EbtFloat, EbpHigh, EvqConstExpr, 4, 1, false))\r
                {\r
                        constants[0].setFConst(x);\r
                        constants[1].setFConst(y);\r
@@ -57,12 +58,12 @@ namespace glsl
                        constants[3].setFConst(w);\r
                }\r
 \r
-               Constant(bool b) : TIntermConstantUnion(constants, TType(EbtBool, EbpHigh, EvqConstExpr, 1, false, false))\r
+               Constant(bool b) : TIntermConstantUnion(constants, TType(EbtBool, EbpHigh, EvqConstExpr, 1, 1, false))\r
                {\r
                        constants[0].setBConst(b);\r
                }\r
 \r
-               Constant(int i) : TIntermConstantUnion(constants, TType(EbtInt, EbpHigh, EvqConstExpr, 1, false, false))\r
+               Constant(int i) : TIntermConstantUnion(constants, TType(EbtInt, EbpHigh, EvqConstExpr, 1, 1, false))\r
                {\r
                        constants[0].setIConst(i);\r
                }\r
@@ -2357,9 +2358,30 @@ namespace glsl
                        {\r
                                switch(type.getNominalSize())\r
                                {\r
-                               case 2: return GL_FLOAT_MAT2;\r
-                               case 3: return GL_FLOAT_MAT3;\r
-                               case 4: return GL_FLOAT_MAT4;\r
+                               case 2:\r
+                                       switch(type.getSecondarySize())\r
+                                       {\r
+                                       case 2: return GL_FLOAT_MAT2;\r
+                                       case 3: return GL_FLOAT_MAT2x3;\r
+                                       case 4: return GL_FLOAT_MAT2x4;\r
+                                       default: UNREACHABLE();\r
+                                       }\r
+                               case 3:\r
+                                       switch(type.getSecondarySize())\r
+                                       {\r
+                                       case 2: return GL_FLOAT_MAT3x2;\r
+                                       case 3: return GL_FLOAT_MAT3;\r
+                                       case 4: return GL_FLOAT_MAT4x2;\r
+                                       default: UNREACHABLE();\r
+                                       }\r
+                               case 4:\r
+                                       switch(type.getSecondarySize())\r
+                                       {\r
+                                       case 2: return GL_FLOAT_MAT4x2;\r
+                                       case 3: return GL_FLOAT_MAT4x3;\r
+                                       case 4: return GL_FLOAT_MAT4;\r
+                                       default: UNREACHABLE();\r
+                                       }\r
                                default: UNREACHABLE();\r
                                }\r
                        }\r
index 63e5795..b8ca5cc 100644 (file)
@@ -580,7 +580,7 @@ bool TParseContext::boolErrorCheck(int line, const TIntermTyped* type)
 //
 bool TParseContext::boolErrorCheck(int line, const TPublicType& pType)
 {
-    if (pType.type != EbtBool || pType.array || pType.matrix || (pType.size > 1)) {
+    if (pType.type != EbtBool || pType.array || (pType.primarySize > 1) || (pType.secondarySize > 1)) {
         error(line, "boolean expression expected", "");
         return true;
     }
index 53a896d..6d7757d 100644 (file)
@@ -25,7 +25,7 @@
 int TSymbolTableLevel::uniqueId = 0;
 
 TType::TType(const TPublicType &p) :
-    type(p.type), precision(p.precision), qualifier(p.qualifier), size(p.size), matrix(p.matrix), array(p.array), arraySize(p.arraySize),
+    type(p.type), precision(p.precision), primarySize(p.primarySize), secondarySize(p.secondarySize), qualifier(p.qualifier), array(p.array), arraySize(p.arraySize),
     maxArraySize(0), arrayInformationType(0), structure(0), structureSize(0), deepestStructNesting(0), fieldName(0), mangled(0), typeName(0)
 {
     if (p.userDef)
index 9920686..45dc096 100644 (file)
@@ -439,7 +439,7 @@ public:
             return true;  // Skip sampler types for the time being
         if (type.type != EbtFloat && type.type != EbtInt)
             return false; // Only set default precision for int/float
-        if (type.size != 1 || type.matrix || type.array)
+        if (type.primarySize > 1 || type.secondarySize > 1 || type.array)
             return false; // Not allowed to set for aggregate types
         int indexOfLastElement = static_cast<int>(precisionStack.size()) - 1;
         precisionStack[indexOfLastElement][type.type] = prec; // Uses map operator [], overwrites the current value
index f8abd65..be5d61f 100644 (file)
@@ -39,19 +39,19 @@ class TType
 public:
     POOL_ALLOCATOR_NEW_DELETE();
     TType() {}
-       TType(TBasicType t, int s = 1, bool m = false) :
-            type(t), precision(EbpUndefined), qualifier(EvqGlobal), size(s), matrix(m), array(false), arraySize(0),
+       TType(TBasicType t, int s0 = 1, int s1 = 1) :
+               type(t), precision(EbpUndefined), qualifier(EvqGlobal), primarySize(s0), secondarySize(s1), array(false), arraySize(0),
             maxArraySize(0), arrayInformationType(0), structure(0), structureSize(0), deepestStructNesting(0), fieldName(0), mangled(0), typeName(0)
     {
     }
-    TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary, int s = 1, bool m = false, bool a = false) :
-            type(t), precision(p), qualifier(q), size(s), matrix(m), array(a), arraySize(0),
+    TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary, int s0 = 1, int s1 = 1, bool a = false) :
+            type(t), precision(p), qualifier(q), primarySize(s0), secondarySize(s1), array(a), arraySize(0),
             maxArraySize(0), arrayInformationType(0), structure(0), structureSize(0), deepestStructNesting(0), fieldName(0), mangled(0), typeName(0)
     {
     }
     explicit TType(const TPublicType &p);
     TType(TTypeList* userDef, const TString& n, TPrecision p = EbpUndefined) :
-            type(EbtStruct), precision(p), qualifier(EvqTemporary), size(1), matrix(false), array(false), arraySize(0),
+            type(EbtStruct), precision(p), qualifier(EvqTemporary), primarySize(1), secondarySize(1), array(false), arraySize(0),
             maxArraySize(0), arrayInformationType(0), structure(userDef), structureSize(0), deepestStructNesting(0), fieldName(0), mangled(0)
     {
         typeName = NewPoolTString(n.c_str());
@@ -67,8 +67,8 @@ public:
     void setQualifier(TQualifier q) { qualifier = q; }
 
     // One-dimensional size of single instance type
-    int getNominalSize() const { return size; }
-    void setNominalSize(int s) { size = s; }
+       int getNominalSize() const { return primarySize; }
+       void setNominalSize(int s) { primarySize = s; }
     // Full size of single instance of type
        int getObjectSize() const
        {
@@ -88,13 +88,13 @@ public:
                {
                        return getStructSize();
                }
-               else if(matrix)
+               else if(isMatrix())
                {
-                       return size * size;
+                       return primarySize * secondarySize;
                }
                else   // Vector or scalar
                {
-                       return size;
+                       return primarySize;
                }
        }
 
@@ -135,8 +135,9 @@ public:
                }
        }
 
-    bool isMatrix() const { return matrix ? true : false; }
-    void setMatrix(bool m) { matrix = m; }
+       bool isMatrix() const { return secondarySize > 1; }
+       void setSecondarySize(int s1) { secondarySize = s1; }
+       int getSecondarySize() const { return secondarySize; }
 
     bool isArray() const  { return array ? true : false; }
     int getArraySize() const { return arraySize; }
@@ -147,9 +148,9 @@ public:
     void setArrayInformationType(TType* t) { arrayInformationType = t; }
     TType* getArrayInformationType() const { return arrayInformationType; }
 
-    bool isVector() const { return size > 1 && !matrix; }
-    bool isScalar() const { return size == 1 && !matrix && !structure; }
-       bool isRegister() const { return !matrix && !structure && !array; }   // Fits in a 4-element register
+       bool isVector() const { return primarySize > 1 && !isMatrix(); }
+       bool isScalar() const { return primarySize == 1 && !isMatrix() && !structure; }
+       bool isRegister() const { return !isMatrix() && !structure && !array; }   // Fits in a 4-element register
        bool isStruct() const { return structure != 0; }
        bool isScalarInt() const { return isScalar() && (type == EbtInt || type == EbtUInt); }
 
@@ -189,15 +190,15 @@ public:
 
     bool sameElementType(const TType& right) const {
         return      type == right.type   &&
-                    size == right.size   &&
-                  matrix == right.matrix &&
+                    primarySize == right.primarySize &&
+                  secondarySize == right.secondarySize &&
                structure == right.structure;
     }
     bool operator==(const TType& right) const {
         return      type == right.type   &&
-                    size == right.size   &&
-                  matrix == right.matrix &&
-                   array == right.array  && (!array || arraySize == right.arraySize) &&
+                    primarySize == right.primarySize &&
+                  secondarySize == right.secondarySize &&
+                              array == right.array && (!array || arraySize == right.arraySize) &&
                structure == right.structure;
         // don't check the qualifier, it's not ever what's being sought after
     }
@@ -206,8 +207,8 @@ public:
     }
     bool operator<(const TType& right) const {
         if (type != right.type) return type < right.type;
-        if (size != right.size) return size < right.size;
-        if (matrix != right.matrix) return matrix < right.matrix;
+               if(primarySize != right.primarySize) return (primarySize * secondarySize) < (right.primarySize * right.secondarySize);
+               if(secondarySize != right.secondarySize) return secondarySize < right.secondarySize;
         if (array != right.array) return array < right.array;
         if (arraySize != right.arraySize) return arraySize < right.arraySize;
         if (structure != right.structure) return structure < right.structure;
@@ -244,8 +245,8 @@ protected:
     TBasicType type;
     TPrecision precision;
     TQualifier qualifier;
-    unsigned char size;   // size of vector or matrix, not size of array
-    bool matrix;
+    unsigned char primarySize;   // size of vector or matrix, not size of array
+       unsigned char secondarySize; // secondarySize: 1 for vectors, >1 for matrices
     bool array;
     int arraySize;
     int maxArraySize;
@@ -275,8 +276,8 @@ struct TPublicType
     TLayoutQualifier layoutQualifier;
     TQualifier qualifier;
     TPrecision precision;
-    int size;          // size of vector or matrix, not size of array
-    bool matrix;
+    int primarySize;          // size of vector or matrix, not size of array
+       int secondarySize;        // 1 for scalars/vectors, >1 for matrices
     bool array;
     int arraySize;
     TType* userDef;
@@ -288,20 +289,26 @@ struct TPublicType
         layoutQualifier = TLayoutQualifier::create();
         qualifier = q;
         precision = EbpUndefined;
-        size = 1;
-        matrix = false;
+               primarySize = 1;
+               secondarySize = 1;
         array = false;
         arraySize = 0;
         userDef = 0;
         line = ln;
     }
 
-    void setAggregate(int s, bool m = false)
+    void setAggregate(int s)
     {
-        size = s;
-        matrix = m;
+               primarySize = s;
+               secondarySize = 1;
     }
 
+       void setMatrix(int s0, int s1)
+       {
+               primarySize = s0;
+               secondarySize = s1;
+       }
+
     void setArray(bool a, int s = 0)
     {
         array = a;
index c405ebf..ed086b6 100644 (file)
@@ -1,6 +1,6 @@
 /*
 //
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -133,6 +133,17 @@ O           [0-7]
 "mat3"         { context->lexAfterType = true; return(MATRIX3); }
 "mat4"         { context->lexAfterType = true; return(MATRIX4); }
 
+"mat2x2"       { return ES2_identifier_ES3_keyword(context, MATRIX2); }
+"mat3x3"       { return ES2_identifier_ES3_keyword(context, MATRIX3); }
+"mat4x4"       { return ES2_identifier_ES3_keyword(context, MATRIX4); }
+
+"mat2x3"       { return ES2_identifier_ES3_keyword(context, MATRIX2x3); }
+"mat3x2"       { return ES2_identifier_ES3_keyword(context, MATRIX3x2); }
+"mat2x4"       { return ES2_identifier_ES3_keyword(context, MATRIX2x4); }
+"mat4x2"       { return ES2_identifier_ES3_keyword(context, MATRIX4x2); }
+"mat3x4"       { return ES2_identifier_ES3_keyword(context, MATRIX3x4); }
+"mat4x3"       { return ES2_identifier_ES3_keyword(context, MATRIX4x3); }
+
 "vec2"         { context->lexAfterType = true; return (VEC2); }
 "vec3"         { context->lexAfterType = true; return (VEC3); }
 "vec4"         { context->lexAfterType = true; return (VEC4); }
@@ -151,7 +162,18 @@ O           [0-7]
 "samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
 "sampler3D"          { context->lexAfterType = true; return SAMPLER3D; }
 "sampler3DRect"      { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+"sampler2DArray"     { return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAY); }
+"isampler2D"         { return  ES2_identifier_ES3_keyword(context, ISAMPLER2D); }
+"isampler3D"         { return  ES2_identifier_ES3_keyword(context, ISAMPLER3D); }
+"isamplerCube"       { return  ES2_identifier_ES3_keyword(context, ISAMPLERCUBE); }
+"isampler2DArray"    { return  ES2_identifier_ES3_keyword(context, ISAMPLER2DARRAY); }
+"usampler2D"         { return  ES2_identifier_ES3_keyword(context, USAMPLER2D); }
+"usampler3D"         { return  ES2_identifier_ES3_keyword(context, USAMPLER3D); }
+"usamplerCube"       { return  ES2_identifier_ES3_keyword(context, USAMPLERCUBE); }
+"usampler2DArray"    { return  ES2_identifier_ES3_keyword(context, USAMPLER2DARRAY); }
 "sampler2DShadow"    { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+"samplerCubeShadow"  { return  ES2_identifier_ES3_keyword(context, SAMPLERCUBESHADOW); }
+"sampler2DArrayShadow" { return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
 
 "struct"       { context->lexAfterType = true; return(STRUCT); }
 
index e4fe60d..f87072b 100644 (file)
@@ -1,6 +1,6 @@
 /*
 //
-// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -15,7 +15,7 @@ WHICH GENERATES THE GLSL ES PARSER (glslang_tab.cpp AND glslang_tab.h).
 
 %{
 //
-// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -127,10 +127,13 @@ extern void yyerror(TParseContext* context, const char* reason);
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4 UVEC2 UVEC3 UVEC4
 %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
+%token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3
 %token <lex> CENTROID FLAT SMOOTH
 %token <lex> STRUCT VOID_TYPE WHILE
-%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT
-%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW
+%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT SAMPLER2DARRAY
+%token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY
+%token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
+%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
 %token <lex> LAYOUT
 
 %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
@@ -315,7 +318,7 @@ postfix_expression
             if ($1->getType().getStruct())
                 $$->setType(TType($1->getType().getStruct(), $1->getType().getTypeName()));
             else
-                $$->setType(TType($1->getBasicType(), $1->getPrecision(), EvqTemporary, $1->getNominalSize(), $1->isMatrix()));
+                $$->setType(TType($1->getBasicType(), $1->getPrecision(), EvqTemporary, $1->getNominalSize(), $1->getSecondarySize()));
 
             if ($1->getType().getQualifier() == EvqConstExpr)
                 $$->getTypePointer()->setQualifier(EvqConstExpr);
@@ -631,23 +634,37 @@ function_identifier
         } else {
             switch ($1.type) {
             case EbtFloat:
-                if ($1.matrix) {
-                    switch($1.size) {
-                    case 2:                                     op = EOpConstructMat2;  break;
-                    case 3:                                     op = EOpConstructMat3;  break;
-                    case 4:                                     op = EOpConstructMat4;  break;
+                switch($1.primarySize) {
+                case 1:
+                    op = EOpConstructFloat; break;
+                case 2:
+                    switch($1.secondarySize) {
+                                       case 1:                                 op = EOpConstructVec2;    break;
+                    case 2:                                 op = EOpConstructMat2;    break;
+                    case 3:                                 op = EOpConstructMat2x3;  break;
+                    case 4:                                 op = EOpConstructMat2x4;  break;
                     }
-                } else {
-                    switch($1.size) {
-                    case 1:                                     op = EOpConstructFloat; break;
-                    case 2:                                     op = EOpConstructVec2;  break;
-                    case 3:                                     op = EOpConstructVec3;  break;
-                    case 4:                                     op = EOpConstructVec4;  break;
+                    break;
+                case 3:
+                    switch($1.secondarySize) {
+                                       case 1:                                 op = EOpConstructVec3;    break;
+                    case 2:                                 op = EOpConstructMat3x2;  break;
+                    case 3:                                 op = EOpConstructMat3;    break;
+                    case 4:                                 op = EOpConstructMat3x4;  break;
+                    }
+                    break;
+                case 4:
+                    switch($1.secondarySize) {
+                                       case 1:                                 op = EOpConstructVec4;    break;
+                    case 2:                                 op = EOpConstructMat4x2;  break;
+                    case 3:                                 op = EOpConstructMat4x3;  break;
+                    case 4:                                 op = EOpConstructMat4;    break;
                     }
+                    break;
                 }
                 break;
             case EbtInt:
-                switch($1.size) {
+                switch($1.primarySize) {
                 case 1:                                         op = EOpConstructInt;   break;
                 case 2:       FRAG_VERT_ONLY("ivec2", $1.line); op = EOpConstructIVec2; break;
                 case 3:       FRAG_VERT_ONLY("ivec3", $1.line); op = EOpConstructIVec3; break;
@@ -655,7 +672,7 @@ function_identifier
                 }
                 break;
             case EbtBool:
-                switch($1.size) {
+                switch($1.primarySize) {
                 case 1:                                         op = EOpConstructBool;  break;
                 case 2:       FRAG_VERT_ONLY("bvec2", $1.line); op = EOpConstructBVec2; break;
                 case 3:       FRAG_VERT_ONLY("bvec3", $1.line); op = EOpConstructBVec3; break;
@@ -1737,19 +1754,55 @@ type_specifier_nonarray
         FRAG_VERT_ONLY("mat2", $1.line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtFloat, qual, $1.line);
-        $$.setAggregate(2, true);
+        $$.setMatrix(2, 2);
     }
     | MATRIX3 {
         FRAG_VERT_ONLY("mat3", $1.line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtFloat, qual, $1.line);
-        $$.setAggregate(3, true);
+        $$.setMatrix(3, 3);
     }
     | MATRIX4 {
         FRAG_VERT_ONLY("mat4", $1.line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtFloat, qual, $1.line);
-        $$.setAggregate(4, true);
+        $$.setMatrix(4, 4);
+    }
+    | MATRIX2x3 {
+        FRAG_VERT_ONLY("mat2x3", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtFloat, qual, $1.line);
+        $$.setMatrix(2, 3);
+    }
+    | MATRIX3x2 {
+        FRAG_VERT_ONLY("mat3x2", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtFloat, qual, $1.line);
+        $$.setMatrix(3, 2);
+    }
+    | MATRIX2x4 {
+        FRAG_VERT_ONLY("mat2x4", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtFloat, qual, $1.line);
+        $$.setMatrix(2, 4);
+    }
+    | MATRIX4x2 {
+        FRAG_VERT_ONLY("mat4x2", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtFloat, qual, $1.line);
+        $$.setMatrix(4, 2);
+    }
+    | MATRIX3x4 {
+        FRAG_VERT_ONLY("mat3x4", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtFloat, qual, $1.line);
+        $$.setMatrix(3, 4);
+    }
+    | MATRIX4x3 {
+        FRAG_VERT_ONLY("mat4x3", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtFloat, qual, $1.line);
+        $$.setMatrix(4, 3);
     }
     | SAMPLER2D {
         FRAG_VERT_ONLY("sampler2D", $1.line);
@@ -1775,6 +1828,66 @@ type_specifier_nonarray
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtSampler3D, qual, $1.line);
     }
+    | SAMPLER2DARRAY {
+        FRAG_VERT_ONLY("sampler2DArray", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtSampler2DArray, qual, $1.line);
+    }
+    | ISAMPLER2D {
+        FRAG_VERT_ONLY("isampler2D", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtISampler2D, qual, $1.line);
+    }
+    | ISAMPLER3D {
+        FRAG_VERT_ONLY("isampler3D", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtISampler3D, qual, $1.line);
+    }
+    | ISAMPLERCUBE {
+        FRAG_VERT_ONLY("isamplerCube", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtISamplerCube, qual, $1.line);
+    }
+    | ISAMPLER2DARRAY {
+        FRAG_VERT_ONLY("isampler2DArray", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtISampler2DArray, qual, $1.line);
+    }
+    | USAMPLER2D {
+        FRAG_VERT_ONLY("usampler2D", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUSampler2D, qual, $1.line);
+    }
+    | USAMPLER3D {
+        FRAG_VERT_ONLY("usampler3D", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUSampler3D, qual, $1.line);
+    }
+    | USAMPLERCUBE {
+        FRAG_VERT_ONLY("usamplerCube", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUSamplerCube, qual, $1.line);
+    }
+    | USAMPLER2DARRAY {
+        FRAG_VERT_ONLY("usampler2DArray", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUSampler2DArray, qual, $1.line);
+    }
+    | SAMPLER2DSHADOW {
+        FRAG_VERT_ONLY("sampler2DShadow", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtSampler2DShadow, qual, $1.line);
+    }
+    | SAMPLERCUBESHADOW {
+        FRAG_VERT_ONLY("samplerCubeShadow", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtSamplerCubeShadow, qual, $1.line);
+    }
+    | SAMPLER2DARRAYSHADOW {
+        FRAG_VERT_ONLY("sampler2DArrayShadow", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtSampler2DArrayShadow, qual, $1.line);
+    }
     | struct_specifier {
         FRAG_VERT_ONLY("struct", $1.line);
         $$ = $1;
@@ -1846,8 +1959,8 @@ struct_declaration
             //
             TType* type = (*$$)[i].type;
             type->setBasicType($1.type);
-            type->setNominalSize($1.size);
-            type->setMatrix($1.matrix);
+            type->setNominalSize($1.primarySize);
+            type->setSecondarySize($1.secondarySize);
             type->setPrecision($1.precision);
 
             // don't allow arrays of arrays
index 86b1b34..340b9d1 100644 (file)
@@ -392,8 +392,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 222
-#define YY_END_OF_BUFFER 223
+#define YY_NUM_RULES 242
+#define YY_END_OF_BUFFER 243
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -401,93 +401,99 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[775] =
+static yyconst flex_int16_t yy_accept[826] =
     {   0,
-        0,    0,    0,    0,    0,    0,  223,  221,  220,  220,
-      205,  211,  216,  200,  201,  209,  208,  197,  206,  204,
-      210,  166,  166,  198,  194,  212,  199,  213,  217,  162,
-      202,  203,  215,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  195,  214,  196,  207,    3,    4,    3,
-      219,  222,  218,  191,  177,  196,  185,  180,  175,  183,
-      173,  184,  174,  172,    2,    1,  176,  171,  164,  165,
-        0,  169,    0,  166,  203,  195,  202,  192,  188,  190,
-      189,  193,  162,  181,  187,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,   17,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,   20,  162,  162,   28,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  182,  186,
-        5,  218,    0,    1,  171,    0,  168,    0,  170,  163,
-      178,  179,  162,  120,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,   18,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,   32,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-       29,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,    0,  172,    0,  171,  167,
-      162,  162,  162,   35,  162,  162,   23,  159,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,   21,  123,
-      162,  162,  162,  162,   26,  162,  162,  127,  139,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  136,    9,   40,   41,   42,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      126,   36,  162,  162,   33,  162,  162,  162,  162,  162,
-      162,  162,   43,   44,   45,   34,  162,  162,  162,  162,
-      162,  162,   15,   52,   53,   54,  162,  121,  162,  162,
-       12,  162,  162,  162,  162,  148,  149,  150,  162,   37,
-      162,  140,   31,  151,  152,  153,    7,  145,  146,  147,
-      162,  162,  162,   30,  143,  162,  162,  162,   46,   47,
-       48,  162,  162,  162,  162,  162,  162,  162,  162,   70,
-
-      162,  162,  162,  162,  162,  162,  162,  137,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  122,
-      162,  162,  161,   49,   50,   51,  162,  162,   19,  162,
-       75,  162,  162,  162,  162,   73,  162,  162,  162,  138,
-      133,   76,  162,  162,  162,  162,  162,  162,  128,  162,
-      162,  162,   62,  162,  162,  162,  162,  144,  119,  162,
-      162,  131,  162,  162,  162,   39,   71,  158,   27,  132,
-       61,  162,  142,   22,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,   24,   38,
-      162,  162,  162,  162,  162,  162,   77,   78,   79,  162,
-
-      162,  162,  162,  162,    8,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  124,  162,  162,  162,
-      162,  162,   13,  162,  162,   14,  162,  162,  162,  162,
-       25,   63,   16,  134,   81,   82,   83,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  129,
-      162,  162,  162,   65,   67,   64,  162,  162,  162,  162,
-      162,  162,  162,  125,   85,   86,   87,  162,  162,  141,
-      162,  130,  162,  162,   11,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,   80,  135,    6,  162,  162,  162,
-      160,  162,   74,   10,  154,   55,   58,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,   66,  162,
-      162,  162,  162,   84,  162,  162,  162,  162,  162,  104,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,   72,  162,  162,  162,   88,  106,  162,  162,
-       68,  162,  162,  162,  162,  162,  162,  162,   99,  162,
-      162,  162,  162,  162,  162,  162,  113,  162,  162,  162,
-      162,   56,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  100,   89,  162,   90,  162,  162,  114,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  101,  162,  115,  162,  162,   91,   92,  162,
-
-       95,  162,   96,  162,  162,  162,  162,   69,  162,  162,
-      162,  156,  162,   59,  110,  162,   93,   94,  162,  162,
-      162,  162,  162,  162,  162,  162,  108,  111,  102,  162,
-      162,  162,  162,  162,  162,  162,  109,  112,  162,  162,
-      105,  162,  162,  155,  162,  162,   60,  162,  107,  162,
-      162,  162,  162,  162,  116,  162,  162,  162,  162,  162,
-      117,  162,  162,  162,  118,   97,   98,  162,  162,   57,
-      162,  157,  103,    0
+        0,    0,    0,    0,    0,    0,  243,  241,  240,  240,
+      225,  231,  236,  220,  221,  229,  228,  217,  226,  224,
+      230,  186,  186,  218,  214,  232,  219,  233,  237,  182,
+      222,  223,  235,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  215,  234,  216,  227,    3,    4,    3,
+      239,  242,  238,  211,  197,  216,  205,  200,  195,  203,
+      193,  204,  194,  192,    2,    1,  196,  191,  184,  185,
+        0,  189,    0,  186,  223,  215,  222,  212,  208,  210,
+      209,  213,  182,  201,  207,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,   17,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   20,  182,  182,   28,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  202,  206,
+        5,  238,    0,    1,  191,    0,  188,    0,  190,  183,
+      198,  199,  182,  140,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,   18,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,   32,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       29,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,    0,  192,    0,  191,  187,
+      182,  182,  182,   35,  182,  182,   23,  179,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   21,  143,
+      182,  182,  182,  182,   26,  182,  182,  147,  159,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  156,    9,   40,   41,   42,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      146,   36,  182,  182,   33,  182,  182,  182,  182,  182,
+      182,  182,   52,   53,   54,   34,  182,  182,  182,  182,
+      182,  182,   15,   61,   62,   63,  182,  141,  182,  182,
+       12,  182,  182,  182,  182,  168,  169,  170,  182,   37,
+      182,  160,   31,  171,  172,  173,    7,  165,  166,  167,
+      182,  182,  182,   30,  163,  182,  182,  182,   55,   56,
+       57,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,   90,  182,  182,  182,  182,  182,  182,  182,
+      157,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  142,  182,  182,  181,   58,   59,   60,  182,
+      182,   19,  182,   95,  182,  182,  182,  182,   93,  182,
+      182,  182,  158,  153,   96,  182,  182,  182,  182,  182,
+      182,  148,  182,  182,  182,   82,   43,   46,   48,   47,
+       44,   50,   49,   51,   45,  182,  182,  182,  182,  164,
+      139,  182,  182,  151,  182,  182,  182,   39,   91,  178,
+       27,  152,   81,  182,  162,   22,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+       24,   38,  182,  182,  182,  182,  182,  182,   97,   98,
+       99,  182,  182,  182,  182,  182,    8,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  144,  182,
+      182,  182,  182,  182,   13,  182,  182,   14,  182,  182,
+      182,  182,   25,   83,   16,  154,  101,  102,  103,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  149,  182,  182,  182,   85,   87,   84,  182,  182,
+      182,  182,  182,  182,  182,  145,  105,  106,  107,  182,
+      182,  161,  182,  150,  182,  182,   11,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  100,  155,    6,  182,
+
+      182,  182,  182,  182,  180,  182,   94,   10,  174,   64,
+       67,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,   86,  182,  182,  182,  182,  104,
+      182,  182,  182,  182,  182,  124,   70,   71,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   92,  182,  182,  182,  108,  126,   74,   75,  182,
+      182,   88,  182,  182,  182,  182,  182,  182,  182,  119,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      133,  182,  182,  182,  182,   65,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  120,  109,
+
+      182,  110,  182,  182,  182,  134,  182,  182,   72,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  121,  182,  182,  135,  182,  182,   76,  111,
+      112,  182,  115,  182,  116,  182,  182,  182,  182,  182,
+       89,  182,  182,  182,  182,  176,  182,   68,  130,  182,
+      182,  113,  114,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  128,  131,  122,  182,   69,  182,  182,
+      182,  182,  182,  182,  182,  182,  129,  132,  182,  182,
+      125,   73,  182,  182,  175,  182,  182,  182,   78,  182,
+      182,  127,   77,  182,  182,  182,  182,  182,  182,  136,
+
+      182,  182,  182,  182,  182,  182,  137,  182,  182,  182,
+       79,  182,  138,  117,  118,  182,  182,  182,   66,  182,
+      182,  177,  123,   80,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -534,185 +540,197 @@ static yyconst flex_int32_t yy_meta[73] =
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[780] =
+static yyconst flex_int16_t yy_base[831] =
     {   0,
-        0,    0,   70,   71,   80,    0,  995,  996,  996,  996,
-      969,   50,  147,  996,  996,  968,  144,  996,  143,  141,
-      156,  169,  223,  966,  996,  169,  966,   52,  996,    0,
-      996,  996,  152,  117,  138,  118,  157,  148,  167,  932,
-      147,  173,  159,  126,  188,  926,  200,  939,  205,  199,
-      212,  226,  147,  996,  158,  996,  996,  996,  996,  973,
-      996,  996,    0,  996,  996,  996,  996,  996,  996,  996,
-      996,  996,  996,  262,  996,    0,  996,  272,  256,  310,
-      297,  996,    0,    0,  996,  996,  996,  961,  996,  996,
-      996,  960,    0,  996,  996,  922,  927,  191,  924,  932,
-
-      931,  918,  921,  932,  245,  926,  914,  911,  924,  911,
-      908,  908,  914,  158,  240,  908,  918,  904,  910,  913,
-      914,    0,  906,  916,  277,  915,  910,  891,  162,  895,
-      908,  899,  246,  892,  286,  904,  906,  289,  895,  892,
-      881,  890,  292,  294,  894,  890,  892,  881,  884,  287,
-      203,  255,  893,  881,  893,  199,  886,  885,  996,  996,
-      996,    0,  345,    0,  359,  377,  996,  384,  394,  306,
-      996,  996,  884,    0,  880,  875,  879,  888,  885,  305,
-      869,  869,  880,  872,  309,  882,  879,  879,  877,  874,
-      866,  872,  859,  857,  869,  855,  871,    0,  868,  856,
-
-      863,  860,  864,  865,  858,  855,  844,  843,  856,  859,
-      847,  855,  843,  849,  840,  364,  845,  848,  839,  846,
-      835,  839,  830,  844,  843,  834,  840,  248,  824,  827,
-      825,  835,  825,  820,  818,  820,  830,  816,  818,  815,
-      826,  825,  828,  810,  366,  818,  814,  812,  821,  800,
-      367,  818,  820,  809,  801,  402,  410,  417,  424,  996,
-      798,  808,  807,    0,  805,  429,    0,    0,  798,  796,
-      796,  797,  792,  800,  789,  806,  795,  432,    0,    0,
-      789,  799,  798,  798,    0,  783,  435,    0,    0,  785,
-      438,  792,  793,  784,  778,  777,  778,  777,  777,  441,
-
-      772,    0,    0,    0,    0,    0,  771,  772,  777,  771,
-      767,  780,  775,  775,  773,  772,  766,  760,  762,  761,
-      765,  757,  760,  755,  763,  768,  756,  753,  765,  756,
-        0,    0,  762,  758,    0,  750,  750,  755,  746,  753,
-      444,  750,    0,    0,    0,    0,  740,  752,  751,  750,
-      751,  751,    0,    0,    0,    0,  738,    0,  746,  737,
-        0,  736,  737,  731,  741,    0,    0,    0,  732,    0,
-      728,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      738,  448,  737,    0,    0,  735,  731,  728,    0,    0,
-        0,  720,  725,  721,  726,  717,  715,  728,  713,    0,
-
-      713,  726,  715,  711,  717,  712,  719,    0,  717,  714,
-      718,  702,  700,  703,  709,  715,  710,  709,  697,    0,
-      699,  700,    0,    0,    0,    0,  697,  700,    0,  694,
-        0,  707,  687,  696,  691,    0,  684,  684,  697,    0,
-      699,    0,  451,  712,  711,  710,  677,  676,    0,  693,
-      692,  687,    0,  676,  689,  676,  673,    0,    0,  678,
-      677,    0,  674,  681,  680,    0,  666,    0,    0,    0,
-        0,  663,    0,    0,  662,  673,  454,  666,  672,  671,
-      668,  663,  660,  653,  653,  666,  651,  663,    0,    0,
-      656,  679,  678,  677,  644,  643,  330,  447,    0,  655,
-
-      658,  656,  645,  641,    0,  653,  650,  649,  639,  638,
-      628,  645,  631,  470,  639,  642,    0,  659,  658,  657,
-      624,  623,    0,  637,  624,    0,  634,  627,  628,  631,
-        0,    0,    0,    0,  651,  650,    0,  627,  630,  615,
-      622,  613,  620,  621,  621,  620,  606,  474,  618,    0,
-      619,  608,  607,    0,    0,    0,  632,  631,  630,  597,
-      596,  592,  600,    0,  628,  627,    0,  604,  607,    0,
-      476,    0,  585,  594,    0,  590,  589,  598,  598,  586,
-      600,  584,  598,  593,    0,    0,    0,  610,  609,  576,
-        0,  576,    0,    0,  451,  459,  600,  586,  589,  572,
-
-      584,  572,  571,  580,  580,  597,  596,  563,    0,  563,
-      564,  563,  573,    0,  576,  572,  574,  570,  557,  588,
-      353,  565,  561,  553,  560,  573,  561,  557,  559,  557,
-      557,  556,    0,  544,  543,  553,    0,  573,  439,  550,
-        0,  554,  553,  537,  529,  537,  527,  535,    0,  532,
-      553,  541,  539,  524,  527,  541,  557,  537,  538,  535,
-      532,    0,  520,  534,  533,  517,  516,  537,  525,  523,
-      505,  504,    0,  532,  504,  530,  502,  506,  537,  517,
-      514,  513,  516,  512,  499,  496,  509,  494,  495,  497,
-      486,  485,    0,  491,  522,  502,  499,    0,    0,  495,
-
-        0,  494,    0,  500,  484,  481,  482,    0,  474,  482,
-      479,  500,  479,    0,    0,  491,    0,    0,  490,  474,
-      471,  472,  486,  485,  462,  468,    0,    0,  489,  461,
-      480,  472,  458,  467,  454,  460,    0,    0,  471,  470,
-        0,  470,  452,    0,  434,  453,    0,  459,    0,  437,
-      415,  349,  339,  327,    0,  308,  315,  271,  259,  255,
-        0,  255,  216,  209,    0,    0,    0,  158,  132,    0,
-      115,    0,    0,  996,  505,  507,  509,  513,  163
+        0,    0,   70,   71,   80,    0, 1046, 1047, 1047, 1047,
+     1020,   50,  147, 1047, 1047, 1019,  144, 1047,  143,  141,
+      156,  169,  223, 1017, 1047,  169, 1017,   52, 1047,    0,
+     1047, 1047,  152,  117,  138,  118,  157,  148,  167,  983,
+      147,  173,  159,  126,  188,  977,  200,  990,  205,  199,
+      212,  226,  147, 1047,  158, 1047, 1047, 1047, 1047, 1024,
+     1047, 1047,    0, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+     1047, 1047, 1047,  262, 1047,    0, 1047,  272,  256,  310,
+      297, 1047,    0,    0, 1047, 1047, 1047, 1012, 1047, 1047,
+     1047, 1011,    0, 1047, 1047,  973,  978,  191,  975,  983,
+
+      982,  969,  972,  983,  245,  977,  965,  962,  975,  962,
+      959,  959,  965,  158,  240,  959,  969,  955,  961,  964,
+      965,    0,  957,  967,  277,  966,  961,  942,  162,  946,
+      959,  950,  246,  943,  286,  955,  957,  289,  946,  943,
+      932,  941,  292,  294,  945,  941,  943,  932,  935,  287,
+      203,  255,  944,  932,  944,  199,  937,  936, 1047, 1047,
+     1047,    0,  345,    0,  359,  377, 1047,  384,  394,  306,
+     1047, 1047,  935,    0,  931,  926,  930,  939,  936,  305,
+      920,  920,  931,  923,  309,  933,  930,  930,  928,  925,
+      917,  923,  910,  908,  920,  906,  922,    0,  919,  907,
+
+      914,  911,  915,  916,  909,  906,  895,  894,  907,  910,
+      898,  906,  894,  900,  891,  364,  896,  899,  890,  897,
+      886,  890,  881,  895,  894,  885,  891,  248,  875,  878,
+      876,  886,  876,  871,  869,  871,  881,  867,  869,  866,
+      877,  876,  879,  861,  366,  869,  865,  863,  872,  851,
+      367,  869,  871,  860,  852,  402,  410,  417,  424, 1047,
+      849,  859,  858,    0,  856,  429,    0,    0,  849,  847,
+      847,  848,  843,  851,  840,  857,  846,  432,    0,    0,
+      840,  850,  849,  849,    0,  834,  435,    0,    0,  836,
+      438,  843,  844,  835,  829,  828,  829,  828,  828,  441,
+
+      823,    0,    0,  819,  818,  817,  819,  820,  825,  819,
+      815,  828,  823,  823,  821,  820,  814,  808,  810,  809,
+      813,  805,  808,  803,  811,  816,  804,  801,  813,  804,
+        0,    0,  810,  806,    0,  798,  798,  803,  794,  801,
+      444,  798,    0,    0,    0,    0,  788,  800,  799,  798,
+      799,  799,    0,    0,    0,    0,  786,    0,  794,  785,
+        0,  784,  785,  779,  789,    0,    0,    0,  780,    0,
+      776,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      786,  448,  785,    0,    0,  783,  779,  776,    0,    0,
+        0,  768,  450,  453,  456,  773,  769,  774,  765,  763,
+
+      776,  761,    0,  761,  774,  763,  759,  765,  760,  767,
+        0,  765,  762,  766,  750,  748,  751,  757,  763,  758,
+      757,  745,    0,  747,  748,    0,    0,    0,    0,  745,
+      748,    0,  742,    0,  755,  735,  744,  739,    0,  732,
+      732,  745,    0,  747,    0,  463,  760,  759,  758,  725,
+      724,    0,  741,  740,  735,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  724,  737,  724,  721,    0,
+        0,  726,  725,    0,  722,  729,  728,    0,  714,    0,
+        0,    0,    0,  711,    0,    0,  710,  721,  466,  714,
+      720,  719,  716,  711,  708,  701,  701,  714,  699,  711,
+
+        0,    0,  704,  727,  726,  725,  692,  691,  330,  448,
+        0,  703,  706,  704,  693,  689,    0,  701,  698,  697,
+      687,  686,  676,  693,  679,  471,  687,  690,    0,  707,
+      706,  705,  672,  671,    0,  685,  672,    0,  682,  675,
+      676,  679,    0,    0,    0,    0,  699,  698,    0,  675,
+      678,  663,  670,  661,  668,  669,  669,  668,  654,  481,
+      666,    0,  667,  656,  655,    0,    0,    0,  680,  679,
+      678,  645,  644,  640,  648,    0,  676,  675,    0,  652,
+      655,    0,  488,    0,  633,  642,    0,  638,  637,  646,
+      646,  634,  648,  632,  646,  641,    0,    0,    0,  658,
+
+      657,  656,  623,  622,    0,  622,    0,    0,  474,  485,
+      646,  632,  635,  618,  630,  618,  617,  626,  626,  643,
+      642,  641,  608,  607,    0,  607,  608,  607,  617,    0,
+      620,  616,  618,  614,  601,  632,  479,    0,  609,  612,
+      604,  596,  603,  594,  615,  603,  599,  601,  599,  599,
+      598,    0,  586,  585,  595,    0,  615,  491,    0,  592,
+      595,    0,  595,  594,  578,  570,  578,  568,  576,    0,
+      573,  572,  593,  581,  579,  579,  563,  566,  580,  564,
+      595,  575,  576,  573,  570,  580,  557,  571,  570,  554,
+      553,  552,  573,  561,  559,  559,  540,  539,    0,  567,
+
+      539,  565,  537,  541,  540,  571,  551,  548,    0,  547,
+      550,  546,  548,  532,  529,  542,  527,  528,  535,  529,
+      518,  517,    0,  523,  522,  553,  533,  530,    0,    0,
+        0,  526,    0,  525,    0,  531,  530,  514,  511,  512,
+        0,  504,  512,  502,  508,  529,  508,    0,    0,  520,
+      519,    0,    0,  518,  517,  501,  498,  499,  513,  512,
+      489,  488,  494,    0,    0,  515,  487,  513,  505,  497,
+      483,  118,  125,  130,  149,  187,    0,    0,  226,  255,
+        0,    0,  275,  272,    0,  286,  280,  311,    0,  314,
+      352,    0,    0,  345,  348,  349,  418,  445,  446,    0,
+
+      446,  443,  477,  448,  456,  459,    0,  477,  479,  471,
+        0,  492,    0,    0,    0,  473,  474,  468,    0,  469,
+      470,    0,    0,    0, 1047,  535,  537,  539,  543,  542
     } ;
 
-static yyconst flex_int16_t yy_def[780] =
+static yyconst flex_int16_t yy_def[831] =
     {   0,
-      774,    1,  775,  775,  774,    5,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  776,
-      774,  774,  774,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  777,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  778,  774,  774,   22,  774,
-      774,  774,  779,   23,  774,  774,  774,  774,  774,  774,
-      774,  774,  776,  774,  774,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  774,  774,
-      774,  777,  774,  778,  774,  774,  774,  774,  774,  779,
-      774,  774,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  774,  774,  774,  774,  774,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,    0,  774,  774,  774,  774,  774
+      825,    1,  826,  826,  825,    5,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  827,
+      825,  825,  825,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  828,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  829,  825,  825,   22,  825,
+      825,  825,  830,   23,  825,  825,  825,  825,  825,  825,
+      825,  825,  827,  825,  825,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  825,  825,
+      825,  828,  825,  829,  825,  825,  825,  825,  825,  830,
+      825,  825,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  825,  825,  825,  825,  825,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,    0,  825,  825,  825,  825,  825
     } ;
 
-static yyconst flex_int16_t yy_nxt[1069] =
+static yyconst flex_int16_t yy_nxt[1120] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
@@ -731,109 +749,115 @@ static yyconst flex_int16_t yy_nxt[1069] =
        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
        63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
         8,    8,   67,   70,   72,   74,   74,   74,   74,   74,
-       74,   74,  102,   96,   75,  170,  103,   73,   71,   76,
-      130,   68,  104,   86,  131,  105,   94,   97,   98,  773,
+       74,   74,  102,   96,   75,  790,  103,   73,   71,   76,
+      130,   68,  104,   86,  131,  105,   94,   97,   98,  791,
        77,   78,  159,   79,   79,   79,   79,   79,   79,   80,
-       87,  119,   88,   89,   95,   99,  772,  100,  157,  120,
+       87,  119,   88,   89,   95,   99,  792,  100,  157,  120,
 
        81,  101,  110,  128,  111,  106,  158,   82,   83,  107,
-      121,  113,  194,  112,  108,  771,  129,   81,  214,  114,
+      121,  113,  194,  112,  108,  793,  129,   81,  214,  114,
       109,  115,  122,  195,  116,  123,  215,  160,  124,  125,
       117,   82,  132,  126,   83,   78,  127,   84,   84,   84,
-       84,   84,   84,   84,  135,  133,  770,  146,  175,  139,
+       84,   84,   84,   84,  135,  133,  794,  146,  175,  139,
       147,  252,  176,  253,   81,  245,  140,  141,  148,  136,
       142,   82,  137,  246,  150,  149,  143,  144,  151,  145,
-      154,   81,  152,  769,  155,  153,   74,   74,   74,   74,
+      154,   81,  152,  795,  155,  153,   74,   74,   74,   74,
        74,   74,   74,  156,  196,   82,  165,  165,  165,  165,
-      165,  165,  165,  163,  167,  774,  183,  197,  219,  247,
-
-      184,  185,  768,  166,  220,  318,  168,  248,  168,  319,
-      163,  169,  169,  169,  169,  169,  169,  169,  167,  767,
-      166,  774,   78,  766,   80,   80,   80,   80,   80,   80,
-       80,  206,  222,  227,  207,  208,  234,  765,  209,  236,
-      210,   81,  243,  244,  260,  223,  764,  224,   82,  228,
-      229,  235,  237,  267,  256,  763,  256,  540,   81,  257,
-      257,  257,  257,  257,  257,  257,  268,  541,  260,  273,
-      274,  762,   82,  165,  165,  165,  165,  165,  165,  165,
-      304,  305,  306,  343,  344,  345,  258,  651,  258,  652,
+      165,  165,  165,  163,  167,  825,  183,  197,  219,  247,
+
+      184,  185,  796,  166,  220,  318,  168,  248,  168,  319,
+      163,  169,  169,  169,  169,  169,  169,  169,  167,  797,
+      166,  825,   78,  798,   80,   80,   80,   80,   80,   80,
+       80,  206,  222,  227,  207,  208,  234,  799,  209,  236,
+      210,   81,  243,  244,  260,  223,  800,  224,   82,  228,
+      229,  235,  237,  267,  256,  801,  256,  552,   81,  257,
+      257,  257,  257,  257,  257,  257,  268,  553,  260,  273,
+      274,  802,   82,  165,  165,  165,  165,  165,  165,  165,
+      304,  305,  306,  343,  344,  345,  258,  803,  258,  804,
       166,  259,  259,  259,  259,  259,  259,  259,  169,  169,
 
-      169,  169,  169,  169,  169,  761,  760,  166,  169,  169,
+      169,  169,  169,  169,  169,  805,  806,  166,  169,  169,
       169,  169,  169,  169,  169,  336,  257,  257,  257,  257,
       257,  257,  257,  337,  257,  257,  257,  257,  257,  257,
       257,  259,  259,  259,  259,  259,  259,  259,  259,  259,
       259,  259,  259,  259,  259,  354,  355,  356,  366,  367,
       368,  374,  375,  376,  378,  379,  380,  389,  390,  391,
-      424,  425,  426,  444,  445,  446,  492,  493,  494,  518,
-      519,  520,  759,  668,  542,  669,  447,  448,  624,  495,
-      496,  758,  521,  522,  543,  557,  558,  559,  625,  588,
-      589,  606,  607,  626,  757,  627,  628,  756,  560,  561,
-
-      755,  562,  590,  754,  608,   58,   58,   58,   58,   93,
-       93,  162,  162,  164,  753,  164,  164,  752,  751,  750,
-      749,  748,  747,  746,  745,  744,  743,  742,  741,  740,
-      739,  738,  737,  736,  735,  734,  733,  732,  731,  730,
-      729,  728,  727,  726,  725,  724,  723,  722,  721,  720,
-      719,  718,  717,  716,  715,  714,  713,  712,  711,  710,
-      709,  708,  707,  706,  705,  704,  703,  702,  701,  700,
-      699,  698,  697,  696,  695,  694,  693,  692,  691,  690,
-      689,  688,  687,  686,  685,  684,  683,  682,  681,  680,
-      679,  678,  677,  676,  675,  674,  673,  672,  671,  670,
-
-      667,  666,  665,  664,  663,  662,  661,  660,  659,  658,
-      657,  656,  655,  654,  653,  650,  649,  648,  647,  646,
-      645,  644,  643,  642,  641,  640,  639,  638,  637,  636,
-      635,  634,  633,  632,  631,  630,  629,  623,  622,  621,
-      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
-      610,  609,  605,  604,  603,  602,  601,  600,  599,  598,
-      597,  596,  595,  594,  593,  592,  591,  587,  586,  585,
+      427,  428,  429,  447,  448,  449,  457,  458,  459,  460,
+      461,  462,  463,  464,  465,  554,  450,  451,  504,  505,
+      506,  530,  531,  532,  807,  555,  569,  570,  571,  808,
+      809,  507,  508,  810,  533,  534,  600,  601,  602,  572,
+
+      573,  642,  574,  620,  621,  622,  672,  811,  812,  603,
+      604,  643,  644,  673,  813,  674,  623,  624,  692,  645,
+      814,  646,  647,  815,  816,  693,  817,  694,  818,  819,
+      820,  821,  822,  823,  824,   58,   58,   58,   58,   93,
+       93,  162,  162,  164,  170,  164,  164,  789,  788,  787,
+      786,  785,  784,  783,  782,  781,  780,  779,  778,  777,
+      776,  775,  774,  773,  772,  771,  770,  769,  768,  767,
+      766,  765,  764,  763,  762,  761,  760,  759,  758,  757,
+      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
+      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
+
+      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
+      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
+      716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
+      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
+      696,  695,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  671,
+      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
+      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  648,  641,  640,  639,  638,  637,  636,  635,
+      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
+
+      619,  618,  617,  616,  615,  614,  613,  612,  611,  610,
+      609,  608,  607,  606,  605,  599,  598,  597,  596,  595,
+      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
       584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
-      574,  573,  572,  571,  570,  569,  568,  567,  566,  565,
-      564,  563,  556,  555,  554,  553,  552,  551,  550,  549,
-
-      548,  547,  546,  545,  544,  539,  538,  537,  536,  535,
-      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
-      524,  523,  517,  516,  515,  514,  513,  512,  511,  510,
-      509,  508,  507,  506,  505,  504,  503,  502,  501,  500,
-      499,  498,  497,  491,  490,  489,  488,  487,  486,  485,
+      568,  567,  566,  565,  564,  563,  562,  561,  560,  559,
+      558,  557,  556,  551,  550,  549,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
+      529,  528,  527,  526,  525,  524,  523,  522,  521,  520,
+      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  503,  502,  501,  500,  499,  498,  497,  496,  495,
+
+      494,  493,  492,  491,  490,  489,  488,  487,  486,  485,
       484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
-      474,  473,  472,  471,  470,  469,  468,  467,  466,  465,
-      464,  463,  462,  461,  460,  459,  458,  457,  456,  455,
-      454,  453,  452,  451,  450,  449,  443,  442,  441,  440,
-      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
-
-      429,  428,  427,  423,  422,  421,  420,  419,  418,  417,
-      416,  415,  414,  413,  412,  411,  410,  409,  408,  407,
-      406,  405,  404,  403,  402,  401,  400,  399,  398,  397,
-      396,  395,  394,  393,  392,  388,  387,  386,  385,  384,
-      383,  382,  381,  377,  373,  372,  371,  370,  369,  365,
-      364,  363,  362,  361,  360,  359,  358,  357,  353,  352,
-      351,  350,  349,  348,  347,  346,  342,  341,  340,  339,
-      338,  335,  334,  333,  332,  331,  330,  329,  328,  327,
-      326,  325,  324,  323,  322,  321,  320,  317,  316,  315,
-      314,  313,  312,  311,  310,  309,  308,  307,  303,  302,
-
-      301,  300,  299,  298,  297,  296,  295,  294,  293,  292,
-      291,  290,  289,  288,  287,  286,  285,  284,  283,  282,
-      281,  280,  279,  278,  277,  276,  275,  272,  271,  270,
-      269,  266,  265,  264,  263,  262,  261,  255,  254,  251,
-      250,  249,  242,  241,  240,  239,  238,  233,  232,  231,
-      230,  226,  225,  221,  218,  217,  216,  213,  212,  211,
-      205,  204,  203,  202,  201,  200,  199,  198,  193,  192,
-      191,  190,  189,  188,  187,  186,  182,  181,  180,  179,
-      178,  177,  174,  173,  172,  171,  161,  138,  134,  118,
-       90,   85,   69,   64,  774,    7,  774,  774,  774,  774,
-
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774
+      474,  473,  472,  471,  470,  469,  468,  467,  466,  456,
+      455,  454,  453,  452,  446,  445,  444,  443,  442,  441,
+      440,  439,  438,  437,  436,  435,  434,  433,  432,  431,
+      430,  426,  425,  424,  423,  422,  421,  420,  419,  418,
+      417,  416,  415,  414,  413,  412,  411,  410,  409,  408,
+      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
+      397,  396,  395,  394,  393,  392,  388,  387,  386,  385,
+      384,  383,  382,  381,  377,  373,  372,  371,  370,  369,
+
+      365,  364,  363,  362,  361,  360,  359,  358,  357,  353,
+      352,  351,  350,  349,  348,  347,  346,  342,  341,  340,
+      339,  338,  335,  334,  333,  332,  331,  330,  329,  328,
+      327,  326,  325,  324,  323,  322,  321,  320,  317,  316,
+      315,  314,  313,  312,  311,  310,  309,  308,  307,  303,
+      302,  301,  300,  299,  298,  297,  296,  295,  294,  293,
+      292,  291,  290,  289,  288,  287,  286,  285,  284,  283,
+      282,  281,  280,  279,  278,  277,  276,  275,  272,  271,
+      270,  269,  266,  265,  264,  263,  262,  261,  255,  254,
+      251,  250,  249,  242,  241,  240,  239,  238,  233,  232,
+
+      231,  230,  226,  225,  221,  218,  217,  216,  213,  212,
+      211,  205,  204,  203,  202,  201,  200,  199,  198,  193,
+      192,  191,  190,  189,  188,  187,  186,  182,  181,  180,
+      179,  178,  177,  174,  173,  172,  171,  161,  138,  134,
+      118,   90,   85,   69,   64,  825,    7,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825
     } ;
 
-static yyconst flex_int16_t yy_chk[1069] =
+static yyconst flex_int16_t yy_chk[1120] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -852,110 +876,116 @@ static yyconst flex_int16_t yy_chk[1069] =
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,   13,   17,   19,   20,   20,   20,   20,   20,
-       20,   20,   36,   34,   21,  779,   36,   19,   17,   21,
-       44,   13,   36,   26,   44,   36,   33,   34,   34,  771,
+       20,   20,   36,   34,   21,  772,   36,   19,   17,   21,
+       44,   13,   36,   26,   44,   36,   33,   34,   34,  773,
        21,   22,   55,   22,   22,   22,   22,   22,   22,   22,
-       26,   41,   26,   26,   33,   35,  769,   35,   53,   41,
+       26,   41,   26,   26,   33,   35,  774,   35,   53,   41,
 
        22,   35,   38,   43,   38,   37,   53,   22,   22,   37,
-       41,   39,  114,   38,   37,  768,   43,   22,  129,   39,
+       41,   39,  114,   38,   37,  775,   43,   22,  129,   39,
        37,   39,   42,  114,   39,   42,  129,   55,   42,   42,
        39,   22,   45,   42,   22,   23,   42,   23,   23,   23,
-       23,   23,   23,   23,   47,   45,  764,   50,   98,   49,
+       23,   23,   23,   23,   47,   45,  776,   50,   98,   49,
        50,  156,   98,  156,   23,  151,   49,   49,   50,   47,
        49,   23,   47,  151,   51,   50,   49,   49,   51,   49,
-       52,   23,   51,  763,   52,   51,   74,   74,   74,   74,
+       52,   23,   51,  779,   52,   51,   74,   74,   74,   74,
        74,   74,   74,   52,  115,   23,   78,   78,   78,   78,
        78,   78,   78,   74,   79,   79,  105,  115,  133,  152,
 
-      105,  105,  762,   78,  133,  228,   81,  152,   81,  228,
-       74,   81,   81,   81,   81,   81,   81,   81,   79,  760,
-       78,   79,   80,  759,   80,   80,   80,   80,   80,   80,
-       80,  125,  135,  138,  125,  125,  143,  758,  125,  144,
-      125,   80,  150,  150,  170,  135,  757,  135,   80,  138,
-      138,  143,  144,  180,  163,  756,  163,  497,   80,  163,
-      163,  163,  163,  163,  163,  163,  180,  497,  170,  185,
-      185,  754,   80,  165,  165,  165,  165,  165,  165,  165,
-      216,  216,  216,  251,  251,  251,  166,  621,  166,  621,
+      105,  105,  780,   78,  133,  228,   81,  152,   81,  228,
+       74,   81,   81,   81,   81,   81,   81,   81,   79,  783,
+       78,   79,   80,  784,   80,   80,   80,   80,   80,   80,
+       80,  125,  135,  138,  125,  125,  143,  786,  125,  144,
+      125,   80,  150,  150,  170,  135,  787,  135,   80,  138,
+      138,  143,  144,  180,  163,  788,  163,  509,   80,  163,
+      163,  163,  163,  163,  163,  163,  180,  509,  170,  185,
+      185,  790,   80,  165,  165,  165,  165,  165,  165,  165,
+      216,  216,  216,  251,  251,  251,  166,  791,  166,  794,
       165,  166,  166,  166,  166,  166,  166,  166,  168,  168,
 
-      168,  168,  168,  168,  168,  753,  752,  165,  169,  169,
+      168,  168,  168,  168,  168,  795,  796,  165,  169,  169,
       169,  169,  169,  169,  169,  245,  256,  256,  256,  256,
       256,  256,  256,  245,  257,  257,  257,  257,  257,  257,
       257,  258,  258,  258,  258,  258,  258,  258,  259,  259,
       259,  259,  259,  259,  259,  266,  266,  266,  278,  278,
       278,  287,  287,  287,  291,  291,  291,  300,  300,  300,
-      341,  341,  341,  382,  382,  382,  443,  443,  443,  477,
-      477,  477,  751,  639,  498,  639,  382,  382,  595,  443,
-      443,  750,  477,  477,  498,  514,  514,  514,  595,  548,
-      548,  571,  571,  596,  748,  596,  596,  746,  514,  514,
-
-      745,  514,  548,  743,  571,  775,  775,  775,  775,  776,
-      776,  777,  777,  778,  742,  778,  778,  740,  739,  736,
-      735,  734,  733,  732,  731,  730,  729,  726,  725,  724,
-      723,  722,  721,  720,  719,  716,  713,  712,  711,  710,
-      709,  707,  706,  705,  704,  702,  700,  697,  696,  695,
-      694,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      341,  341,  341,  382,  382,  382,  393,  393,  393,  394,
+      394,  394,  395,  395,  395,  510,  382,  382,  446,  446,
+      446,  489,  489,  489,  797,  510,  526,  526,  526,  798,
+      799,  446,  446,  801,  489,  489,  560,  560,  560,  526,
+
+      526,  609,  526,  583,  583,  583,  637,  802,  803,  560,
+      560,  609,  610,  637,  804,  637,  583,  583,  658,  610,
+      805,  610,  610,  806,  808,  658,  809,  658,  810,  812,
+      816,  817,  818,  820,  821,  826,  826,  826,  826,  827,
+      827,  828,  828,  829,  830,  829,  829,  771,  770,  769,
+      768,  767,  766,  763,  762,  761,  760,  759,  758,  757,
+      756,  755,  754,  751,  750,  747,  746,  745,  744,  743,
+      742,  740,  739,  738,  737,  736,  734,  732,  728,  727,
+      726,  725,  724,  722,  721,  720,  719,  718,  717,  716,
+      715,  714,  713,  712,  711,  710,  708,  707,  706,  705,
+
+      704,  703,  702,  701,  700,  698,  697,  696,  695,  694,
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
       683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
-      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
-      661,  660,  659,  658,  657,  656,  655,  654,  653,  652,
-      651,  650,  648,  647,  646,  645,  644,  643,  642,  640,
-
-      638,  636,  635,  634,  632,  631,  630,  629,  628,  627,
-      626,  625,  624,  623,  622,  620,  619,  618,  617,  616,
-      615,  613,  612,  611,  610,  608,  607,  606,  605,  604,
-      603,  602,  601,  600,  599,  598,  597,  592,  590,  589,
-      588,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-      574,  573,  569,  568,  566,  565,  563,  562,  561,  560,
-      559,  558,  557,  553,  552,  551,  549,  547,  546,  545,
-      544,  543,  542,  541,  540,  539,  538,  536,  535,  530,
-      529,  528,  527,  525,  524,  522,  521,  520,  519,  518,
-      516,  515,  513,  512,  511,  510,  509,  508,  507,  506,
-
-      504,  503,  502,  501,  500,  496,  495,  494,  493,  492,
-      491,  488,  487,  486,  485,  484,  483,  482,  481,  480,
-      479,  478,  476,  475,  472,  467,  465,  464,  463,  461,
-      460,  457,  456,  455,  454,  452,  451,  450,  448,  447,
-      446,  445,  444,  441,  439,  438,  437,  435,  434,  433,
-      432,  430,  428,  427,  422,  421,  419,  418,  417,  416,
-      415,  414,  413,  412,  411,  410,  409,  407,  406,  405,
-      404,  403,  402,  401,  399,  398,  397,  396,  395,  394,
-      393,  392,  388,  387,  386,  383,  381,  371,  369,  365,
-      364,  363,  362,  360,  359,  357,  352,  351,  350,  349,
-
-      348,  347,  342,  340,  339,  338,  337,  336,  334,  333,
-      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
-      320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
-      310,  309,  308,  307,  301,  299,  298,  297,  296,  295,
-      294,  293,  292,  290,  286,  284,  283,  282,  281,  277,
-      276,  275,  274,  273,  272,  271,  270,  269,  265,  263,
-      262,  261,  255,  254,  253,  252,  250,  249,  248,  247,
-      246,  244,  243,  242,  241,  240,  239,  238,  237,  236,
-      235,  234,  233,  232,  231,  230,  229,  227,  226,  225,
-      224,  223,  222,  221,  220,  219,  218,  217,  215,  214,
-
-      213,  212,  211,  210,  209,  208,  207,  206,  205,  204,
-      203,  202,  201,  200,  199,  197,  196,  195,  194,  193,
-      192,  191,  190,  189,  188,  187,  186,  184,  183,  182,
-      181,  179,  178,  177,  176,  175,  173,  158,  157,  155,
-      154,  153,  149,  148,  147,  146,  145,  142,  141,  140,
-      139,  137,  136,  134,  132,  131,  130,  128,  127,  126,
-      124,  123,  121,  120,  119,  118,  117,  116,  113,  112,
-      111,  110,  109,  108,  107,  106,  104,  103,  102,  101,
-      100,   99,   97,   96,   92,   88,   60,   48,   46,   40,
-       27,   24,   16,   11,    7,  774,  774,  774,  774,  774,
-
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774
+      673,  672,  671,  669,  668,  667,  666,  665,  664,  663,
+      661,  660,  657,  655,  654,  653,  651,  650,  649,  648,
+      647,  646,  645,  644,  643,  642,  641,  640,  639,  636,
+      635,  634,  633,  632,  631,  629,  628,  627,  626,  624,
+      623,  622,  621,  620,  619,  618,  617,  616,  615,  614,
+      613,  612,  611,  606,  604,  603,  602,  601,  600,  596,
+      595,  594,  593,  592,  591,  590,  589,  588,  586,  585,
+
+      581,  580,  578,  577,  575,  574,  573,  572,  571,  570,
+      569,  565,  564,  563,  561,  559,  558,  557,  556,  555,
+      554,  553,  552,  551,  550,  548,  547,  542,  541,  540,
+      539,  537,  536,  534,  533,  532,  531,  530,  528,  527,
+      525,  524,  523,  522,  521,  520,  519,  518,  516,  515,
+      514,  513,  512,  508,  507,  506,  505,  504,  503,  500,
+      499,  498,  497,  496,  495,  494,  493,  492,  491,  490,
+      488,  487,  484,  479,  477,  476,  475,  473,  472,  469,
+      468,  467,  466,  455,  454,  453,  451,  450,  449,  448,
+      447,  444,  442,  441,  440,  438,  437,  436,  435,  433,
+
+      431,  430,  425,  424,  422,  421,  420,  419,  418,  417,
+      416,  415,  414,  413,  412,  410,  409,  408,  407,  406,
+      405,  404,  402,  401,  400,  399,  398,  397,  396,  392,
+      388,  387,  386,  383,  381,  371,  369,  365,  364,  363,
+      362,  360,  359,  357,  352,  351,  350,  349,  348,  347,
+      342,  340,  339,  338,  337,  336,  334,  333,  330,  329,
+      328,  327,  326,  325,  324,  323,  322,  321,  320,  319,
+      318,  317,  316,  315,  314,  313,  312,  311,  310,  309,
+      308,  307,  306,  305,  304,  301,  299,  298,  297,  296,
+      295,  294,  293,  292,  290,  286,  284,  283,  282,  281,
+
+      277,  276,  275,  274,  273,  272,  271,  270,  269,  265,
+      263,  262,  261,  255,  254,  253,  252,  250,  249,  248,
+      247,  246,  244,  243,  242,  241,  240,  239,  238,  237,
+      236,  235,  234,  233,  232,  231,  230,  229,  227,  226,
+      225,  224,  223,  222,  221,  220,  219,  218,  217,  215,
+      214,  213,  212,  211,  210,  209,  208,  207,  206,  205,
+      204,  203,  202,  201,  200,  199,  197,  196,  195,  194,
+      193,  192,  191,  190,  189,  188,  187,  186,  184,  183,
+      182,  181,  179,  178,  177,  176,  175,  173,  158,  157,
+      155,  154,  153,  149,  148,  147,  146,  145,  142,  141,
+
+      140,  139,  137,  136,  134,  132,  131,  130,  128,  127,
+      126,  124,  123,  121,  120,  119,  118,  117,  116,  113,
+      112,  111,  110,  109,  108,  107,  106,  104,  103,  102,
+      101,  100,   99,   97,   96,   92,   88,   60,   48,   46,
+       40,   27,   24,   16,   11,    7,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[223] =
+static yyconst flex_int32_t yy_rule_can_match_eol[243] =
     {   0,
 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -968,6 +998,7 @@ static yyconst flex_int32_t yy_rule_can_match_eol[223] =
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
@@ -979,7 +1010,7 @@ static yyconst flex_int32_t yy_rule_can_match_eol[223] =
 #define YY_RESTORE_YY_MORE_OFFSET
 /*
 //
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -1304,13 +1335,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 775 )
+                               if ( yy_current_state >= 826 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 774 );
+               while ( yy_current_state != 825 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1511,105 +1542,165 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC2); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX2); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC3); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX3); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC4); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX4); }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC2); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX2x3); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC3); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX3x2); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC4); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX2x4); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-{ return ES2_identifier_ES3_keyword(context, UVEC2); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX4x2); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-{ return ES2_identifier_ES3_keyword(context, UVEC3); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX3x4); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-{ return ES2_identifier_ES3_keyword(context, UVEC4); }
+{ return ES2_identifier_ES3_keyword(context, MATRIX4x3); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC2); }
+{ context->lexAfterType = true; return (VEC2); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC3); }
+{ context->lexAfterType = true; return (VEC3); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC4); }
+{ context->lexAfterType = true; return (VEC4); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2D; }
+{ context->lexAfterType = true; return (IVEC2); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLERCUBE; }
+{ context->lexAfterType = true; return (IVEC3); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
+{ context->lexAfterType = true; return (IVEC4); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER3D; }
+{ return ES2_identifier_ES3_keyword(context, UVEC2); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+{ return ES2_identifier_ES3_keyword(context, UVEC3); }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+{ return ES2_identifier_ES3_keyword(context, UVEC4); }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(STRUCT); }
+{ context->lexAfterType = true; return (BVEC2); }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-{ return ES2_identifier_ES3_keyword(context, LAYOUT); }
+{ context->lexAfterType = true; return (BVEC3); }
        YY_BREAK
-/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 case 63:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return (BVEC4); }
+       YY_BREAK
 case 64:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return SAMPLER2D; }
+       YY_BREAK
 case 65:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return SAMPLERCUBE; }
+       YY_BREAK
 case 66:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
+       YY_BREAK
 case 67:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return SAMPLER3D; }
+       YY_BREAK
 case 68:
+YY_RULE_SETUP
+{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+       YY_BREAK
 case 69:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAY); }
+       YY_BREAK
 case 70:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, ISAMPLER2D); }
+       YY_BREAK
 case 71:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, ISAMPLER3D); }
+       YY_BREAK
 case 72:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, ISAMPLERCUBE); }
+       YY_BREAK
 case 73:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, ISAMPLER2DARRAY); }
+       YY_BREAK
 case 74:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, USAMPLER2D); }
+       YY_BREAK
 case 75:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, USAMPLER3D); }
+       YY_BREAK
 case 76:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, USAMPLERCUBE); }
+       YY_BREAK
 case 77:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, USAMPLER2DARRAY); }
+       YY_BREAK
 case 78:
+YY_RULE_SETUP
+{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+       YY_BREAK
 case 79:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, SAMPLERCUBESHADOW); }
+       YY_BREAK
 case 80:
+YY_RULE_SETUP
+{ return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
+       YY_BREAK
 case 81:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return(STRUCT); }
+       YY_BREAK
 case 82:
+YY_RULE_SETUP
+{ return ES2_identifier_ES3_keyword(context, LAYOUT); }
+       YY_BREAK
+/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 case 83:
 case 84:
 case 85:
@@ -1646,6 +1737,26 @@ case 115:
 case 116:
 case 117:
 case 118:
+case 119:
+case 120:
+case 121:
+case 122:
+case 123:
+case 124:
+case 125:
+case 126:
+case 127:
+case 128:
+case 129:
+case 130:
+case 131:
+case 132:
+case 133:
+case 134:
+case 135:
+case 136:
+case 137:
+case 138:
 YY_RULE_SETUP
 { 
     if (context->shaderVersion < 300) {
@@ -1656,7 +1767,7 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
-case 119:
+case 139:
 YY_RULE_SETUP
 {
     if (context->shaderVersion >= 300)
@@ -1669,26 +1780,6 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Reserved keywords */
-case 120:
-case 121:
-case 122:
-case 123:
-case 124:
-case 125:
-case 126:
-case 127:
-case 128:
-case 129:
-case 130:
-case 131:
-case 132:
-case 133:
-case 134:
-case 135:
-case 136:
-case 137:
-case 138:
-case 139:
 case 140:
 case 141:
 case 142:
@@ -1711,237 +1802,257 @@ case 158:
 case 159:
 case 160:
 case 161:
+case 162:
+case 163:
+case 164:
+case 165:
+case 166:
+case 167:
+case 168:
+case 169:
+case 170:
+case 171:
+case 172:
+case 173:
+case 174:
+case 175:
+case 176:
+case 177:
+case 178:
+case 179:
+case 180:
+case 181:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
        YY_BREAK
-case 162:
+case 182:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
        YY_BREAK
-case 163:
+case 183:
 YY_RULE_SETUP
 { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
        YY_BREAK
-case 164:
+case 184:
 YY_RULE_SETUP
 { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
        YY_BREAK
-case 165:
+case 185:
 YY_RULE_SETUP
 { context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
        YY_BREAK
-case 166:
+case 186:
 YY_RULE_SETUP
 { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
        YY_BREAK
-case 167:
+case 187:
 YY_RULE_SETUP
 { return uint_constant(context); }
        YY_BREAK
-case 168:
+case 188:
 YY_RULE_SETUP
 { return uint_constant(context); }
        YY_BREAK
-case 169:
+case 189:
 YY_RULE_SETUP
 { return uint_constant(context); }
        YY_BREAK
-case 170:
+case 190:
 YY_RULE_SETUP
 { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
        YY_BREAK
-case 171:
+case 191:
 YY_RULE_SETUP
 { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
        YY_BREAK
-case 172:
+case 192:
 YY_RULE_SETUP
 { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
        YY_BREAK
-case 173:
+case 193:
 YY_RULE_SETUP
 {  return(ADD_ASSIGN); }
        YY_BREAK
-case 174:
+case 194:
 YY_RULE_SETUP
 {  return(SUB_ASSIGN); }
        YY_BREAK
-case 175:
+case 195:
 YY_RULE_SETUP
 {  return(MUL_ASSIGN); }
        YY_BREAK
-case 176:
+case 196:
 YY_RULE_SETUP
 {  return(DIV_ASSIGN); }
        YY_BREAK
-case 177:
+case 197:
 YY_RULE_SETUP
 {  return(MOD_ASSIGN); }
        YY_BREAK
-case 178:
+case 198:
 YY_RULE_SETUP
 {  return(LEFT_ASSIGN); }
        YY_BREAK
-case 179:
+case 199:
 YY_RULE_SETUP
 {  return(RIGHT_ASSIGN); }
        YY_BREAK
-case 180:
+case 200:
 YY_RULE_SETUP
 {  return(AND_ASSIGN); }
        YY_BREAK
-case 181:
+case 201:
 YY_RULE_SETUP
 {  return(XOR_ASSIGN); }
        YY_BREAK
-case 182:
+case 202:
 YY_RULE_SETUP
 {  return(OR_ASSIGN); }
        YY_BREAK
-case 183:
+case 203:
 YY_RULE_SETUP
 {  return(INC_OP); }
        YY_BREAK
-case 184:
+case 204:
 YY_RULE_SETUP
 {  return(DEC_OP); }
        YY_BREAK
-case 185:
+case 205:
 YY_RULE_SETUP
 {  return(AND_OP); }
        YY_BREAK
-case 186:
+case 206:
 YY_RULE_SETUP
 {  return(OR_OP); }
        YY_BREAK
-case 187:
+case 207:
 YY_RULE_SETUP
 {  return(XOR_OP); }
        YY_BREAK
-case 188:
+case 208:
 YY_RULE_SETUP
 {  return(LE_OP); }
        YY_BREAK
-case 189:
+case 209:
 YY_RULE_SETUP
 {  return(GE_OP); }
        YY_BREAK
-case 190:
+case 210:
 YY_RULE_SETUP
 {  return(EQ_OP); }
        YY_BREAK
-case 191:
+case 211:
 YY_RULE_SETUP
 {  return(NE_OP); }
        YY_BREAK
-case 192:
+case 212:
 YY_RULE_SETUP
 {  return(LEFT_OP); }
        YY_BREAK
-case 193:
+case 213:
 YY_RULE_SETUP
 {  return(RIGHT_OP); }
        YY_BREAK
-case 194:
+case 214:
 YY_RULE_SETUP
 { context->lexAfterType = false; return(SEMICOLON); }
        YY_BREAK
-case 195:
+case 215:
 YY_RULE_SETUP
 { context->lexAfterType = false; return(LEFT_BRACE); }
        YY_BREAK
-case 196:
+case 216:
 YY_RULE_SETUP
 { return(RIGHT_BRACE); }
        YY_BREAK
-case 197:
+case 217:
 YY_RULE_SETUP
 { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
        YY_BREAK
-case 198:
+case 218:
 YY_RULE_SETUP
 { return(COLON); }
        YY_BREAK
-case 199:
+case 219:
 YY_RULE_SETUP
 { context->lexAfterType = false; return(EQUAL); }
        YY_BREAK
-case 200:
+case 220:
 YY_RULE_SETUP
 { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
        YY_BREAK
-case 201:
+case 221:
 YY_RULE_SETUP
 { context->inTypeParen = false; return(RIGHT_PAREN); }
        YY_BREAK
-case 202:
+case 222:
 YY_RULE_SETUP
 { return(LEFT_BRACKET); }
        YY_BREAK
-case 203:
+case 223:
 YY_RULE_SETUP
 { return(RIGHT_BRACKET); }
        YY_BREAK
-case 204:
+case 224:
 YY_RULE_SETUP
 { BEGIN(FIELDS);  return(DOT); }
        YY_BREAK
-case 205:
+case 225:
 YY_RULE_SETUP
 { return(BANG); }
        YY_BREAK
-case 206:
+case 226:
 YY_RULE_SETUP
 { return(DASH); }
        YY_BREAK
-case 207:
+case 227:
 YY_RULE_SETUP
 { return(TILDE); }
        YY_BREAK
-case 208:
+case 228:
 YY_RULE_SETUP
 { return(PLUS); }
        YY_BREAK
-case 209:
+case 229:
 YY_RULE_SETUP
 { return(STAR); }
        YY_BREAK
-case 210:
+case 230:
 YY_RULE_SETUP
 { return(SLASH); }
        YY_BREAK
-case 211:
+case 231:
 YY_RULE_SETUP
 { return(PERCENT); }
        YY_BREAK
-case 212:
+case 232:
 YY_RULE_SETUP
 { return(LEFT_ANGLE); }
        YY_BREAK
-case 213:
+case 233:
 YY_RULE_SETUP
 { return(RIGHT_ANGLE); }
        YY_BREAK
-case 214:
+case 234:
 YY_RULE_SETUP
 { return(VERTICAL_BAR); }
        YY_BREAK
-case 215:
+case 235:
 YY_RULE_SETUP
 { return(CARET); }
        YY_BREAK
-case 216:
+case 236:
 YY_RULE_SETUP
 { return(AMPERSAND); }
        YY_BREAK
-case 217:
+case 237:
 YY_RULE_SETUP
 { return(QUESTION); }
        YY_BREAK
-case 218:
+case 238:
 YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
@@ -1949,12 +2060,12 @@ YY_RULE_SETUP
     return FIELD_SELECTION;
 }
        YY_BREAK
-case 219:
+case 239:
 YY_RULE_SETUP
 {}
        YY_BREAK
-case 220:
-/* rule 220 can match eol */
+case 240:
+/* rule 240 can match eol */
 YY_RULE_SETUP
 {  }
        YY_BREAK
@@ -1963,11 +2074,11 @@ case YY_STATE_EOF(COMMENT):
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
        YY_BREAK
-case 221:
+case 241:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
        YY_BREAK
-case 222:
+case 242:
 YY_RULE_SETUP
 ECHO;
        YY_BREAK
@@ -2263,7 +2374,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 775 )
+                       if ( yy_current_state >= 826 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2292,11 +2403,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 775 )
+               if ( yy_current_state >= 826 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 774);
+       yy_is_jam = (yy_current_state == 825);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
index c79bf87..54ac7fe 100644 (file)
@@ -69,7 +69,7 @@
 
 
 //
-// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
      INOUT_QUAL = 297,
      UNIFORM = 298,
      VARYING = 299,
-     CENTROID = 300,
-     FLAT = 301,
-     SMOOTH = 302,
-     STRUCT = 303,
-     VOID_TYPE = 304,
-     WHILE = 305,
-     SAMPLER2D = 306,
-     SAMPLERCUBE = 307,
-     SAMPLER_EXTERNAL_OES = 308,
-     SAMPLER2DRECT = 309,
-     SAMPLER3D = 310,
-     SAMPLER3DRECT = 311,
-     SAMPLER2DSHADOW = 312,
-     LAYOUT = 313,
-     IDENTIFIER = 314,
-     TYPE_NAME = 315,
-     FLOATCONSTANT = 316,
-     INTCONSTANT = 317,
-     UINTCONSTANT = 318,
-     BOOLCONSTANT = 319,
-     FIELD_SELECTION = 320,
-     LEFT_OP = 321,
-     RIGHT_OP = 322,
-     INC_OP = 323,
-     DEC_OP = 324,
-     LE_OP = 325,
-     GE_OP = 326,
-     EQ_OP = 327,
-     NE_OP = 328,
-     AND_OP = 329,
-     OR_OP = 330,
-     XOR_OP = 331,
-     MUL_ASSIGN = 332,
-     DIV_ASSIGN = 333,
-     ADD_ASSIGN = 334,
-     MOD_ASSIGN = 335,
-     LEFT_ASSIGN = 336,
-     RIGHT_ASSIGN = 337,
-     AND_ASSIGN = 338,
-     XOR_ASSIGN = 339,
-     OR_ASSIGN = 340,
-     SUB_ASSIGN = 341,
-     LEFT_PAREN = 342,
-     RIGHT_PAREN = 343,
-     LEFT_BRACKET = 344,
-     RIGHT_BRACKET = 345,
-     LEFT_BRACE = 346,
-     RIGHT_BRACE = 347,
-     DOT = 348,
-     COMMA = 349,
-     COLON = 350,
-     EQUAL = 351,
-     SEMICOLON = 352,
-     BANG = 353,
-     DASH = 354,
-     TILDE = 355,
-     PLUS = 356,
-     STAR = 357,
-     SLASH = 358,
-     PERCENT = 359,
-     LEFT_ANGLE = 360,
-     RIGHT_ANGLE = 361,
-     VERTICAL_BAR = 362,
-     CARET = 363,
-     AMPERSAND = 364,
-     QUESTION = 365
+     MATRIX2x3 = 300,
+     MATRIX3x2 = 301,
+     MATRIX2x4 = 302,
+     MATRIX4x2 = 303,
+     MATRIX3x4 = 304,
+     MATRIX4x3 = 305,
+     CENTROID = 306,
+     FLAT = 307,
+     SMOOTH = 308,
+     STRUCT = 309,
+     VOID_TYPE = 310,
+     WHILE = 311,
+     SAMPLER2D = 312,
+     SAMPLERCUBE = 313,
+     SAMPLER_EXTERNAL_OES = 314,
+     SAMPLER2DRECT = 315,
+     SAMPLER2DARRAY = 316,
+     ISAMPLER2D = 317,
+     ISAMPLER3D = 318,
+     ISAMPLERCUBE = 319,
+     ISAMPLER2DARRAY = 320,
+     USAMPLER2D = 321,
+     USAMPLER3D = 322,
+     USAMPLERCUBE = 323,
+     USAMPLER2DARRAY = 324,
+     SAMPLER3D = 325,
+     SAMPLER3DRECT = 326,
+     SAMPLER2DSHADOW = 327,
+     SAMPLERCUBESHADOW = 328,
+     SAMPLER2DARRAYSHADOW = 329,
+     LAYOUT = 330,
+     IDENTIFIER = 331,
+     TYPE_NAME = 332,
+     FLOATCONSTANT = 333,
+     INTCONSTANT = 334,
+     UINTCONSTANT = 335,
+     BOOLCONSTANT = 336,
+     FIELD_SELECTION = 337,
+     LEFT_OP = 338,
+     RIGHT_OP = 339,
+     INC_OP = 340,
+     DEC_OP = 341,
+     LE_OP = 342,
+     GE_OP = 343,
+     EQ_OP = 344,
+     NE_OP = 345,
+     AND_OP = 346,
+     OR_OP = 347,
+     XOR_OP = 348,
+     MUL_ASSIGN = 349,
+     DIV_ASSIGN = 350,
+     ADD_ASSIGN = 351,
+     MOD_ASSIGN = 352,
+     LEFT_ASSIGN = 353,
+     RIGHT_ASSIGN = 354,
+     AND_ASSIGN = 355,
+     XOR_ASSIGN = 356,
+     OR_ASSIGN = 357,
+     SUB_ASSIGN = 358,
+     LEFT_PAREN = 359,
+     RIGHT_PAREN = 360,
+     LEFT_BRACKET = 361,
+     RIGHT_BRACKET = 362,
+     LEFT_BRACE = 363,
+     RIGHT_BRACE = 364,
+     DOT = 365,
+     COMMA = 366,
+     COLON = 367,
+     EQUAL = 368,
+     SEMICOLON = 369,
+     BANG = 370,
+     DASH = 371,
+     TILDE = 372,
+     PLUS = 373,
+     STAR = 374,
+     SLASH = 375,
+     PERCENT = 376,
+     LEFT_ANGLE = 377,
+     RIGHT_ANGLE = 378,
+     VERTICAL_BAR = 379,
+     CARET = 380,
+     AMPERSAND = 381,
+     QUESTION = 382
    };
 #endif
 
@@ -537,22 +554,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  85
+#define YYFINAL  103
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1675
+#define YYLAST   2020
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  111
+#define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  88
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  220
+#define YYNRULES  238
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  329
+#define YYNSTATES  347
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   365
+#define YYMAXUTOK   382
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -596,7 +613,9 @@ static const yytype_uint8 yytranslate[] =
       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
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127
 };
 
 #if YYDEBUG
@@ -619,109 +638,115 @@ static const yytype_uint16 yyprhs[] =
      348,   350,   352,   354,   359,   361,   365,   367,   371,   375,
      377,   382,   384,   386,   388,   390,   392,   394,   396,   398,
      400,   402,   404,   406,   408,   410,   412,   414,   416,   418,
-     420,   422,   424,   426,   428,   430,   432,   434,   435,   442,
-     443,   449,   451,   454,   458,   460,   464,   466,   471,   473,
-     475,   477,   479,   481,   483,   485,   487,   489,   492,   493,
-     494,   500,   502,   504,   505,   508,   509,   512,   515,   519,
-     521,   524,   526,   529,   535,   539,   541,   543,   548,   549,
-     556,   557,   566,   567,   575,   577,   579,   581,   582,   585,
-     589,   592,   595,   598,   602,   605,   607,   610,   612,   614,
-     615
+     420,   422,   424,   426,   428,   430,   432,   434,   436,   438,
+     440,   442,   444,   446,   448,   450,   452,   454,   456,   458,
+     460,   462,   464,   466,   468,   470,   471,   478,   479,   485,
+     487,   490,   494,   496,   500,   502,   507,   509,   511,   513,
+     515,   517,   519,   521,   523,   525,   528,   529,   530,   536,
+     538,   540,   541,   544,   545,   548,   551,   555,   557,   560,
+     562,   565,   571,   575,   577,   579,   584,   585,   592,   593,
+     602,   603,   611,   613,   615,   617,   618,   621,   625,   628,
+     631,   634,   638,   641,   643,   646,   648,   650,   651
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     195,     0,    -1,    59,    -1,   112,    -1,    62,    -1,    63,
-      -1,    61,    -1,    64,    -1,    87,   139,    88,    -1,   113,
-      -1,   114,    89,   115,    90,    -1,   116,    -1,   114,    93,
-      65,    -1,   114,    68,    -1,   114,    69,    -1,   139,    -1,
-     117,    -1,   118,    -1,   114,    93,   118,    -1,   120,    88,
-      -1,   119,    88,    -1,   121,    49,    -1,   121,    -1,   121,
-     137,    -1,   120,    94,   137,    -1,   122,    87,    -1,   162,
-      -1,    59,    -1,    65,    -1,   114,    -1,    68,   123,    -1,
-      69,   123,    -1,   124,   123,    -1,   101,    -1,    99,    -1,
-      98,    -1,   123,    -1,   125,   102,   123,    -1,   125,   103,
-     123,    -1,   125,    -1,   126,   101,   125,    -1,   126,    99,
-     125,    -1,   126,    -1,   127,    -1,   128,   105,   127,    -1,
-     128,   106,   127,    -1,   128,    70,   127,    -1,   128,    71,
-     127,    -1,   128,    -1,   129,    72,   128,    -1,   129,    73,
-     128,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
-     133,    74,   132,    -1,   133,    -1,   134,    76,   133,    -1,
-     134,    -1,   135,    75,   134,    -1,   135,    -1,   135,   110,
-     139,    95,   137,    -1,   136,    -1,   123,   138,   137,    -1,
-      96,    -1,    77,    -1,    78,    -1,    79,    -1,    86,    -1,
-     137,    -1,   139,    94,   137,    -1,   136,    -1,   142,    97,
-      -1,   150,    97,    -1,     7,   157,   161,    97,    -1,   143,
-      88,    -1,   145,    -1,   144,    -1,   145,   147,    -1,   144,
-      94,   147,    -1,   152,    59,    87,    -1,   156,    59,    -1,
-     156,    59,    89,   140,    90,    -1,   153,   148,   146,    -1,
-     148,   146,    -1,   153,   148,   149,    -1,   148,   149,    -1,
-      -1,    40,    -1,    41,    -1,    42,    -1,   156,    -1,   151,
-      -1,   150,    94,    59,    -1,   150,    94,    59,    89,    90,
-      -1,   150,    94,    59,    89,   140,    90,    -1,   150,    94,
-      59,    96,   170,    -1,   152,    -1,   152,    59,    -1,   152,
-      59,    89,    90,    -1,   152,    59,    89,   140,    90,    -1,
-     152,    59,    96,   170,    -1,     3,    59,    -1,   156,    -1,
-     154,   156,    -1,     9,    -1,     8,    -1,    44,    -1,     3,
-      44,    -1,   155,    -1,   158,    -1,   158,   155,    -1,     9,
-      -1,    40,    -1,    41,    -1,    45,    40,    -1,    45,    41,
-      -1,    43,    -1,   161,    -1,   157,   161,    -1,     4,    -1,
-       5,    -1,     6,    -1,    58,    87,   159,    88,    -1,   160,
-      -1,   159,    94,   160,    -1,    59,    -1,    59,    96,    62,
-      -1,    59,    96,    63,    -1,   162,    -1,   162,    89,   140,
-      90,    -1,    49,    -1,    11,    -1,    12,    -1,    13,    -1,
+     212,     0,    -1,    76,    -1,   129,    -1,    79,    -1,    80,
+      -1,    78,    -1,    81,    -1,   104,   156,   105,    -1,   130,
+      -1,   131,   106,   132,   107,    -1,   133,    -1,   131,   110,
+      82,    -1,   131,    85,    -1,   131,    86,    -1,   156,    -1,
+     134,    -1,   135,    -1,   131,   110,   135,    -1,   137,   105,
+      -1,   136,   105,    -1,   138,    55,    -1,   138,    -1,   138,
+     154,    -1,   137,   111,   154,    -1,   139,   104,    -1,   179,
+      -1,    76,    -1,    82,    -1,   131,    -1,    85,   140,    -1,
+      86,   140,    -1,   141,   140,    -1,   118,    -1,   116,    -1,
+     115,    -1,   140,    -1,   142,   119,   140,    -1,   142,   120,
+     140,    -1,   142,    -1,   143,   118,   142,    -1,   143,   116,
+     142,    -1,   143,    -1,   144,    -1,   145,   122,   144,    -1,
+     145,   123,   144,    -1,   145,    87,   144,    -1,   145,    88,
+     144,    -1,   145,    -1,   146,    89,   145,    -1,   146,    90,
+     145,    -1,   146,    -1,   147,    -1,   148,    -1,   149,    -1,
+     150,    91,   149,    -1,   150,    -1,   151,    93,   150,    -1,
+     151,    -1,   152,    92,   151,    -1,   152,    -1,   152,   127,
+     156,   112,   154,    -1,   153,    -1,   140,   155,   154,    -1,
+     113,    -1,    94,    -1,    95,    -1,    96,    -1,   103,    -1,
+     154,    -1,   156,   111,   154,    -1,   153,    -1,   159,   114,
+      -1,   167,   114,    -1,     7,   174,   178,   114,    -1,   160,
+     105,    -1,   162,    -1,   161,    -1,   162,   164,    -1,   161,
+     111,   164,    -1,   169,    76,   104,    -1,   173,    76,    -1,
+     173,    76,   106,   157,   107,    -1,   170,   165,   163,    -1,
+     165,   163,    -1,   170,   165,   166,    -1,   165,   166,    -1,
+      -1,    40,    -1,    41,    -1,    42,    -1,   173,    -1,   168,
+      -1,   167,   111,    76,    -1,   167,   111,    76,   106,   107,
+      -1,   167,   111,    76,   106,   157,   107,    -1,   167,   111,
+      76,   113,   187,    -1,   169,    -1,   169,    76,    -1,   169,
+      76,   106,   107,    -1,   169,    76,   106,   157,   107,    -1,
+     169,    76,   113,   187,    -1,     3,    76,    -1,   173,    -1,
+     171,   173,    -1,     9,    -1,     8,    -1,    44,    -1,     3,
+      44,    -1,   172,    -1,   175,    -1,   175,   172,    -1,     9,
+      -1,    40,    -1,    41,    -1,    51,    40,    -1,    51,    41,
+      -1,    43,    -1,   178,    -1,   174,   178,    -1,     4,    -1,
+       5,    -1,     6,    -1,    75,   104,   176,   105,    -1,   177,
+      -1,   176,   111,   177,    -1,    76,    -1,    76,   113,    79,
+      -1,    76,   113,    80,    -1,   179,    -1,   179,   106,   157,
+     107,    -1,    55,    -1,    11,    -1,    12,    -1,    13,    -1,
       10,    -1,    31,    -1,    32,    -1,    33,    -1,    25,    -1,
       26,    -1,    27,    -1,    28,    -1,    29,    -1,    30,    -1,
       34,    -1,    35,    -1,    36,    -1,    37,    -1,    38,    -1,
-      39,    -1,    51,    -1,    52,    -1,    53,    -1,    55,    -1,
-     163,    -1,    60,    -1,    -1,    48,    59,    91,   164,   166,
-      92,    -1,    -1,    48,    91,   165,   166,    92,    -1,   167,
-      -1,   166,   167,    -1,   156,   168,    97,    -1,   169,    -1,
-     168,    94,   169,    -1,    59,    -1,    59,    89,   140,    90,
-      -1,   137,    -1,   141,    -1,   174,    -1,   173,    -1,   171,
-      -1,   183,    -1,   184,    -1,   187,    -1,   194,    -1,    91,
-      92,    -1,    -1,    -1,    91,   175,   182,   176,    92,    -1,
-     181,    -1,   173,    -1,    -1,   179,   181,    -1,    -1,   180,
-     173,    -1,    91,    92,    -1,    91,   182,    92,    -1,   172,
-      -1,   182,   172,    -1,    97,    -1,   139,    97,    -1,    19,
-      87,   139,    88,   185,    -1,   178,    17,   178,    -1,   178,
-      -1,   139,    -1,   152,    59,    96,   170,    -1,    -1,    50,
-      87,   188,   186,    88,   177,    -1,    -1,    16,   189,   178,
-      50,    87,   139,    88,    97,    -1,    -1,    18,    87,   190,
-     191,   193,    88,   177,    -1,   183,    -1,   171,    -1,   186,
-      -1,    -1,   192,    97,    -1,   192,    97,   139,    -1,    15,
-      97,    -1,    14,    97,    -1,    21,    97,    -1,    21,   139,
-      97,    -1,    20,    97,    -1,   196,    -1,   195,   196,    -1,
-     197,    -1,   141,    -1,    -1,   142,   198,   181,    -1
+      39,    -1,    45,    -1,    46,    -1,    47,    -1,    48,    -1,
+      49,    -1,    50,    -1,    57,    -1,    58,    -1,    59,    -1,
+      70,    -1,    61,    -1,    62,    -1,    63,    -1,    64,    -1,
+      65,    -1,    66,    -1,    67,    -1,    68,    -1,    69,    -1,
+      72,    -1,    73,    -1,    74,    -1,   180,    -1,    77,    -1,
+      -1,    54,    76,   108,   181,   183,   109,    -1,    -1,    54,
+     108,   182,   183,   109,    -1,   184,    -1,   183,   184,    -1,
+     173,   185,   114,    -1,   186,    -1,   185,   111,   186,    -1,
+      76,    -1,    76,   106,   157,   107,    -1,   154,    -1,   158,
+      -1,   191,    -1,   190,    -1,   188,    -1,   200,    -1,   201,
+      -1,   204,    -1,   211,    -1,   108,   109,    -1,    -1,    -1,
+     108,   192,   199,   193,   109,    -1,   198,    -1,   190,    -1,
+      -1,   196,   198,    -1,    -1,   197,   190,    -1,   108,   109,
+      -1,   108,   199,   109,    -1,   189,    -1,   199,   189,    -1,
+     114,    -1,   156,   114,    -1,    19,   104,   156,   105,   202,
+      -1,   195,    17,   195,    -1,   195,    -1,   156,    -1,   169,
+      76,   113,   187,    -1,    -1,    56,   104,   205,   203,   105,
+     194,    -1,    -1,    16,   206,   195,    56,   104,   156,   105,
+     114,    -1,    -1,    18,   104,   207,   208,   210,   105,   194,
+      -1,   200,    -1,   188,    -1,   203,    -1,    -1,   209,   114,
+      -1,   209,   114,   156,    -1,    15,   114,    -1,    14,   114,
+      -1,    21,   114,    -1,    21,   156,   114,    -1,    20,   114,
+      -1,   213,    -1,   212,   213,    -1,   214,    -1,   158,    -1,
+      -1,   159,   215,   198,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   187,   187,   222,   225,   230,   235,   240,   245,   251,
-     254,   333,   336,   437,   447,   460,   468,   568,   571,   579,
-     583,   590,   594,   601,   607,   616,   624,   679,   686,   696,
-     699,   709,   719,   740,   741,   742,   747,   748,   757,   769,
-     770,   778,   789,   793,   794,   804,   814,   824,   837,   838,
-     848,   861,   865,   869,   873,   874,   887,   888,   901,   902,
-     915,   916,   933,   934,   947,   948,   949,   950,   951,   955,
-     958,   969,   977,  1004,  1009,  1019,  1057,  1060,  1067,  1075,
-    1096,  1117,  1128,  1157,  1162,  1172,  1177,  1187,  1190,  1193,
-    1196,  1202,  1209,  1212,  1234,  1252,  1276,  1299,  1303,  1321,
-    1329,  1361,  1381,  1469,  1478,  1501,  1507,  1514,  1523,  1532,
-    1535,  1539,  1546,  1550,  1555,  1560,  1566,  1572,  1581,  1591,
-    1598,  1601,  1604,  1610,  1617,  1620,  1626,  1629,  1632,  1638,
-    1641,  1656,  1660,  1664,  1668,  1672,  1676,  1681,  1686,  1691,
-    1696,  1701,  1706,  1711,  1716,  1721,  1726,  1731,  1736,  1742,
-    1748,  1754,  1759,  1764,  1773,  1778,  1783,  1796,  1796,  1810,
-    1810,  1819,  1822,  1837,  1869,  1873,  1879,  1887,  1903,  1907,
-    1911,  1912,  1918,  1919,  1920,  1921,  1922,  1926,  1927,  1927,
-    1927,  1937,  1938,  1942,  1942,  1943,  1943,  1948,  1951,  1961,
-    1964,  1970,  1971,  1975,  1983,  1987,  1997,  2002,  2019,  2019,
-    2024,  2024,  2031,  2031,  2039,  2042,  2048,  2051,  2057,  2061,
-    2068,  2075,  2082,  2089,  2100,  2109,  2113,  2120,  2123,  2129,
-    2129
+       0,   190,   190,   225,   228,   233,   238,   243,   248,   254,
+     257,   336,   339,   440,   450,   463,   471,   571,   574,   582,
+     586,   593,   597,   604,   610,   619,   627,   696,   703,   713,
+     716,   726,   736,   757,   758,   759,   764,   765,   774,   786,
+     787,   795,   806,   810,   811,   821,   831,   841,   854,   855,
+     865,   878,   882,   886,   890,   891,   904,   905,   918,   919,
+     932,   933,   950,   951,   964,   965,   966,   967,   968,   972,
+     975,   986,   994,  1021,  1026,  1036,  1074,  1077,  1084,  1092,
+    1113,  1134,  1145,  1174,  1179,  1189,  1194,  1204,  1207,  1210,
+    1213,  1219,  1226,  1229,  1251,  1269,  1293,  1316,  1320,  1338,
+    1346,  1378,  1398,  1486,  1495,  1518,  1524,  1531,  1540,  1549,
+    1552,  1556,  1563,  1567,  1572,  1577,  1583,  1589,  1598,  1608,
+    1615,  1618,  1621,  1627,  1634,  1637,  1643,  1646,  1649,  1655,
+    1658,  1673,  1677,  1681,  1685,  1689,  1693,  1698,  1703,  1708,
+    1713,  1718,  1723,  1728,  1733,  1738,  1743,  1748,  1753,  1759,
+    1765,  1771,  1777,  1783,  1789,  1795,  1801,  1807,  1812,  1817,
+    1826,  1831,  1836,  1841,  1846,  1851,  1856,  1861,  1866,  1871,
+    1876,  1881,  1886,  1891,  1896,  1909,  1909,  1923,  1923,  1932,
+    1935,  1950,  1982,  1986,  1992,  2000,  2016,  2020,  2024,  2025,
+    2031,  2032,  2033,  2034,  2035,  2039,  2040,  2040,  2040,  2050,
+    2051,  2055,  2055,  2056,  2056,  2061,  2064,  2074,  2077,  2083,
+    2084,  2088,  2096,  2100,  2110,  2115,  2132,  2132,  2137,  2137,
+    2144,  2144,  2152,  2155,  2161,  2164,  2170,  2174,  2181,  2188,
+    2195,  2202,  2213,  2222,  2226,  2233,  2236,  2242,  2242
 };
 #endif
 
@@ -737,15 +762,19 @@ static const char *const yytname[] =
   "SWITCH", "CASE", "DEFAULT", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3",
   "IVEC4", "VEC2", "VEC3", "VEC4", "UVEC2", "UVEC3", "UVEC4", "MATRIX2",
   "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
-  "VARYING", "CENTROID", "FLAT", "SMOOTH", "STRUCT", "VOID_TYPE", "WHILE",
-  "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT",
-  "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW", "LAYOUT", "IDENTIFIER",
-  "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT",
-  "BOOLCONSTANT", "FIELD_SELECTION", "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", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
+  "VARYING", "MATRIX2x3", "MATRIX3x2", "MATRIX2x4", "MATRIX4x2",
+  "MATRIX3x4", "MATRIX4x3", "CENTROID", "FLAT", "SMOOTH", "STRUCT",
+  "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
+  "SAMPLER2DRECT", "SAMPLER2DARRAY", "ISAMPLER2D", "ISAMPLER3D",
+  "ISAMPLERCUBE", "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D",
+  "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER3D", "SAMPLER3DRECT",
+  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW", "LAYOUT",
+  "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT",
+  "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "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", "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",
@@ -799,36 +828,38 @@ static const yytype_uint16 yytoknum[] =
      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
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   111,   112,   113,   113,   113,   113,   113,   113,   114,
-     114,   114,   114,   114,   114,   115,   116,   117,   117,   118,
-     118,   119,   119,   120,   120,   121,   122,   122,   122,   123,
-     123,   123,   123,   124,   124,   124,   125,   125,   125,   126,
-     126,   126,   127,   128,   128,   128,   128,   128,   129,   129,
-     129,   130,   131,   132,   133,   133,   134,   134,   135,   135,
-     136,   136,   137,   137,   138,   138,   138,   138,   138,   139,
-     139,   140,   141,   141,   141,   142,   143,   143,   144,   144,
-     145,   146,   146,   147,   147,   147,   147,   148,   148,   148,
-     148,   149,   150,   150,   150,   150,   150,   151,   151,   151,
-     151,   151,   151,   152,   152,   153,   154,   154,   154,   154,
-     154,   154,   155,   155,   155,   155,   155,   155,   156,   156,
-     157,   157,   157,   158,   159,   159,   160,   160,   160,   161,
-     161,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   164,   163,   165,
-     163,   166,   166,   167,   168,   168,   169,   169,   170,   171,
-     172,   172,   173,   173,   173,   173,   173,   174,   175,   176,
-     174,   177,   177,   179,   178,   180,   178,   181,   181,   182,
-     182,   183,   183,   184,   185,   185,   186,   186,   188,   187,
-     189,   187,   190,   187,   191,   191,   192,   192,   193,   193,
-     194,   194,   194,   194,   194,   195,   195,   196,   196,   198,
-     197
+       0,   128,   129,   130,   130,   130,   130,   130,   130,   131,
+     131,   131,   131,   131,   131,   132,   133,   134,   134,   135,
+     135,   136,   136,   137,   137,   138,   139,   139,   139,   140,
+     140,   140,   140,   141,   141,   141,   142,   142,   142,   143,
+     143,   143,   144,   145,   145,   145,   145,   145,   146,   146,
+     146,   147,   148,   149,   150,   150,   151,   151,   152,   152,
+     153,   153,   154,   154,   155,   155,   155,   155,   155,   156,
+     156,   157,   158,   158,   158,   159,   160,   160,   161,   161,
+     162,   163,   163,   164,   164,   164,   164,   165,   165,   165,
+     165,   166,   167,   167,   167,   167,   167,   168,   168,   168,
+     168,   168,   168,   169,   169,   170,   171,   171,   171,   171,
+     171,   171,   172,   172,   172,   172,   172,   172,   173,   173,
+     174,   174,   174,   175,   176,   176,   177,   177,   177,   178,
+     178,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   181,   180,   182,   180,   183,
+     183,   184,   185,   185,   186,   186,   187,   188,   189,   189,
+     190,   190,   190,   190,   190,   191,   192,   193,   191,   194,
+     194,   196,   195,   197,   195,   198,   198,   199,   199,   200,
+     200,   201,   202,   202,   203,   203,   205,   204,   206,   204,
+     207,   204,   208,   208,   209,   209,   210,   210,   211,   211,
+     211,   211,   211,   212,   212,   213,   213,   215,   214
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -849,14 +880,15 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     4,     1,     3,     1,     3,     3,     1,
        4,     1,     1,     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,     1,     3,     1,     4,     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,     5,     3,     1,     1,     4,     0,     6,
-       0,     8,     0,     7,     1,     1,     1,     0,     2,     3,
-       2,     2,     2,     3,     2,     1,     2,     1,     1,     0,
-       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,     0,     6,     0,     5,     1,
+       2,     3,     1,     3,     1,     4,     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,     5,     3,     1,     1,     4,     0,     6,     0,     8,
+       0,     7,     1,     1,     1,     0,     2,     3,     2,     2,
+       2,     3,     2,     1,     2,     1,     1,     0,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -867,453 +899,527 @@ static const yytype_uint8 yydefact[] =
        0,     0,   120,   121,   122,     0,   106,   112,   135,   132,
      133,   134,   139,   140,   141,   142,   143,   144,   136,   137,
      138,   145,   146,   147,   148,   149,   150,   113,   114,   117,
-     107,     0,     0,   131,   151,   152,   153,   154,     0,   156,
-     218,   219,     0,    77,    87,     0,    92,    97,     0,   109,
-     103,     0,   110,   118,   129,   155,     0,   215,   217,   108,
-     102,     0,   115,   116,     0,   159,     0,    72,     0,    75,
-      87,   105,    88,    89,    90,    78,     0,    87,     0,    73,
-      98,   104,   119,   111,     0,     1,   216,     0,   157,     0,
-     126,     0,   124,     0,   220,    79,    84,    86,    91,     0,
-      93,    80,     0,     0,     2,     6,     4,     5,     7,    28,
-       0,     0,     0,    35,    34,    33,     3,     9,    29,    11,
-      16,    17,     0,     0,    22,     0,    36,     0,    39,    42,
-      43,    48,    51,    52,    53,    54,    56,    58,    60,    71,
-       0,    26,    74,     0,     0,     0,   161,     0,   123,     0,
-       0,     0,   200,     0,     0,     0,     0,     0,   178,   187,
-     191,    36,    62,    69,     0,   169,     0,   129,   172,   189,
-     171,   170,     0,   173,   174,   175,   176,    81,    83,    85,
-       0,     0,    99,     0,   168,   101,    30,    31,     0,    13,
-      14,     0,     0,    20,    19,     0,    21,    23,    25,    32,
+     107,   151,   152,   153,   154,   155,   156,     0,     0,   131,
+     157,   158,   159,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   160,   170,   171,   172,     0,   174,   236,   237,
+       0,    77,    87,     0,    92,    97,     0,   109,   103,     0,
+     110,   118,   129,   173,     0,   233,   235,   108,   102,     0,
+     115,   116,     0,   177,     0,    72,     0,    75,    87,   105,
+      88,    89,    90,    78,     0,    87,     0,    73,    98,   104,
+     119,   111,     0,     1,   234,     0,   175,     0,   126,     0,
+     124,     0,   238,    79,    84,    86,    91,     0,    93,    80,
+       0,     0,     2,     6,     4,     5,     7,    28,     0,     0,
+       0,    35,    34,    33,     3,     9,    29,    11,    16,    17,
+       0,     0,    22,     0,    36,     0,    39,    42,    43,    48,
+      51,    52,    53,    54,    56,    58,    60,    71,     0,    26,
+      74,     0,     0,     0,   179,     0,   123,     0,     0,     0,
+     218,     0,     0,     0,     0,     0,   196,   205,   209,    36,
+      62,    69,     0,   187,     0,   129,   190,   207,   189,   188,
+       0,   191,   192,   193,   194,    81,    83,    85,     0,     0,
+      99,     0,   186,   101,    30,    31,     0,    13,    14,     0,
+       0,    20,    19,     0,    21,    23,    25,    32,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   130,     0,   166,     0,   164,   160,
-     162,   127,   128,   125,   211,   210,   185,   202,     0,   214,
-     212,     0,   198,   177,     0,    65,    66,    67,    68,    64,
-       0,     0,   192,   188,   190,     0,    94,     0,    96,   100,
-       8,     0,    15,    27,    12,    18,    24,    37,    38,    41,
-      40,    46,    47,    44,    45,    49,    50,    55,    57,    59,
-       0,   158,     0,     0,   163,     0,     0,     0,     0,     0,
-     213,     0,   179,    63,    70,     0,    95,    10,     0,     0,
-     165,     0,   184,   186,   205,   204,   207,   185,     0,   196,
-       0,     0,     0,    82,    61,   167,     0,   206,     0,     0,
-     195,   193,     0,     0,   180,     0,   208,     0,   185,     0,
-     182,   199,   181,     0,   209,   203,   194,   197,   201
+       0,     0,   130,     0,   184,     0,   182,   178,   180,   127,
+     128,   125,   229,   228,   203,   220,     0,   232,   230,     0,
+     216,   195,     0,    65,    66,    67,    68,    64,     0,     0,
+     210,   206,   208,     0,    94,     0,    96,   100,     8,     0,
+      15,    27,    12,    18,    24,    37,    38,    41,    40,    46,
+      47,    44,    45,    49,    50,    55,    57,    59,     0,   176,
+       0,     0,   181,     0,     0,     0,     0,     0,   231,     0,
+     197,    63,    70,     0,    95,    10,     0,     0,   183,     0,
+     202,   204,   223,   222,   225,   203,     0,   214,     0,     0,
+       0,    82,    61,   185,     0,   224,     0,     0,   213,   211,
+       0,     0,   198,     0,   226,     0,   203,     0,   200,   217,
+     199,     0,   227,   221,   212,   215,   219
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   116,   117,   118,   251,   119,   120,   121,   122,   123,
-     124,   125,   161,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   162,   163,   240,   164,   140,
-     165,   166,    42,    43,    44,    96,    75,    76,    97,    45,
-      46,    47,    77,    48,    49,    50,    51,    52,    91,    92,
-      53,   141,    55,   143,    89,   145,   146,   217,   218,   185,
-     168,   169,   170,   171,   234,   302,   321,   275,   276,   277,
-     322,   172,   173,   174,   311,   301,   175,   281,   226,   278,
-     296,   308,   309,   176,    56,    57,    58,    68
+      -1,   134,   135,   136,   269,   137,   138,   139,   140,   141,
+     142,   143,   179,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   180,   181,   258,   182,   158,
+     183,   184,    60,    61,    62,   114,    93,    94,   115,    63,
+      64,    65,    95,    66,    67,    68,    69,    70,   109,   110,
+      71,   159,    73,   161,   107,   163,   164,   235,   236,   203,
+     186,   187,   188,   189,   252,   320,   339,   293,   294,   295,
+     340,   190,   191,   192,   329,   319,   193,   299,   244,   296,
+     314,   326,   327,   194,    74,    75,    76,    86
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -282
+#define YYPACT_NINF -298
 static const yytype_int16 yypact[] =
 {
-    1461,   -26,  -282,  -282,  -282,    67,  -282,  -282,  -282,  -282,
-    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
-    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
-    -282,    76,   -44,  -282,  -282,  -282,  -282,  -282,     1,  -282,
-    -282,    -5,     7,   -32,    -2,   -39,  -282,    50,  1518,  -282,
-    -282,  1615,    34,  -282,    14,  -282,  1403,  -282,  -282,  -282,
-    -282,  1615,  -282,  -282,    51,  -282,    85,  -282,    73,  -282,
-      56,  -282,  -282,  -282,  -282,  -282,  1518,   113,    88,  -282,
-      15,  -282,  -282,  -282,  1127,  -282,  -282,    71,  -282,  1518,
-      75,   -62,  -282,   315,  -282,  -282,  -282,  -282,   110,  1518,
-     -68,  -282,   211,  1127,    87,  -282,  -282,  -282,  -282,  -282,
-    1127,  1127,  1127,  -282,  -282,  -282,  -282,  -282,   -23,  -282,
-    -282,  -282,    89,   -25,  1205,    91,  -282,  1127,    21,   -70,
-    -282,   -46,    84,  -282,  -282,  -282,   102,   103,   -61,  -282,
-      92,  -282,  -282,  1518,   122,  1283,  -282,    96,  -282,    85,
-      86,    94,  -282,    97,    98,    99,   968,   101,   106,  -282,
-    -282,     5,  -282,  -282,    -7,  -282,    -5,   -45,  -282,  -282,
-    -282,  -282,   414,  -282,  -282,  -282,  -282,   100,  -282,  -282,
-    1046,  1127,  -282,   104,  -282,  -282,  -282,  -282,    18,  -282,
-    -282,  1127,  1564,  -282,  -282,  1127,   108,  -282,  -282,  -282,
-    1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,
-    1127,  1127,  1127,  1127,  -282,  1335,   112,    24,  -282,  -282,
-    -282,  -282,  -282,  -282,  -282,  -282,    95,  -282,  1127,  -282,
-    -282,    44,  -282,  -282,   513,  -282,  -282,  -282,  -282,  -282,
-    1127,  1127,  -282,  -282,  -282,  1127,  -282,   109,  -282,  -282,
-    -282,   114,   111,  -282,   115,  -282,  -282,  -282,  -282,    21,
-      21,  -282,  -282,  -282,  -282,   -46,   -46,  -282,   102,   103,
-      66,  -282,  1127,   122,  -282,   143,    73,   711,   810,    25,
-    -282,   890,   513,  -282,  -282,   116,  -282,  -282,  1127,   117,
-    -282,   121,  -282,  -282,  -282,  -282,   890,    95,   159,   111,
-     152,   124,   125,  -282,  -282,  -282,  1127,  -282,   119,   126,
-     196,  -282,   123,   612,  -282,    26,  1127,   612,    95,  1127,
-    -282,  -282,  -282,   128,   111,  -282,  -282,  -282,  -282
+    1733,   -11,  -298,  -298,  -298,   115,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,   109,   -38,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,   -84,  -298,  -298,   -86,
+     -63,   -55,     4,   -74,  -298,    17,  1807,  -298,  -298,  1943,
+       7,  -298,   -30,  -298,  1658,  -298,  -298,  -298,  -298,  1943,
+    -298,  -298,    30,  -298,    67,  -298,    54,  -298,    22,  -298,
+    -298,  -298,  -298,  -298,  1807,   105,    88,  -298,   -15,  -298,
+    -298,  -298,  1298,  -298,  -298,    57,  -298,  1807,    55,   -90,
+    -298,   333,  -298,  -298,  -298,  -298,    96,  1807,   -72,  -298,
+     212,  1298,    69,  -298,  -298,  -298,  -298,  -298,  1298,  1298,
+    1298,  -298,  -298,  -298,  -298,  -298,   -18,  -298,  -298,  -298,
+      72,   -82,  1393,    70,  -298,  1298,    32,     6,  -298,   -62,
+      64,  -298,  -298,  -298,    87,    86,   -78,  -298,    73,  -298,
+    -298,  1807,   106,  1488,  -298,    76,  -298,    67,    71,    75,
+    -298,    77,    79,    80,  1105,    82,    78,  -298,  -298,   -23,
+    -298,  -298,   -57,  -298,   -86,    -3,  -298,  -298,  -298,  -298,
+     449,  -298,  -298,  -298,  -298,    89,  -298,  -298,  1200,  1298,
+    -298,    91,  -298,  -298,  -298,  -298,    -9,  -298,  -298,  1298,
+    1875,  -298,  -298,  1298,    92,  -298,  -298,  -298,  1298,  1298,
+    1298,  1298,  1298,  1298,  1298,  1298,  1298,  1298,  1298,  1298,
+    1298,  1298,  -298,  1573,    93,   -36,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,    85,  -298,  1298,  -298,  -298,    28,
+    -298,  -298,   565,  -298,  -298,  -298,  -298,  -298,  1298,  1298,
+    -298,  -298,  -298,  1298,  -298,    95,  -298,  -298,  -298,    97,
+      94,  -298,    99,  -298,  -298,  -298,  -298,    32,    32,  -298,
+    -298,  -298,  -298,   -62,   -62,  -298,    87,    86,    46,  -298,
+    1298,   106,  -298,   128,    54,   797,   913,    -1,  -298,  1010,
+     565,  -298,  -298,   100,  -298,  -298,  1298,   101,  -298,   102,
+    -298,  -298,  -298,  -298,  1010,    85,   156,    94,   134,   107,
+     104,  -298,  -298,  -298,  1298,  -298,   103,   110,   197,  -298,
+     108,   681,  -298,     1,  1298,   681,    85,  1298,  -298,  -298,
+    -298,   112,    94,  -298,  -298,  -298,  -298
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -282,  -282,  -282,  -282,  -282,  -282,  -282,    28,  -282,  -282,
-    -282,  -282,   -75,  -282,   -40,  -282,   -55,   -42,  -282,  -282,
-    -282,    16,    17,    19,  -282,   -80,  -101,  -282,  -106,   -99,
-      11,    12,  -282,  -282,  -282,   130,   157,   153,   133,  -282,
-    -282,  -262,  -282,  -282,   181,   -35,   230,  -282,  -282,   105,
-     -31,     0,  -282,  -282,  -282,   118,  -137,  -282,   -22,  -171,
-     -21,  -167,  -260,  -282,  -282,  -282,   -65,  -281,  -282,  -282,
-     -67,    22,   -20,  -282,  -282,   -43,  -282,  -282,  -282,  -282,
-    -282,  -282,  -282,  -282,  -282,   199,  -282,  -282
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,    18,  -298,  -298,
+    -298,  -298,   -93,  -298,   -61,  -298,  -109,   -60,  -298,  -298,
+    -298,   -12,    -2,   -10,  -298,   -98,  -118,  -298,  -123,  -115,
+      10,    11,  -298,  -298,  -298,   113,   130,   136,   117,  -298,
+    -298,  -282,  -298,  -298,   159,   -64,   227,  -298,  -298,    68,
+       8,     0,  -298,  -298,  -298,   111,  -151,  -298,   -37,  -193,
+     -43,  -182,  -276,  -298,  -298,  -298,   -99,  -297,  -298,  -298,
+     -85,     3,   -40,  -298,  -298,   -51,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,   190,  -298,  -298
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -184
+#define YYTABLE_NINF -202
 static const yytype_int16 yytable[] =
 {
-      54,    94,   184,   183,   139,   244,   188,    71,   220,   126,
-     248,    40,    41,    81,   212,    64,   310,   293,    59,   300,
-      82,   180,   139,   197,   204,   205,   148,   126,   181,   202,
-      87,   203,   149,    60,   300,   186,   187,   326,    72,    73,
-      74,    98,   -26,     7,    84,   189,   190,    65,    54,   213,
-     231,    54,   199,   320,   144,    78,    54,   320,    79,   206,
-     207,    54,    70,   194,    98,    71,   191,    40,    41,   195,
-     192,     2,     3,     4,    27,    28,    54,    29,   220,    31,
-     184,   247,   235,   236,   237,   252,   -76,   241,    66,    54,
-     242,   238,    67,   167,   256,    69,    72,    73,    74,    54,
-     139,   239,   101,    84,   102,   126,   250,   270,   144,    80,
-     144,   103,   241,   297,   323,   244,    62,    63,   273,   241,
-     241,   274,   279,   200,   201,   257,   258,   126,   126,   126,
-     126,   126,   126,   126,   126,   126,   126,   126,   241,   283,
-     284,   280,    88,    54,    90,    54,   285,   100,   327,   261,
-     262,   263,   264,    72,    73,    74,   208,   209,   221,   222,
-     241,   288,   259,   260,    93,   139,   265,   266,   142,   177,
-     126,   147,   167,   289,   -27,   299,   210,   193,   198,   211,
-     144,   216,   214,   224,   227,   228,  -183,   304,   232,   245,
-     299,   225,   139,   291,   249,  -131,   229,   126,   233,   286,
-     315,   272,   -28,    59,   287,   241,   303,   305,   306,   292,
-     324,   312,   313,   318,   317,    54,   316,   314,   184,   319,
-     255,     8,     9,    10,    11,   328,   267,    95,   268,   178,
-      99,   269,   179,    83,   167,    61,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,   290,   325,   307,   223,    86,   282,   294,   295,    32,
-      33,   215,    34,    35,    36,     0,    37,     0,     0,     0,
-     104,    39,   105,   106,   107,   108,   109,   167,   167,   110,
-     111,   167,   167,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   167,     0,   112,     0,
-       0,   182,     0,     0,     0,     0,     0,     0,     0,   113,
-     114,     0,   115,   167,     0,     0,     0,   167,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,   150,
-     151,   152,     0,   153,   154,   155,   156,     0,     0,     0,
+      72,   112,    99,   202,   157,   201,   266,   206,   262,   144,
+      58,    59,   238,    89,   230,   166,     7,   318,   328,   311,
+      84,   167,   157,   212,   215,   222,   223,   144,    85,   213,
+     116,    89,   318,    77,   198,   204,   205,    96,    82,   344,
+      97,   199,    87,   162,    90,    91,    92,    27,    28,   231,
+      29,   249,   217,   116,   259,   338,    88,   260,    37,   338,
+     224,   225,    90,    91,    92,    78,    72,   207,   208,    72,
+      83,   253,   254,   255,    72,   291,   102,   100,   292,    72,
+     256,   202,   238,   265,    58,    59,   270,   105,   209,   119,
+     257,   120,   210,    98,    72,   274,   268,   162,   121,   162,
+     157,   -26,   259,   102,   315,   144,   341,    72,   288,   -76,
+     259,   185,   259,   279,   280,   281,   282,    72,   262,     2,
+       3,     4,   220,   297,   221,   275,   276,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   106,   259,
+     301,   302,   298,   108,   345,    90,    91,    92,   303,    80,
+      81,   218,   219,   226,   227,   239,   240,   259,   306,   277,
+     278,    72,   111,    72,   118,   157,   283,   284,   165,   162,
+     144,   160,   195,   -27,   216,   307,   317,   211,   228,   229,
+     232,   245,   234,   246,   309,   242,   250,   251,   322,   243,
+     185,   317,   157,  -201,   247,   263,  -131,   144,   267,   290,
+      77,   333,   304,   -28,   305,   259,   324,   321,   323,   310,
+     330,   342,   331,   332,   336,   335,   285,   334,   113,   202,
+     287,   337,     8,     9,    10,    11,   346,   286,   273,   101,
+     196,   117,    79,    72,   197,   241,   343,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,   185,   312,   308,   300,   313,    31,    32,    33,
+      34,    35,    36,   325,   104,     0,    38,    39,     0,    40,
+      41,    42,   233,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,     0,    53,    54,    55,     0,   122,    57,
+     123,   124,   125,   126,   127,   185,   185,   128,   129,   185,
+     185,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   185,     0,   130,     0,     0,   200,
+       0,     0,     0,     0,     0,     0,     0,   131,   132,     0,
+     133,   185,     0,     0,     0,   185,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,   168,   169,   170,
+       0,   171,   172,   173,   174,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,     0,     0,    38,    39,   175,
+      40,    41,    42,     0,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,     0,    53,    54,    55,    56,   122,
+      57,   123,   124,   125,   126,   127,     0,     0,   128,   129,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   130,     0,     0,
+       0,   176,   177,     0,     0,     0,     0,   178,   131,   132,
+       0,   133,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,   168,   169,   170,     0,   171,   172,   173,
+     174,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,     0,     0,    38,    39,   175,    40,    41,    42,     0,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+       0,    53,    54,    55,    56,   122,    57,   123,   124,   125,
+     126,   127,     0,     0,   128,   129,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   130,     0,     0,     0,   176,   261,     0,
+       0,     0,     0,   178,   131,   132,     0,   133,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,   168,
+     169,   170,     0,   171,   172,   173,   174,     0,     0,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,     0,     0,    32,    33,   157,    34,    35,    36,     0,
-      37,     0,     0,    38,   104,    39,   105,   106,   107,   108,
-     109,     0,     0,   110,   111,     0,     0,     0,     0,     0,
+      31,    32,    33,    34,    35,    36,    37,     0,     0,    38,
+      39,   175,    40,    41,    42,     0,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,     0,    53,    54,    55,
+      56,   122,    57,   123,   124,   125,   126,   127,     0,     0,
+     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   130,
+       0,     0,     0,   176,     0,     0,     0,     0,     0,   178,
+     131,   132,     0,   133,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   168,   169,   170,     0,   171,
+     172,   173,   174,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,     0,     0,    38,    39,   175,    40,    41,
+      42,     0,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,     0,    53,    54,    55,    56,   122,    57,   123,
+     124,   125,   126,   127,     0,     0,   128,   129,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   112,     0,     0,     0,   158,   159,     0,     0,
-       0,     0,   160,   113,   114,     0,   115,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   150,   151,
-     152,     0,   153,   154,   155,   156,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-       0,     0,    32,    33,   157,    34,    35,    36,     0,    37,
-       0,     0,    38,   104,    39,   105,   106,   107,   108,   109,
-       0,     0,   110,   111,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   130,     0,     0,     0,   111,
+       0,     0,     0,     0,     0,   178,   131,   132,     0,   133,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,   168,   169,   170,     0,   171,   172,   173,   174,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,     0,
+       0,    38,    39,   175,    40,    41,    42,     0,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,     0,    53,
+      54,    55,    56,   122,    57,   123,   124,   125,   126,   127,
+       0,     0,   128,   129,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   112,     0,     0,     0,   158,   243,     0,     0,     0,
-       0,   160,   113,   114,     0,   115,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,   150,   151,   152,
-       0,   153,   154,   155,   156,     0,     0,     0,    12,    13,
+       0,   130,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   178,   131,   132,     0,   133,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,     0,
-       0,    32,    33,   157,    34,    35,    36,     0,    37,     0,
-       0,    38,   104,    39,   105,   106,   107,   108,   109,     0,
-       0,   110,   111,     0,     0,     0,     0,     0,     0,     0,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,     0,     0,    38,    39,     0,
+      40,    41,    42,     0,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,     0,    53,    54,    55,    56,   122,
+      57,   123,   124,   125,   126,   127,     0,     0,   128,   129,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     112,     0,     0,     0,   158,     0,     0,     0,     0,     0,
-     160,   113,   114,     0,   115,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   150,   151,   152,     0,
-     153,   154,   155,   156,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,     0,     0,
-      32,    33,   157,    34,    35,    36,     0,    37,     0,     0,
-      38,   104,    39,   105,   106,   107,   108,   109,     0,     0,
-     110,   111,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   112,
-       0,     0,     0,    93,     0,     0,     0,     0,     0,   160,
-     113,   114,     0,   115,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   150,   151,   152,     0,   153,
-     154,   155,   156,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,     0,     0,    32,
-      33,   157,    34,    35,    36,     0,    37,     0,     0,    38,
-     104,    39,   105,   106,   107,   108,   109,     0,     0,   110,
-     111,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   112,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   160,   113,
-     114,     0,   115,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+       0,     0,     0,   316,     2,     3,     4,   130,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,   178,   131,   132,
+       0,   133,     0,     0,     0,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,     0,     0,    32,    33,
-       0,    34,    35,    36,     0,    37,     0,     0,    38,   104,
-      39,   105,   106,   107,   108,   109,     0,     0,   110,   111,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,     0,     0,    38,    39,     0,    40,    41,    42,
+       0,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,     0,    53,    54,    55,    56,   122,    57,   123,   124,
+     125,   126,   127,     0,     0,   128,   129,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   298,     2,     3,     4,   112,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,   160,   113,   114,
-       0,   115,     0,     0,     0,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,   130,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,     0,   131,   132,     0,   133,     0,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
+      31,    32,    33,    34,    35,    36,     0,     0,     0,    38,
+      39,     0,    40,    41,    42,     0,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,     0,    53,    54,    55,
+       0,   122,    57,   123,   124,   125,   126,   127,     0,     0,
+     128,   129,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   130,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,   248,
+     131,   132,     0,   133,     0,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,     0,     0,    32,    33,
-       0,    34,    35,    36,     0,    37,     0,     0,    38,   104,
-      39,   105,   106,   107,   108,   109,     0,     0,   110,   111,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+      36,     0,     0,     0,    38,    39,     0,    40,    41,    42,
+       0,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,     0,    53,    54,    55,     0,   122,    57,   123,   124,
+     125,   126,   127,     0,     0,   128,   129,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   112,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,   113,   114,
-       0,   115,     0,    12,    13,    14,    15,    16,    17,    18,
+       0,     0,     0,     0,   130,     0,     0,   264,     8,     9,
+      10,    11,     0,     0,     0,   131,   132,     0,   133,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,    33,     0,    34,
-      35,    36,     0,    37,     0,     0,     0,   104,    39,   105,
-     106,   107,   108,   109,     0,     0,   110,   111,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   112,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,   230,   113,   114,     0,   115,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,    32,    33,     0,    34,    35,    36,
-       0,    37,     0,     0,     0,   104,    39,   105,   106,   107,
-     108,   109,     0,     0,   110,   111,     0,     0,     0,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,    38,    39,     0,    40,    41,    42,     0,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,     0,
+      53,    54,    55,     0,   122,    57,   123,   124,   125,   126,
+     127,     0,     0,   128,   129,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   112,     0,     0,   246,     8,     9,    10,
-      11,     0,     0,     0,   113,   114,     0,   115,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,     0,     0,     0,    32,    33,     0,    34,    35,
-      36,     0,    37,     0,     0,     0,   104,    39,   105,   106,
-     107,   108,   109,     0,     0,   110,   111,     0,     0,     0,
+       0,     0,   130,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,   131,   132,     0,   133,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    38,   214,     0,
+      40,    41,    42,     0,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,     0,    53,    54,    55,     0,   122,
+      57,   123,   124,   125,   126,   127,     0,     0,   128,   129,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   112,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,   113,   114,     0,   115,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,    32,   196,     0,    34,    35,    36,     0,
-      37,     0,     0,     0,   104,    39,   105,   106,   107,   108,
-     109,     0,     0,   110,   111,     0,     0,     0,     0,     0,
+       0,     0,     2,     3,     4,     0,     0,   130,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,   131,   132,
+       0,   133,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,    38,    39,     0,    40,    41,    42,     0,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,     0,
+      53,    54,    55,     0,     0,    57,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     2,     3,     4,
-       0,     0,   112,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,   113,   114,     0,   115,     0,    12,    13,
+       0,     0,     0,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   237,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,     0,     0,     0,     0,     0,     0,     0,
-       0,    32,    33,     0,    34,    35,    36,     0,    37,     2,
-       3,     4,     0,    39,     0,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,   219,     0,     0,     0,     0,
-       0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,     0,     0,    39,     0,     0,     0,     0,
-       0,     0,     0,    85,     0,     0,     1,     2,     3,     4,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    38,    39,     0,
+      40,    41,    42,     0,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,     0,    53,    54,    55,     0,     0,
+      57,     0,     0,     0,     0,     0,     0,     0,   103,     0,
+       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   289,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+       0,     0,    38,    39,     0,    40,    41,    42,     0,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,     0,
+      53,    54,    55,    56,     0,    57,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   271,    12,    13,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,     0,
-       0,    32,    33,     0,    34,    35,    36,     0,    37,     0,
-       0,    38,     0,    39,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,     0,     0,    32,
-      33,     0,    34,    35,    36,     0,    37,     0,     0,    38,
-       0,    39,     2,     3,     4,     0,     0,     0,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,    33,     0,    34,
-      35,    36,     0,    37,     8,     9,    10,    11,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,    32,    33,     0,    34,    35,    36,     0,    37,
-       0,     0,     0,   253,    39,     8,     9,    10,    11,   254,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,     0,     0,    38,    39,     0,
+      40,    41,    42,     0,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,     0,    53,    54,    55,    56,     0,
+      57,     2,     3,     4,     0,     0,     0,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
+       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
+       0,    38,    39,     0,    40,    41,    42,     0,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,     0,    53,
+      54,    55,     0,     0,    57,     8,     9,    10,    11,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,    32,    33,     0,    34,    35,    36,     0,
-      37,     0,     0,     0,     0,    39
+      31,    32,    33,    34,    35,    36,     0,     0,     0,    38,
+      39,     0,    40,    41,    42,     0,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,     0,    53,    54,    55,
+       0,   271,    57,     8,     9,    10,    11,   272,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    38,    39,     0,
+      40,    41,    42,     0,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,     0,    53,    54,    55,     0,     0,
+      57
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    68,   103,   102,    84,   172,   112,     9,   145,    84,
-     181,     0,     0,    48,    75,    59,   297,   277,    44,   281,
-      51,    89,   102,   124,    70,    71,    88,   102,    96,    99,
-      61,   101,    94,    59,   296,   110,   111,   318,    40,    41,
-      42,    76,    87,     9,    89,    68,    69,    91,    48,   110,
-     156,    51,   127,   313,    89,    94,    56,   317,    97,   105,
-     106,    61,    94,    88,    99,     9,    89,    56,    56,    94,
-      93,     4,     5,     6,    40,    41,    76,    43,   215,    45,
-     181,   180,    77,    78,    79,   191,    88,    94,    87,    89,
-      97,    86,    97,    93,   195,    88,    40,    41,    42,    99,
-     180,    96,    87,    89,    89,   180,    88,   213,   143,    59,
-     145,    96,    94,    88,    88,   282,    40,    41,    94,    94,
-      94,    97,   228,   102,   103,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,    94,   240,
-     241,    97,    91,   143,    59,   145,   245,    59,   319,   204,
-     205,   206,   207,    40,    41,    42,    72,    73,    62,    63,
-      94,    95,   202,   203,    91,   245,   208,   209,    97,    59,
-     245,    96,   172,   272,    87,   281,    74,    88,    87,    76,
-     215,    59,    90,    97,    87,    87,    91,   288,    87,    89,
-     296,    97,   272,    50,    90,    87,    97,   272,    92,    90,
-     306,    89,    87,    44,    90,    94,    90,    90,    87,   276,
-     316,    59,    88,    17,    88,   215,    97,    92,   319,    96,
-     192,    10,    11,    12,    13,    97,   210,    70,   211,    99,
-      77,   212,    99,    52,   234,     5,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,   273,   317,   296,   149,    56,   234,   278,   278,    48,
-      49,   143,    51,    52,    53,    -1,    55,    -1,    -1,    -1,
-      59,    60,    61,    62,    63,    64,    65,   277,   278,    68,
-      69,   281,   282,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   296,    -1,    87,    -1,
-      -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,
-      99,    -1,   101,   313,    -1,    -1,    -1,   317,     3,     4,
+       0,    86,    66,   121,   102,   120,   199,   130,   190,   102,
+       0,     0,   163,     9,    92,   105,     9,   299,   315,   295,
+     104,   111,   120,   105,   142,    87,    88,   120,   114,   111,
+      94,     9,   314,    44,   106,   128,   129,   111,    76,   336,
+     114,   113,   105,   107,    40,    41,    42,    40,    41,   127,
+      43,   174,   145,   117,   111,   331,   111,   114,    51,   335,
+     122,   123,    40,    41,    42,    76,    66,    85,    86,    69,
+     108,    94,    95,    96,    74,   111,   106,    69,   114,    79,
+     103,   199,   233,   198,    74,    74,   209,    79,   106,   104,
+     113,   106,   110,    76,    94,   213,   105,   161,   113,   163,
+     198,   104,   111,   106,   105,   198,   105,   107,   231,   105,
+     111,   111,   111,   222,   223,   224,   225,   117,   300,     4,
+       5,     6,   116,   246,   118,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   108,   111,
+     258,   259,   114,    76,   337,    40,    41,    42,   263,    40,
+      41,   119,   120,    89,    90,    79,    80,   111,   112,   220,
+     221,   161,   108,   163,    76,   263,   226,   227,   113,   233,
+     263,   114,    76,   104,   104,   290,   299,   105,    91,    93,
+     107,   104,    76,   104,    56,   114,   104,   109,   306,   114,
+     190,   314,   290,   108,   114,   106,   104,   290,   107,   106,
+      44,   324,   107,   104,   107,   111,   104,   107,   107,   294,
+      76,   334,   105,   109,    17,   105,   228,   114,    88,   337,
+     230,   113,    10,    11,    12,    13,   114,   229,   210,    70,
+     117,    95,     5,   233,   117,   167,   335,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,   252,   296,   291,   252,   296,    45,    46,    47,
+      48,    49,    50,   314,    74,    -1,    54,    55,    -1,    57,
+      58,    59,   161,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    82,   295,   296,    85,    86,   299,
+     300,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   314,    -1,   104,    -1,    -1,   107,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,    -1,
+     118,   331,    -1,    -1,    -1,   335,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,
+      -1,   108,   109,    -1,    -1,    -1,    -1,   114,   115,   116,
+      -1,   118,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   104,    -1,    -1,    -1,   108,   109,    -1,
+      -1,    -1,    -1,   114,   115,   116,    -1,   118,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    -1,    -1,    48,    49,    50,    51,    52,    53,    -1,
-      55,    -1,    -1,    58,    59,    60,    61,    62,    63,    64,
-      65,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,
+      45,    46,    47,    48,    49,    50,    51,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
+      -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,   114,
+     115,   116,    -1,   118,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,
-      -1,    -1,    97,    98,    99,    -1,   101,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      -1,    -1,    48,    49,    50,    51,    52,    53,    -1,    55,
-      -1,    -1,    58,    59,    60,    61,    62,    63,    64,    65,
-      -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,   108,
+      -1,    -1,    -1,    -1,    -1,   114,   115,   116,    -1,   118,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    -1,
+      -1,    54,    55,    56,    57,    58,    59,    -1,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,
-      -1,    97,    98,    99,    -1,   101,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,    26,
+      -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   114,   115,   116,    -1,   118,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    -1,
-      -1,    48,    49,    50,    51,    52,    53,    -1,    55,    -1,
-      -1,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    -1,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,
-      97,    98,    99,    -1,   101,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
-      18,    19,    20,    21,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    -1,    -1,
-      48,    49,    50,    51,    52,    53,    -1,    55,    -1,    -1,
-      58,    59,    60,    61,    62,    63,    64,    65,    -1,    -1,
-      68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      -1,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    97,
-      98,    99,    -1,   101,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    -1,    -1,    48,
-      49,    50,    51,    52,    53,    -1,    55,    -1,    -1,    58,
-      59,    60,    61,    62,    63,    64,    65,    -1,    -1,    68,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,
-      99,    -1,   101,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,     3,     4,     5,     6,   104,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,   114,   115,   116,
+      -1,   118,    -1,    -1,    -1,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    -1,    -1,    48,    49,
-      -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,    59,
-      60,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    -1,    -1,    54,    55,    -1,    57,    58,    59,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,     6,    87,     8,     9,
-      10,    11,    12,    13,    -1,    -1,    -1,    97,    98,    99,
-      -1,   101,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,    -1,   104,    10,    11,    12,    13,    -1,
+      -1,    -1,    -1,    -1,    -1,   115,   116,    -1,   118,    -1,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
+      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,   114,
+     115,   116,    -1,   118,    -1,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    -1,    -1,    48,    49,
-      -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,    59,
-      60,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,
-      -1,   101,    -1,    25,    26,    27,    28,    29,    30,    31,
+      -1,    -1,    -1,    -1,   104,    -1,    -1,   107,    10,    11,
+      12,    13,    -1,    -1,    -1,   115,   116,    -1,   118,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    -1,    51,
-      52,    53,    -1,    55,    -1,    -1,    -1,    59,    60,    61,
-      62,    63,    64,    65,    -1,    -1,    68,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    97,    98,    99,    -1,   101,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,
-      -1,    55,    -1,    -1,    -1,    59,    60,    61,    62,    63,
-      64,    65,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
+      -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    -1,    -1,    90,    10,    11,    12,
-      13,    -1,    -1,    -1,    98,    99,    -1,   101,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    48,    49,    -1,    51,    52,
-      53,    -1,    55,    -1,    -1,    -1,    59,    60,    61,    62,
-      63,    64,    65,    -1,    -1,    68,    69,    -1,    -1,    -1,
+      -1,    -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,   115,   116,    -1,   118,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    -1,    59,    60,    61,    62,    63,    64,
-      65,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     4,     5,     6,    -1,    -1,   104,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,
+      -1,   118,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
+      -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    -1,    -1,    77,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
-      -1,    -1,    87,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    98,    99,    -1,   101,    -1,    25,    26,
+      -1,    -1,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    49,    -1,    51,    52,    53,    -1,    55,     4,
-       5,     6,    -1,    60,    -1,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,
+      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    75,    -1,    77,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    -1,
-      -1,    48,    49,    -1,    51,    52,    53,    -1,    55,    -1,
-      -1,    58,    -1,    60,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    -1,    -1,    48,
-      49,    -1,    51,    52,    53,    -1,    55,    -1,    -1,    58,
-      -1,    60,     4,     5,     6,    -1,    -1,    -1,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    -1,    51,
-      52,    53,    -1,    55,    10,    11,    12,    13,    60,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,    55,
-      -1,    -1,    -1,    59,    60,    10,    11,    12,    13,    65,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    -1,
+      77,     4,     5,     6,    -1,    -1,    -1,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      73,    74,    -1,    -1,    77,    10,    11,    12,    13,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    -1,    51,    52,    53,    -1,
-      55,    -1,    -1,    -1,    -1,    60
+      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
+      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
+      -1,    76,    77,    10,    11,    12,    13,    82,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      77
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1323,36 +1429,38 @@ static const yytype_uint8 yystos[] =
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    43,
-      44,    45,    48,    49,    51,    52,    53,    55,    58,    60,
-     141,   142,   143,   144,   145,   150,   151,   152,   154,   155,
-     156,   157,   158,   161,   162,   163,   195,   196,   197,    44,
-      59,   157,    40,    41,    59,    91,    87,    97,   198,    88,
-      94,     9,    40,    41,    42,   147,   148,   153,    94,    97,
-      59,   156,   161,   155,    89,     0,   196,   161,    91,   165,
-      59,   159,   160,    91,   181,   147,   146,   149,   156,   148,
-      59,    87,    89,    96,    59,    61,    62,    63,    64,    65,
-      68,    69,    87,    98,    99,   101,   112,   113,   114,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     140,   162,    97,   164,   156,   166,   167,    96,    88,    94,
-      14,    15,    16,    18,    19,    20,    21,    50,    91,    92,
-      97,   123,   136,   137,   139,   141,   142,   162,   171,   172,
-     173,   174,   182,   183,   184,   187,   194,    59,   146,   149,
-      89,    96,    90,   140,   137,   170,   123,   123,   139,    68,
-      69,    89,    93,    88,    88,    94,    49,   137,    87,   123,
-     102,   103,    99,   101,    70,    71,   105,   106,    72,    73,
-      74,    76,    75,   110,    90,   166,    59,   168,   169,    92,
-     167,    62,    63,   160,    97,    97,   189,    87,    87,    97,
-      97,   139,    87,    92,   175,    77,    78,    79,    86,    96,
-     138,    94,    97,    92,   172,    89,    90,   140,   170,    90,
-      88,   115,   139,    59,    65,   118,   137,   123,   123,   125,
-     125,   127,   127,   127,   127,   128,   128,   132,   133,   134,
-     139,    92,    89,    94,    97,   178,   179,   180,   190,   139,
-      97,   188,   182,   137,   137,   140,    90,    90,    95,   140,
-     169,    50,   181,   173,   171,   183,   191,    88,     3,   139,
-     152,   186,   176,    90,   137,    90,    87,   186,   192,   193,
-     178,   185,    59,    88,    92,   139,    97,    88,    17,    96,
-     173,   177,   181,    88,   139,   177,   178,   170,    97
+      44,    45,    46,    47,    48,    49,    50,    51,    54,    55,
+      57,    58,    59,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    72,    73,    74,    75,    77,   158,   159,
+     160,   161,   162,   167,   168,   169,   171,   172,   173,   174,
+     175,   178,   179,   180,   212,   213,   214,    44,    76,   174,
+      40,    41,    76,   108,   104,   114,   215,   105,   111,     9,
+      40,    41,    42,   164,   165,   170,   111,   114,    76,   173,
+     178,   172,   106,     0,   213,   178,   108,   182,    76,   176,
+     177,   108,   198,   164,   163,   166,   173,   165,    76,   104,
+     106,   113,    76,    78,    79,    80,    81,    82,    85,    86,
+     104,   115,   116,   118,   129,   130,   131,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   157,   179,
+     114,   181,   173,   183,   184,   113,   105,   111,    14,    15,
+      16,    18,    19,    20,    21,    56,   108,   109,   114,   140,
+     153,   154,   156,   158,   159,   179,   188,   189,   190,   191,
+     199,   200,   201,   204,   211,    76,   163,   166,   106,   113,
+     107,   157,   154,   187,   140,   140,   156,    85,    86,   106,
+     110,   105,   105,   111,    55,   154,   104,   140,   119,   120,
+     116,   118,    87,    88,   122,   123,    89,    90,    91,    93,
+      92,   127,   107,   183,    76,   185,   186,   109,   184,    79,
+      80,   177,   114,   114,   206,   104,   104,   114,   114,   156,
+     104,   109,   192,    94,    95,    96,   103,   113,   155,   111,
+     114,   109,   189,   106,   107,   157,   187,   107,   105,   132,
+     156,    76,    82,   135,   154,   140,   140,   142,   142,   144,
+     144,   144,   144,   145,   145,   149,   150,   151,   156,   109,
+     106,   111,   114,   195,   196,   197,   207,   156,   114,   205,
+     199,   154,   154,   157,   107,   107,   112,   157,   186,    56,
+     198,   190,   188,   200,   208,   105,     3,   156,   169,   203,
+     193,   107,   154,   107,   104,   203,   209,   210,   195,   202,
+      76,   105,   109,   156,   114,   105,    17,   113,   190,   194,
+     198,   105,   156,   194,   195,   187,   114
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2327,7 +2435,7 @@ yyreduce:
             if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getStruct())
                 (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getStruct(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getTypeName()));
             else
-                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqTemporary, (yyvsp[(1) - (4)].interm.intermTypedNode)->getNominalSize(), (yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix()));
+                (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (4)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getPrecision(), EvqTemporary, (yyvsp[(1) - (4)].interm.intermTypedNode)->getNominalSize(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getSecondarySize()));
 
             if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getQualifier() == EvqConstExpr)
                 (yyval.interm.intermTypedNode)->getTypePointer()->setQualifier(EvqConstExpr);
@@ -2681,23 +2789,37 @@ yyreduce:
         } else {
             switch ((yyvsp[(1) - (1)].interm.type).type) {
             case EbtFloat:
-                if ((yyvsp[(1) - (1)].interm.type).matrix) {
-                    switch((yyvsp[(1) - (1)].interm.type).size) {
-                    case 2:                                     op = EOpConstructMat2;  break;
-                    case 3:                                     op = EOpConstructMat3;  break;
-                    case 4:                                     op = EOpConstructMat4;  break;
+                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
+                case 1:
+                    op = EOpConstructFloat; break;
+                case 2:
+                    switch((yyvsp[(1) - (1)].interm.type).secondarySize) {
+                                       case 1:                                 op = EOpConstructVec2;    break;
+                    case 2:                                 op = EOpConstructMat2;    break;
+                    case 3:                                 op = EOpConstructMat2x3;  break;
+                    case 4:                                 op = EOpConstructMat2x4;  break;
                     }
-                } else {
-                    switch((yyvsp[(1) - (1)].interm.type).size) {
-                    case 1:                                     op = EOpConstructFloat; break;
-                    case 2:                                     op = EOpConstructVec2;  break;
-                    case 3:                                     op = EOpConstructVec3;  break;
-                    case 4:                                     op = EOpConstructVec4;  break;
+                    break;
+                case 3:
+                    switch((yyvsp[(1) - (1)].interm.type).secondarySize) {
+                                       case 1:                                 op = EOpConstructVec3;    break;
+                    case 2:                                 op = EOpConstructMat3x2;  break;
+                    case 3:                                 op = EOpConstructMat3;    break;
+                    case 4:                                 op = EOpConstructMat3x4;  break;
                     }
+                    break;
+                case 4:
+                    switch((yyvsp[(1) - (1)].interm.type).secondarySize) {
+                                       case 1:                                 op = EOpConstructVec4;    break;
+                    case 2:                                 op = EOpConstructMat4x2;  break;
+                    case 3:                                 op = EOpConstructMat4x3;  break;
+                    case 4:                                 op = EOpConstructMat4;    break;
+                    }
+                    break;
                 }
                 break;
             case EbtInt:
-                switch((yyvsp[(1) - (1)].interm.type).size) {
+                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
                 case 1:                                         op = EOpConstructInt;   break;
                 case 2:       FRAG_VERT_ONLY("ivec2", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructIVec2; break;
                 case 3:       FRAG_VERT_ONLY("ivec3", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructIVec3; break;
@@ -2705,7 +2827,7 @@ yyreduce:
                 }
                 break;
             case EbtBool:
-                switch((yyvsp[(1) - (1)].interm.type).size) {
+                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
                 case 1:                                         op = EOpConstructBool;  break;
                 case 2:       FRAG_VERT_ONLY("bvec2", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructBVec2; break;
                 case 3:       FRAG_VERT_ONLY("bvec3", (yyvsp[(1) - (1)].interm.type).line); op = EOpConstructBVec3; break;
@@ -4072,7 +4194,7 @@ yyreduce:
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2, true);
+        (yyval.interm.type).setMatrix(2, 2);
     }
     break;
 
@@ -4082,7 +4204,7 @@ yyreduce:
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3, true);
+        (yyval.interm.type).setMatrix(3, 3);
     }
     break;
 
@@ -4092,20 +4214,80 @@ yyreduce:
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4, true);
+        (yyval.interm.type).setMatrix(4, 4);
     }
     break;
 
   case 151:
 
     {
+        FRAG_VERT_ONLY("mat2x3", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+    break;
+
+  case 152:
+
+    {
+        FRAG_VERT_ONLY("mat3x2", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+    break;
+
+  case 153:
+
+    {
+        FRAG_VERT_ONLY("mat2x4", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+    break;
+
+  case 154:
+
+    {
+        FRAG_VERT_ONLY("mat4x2", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+    break;
+
+  case 155:
+
+    {
+        FRAG_VERT_ONLY("mat3x4", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+    break;
+
+  case 156:
+
+    {
+        FRAG_VERT_ONLY("mat4x3", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+    break;
+
+  case 157:
+
+    {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtSampler2D, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
-  case 152:
+  case 158:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4114,7 +4296,7 @@ yyreduce:
     }
     break;
 
-  case 153:
+  case 159:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4127,7 +4309,7 @@ yyreduce:
     }
     break;
 
-  case 154:
+  case 160:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4136,7 +4318,115 @@ yyreduce:
     }
     break;
 
-  case 155:
+  case 161:
+
+    {
+        FRAG_VERT_ONLY("sampler2DArray", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSampler2DArray, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 162:
+
+    {
+        FRAG_VERT_ONLY("isampler2D", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtISampler2D, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 163:
+
+    {
+        FRAG_VERT_ONLY("isampler3D", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtISampler3D, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 164:
+
+    {
+        FRAG_VERT_ONLY("isamplerCube", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtISamplerCube, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 165:
+
+    {
+        FRAG_VERT_ONLY("isampler2DArray", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtISampler2DArray, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 166:
+
+    {
+        FRAG_VERT_ONLY("usampler2D", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUSampler2D, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 167:
+
+    {
+        FRAG_VERT_ONLY("usampler3D", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUSampler3D, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 168:
+
+    {
+        FRAG_VERT_ONLY("usamplerCube", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUSamplerCube, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 169:
+
+    {
+        FRAG_VERT_ONLY("usampler2DArray", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUSampler2DArray, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 170:
+
+    {
+        FRAG_VERT_ONLY("sampler2DShadow", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSampler2DShadow, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 171:
+
+    {
+        FRAG_VERT_ONLY("samplerCubeShadow", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSamplerCubeShadow, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 172:
+
+    {
+        FRAG_VERT_ONLY("sampler2DArrayShadow", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSampler2DArrayShadow, qual, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 173:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4145,7 +4435,7 @@ yyreduce:
     }
     break;
 
-  case 156:
+  case 174:
 
     {
         //
@@ -4159,12 +4449,12 @@ yyreduce:
     }
     break;
 
-  case 157:
+  case 175:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 158:
+  case 176:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
@@ -4182,12 +4472,12 @@ yyreduce:
     }
     break;
 
-  case 159:
+  case 177:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 160:
+  case 178:
 
     {
         TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
@@ -4197,14 +4487,14 @@ yyreduce:
     }
     break;
 
-  case 161:
+  case 179:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 162:
+  case 180:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4220,7 +4510,7 @@ yyreduce:
     }
     break;
 
-  case 163:
+  case 181:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4234,8 +4524,8 @@ yyreduce:
             //
             TType* type = (*(yyval.interm.typeList))[i].type;
             type->setBasicType((yyvsp[(1) - (3)].interm.type).type);
-            type->setNominalSize((yyvsp[(1) - (3)].interm.type).size);
-            type->setMatrix((yyvsp[(1) - (3)].interm.type).matrix);
+            type->setNominalSize((yyvsp[(1) - (3)].interm.type).primarySize);
+            type->setSecondarySize((yyvsp[(1) - (3)].interm.type).secondarySize);
             type->setPrecision((yyvsp[(1) - (3)].interm.type).precision);
 
             // don't allow arrays of arrays
@@ -4253,7 +4543,7 @@ yyreduce:
     }
     break;
 
-  case 164:
+  case 182:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4261,14 +4551,14 @@ yyreduce:
     }
     break;
 
-  case 165:
+  case 183:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 166:
+  case 184:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4280,7 +4570,7 @@ yyreduce:
     }
     break;
 
-  case 167:
+  case 185:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4297,67 +4587,67 @@ yyreduce:
     }
     break;
 
-  case 168:
+  case 186:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 169:
+  case 187:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 170:
+  case 188:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
-  case 171:
+  case 189:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 172:
+  case 190:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 173:
+  case 191:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 174:
+  case 192:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 175:
+  case 193:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 176:
+  case 194:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 177:
+  case 195:
 
     { (yyval.interm.intermAggregate) = 0; }
     break;
 
-  case 178:
+  case 196:
 
     { context->symbolTable.push(); }
     break;
 
-  case 179:
+  case 197:
 
     { context->symbolTable.pop(); }
     break;
 
-  case 180:
+  case 198:
 
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
@@ -4368,44 +4658,44 @@ yyreduce:
     }
     break;
 
-  case 181:
+  case 199:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 182:
+  case 200:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 183:
+  case 201:
 
     { context->symbolTable.push(); }
     break;
 
-  case 184:
+  case 202:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 185:
+  case 203:
 
     { context->symbolTable.push(); }
     break;
 
-  case 186:
+  case 204:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 187:
+  case 205:
 
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 188:
+  case 206:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4416,31 +4706,31 @@ yyreduce:
     }
     break;
 
-  case 189:
+  case 207:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 190:
+  case 208:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 191:
+  case 209:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 192:
+  case 210:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 193:
+  case 211:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4449,7 +4739,7 @@ yyreduce:
     }
     break;
 
-  case 194:
+  case 212:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4457,7 +4747,7 @@ yyreduce:
     }
     break;
 
-  case 195:
+  case 213:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4465,7 +4755,7 @@ yyreduce:
     }
     break;
 
-  case 196:
+  case 214:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4474,7 +4764,7 @@ yyreduce:
     }
     break;
 
-  case 197:
+  case 215:
 
     {
         TIntermNode* intermNode;
@@ -4492,12 +4782,12 @@ yyreduce:
     }
     break;
 
-  case 198:
+  case 216:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 199:
+  case 217:
 
     {
         context->symbolTable.pop();
@@ -4506,12 +4796,12 @@ yyreduce:
     }
     break;
 
-  case 200:
+  case 218:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 201:
+  case 219:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4522,12 +4812,12 @@ yyreduce:
     }
     break;
 
-  case 202:
+  case 220:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 203:
+  case 221:
 
     {
         context->symbolTable.pop();
@@ -4536,35 +4826,35 @@ yyreduce:
     }
     break;
 
-  case 204:
+  case 222:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 205:
+  case 223:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 206:
+  case 224:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 207:
+  case 225:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 208:
+  case 226:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4572,7 +4862,7 @@ yyreduce:
     }
     break;
 
-  case 209:
+  case 227:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4580,7 +4870,7 @@ yyreduce:
     }
     break;
 
-  case 210:
+  case 228:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4591,7 +4881,7 @@ yyreduce:
     }
     break;
 
-  case 211:
+  case 229:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4602,7 +4892,7 @@ yyreduce:
     }
     break;
 
-  case 212:
+  case 230:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4613,7 +4903,7 @@ yyreduce:
     }
     break;
 
-  case 213:
+  case 231:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4628,7 +4918,7 @@ yyreduce:
     }
     break;
 
-  case 214:
+  case 232:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4636,7 +4926,7 @@ yyreduce:
     }
     break;
 
-  case 215:
+  case 233:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4644,7 +4934,7 @@ yyreduce:
     }
     break;
 
-  case 216:
+  case 234:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4652,21 +4942,21 @@ yyreduce:
     }
     break;
 
-  case 217:
+  case 235:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 218:
+  case 236:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 219:
+  case 237:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4755,7 +5045,7 @@ yyreduce:
     }
     break;
 
-  case 220:
+  case 238:
 
     {
         //?? Check that all paths return a value if return type != void ?
index 77bb70c..6ec3a32 100644 (file)
      INOUT_QUAL = 297,
      UNIFORM = 298,
      VARYING = 299,
-     CENTROID = 300,
-     FLAT = 301,
-     SMOOTH = 302,
-     STRUCT = 303,
-     VOID_TYPE = 304,
-     WHILE = 305,
-     SAMPLER2D = 306,
-     SAMPLERCUBE = 307,
-     SAMPLER_EXTERNAL_OES = 308,
-     SAMPLER2DRECT = 309,
-     SAMPLER3D = 310,
-     SAMPLER3DRECT = 311,
-     SAMPLER2DSHADOW = 312,
-     LAYOUT = 313,
-     IDENTIFIER = 314,
-     TYPE_NAME = 315,
-     FLOATCONSTANT = 316,
-     INTCONSTANT = 317,
-     UINTCONSTANT = 318,
-     BOOLCONSTANT = 319,
-     FIELD_SELECTION = 320,
-     LEFT_OP = 321,
-     RIGHT_OP = 322,
-     INC_OP = 323,
-     DEC_OP = 324,
-     LE_OP = 325,
-     GE_OP = 326,
-     EQ_OP = 327,
-     NE_OP = 328,
-     AND_OP = 329,
-     OR_OP = 330,
-     XOR_OP = 331,
-     MUL_ASSIGN = 332,
-     DIV_ASSIGN = 333,
-     ADD_ASSIGN = 334,
-     MOD_ASSIGN = 335,
-     LEFT_ASSIGN = 336,
-     RIGHT_ASSIGN = 337,
-     AND_ASSIGN = 338,
-     XOR_ASSIGN = 339,
-     OR_ASSIGN = 340,
-     SUB_ASSIGN = 341,
-     LEFT_PAREN = 342,
-     RIGHT_PAREN = 343,
-     LEFT_BRACKET = 344,
-     RIGHT_BRACKET = 345,
-     LEFT_BRACE = 346,
-     RIGHT_BRACE = 347,
-     DOT = 348,
-     COMMA = 349,
-     COLON = 350,
-     EQUAL = 351,
-     SEMICOLON = 352,
-     BANG = 353,
-     DASH = 354,
-     TILDE = 355,
-     PLUS = 356,
-     STAR = 357,
-     SLASH = 358,
-     PERCENT = 359,
-     LEFT_ANGLE = 360,
-     RIGHT_ANGLE = 361,
-     VERTICAL_BAR = 362,
-     CARET = 363,
-     AMPERSAND = 364,
-     QUESTION = 365
+     MATRIX2x3 = 300,
+     MATRIX3x2 = 301,
+     MATRIX2x4 = 302,
+     MATRIX4x2 = 303,
+     MATRIX3x4 = 304,
+     MATRIX4x3 = 305,
+     CENTROID = 306,
+     FLAT = 307,
+     SMOOTH = 308,
+     STRUCT = 309,
+     VOID_TYPE = 310,
+     WHILE = 311,
+     SAMPLER2D = 312,
+     SAMPLERCUBE = 313,
+     SAMPLER_EXTERNAL_OES = 314,
+     SAMPLER2DRECT = 315,
+     SAMPLER2DARRAY = 316,
+     ISAMPLER2D = 317,
+     ISAMPLER3D = 318,
+     ISAMPLERCUBE = 319,
+     ISAMPLER2DARRAY = 320,
+     USAMPLER2D = 321,
+     USAMPLER3D = 322,
+     USAMPLERCUBE = 323,
+     USAMPLER2DARRAY = 324,
+     SAMPLER3D = 325,
+     SAMPLER3DRECT = 326,
+     SAMPLER2DSHADOW = 327,
+     SAMPLERCUBESHADOW = 328,
+     SAMPLER2DARRAYSHADOW = 329,
+     LAYOUT = 330,
+     IDENTIFIER = 331,
+     TYPE_NAME = 332,
+     FLOATCONSTANT = 333,
+     INTCONSTANT = 334,
+     UINTCONSTANT = 335,
+     BOOLCONSTANT = 336,
+     FIELD_SELECTION = 337,
+     LEFT_OP = 338,
+     RIGHT_OP = 339,
+     INC_OP = 340,
+     DEC_OP = 341,
+     LE_OP = 342,
+     GE_OP = 343,
+     EQ_OP = 344,
+     NE_OP = 345,
+     AND_OP = 346,
+     OR_OP = 347,
+     XOR_OP = 348,
+     MUL_ASSIGN = 349,
+     DIV_ASSIGN = 350,
+     ADD_ASSIGN = 351,
+     MOD_ASSIGN = 352,
+     LEFT_ASSIGN = 353,
+     RIGHT_ASSIGN = 354,
+     AND_ASSIGN = 355,
+     XOR_ASSIGN = 356,
+     OR_ASSIGN = 357,
+     SUB_ASSIGN = 358,
+     LEFT_PAREN = 359,
+     RIGHT_PAREN = 360,
+     LEFT_BRACKET = 361,
+     RIGHT_BRACKET = 362,
+     LEFT_BRACE = 363,
+     RIGHT_BRACE = 364,
+     DOT = 365,
+     COMMA = 366,
+     COLON = 367,
+     EQUAL = 368,
+     SEMICOLON = 369,
+     BANG = 370,
+     DASH = 371,
+     TILDE = 372,
+     PLUS = 373,
+     STAR = 374,
+     SLASH = 375,
+     PERCENT = 376,
+     LEFT_ANGLE = 377,
+     RIGHT_ANGLE = 378,
+     VERTICAL_BAR = 379,
+     CARET = 380,
+     AMPERSAND = 381,
+     QUESTION = 382
    };
 #endif
 
index c9da525..f71eea4 100644 (file)
@@ -44,10 +44,10 @@ TString TType::getCompleteString() const
         stream << getQualifierString() << " " << getPrecisionString() << " ";
     if (array)
         stream << "array of ";
-    if (matrix)
-        stream << size << "X" << size << " matrix of ";
-    else if (size > 1)
-        stream << size << "-component vector of ";
+    if (isMatrix())
+        stream << primarySize << "X" << secondarySize << " matrix of ";
+       else if(primarySize > 1)
+               stream << primarySize << "-component vector of ";
 
     stream << getBasicString();
     return stream.str();
index 03fd15c..243a93d 100644 (file)
@@ -161,7 +161,13 @@ enum TOperator {
     EOpConstructUVec3,
     EOpConstructUVec4,
     EOpConstructMat2,
+    EOpConstructMat2x3,
+    EOpConstructMat2x4,
+    EOpConstructMat3x2,
     EOpConstructMat3,
+    EOpConstructMat3x4,
+    EOpConstructMat4x2,
+    EOpConstructMat4x3,
     EOpConstructMat4,
     EOpConstructStruct,
 
@@ -247,6 +253,7 @@ public:
     TQualifier getQualifier() const { return type.getQualifier(); }
     TPrecision getPrecision() const { return type.getPrecision(); }
     int getNominalSize() const { return type.getNominalSize(); }
+       int getSecondarySize() const { return type.getSecondarySize(); }
     
     bool isMatrix() const { return type.isMatrix(); }
     bool isArray()  const { return type.isArray(); }