OSDN Git Service

Adding Interface Blocks to glsl parser
authorAlexis Hetu <sugoi@google.com>
Thu, 11 Jun 2015 21:11:06 +0000 (17:11 -0400)
committerAlexis Hétu <sugoi@google.com>
Fri, 12 Jun 2015 20:18:14 +0000 (20:18 +0000)
Added code to parse interface blocks and the
corresponding layout qualifiers to the glsl parser.

Change-Id: Idfcbf08f3f877ea9641ae611e6bddd2be1ffb952
Reviewed-on: https://swiftshader-review.googlesource.com/3480
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/compiler/ParseHelper.cpp
src/OpenGL/compiler/ParseHelper.h
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_tab.cpp

index 5c95f15..9f86042 100644 (file)
@@ -1762,6 +1762,42 @@ TIntermAggregate *TParseContext::parseArrayInitDeclarator(const TPublicType &pub
        }
 }
 
+void TParseContext::parseGlobalLayoutQualifier(const TPublicType &typeQualifier)
+{
+       if(shaderVersion < 300)
+       {
+               error(typeQualifier.line, "layout qualifiers supported in GLSL ES 3.00 only", "layout");
+               recover();
+               return;
+       }
+
+       if(typeQualifier.qualifier != EvqUniform)
+       {
+               error(typeQualifier.line, "invalid qualifier:", getQualifierString(typeQualifier.qualifier), "global layout must be uniform");
+               recover();
+               return;
+       }
+
+       const TLayoutQualifier layoutQualifier = typeQualifier.layoutQualifier;
+       ASSERT(!layoutQualifier.isEmpty());
+
+       if(layoutLocationErrorCheck(typeQualifier.line, typeQualifier.layoutQualifier))
+       {
+               recover();
+               return;
+       }
+
+       if(layoutQualifier.matrixPacking != EmpUnspecified)
+       {
+               defaultMatrixPacking = layoutQualifier.matrixPacking;
+       }
+
+       if(layoutQualifier.blockStorage != EbsUnspecified)
+       {
+               defaultBlockStorage = layoutQualifier.blockStorage;
+       }
+}
+
 // This function is used to test for the correctness of the parameters passed to various constructor functions
 // and also convert them to the right datatype if it is allowed and required.
 //
@@ -1981,6 +2017,146 @@ TIntermTyped* TParseContext::addConstStruct(const TString& identifier, TIntermTy
 }
 
 //
+// Interface/uniform blocks
+//
+TIntermAggregate* TParseContext::addInterfaceBlock(const TPublicType& typeQualifier, const TSourceLoc& nameLine, const TString& blockName, TFieldList* fieldList,
+                                                   const TString* instanceName, const TSourceLoc& instanceLine, TIntermTyped* arrayIndex, const TSourceLoc& arrayIndexLine)
+{
+       if(reservedErrorCheck(nameLine, blockName))
+               recover();
+
+       if(typeQualifier.qualifier != EvqUniform)
+       {
+               error(typeQualifier.line, "invalid qualifier:", getQualifierString(typeQualifier.qualifier), "interface blocks must be uniform");
+               recover();
+       }
+
+       TLayoutQualifier blockLayoutQualifier = typeQualifier.layoutQualifier;
+       if(layoutLocationErrorCheck(typeQualifier.line, blockLayoutQualifier))
+       {
+               recover();
+       }
+
+       if(blockLayoutQualifier.matrixPacking == EmpUnspecified)
+       {
+               blockLayoutQualifier.matrixPacking = defaultMatrixPacking;
+       }
+
+       if(blockLayoutQualifier.blockStorage == EbsUnspecified)
+       {
+               blockLayoutQualifier.blockStorage = defaultBlockStorage;
+       }
+
+       TSymbol* blockNameSymbol = new TSymbol(&blockName);
+       if(!symbolTable.declare(*blockNameSymbol)) {
+               error(nameLine, "redefinition", blockName.c_str(), "interface block name");
+               recover();
+       }
+
+       // check for sampler types and apply layout qualifiers
+       for(size_t memberIndex = 0; memberIndex < fieldList->size(); ++memberIndex) {
+               TField* field = (*fieldList)[memberIndex];
+               TType* fieldType = field->type();
+               if(IsSampler(fieldType->getBasicType())) {
+                       error(field->line(), "unsupported type", fieldType->getBasicString(), "sampler types are not allowed in interface blocks");
+                       recover();
+               }
+
+               const TQualifier qualifier = fieldType->getQualifier();
+               switch(qualifier)
+               {
+               case EvqGlobal:
+               case EvqUniform:
+                       break;
+               default:
+                       error(field->line(), "invalid qualifier on interface block member", getQualifierString(qualifier));
+                       recover();
+                       break;
+               }
+
+               // check layout qualifiers
+               TLayoutQualifier fieldLayoutQualifier = fieldType->getLayoutQualifier();
+               if(layoutLocationErrorCheck(field->line(), fieldLayoutQualifier))
+               {
+                       recover();
+               }
+
+               if(fieldLayoutQualifier.blockStorage != EbsUnspecified)
+               {
+                       error(field->line(), "invalid layout qualifier:", getBlockStorageString(fieldLayoutQualifier.blockStorage), "cannot be used here");
+                       recover();
+               }
+
+               if(fieldLayoutQualifier.matrixPacking == EmpUnspecified)
+               {
+                       fieldLayoutQualifier.matrixPacking = blockLayoutQualifier.matrixPacking;
+               }
+               else if(!fieldType->isMatrix())
+               {
+                       error(field->line(), "invalid layout qualifier:", getMatrixPackingString(fieldLayoutQualifier.matrixPacking), "can only be used on matrix types");
+                       recover();
+               }
+
+               fieldType->setLayoutQualifier(fieldLayoutQualifier);
+       }
+
+       // add array index
+       int arraySize = 0;
+       if(arrayIndex != NULL)
+       {
+               if(arraySizeErrorCheck(arrayIndexLine, arrayIndex, arraySize))
+                       recover();
+       }
+
+       TInterfaceBlock* interfaceBlock = new TInterfaceBlock(&blockName, fieldList, instanceName, arraySize, blockLayoutQualifier);
+       TType interfaceBlockType(interfaceBlock, typeQualifier.qualifier, blockLayoutQualifier, arraySize);
+
+       TString symbolName = "";
+       int symbolId = 0;
+
+       if(!instanceName)
+       {
+               // define symbols for the members of the interface block
+               for(size_t memberIndex = 0; memberIndex < fieldList->size(); ++memberIndex)
+               {
+                       TField* field = (*fieldList)[memberIndex];
+                       TType* fieldType = field->type();
+
+                       // set parent pointer of the field variable
+                       fieldType->setInterfaceBlock(interfaceBlock);
+
+                       TVariable* fieldVariable = new TVariable(&field->name(), *fieldType);
+                       fieldVariable->setQualifier(typeQualifier.qualifier);
+
+                       if(!symbolTable.declare(*fieldVariable)) {
+                               error(field->line(), "redefinition", field->name().c_str(), "interface block member name");
+                               recover();
+                       }
+               }
+       }
+       else
+       {
+               // add a symbol for this interface block
+               TVariable* instanceTypeDef = new TVariable(instanceName, interfaceBlockType, false);
+               instanceTypeDef->setQualifier(typeQualifier.qualifier);
+
+               if(!symbolTable.declare(*instanceTypeDef)) {
+                       error(instanceLine, "redefinition", instanceName->c_str(), "interface block instance name");
+                       recover();
+               }
+
+               symbolId = instanceTypeDef->getUniqueId();
+               symbolName = instanceTypeDef->getName();
+       }
+
+       TIntermAggregate *aggregate = intermediate.makeAggregate(intermediate.addSymbol(symbolId, symbolName, interfaceBlockType, typeQualifier.line), nameLine);
+       aggregate->setOp(EOpDeclaration);
+
+       exitStructDeclaration();
+       return aggregate;
+}
+
+//
 // Parse an array index expression
 //
 TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression, const TSourceLoc &location, TIntermTyped *indexExpression)
index cac1647..fa31481 100644 (file)
@@ -160,6 +160,7 @@ struct TParseContext {
                                                   const TString &identifier, const TSourceLoc &indexLocation, TIntermTyped *indexExpression,
                                                const TSourceLoc &initLocation, TIntermTyped *initializer);
 
+    void parseGlobalLayoutQualifier(const TPublicType &typeQualifier);
     TIntermTyped* addConstructor(TIntermNode*, const TType*, TOperator, TFunction*, TSourceLoc);
     TIntermTyped* foldConstConstructor(TIntermAggregate* aggrNode, const TType& type);
     TIntermTyped* addConstVectorNode(TVectorFields&, TIntermTyped*, TSourceLoc);
@@ -172,6 +173,9 @@ struct TParseContext {
     TFieldList *addStructDeclaratorList(const TPublicType &typeSpecifier, TFieldList *fieldList);
     TPublicType addStructure(const TSourceLoc &structLine, const TSourceLoc &nameLine, const TString *structName, TFieldList *fieldList);
 
+    TIntermAggregate* addInterfaceBlock(const TPublicType& typeQualifier, const TSourceLoc& nameLine, const TString& blockName, TFieldList* fieldList,
+                                        const TString* instanceName, const TSourceLoc& instanceLine, TIntermTyped* arrayIndex, const TSourceLoc& arrayIndexLine);
+
     TLayoutQualifier parseLayoutQualifier(const TString &qualifierType, const TSourceLoc& qualifierTypeLine);
     TLayoutQualifier parseLayoutQualifier(const TString &qualifierType, const TSourceLoc& qualifierTypeLine, const TString &intValueString, int intValue, const TSourceLoc& intValueLine);
     TLayoutQualifier joinLayoutQualifiers(TLayoutQualifier leftQualifier, TLayoutQualifier rightQualifier);
index 3cb9fa8..f483d2c 100644 (file)
@@ -183,6 +183,8 @@ extern void yyerror(TParseContext* context, const char* reason);
 %type <interm> function_call_header_with_parameters function_call_header_no_parameters function_call_generic function_prototype
 %type <interm> function_call_or_method
 
+%type <lex> enter_struct
+
 %start translation_unit
 %%
 
@@ -888,6 +890,14 @@ constant_expression
     }
     ;
 
+enter_struct
+    : IDENTIFIER LEFT_BRACE {
+        if (context->enterStructDeclaration($1.line, *$1.string))
+            context->recover();
+        $$ = $1;
+    }
+    ;
+
 declaration
     : function_prototype SEMICOLON   {
         TFunction &function = *($1.function);
@@ -929,6 +939,22 @@ declaration
         }
         $$ = 0;
     }
+    | type_qualifier enter_struct struct_declaration_list RIGHT_BRACE SEMICOLON {
+        ES3_ONLY(getQualifierString($1.qualifier), $1.line);
+        $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, NULL, $1.line, NULL, $1.line);
+    }
+    | type_qualifier enter_struct struct_declaration_list RIGHT_BRACE IDENTIFIER SEMICOLON {
+        ES3_ONLY(getQualifierString($1.qualifier), $1.line);
+        $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, $5.string, $5.line, NULL, $1.line);
+    }
+    | type_qualifier enter_struct struct_declaration_list RIGHT_BRACE IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET SEMICOLON {
+        ES3_ONLY(getQualifierString($1.qualifier), $1.line);
+        $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, $5.string, $5.line, $7, $6.line);
+    }
+    | type_qualifier SEMICOLON {
+        context->parseGlobalLayoutQualifier($1);
+        $$ = 0;
+    }
     ;
 
 function_prototype
index 9e919de..9553e09 100644 (file)
@@ -554,18 +554,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  107
+#define YYFINAL  110
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2112
+#define YYLAST   2377
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  89
+#define YYNNTS  90
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  258
+#define YYNRULES  263
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  382
+#define YYNSTATES  396
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -631,36 +631,37 @@ static const yytype_uint16 yyprhs[] =
      138,   142,   146,   148,   152,   156,   158,   162,   164,   168,
      170,   174,   176,   180,   182,   186,   188,   192,   194,   200,
      202,   206,   208,   210,   212,   214,   216,   218,   220,   222,
-     224,   226,   228,   230,   234,   236,   239,   242,   247,   250,
-     252,   254,   257,   261,   265,   268,   274,   278,   281,   285,
-     288,   289,   291,   293,   295,   297,   299,   303,   310,   318,
-     327,   333,   335,   338,   344,   351,   359,   364,   367,   369,
-     372,   374,   376,   378,   380,   382,   385,   387,   390,   392,
-     394,   397,   399,   401,   403,   406,   409,   411,   413,   416,
-     418,   420,   422,   427,   429,   433,   435,   439,   443,   445,
-     450,   452,   454,   456,   458,   460,   462,   464,   466,   468,
-     470,   472,   474,   476,   478,   480,   482,   484,   486,   488,
-     490,   492,   494,   496,   498,   500,   502,   504,   506,   508,
-     510,   512,   514,   516,   518,   520,   522,   524,   526,   528,
-     530,   532,   534,   536,   538,   539,   546,   547,   553,   555,
-     558,   562,   567,   569,   573,   575,   580,   582,   584,   586,
-     588,   590,   592,   594,   596,   598,   601,   602,   603,   609,
-     611,   613,   614,   617,   618,   621,   624,   628,   630,   633,
-     635,   638,   644,   648,   650,   652,   657,   658,   665,   666,
-     675,   676,   684,   686,   688,   690,   691,   694,   698,   701,
-     704,   707,   711,   714,   716,   719,   721,   723,   724
+     224,   226,   228,   230,   234,   236,   239,   242,   245,   250,
+     256,   263,   273,   276,   279,   281,   283,   286,   290,   294,
+     297,   303,   307,   310,   314,   317,   318,   320,   322,   324,
+     326,   328,   332,   339,   347,   356,   362,   364,   367,   373,
+     380,   388,   393,   396,   398,   401,   403,   405,   407,   409,
+     411,   414,   416,   419,   421,   423,   426,   428,   430,   432,
+     435,   438,   440,   442,   445,   447,   449,   451,   456,   458,
+     462,   464,   468,   472,   474,   479,   481,   483,   485,   487,
+     489,   491,   493,   495,   497,   499,   501,   503,   505,   507,
+     509,   511,   513,   515,   517,   519,   521,   523,   525,   527,
+     529,   531,   533,   535,   537,   539,   541,   543,   545,   547,
+     549,   551,   553,   555,   557,   559,   561,   563,   565,   567,
+     568,   575,   576,   582,   584,   587,   591,   596,   598,   602,
+     604,   609,   611,   613,   615,   617,   619,   621,   623,   625,
+     627,   630,   631,   632,   638,   640,   642,   643,   646,   647,
+     650,   653,   657,   659,   662,   664,   667,   673,   677,   679,
+     681,   686,   687,   694,   695,   704,   705,   713,   715,   717,
+     719,   720,   723,   727,   730,   733,   736,   740,   743,   745,
+     748,   750,   752,   753
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     213,     0,    -1,    76,    -1,   129,    -1,    79,    -1,    80,
+     214,     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,   180,
+     154,    -1,   137,   111,   154,    -1,   139,   104,    -1,   181,
       -1,    76,    -1,    82,    -1,   131,    -1,    85,   140,    -1,
       86,   140,    -1,   141,   140,    -1,   118,    -1,   116,    -1,
      115,    -1,   117,    -1,   140,    -1,   142,   119,   140,    -1,
@@ -677,87 +678,91 @@ static const yytype_int16 yyrhs[] =
      153,    -1,   140,   155,   154,    -1,   113,    -1,    94,    -1,
       95,    -1,    97,    -1,    96,    -1,   103,    -1,    98,    -1,
       99,    -1,   100,    -1,   101,    -1,   102,    -1,   154,    -1,
-     156,   111,   154,    -1,   153,    -1,   159,   114,    -1,   167,
-     114,    -1,     7,   175,   179,   114,    -1,   160,   105,    -1,
-     162,    -1,   161,    -1,   162,   164,    -1,   161,   111,   164,
-      -1,   169,    76,   104,    -1,   174,    76,    -1,   174,    76,
-     106,   157,   107,    -1,   171,   165,   163,    -1,   165,   163,
-      -1,   171,   165,   166,    -1,   165,   166,    -1,    -1,    40,
-      -1,    41,    -1,    42,    -1,   174,    -1,   168,    -1,   167,
-     111,    76,    -1,   167,   111,    76,   106,   157,   107,    -1,
-     167,   111,    76,   106,   107,   113,   188,    -1,   167,   111,
-      76,   106,   157,   107,   113,   188,    -1,   167,   111,    76,
-     113,   188,    -1,   169,    -1,   169,    76,    -1,   169,    76,
-     106,   157,   107,    -1,   169,    76,   106,   107,   113,   188,
-      -1,   169,    76,   106,   157,   107,   113,   188,    -1,   169,
-      76,   113,   188,    -1,     3,    76,    -1,   174,    -1,   172,
-     174,    -1,    53,    -1,    52,    -1,     9,    -1,     8,    -1,
-      44,    -1,     3,    44,    -1,   173,    -1,   170,   173,    -1,
-     170,    -1,   176,    -1,   176,   173,    -1,     9,    -1,    40,
-      -1,    41,    -1,    51,    40,    -1,    51,    41,    -1,    43,
-      -1,   179,    -1,   175,   179,    -1,     4,    -1,     5,    -1,
-       6,    -1,    75,   104,   177,   105,    -1,   178,    -1,   177,
-     111,   178,    -1,    76,    -1,    76,   113,    79,    -1,    76,
-     113,    80,    -1,   180,    -1,   180,   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,
-      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,   181,    -1,    77,    -1,    -1,    54,
-      76,   108,   182,   184,   109,    -1,    -1,    54,   108,   183,
-     184,   109,    -1,   185,    -1,   184,   185,    -1,   174,   186,
-     114,    -1,   172,   174,   186,   114,    -1,   187,    -1,   186,
-     111,   187,    -1,    76,    -1,    76,   106,   157,   107,    -1,
-     154,    -1,   158,    -1,   192,    -1,   191,    -1,   189,    -1,
-     201,    -1,   202,    -1,   205,    -1,   212,    -1,   108,   109,
-      -1,    -1,    -1,   108,   193,   200,   194,   109,    -1,   199,
-      -1,   191,    -1,    -1,   197,   199,    -1,    -1,   198,   191,
-      -1,   108,   109,    -1,   108,   200,   109,    -1,   190,    -1,
-     200,   190,    -1,   114,    -1,   156,   114,    -1,    19,   104,
-     156,   105,   203,    -1,   196,    17,   196,    -1,   196,    -1,
-     156,    -1,   169,    76,   113,   188,    -1,    -1,    56,   104,
-     206,   204,   105,   195,    -1,    -1,    16,   207,   196,    56,
-     104,   156,   105,   114,    -1,    -1,    18,   104,   208,   209,
-     211,   105,   195,    -1,   201,    -1,   189,    -1,   204,    -1,
-      -1,   210,   114,    -1,   210,   114,   156,    -1,    15,   114,
-      -1,    14,   114,    -1,    21,   114,    -1,    21,   156,   114,
-      -1,    20,   114,    -1,   214,    -1,   213,   214,    -1,   215,
-      -1,   158,    -1,    -1,   159,   216,   199,    -1
+     156,   111,   154,    -1,   153,    -1,    76,   108,    -1,   160,
+     114,    -1,   168,   114,    -1,     7,   176,   180,   114,    -1,
+     173,   158,   185,   109,   114,    -1,   173,   158,   185,   109,
+      76,   114,    -1,   173,   158,   185,   109,    76,   106,   157,
+     107,   114,    -1,   173,   114,    -1,   161,   105,    -1,   163,
+      -1,   162,    -1,   163,   165,    -1,   162,   111,   165,    -1,
+     170,    76,   104,    -1,   175,    76,    -1,   175,    76,   106,
+     157,   107,    -1,   172,   166,   164,    -1,   166,   164,    -1,
+     172,   166,   167,    -1,   166,   167,    -1,    -1,    40,    -1,
+      41,    -1,    42,    -1,   175,    -1,   169,    -1,   168,   111,
+      76,    -1,   168,   111,    76,   106,   157,   107,    -1,   168,
+     111,    76,   106,   107,   113,   189,    -1,   168,   111,    76,
+     106,   157,   107,   113,   189,    -1,   168,   111,    76,   113,
+     189,    -1,   170,    -1,   170,    76,    -1,   170,    76,   106,
+     157,   107,    -1,   170,    76,   106,   107,   113,   189,    -1,
+     170,    76,   106,   157,   107,   113,   189,    -1,   170,    76,
+     113,   189,    -1,     3,    76,    -1,   175,    -1,   173,   175,
+      -1,    53,    -1,    52,    -1,     9,    -1,     8,    -1,    44,
+      -1,     3,    44,    -1,   174,    -1,   171,   174,    -1,   171,
+      -1,   177,    -1,   177,   174,    -1,     9,    -1,    40,    -1,
+      41,    -1,    51,    40,    -1,    51,    41,    -1,    43,    -1,
+     180,    -1,   176,   180,    -1,     4,    -1,     5,    -1,     6,
+      -1,    75,   104,   178,   105,    -1,   179,    -1,   178,   111,
+     179,    -1,    76,    -1,    76,   113,    79,    -1,    76,   113,
+      80,    -1,   181,    -1,   181,   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,    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,   182,    -1,    77,    -1,    -1,    54,    76,
+     108,   183,   185,   109,    -1,    -1,    54,   108,   184,   185,
+     109,    -1,   186,    -1,   185,   186,    -1,   175,   187,   114,
+      -1,   173,   175,   187,   114,    -1,   188,    -1,   187,   111,
+     188,    -1,    76,    -1,    76,   106,   157,   107,    -1,   154,
+      -1,   159,    -1,   193,    -1,   192,    -1,   190,    -1,   202,
+      -1,   203,    -1,   206,    -1,   213,    -1,   108,   109,    -1,
+      -1,    -1,   108,   194,   201,   195,   109,    -1,   200,    -1,
+     192,    -1,    -1,   198,   200,    -1,    -1,   199,   192,    -1,
+     108,   109,    -1,   108,   201,   109,    -1,   191,    -1,   201,
+     191,    -1,   114,    -1,   156,   114,    -1,    19,   104,   156,
+     105,   204,    -1,   197,    17,   197,    -1,   197,    -1,   156,
+      -1,   170,    76,   113,   189,    -1,    -1,    56,   104,   207,
+     205,   105,   196,    -1,    -1,    16,   208,   197,    56,   104,
+     156,   105,   114,    -1,    -1,    18,   104,   209,   210,   212,
+     105,   196,    -1,   202,    -1,   190,    -1,   205,    -1,    -1,
+     211,   114,    -1,   211,   114,   156,    -1,    15,   114,    -1,
+      14,   114,    -1,    21,   114,    -1,    21,   156,   114,    -1,
+      20,   114,    -1,   215,    -1,   214,   215,    -1,   216,    -1,
+     159,    -1,    -1,   160,   217,   200,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   190,   190,   225,   228,   233,   238,   243,   248,   254,
-     257,   260,   263,   266,   269,   275,   283,   383,   386,   394,
-     398,   405,   409,   416,   422,   431,   439,   516,   523,   533,
-     536,   546,   556,   578,   579,   580,   581,   589,   590,   599,
-     608,   621,   622,   630,   641,   642,   651,   663,   664,   674,
-     684,   694,   707,   708,   718,   731,   732,   746,   747,   761,
-     762,   776,   777,   790,   791,   804,   805,   818,   819,   836,
-     837,   850,   851,   852,   853,   855,   856,   857,   859,   861,
-     863,   865,   870,   873,   884,   892,   919,   925,   935,   973,
-     976,   983,   991,  1012,  1033,  1044,  1073,  1078,  1088,  1093,
-    1103,  1106,  1109,  1112,  1118,  1125,  1128,  1132,  1136,  1141,
-    1146,  1153,  1157,  1161,  1165,  1170,  1175,  1179,  1255,  1265,
-    1271,  1274,  1280,  1286,  1293,  1302,  1311,  1314,  1317,  1324,
-    1328,  1335,  1339,  1344,  1349,  1359,  1369,  1378,  1388,  1395,
-    1398,  1401,  1407,  1414,  1417,  1423,  1426,  1429,  1435,  1438,
-    1453,  1457,  1461,  1465,  1469,  1473,  1478,  1483,  1488,  1493,
-    1498,  1503,  1508,  1513,  1518,  1523,  1528,  1533,  1539,  1545,
-    1551,  1557,  1563,  1569,  1575,  1581,  1587,  1592,  1597,  1606,
-    1611,  1616,  1621,  1626,  1631,  1636,  1641,  1646,  1651,  1656,
-    1661,  1666,  1671,  1676,  1689,  1689,  1692,  1692,  1698,  1701,
-    1717,  1720,  1729,  1733,  1739,  1746,  1761,  1765,  1769,  1770,
-    1776,  1777,  1778,  1779,  1780,  1784,  1785,  1785,  1785,  1795,
-    1796,  1800,  1800,  1801,  1801,  1806,  1809,  1819,  1822,  1828,
-    1829,  1833,  1841,  1845,  1855,  1860,  1877,  1877,  1882,  1882,
-    1889,  1889,  1897,  1900,  1906,  1909,  1915,  1919,  1926,  1933,
-    1940,  1947,  1958,  1967,  1971,  1978,  1981,  1987,  1987
+       0,   192,   192,   227,   230,   235,   240,   245,   250,   256,
+     259,   262,   265,   268,   271,   277,   285,   385,   388,   396,
+     400,   407,   411,   418,   424,   433,   441,   518,   525,   535,
+     538,   548,   558,   580,   581,   582,   583,   591,   592,   601,
+     610,   623,   624,   632,   643,   644,   653,   665,   666,   676,
+     686,   696,   709,   710,   720,   733,   734,   748,   749,   763,
+     764,   778,   779,   792,   793,   806,   807,   820,   821,   838,
+     839,   852,   853,   854,   855,   857,   858,   859,   861,   863,
+     865,   867,   872,   875,   886,   894,   902,   929,   935,   942,
+     946,   950,   954,   961,   999,  1002,  1009,  1017,  1038,  1059,
+    1070,  1099,  1104,  1114,  1119,  1129,  1132,  1135,  1138,  1144,
+    1151,  1154,  1158,  1162,  1167,  1172,  1179,  1183,  1187,  1191,
+    1196,  1201,  1205,  1281,  1291,  1297,  1300,  1306,  1312,  1319,
+    1328,  1337,  1340,  1343,  1350,  1354,  1361,  1365,  1370,  1375,
+    1385,  1395,  1404,  1414,  1421,  1424,  1427,  1433,  1440,  1443,
+    1449,  1452,  1455,  1461,  1464,  1479,  1483,  1487,  1491,  1495,
+    1499,  1504,  1509,  1514,  1519,  1524,  1529,  1534,  1539,  1544,
+    1549,  1554,  1559,  1565,  1571,  1577,  1583,  1589,  1595,  1601,
+    1607,  1613,  1618,  1623,  1632,  1637,  1642,  1647,  1652,  1657,
+    1662,  1667,  1672,  1677,  1682,  1687,  1692,  1697,  1702,  1715,
+    1715,  1718,  1718,  1724,  1727,  1743,  1746,  1755,  1759,  1765,
+    1772,  1787,  1791,  1795,  1796,  1802,  1803,  1804,  1805,  1806,
+    1810,  1811,  1811,  1811,  1821,  1822,  1826,  1826,  1827,  1827,
+    1832,  1835,  1845,  1848,  1854,  1855,  1859,  1867,  1871,  1881,
+    1886,  1903,  1903,  1908,  1908,  1915,  1915,  1923,  1926,  1932,
+    1935,  1941,  1945,  1952,  1959,  1966,  1973,  1984,  1993,  1997,
+    2004,  2007,  2013,  2013
 };
 #endif
 
@@ -801,14 +806,15 @@ static const char *const yytname[] =
   "logical_and_expression", "logical_xor_expression",
   "logical_or_expression", "conditional_expression",
   "assignment_expression", "assignment_operator", "expression",
-  "constant_expression", "declaration", "function_prototype",
-  "function_declarator", "function_header_with_parameters",
-  "function_header", "parameter_declarator", "parameter_declaration",
-  "parameter_qualifier", "parameter_type_specifier",
-  "init_declarator_list", "single_declaration", "fully_specified_type",
-  "interpolation_qualifier", "parameter_type_qualifier", "type_qualifier",
-  "storage_qualifier", "type_specifier", "precision_qualifier",
-  "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
+  "constant_expression", "enter_struct", "declaration",
+  "function_prototype", "function_declarator",
+  "function_header_with_parameters", "function_header",
+  "parameter_declarator", "parameter_declaration", "parameter_qualifier",
+  "parameter_type_specifier", "init_declarator_list", "single_declaration",
+  "fully_specified_type", "interpolation_qualifier",
+  "parameter_type_qualifier", "type_qualifier", "storage_qualifier",
+  "type_specifier", "precision_qualifier", "layout_qualifier",
+  "layout_qualifier_id_list", "layout_qualifier_id",
   "type_specifier_no_prec", "type_specifier_nonarray", "struct_specifier",
   "$@1", "$@2", "struct_declaration_list", "struct_declaration",
   "struct_declarator_list", "struct_declarator", "initializer",
@@ -855,24 +861,25 @@ static const yytype_uint8 yyr1[] =
      145,   145,   146,   146,   146,   147,   147,   148,   148,   149,
      149,   150,   150,   151,   151,   152,   152,   153,   153,   154,
      154,   155,   155,   155,   155,   155,   155,   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,
-     167,   168,   168,   168,   168,   168,   168,   168,   169,   169,
-     170,   170,   171,   172,   172,   172,   172,   172,   172,   172,
-     172,   173,   173,   173,   173,   173,   173,   174,   174,   175,
-     175,   175,   176,   177,   177,   178,   178,   178,   179,   179,
-     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-     180,   180,   180,   180,   182,   181,   183,   181,   184,   184,
-     185,   185,   186,   186,   187,   187,   188,   189,   190,   190,
-     191,   191,   191,   191,   191,   192,   193,   194,   192,   195,
-     195,   197,   196,   198,   196,   199,   199,   200,   200,   201,
-     201,   202,   203,   203,   204,   204,   206,   205,   207,   205,
-     208,   205,   209,   209,   210,   210,   211,   211,   212,   212,
-     212,   212,   212,   213,   213,   214,   214,   216,   215
+     155,   155,   156,   156,   157,   158,   159,   159,   159,   159,
+     159,   159,   159,   160,   161,   161,   162,   162,   163,   164,
+     164,   165,   165,   165,   165,   166,   166,   166,   166,   167,
+     168,   168,   168,   168,   168,   168,   169,   169,   169,   169,
+     169,   169,   169,   170,   170,   171,   171,   172,   173,   173,
+     173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
+     174,   174,   175,   175,   176,   176,   176,   177,   178,   178,
+     179,   179,   179,   180,   180,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   181,   181,   181,   181,   183,
+     182,   184,   182,   185,   185,   186,   186,   187,   187,   188,
+     188,   189,   190,   191,   191,   192,   192,   192,   192,   192,
+     193,   194,   195,   193,   196,   196,   198,   197,   199,   197,
+     200,   200,   201,   201,   202,   202,   203,   204,   204,   205,
+     205,   207,   206,   208,   206,   209,   206,   210,   210,   211,
+     211,   212,   212,   213,   213,   213,   213,   213,   214,   214,
+     215,   215,   217,   216
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -886,24 +893,25 @@ static const yytype_uint8 yyr2[] =
        3,     3,     1,     3,     3,     1,     3,     1,     3,     1,
        3,     1,     3,     1,     3,     1,     3,     1,     5,     1,
        3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     3,     1,     2,     2,     4,     2,     1,
-       1,     2,     3,     3,     2,     5,     3,     2,     3,     2,
-       0,     1,     1,     1,     1,     1,     3,     6,     7,     8,
-       5,     1,     2,     5,     6,     7,     4,     2,     1,     2,
-       1,     1,     1,     1,     1,     2,     1,     2,     1,     1,
-       2,     1,     1,     1,     2,     2,     1,     1,     2,     1,
-       1,     1,     4,     1,     3,     1,     3,     3,     1,     4,
+       1,     1,     1,     3,     1,     2,     2,     2,     4,     5,
+       6,     9,     2,     2,     1,     1,     2,     3,     3,     2,
+       5,     3,     2,     3,     2,     0,     1,     1,     1,     1,
+       1,     3,     6,     7,     8,     5,     1,     2,     5,     6,
+       7,     4,     2,     1,     2,     1,     1,     1,     1,     1,
+       2,     1,     2,     1,     1,     2,     1,     1,     1,     2,
+       2,     1,     1,     2,     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,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     6,     0,     5,     1,     2,
-       3,     4,     1,     3,     1,     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,     0,
+       6,     0,     5,     1,     2,     3,     4,     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
@@ -911,405 +919,411 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     0,   139,   140,   141,     0,   123,   131,   154,   151,
-     152,   153,   158,   159,   160,   161,   162,   163,   155,   156,
-     157,   164,   165,   166,   167,   168,   169,   132,   133,   136,
-     124,   170,   171,   172,   173,   174,   175,     0,   121,   120,
-       0,   150,   176,   177,   178,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   179,   189,   190,   191,     0,   193,
-     256,   257,     0,    90,   100,     0,   105,   111,   128,     0,
-     126,   118,     0,   129,   137,   148,   192,     0,   253,   255,
-     125,   117,     0,   134,   135,     0,   196,     0,    85,     0,
-      88,   100,   122,   101,   102,   103,    91,     0,   100,     0,
-      86,   112,   127,   119,   138,   130,     0,     1,   254,     0,
-     194,     0,   145,     0,   143,     0,   258,    92,    97,    99,
-     104,     0,   106,    93,     0,     0,     2,     6,     4,     5,
-       7,    28,     0,     0,     0,    35,    34,    36,    33,     3,
-       9,    29,    11,    16,    17,     0,     0,    22,     0,    37,
-       0,    41,    44,    47,    52,    55,    57,    59,    61,    63,
-      65,    67,    84,     0,    26,    87,     0,     0,     0,     0,
-       0,   198,     0,   142,     0,     0,     0,   238,     0,     0,
-       0,     0,     0,   216,   225,   229,    37,    69,    82,     0,
-     207,     0,   148,   210,   227,   209,   208,     0,   211,   212,
-     213,   214,    94,    96,    98,     0,     0,     0,     0,   206,
-     116,    30,    31,     0,    13,    14,     0,     0,    20,    19,
-       0,    21,    23,    25,    32,     0,     0,     0,     0,     0,
+       0,     0,   144,   145,   146,     0,   128,   136,   159,   156,
+     157,   158,   163,   164,   165,   166,   167,   168,   160,   161,
+     162,   169,   170,   171,   172,   173,   174,   137,   138,   141,
+     129,   175,   176,   177,   178,   179,   180,     0,   126,   125,
+       0,   155,   181,   182,   183,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   184,   194,   195,   196,     0,   198,
+     261,   262,     0,    95,   105,     0,   110,   116,   133,     0,
+     131,   123,     0,   134,   142,   153,   197,     0,   258,   260,
+     130,   122,     0,   139,   140,     0,   201,     0,    86,     0,
+      93,   105,   127,   106,   107,   108,    96,     0,   105,     0,
+      87,   117,   132,     0,    92,     0,   124,   143,   135,     0,
+       1,   259,     0,   199,     0,   150,     0,   148,     0,   263,
+      97,   102,   104,   109,     0,   111,    98,     0,     0,    85,
+       0,     0,     0,     0,   203,     2,     6,     4,     5,     7,
+      28,     0,     0,     0,    35,    34,    36,    33,     3,     9,
+      29,    11,    16,    17,     0,     0,    22,     0,    37,     0,
+      41,    44,    47,    52,    55,    57,    59,    61,    63,    65,
+      67,    84,     0,    26,    88,     0,     0,     0,   147,     0,
+       0,     0,   243,     0,     0,     0,     0,     0,   221,   230,
+     234,    37,    69,    82,     0,   212,     0,   153,   215,   232,
+     214,   213,     0,   216,   217,   218,   219,    99,   101,   103,
+       0,     0,     0,     0,   211,   121,     0,   209,     0,   207,
+       0,   204,    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,     0,     0,     0,   149,     0,     0,   204,     0,
-     202,   197,   199,   146,   147,   144,   249,   248,   223,   240,
-       0,   252,   250,     0,   236,   215,     0,    72,    73,    75,
-      74,    77,    78,    79,    80,    81,    76,    71,     0,     0,
-     230,   226,   228,     0,     0,     0,   110,     0,   113,     8,
-       0,    15,    27,    12,    18,    24,    38,    39,    40,    43,
-      42,    45,    46,    50,    51,    48,    49,    53,    54,    56,
-      58,    60,    62,    64,    66,     0,   195,     0,     0,     0,
-     200,     0,     0,     0,     0,     0,   251,     0,   217,    70,
-      83,     0,     0,   107,   114,     0,    10,     0,   201,     0,
-     203,     0,   222,   224,   243,   242,   245,   223,   234,     0,
-       0,     0,    95,   108,     0,   115,    68,   205,     0,   244,
-       0,     0,   233,   231,     0,     0,   218,   109,     0,   246,
-       0,   223,     0,   220,   237,   219,     0,   247,   241,   232,
-     235,   239
+       0,     0,     0,     0,     0,     0,   154,     0,   202,   151,
+     152,   149,   254,   253,   228,   245,     0,   257,   255,     0,
+     241,   220,     0,    72,    73,    75,    74,    77,    78,    79,
+      80,    81,    76,    71,     0,     0,   235,   231,   233,     0,
+       0,     0,   115,     0,   118,     0,     0,     0,   205,     0,
+      89,     8,     0,    15,    27,    12,    18,    24,    38,    39,
+      40,    43,    42,    45,    46,    50,    51,    48,    49,    53,
+      54,    56,    58,    60,    62,    64,    66,     0,   200,     0,
+       0,     0,     0,     0,   256,     0,   222,    70,    83,     0,
+       0,   112,   119,     0,   206,     0,   208,     0,    90,    10,
+       0,     0,   227,   229,   248,   247,   250,   228,   239,     0,
+       0,     0,     0,   100,   113,     0,   120,   210,     0,    68,
+       0,   249,     0,     0,   238,   236,     0,     0,   223,   114,
+       0,     0,   251,     0,   228,     0,   225,   242,   224,    91,
+       0,   252,   246,   237,   240,   244
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   139,   140,   141,   290,   142,   143,   144,   145,   146,
-     147,   148,   186,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   187,   188,   278,   189,   163,
-     190,   191,    62,    63,    64,   118,    96,    97,   119,    65,
-      66,    67,    68,    98,    69,    70,    71,    72,    73,   113,
-     114,    74,   164,    76,   166,   111,   170,   171,   249,   250,
-     210,   193,   194,   195,   196,   266,   351,   374,   321,   322,
-     323,   375,   197,   198,   199,   363,   350,   200,   327,   258,
-     324,   346,   360,   361,   201,    77,    78,    79,    89
+      -1,   148,   149,   150,   302,   151,   152,   153,   154,   155,
+     156,   157,   191,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   192,   193,   284,   194,   172,
+     105,   195,   196,    62,    63,    64,   121,    96,    97,   122,
+      65,    66,    67,    68,    98,    69,    70,    71,    72,    73,
+     116,   117,    74,   173,    76,   175,   114,   133,   134,   218,
+     219,   215,   198,   199,   200,   201,   272,   362,   387,   329,
+     330,   331,   388,   202,   203,   204,   375,   361,   205,   335,
+     264,   332,   356,   372,   373,   206,    77,    78,    79,    89
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -320
+#define YYPACT_NINF -338
 static const yytype_int16 yypact[] =
 {
-    1750,   -21,  -320,  -320,  -320,   124,  -320,  -320,  -320,  -320,
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,    -5,  -320,  -320,
-     -47,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,   -85,  -320,
-    -320,   -66,   -53,   -55,     3,   -19,  -320,    15,    19,  1899,
-    -320,  -320,  2035,    19,  -320,    -3,  -320,  1675,  -320,  -320,
-    -320,  -320,  2035,  -320,  -320,   -44,  -320,    38,  -320,    23,
-    -320,    25,  -320,  -320,  -320,  -320,  -320,  1899,   120,    78,
-    -320,   -33,  -320,  -320,  -320,  -320,  1313,  -320,  -320,    44,
-    -320,  1825,    51,   -37,  -320,   348,  -320,  -320,  -320,  -320,
-     111,  1899,   -76,  -320,   226,  1313,    86,  -320,  -320,  -320,
-    -320,  -320,  1313,  1313,  1313,  -320,  -320,  -320,  -320,  -320,
-    -320,   -68,  -320,  -320,  -320,    89,   -30,  1408,   107,  -320,
-    1313,    52,   -40,    92,   -72,    88,    67,    87,    93,   125,
-     127,   -81,  -320,   114,  -320,  -320,  1825,   178,  1899,   147,
-    1505,  -320,   101,  -320,    38,   110,   113,  -320,   121,   129,
-     115,  1120,   131,   119,  -320,  -320,   106,  -320,  -320,    -2,
-    -320,   -66,    63,  -320,  -320,  -320,  -320,   464,  -320,  -320,
-    -320,  -320,   134,  -320,  -320,  1215,  1313,   118,   135,  -320,
-    -320,  -320,  -320,   -15,  -320,  -320,  1313,  1967,  -320,  -320,
-    1313,   139,  -320,  -320,  -320,  1313,  1313,  1313,  1313,  1313,
-    1313,  1313,  1313,  1313,  1313,  1313,  1313,  1313,  1313,  1313,
-    1313,  1313,  1313,  1313,  1313,  -320,  1590,   147,   138,    11,
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,   137,  -320,
-    1313,  -320,  -320,    12,  -320,  -320,   580,  -320,  -320,  -320,
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,  -320,  1313,  1313,
-    -320,  -320,  -320,  1313,   136,   140,  -320,  1313,   154,  -320,
-     141,   157,  -320,   165,  -320,  -320,  -320,  -320,  -320,    52,
-      52,   -40,   -40,    92,    92,    92,    92,   -72,   -72,    88,
-      67,    87,    93,   125,   127,    72,  -320,    13,  1313,   147,
-    -320,   214,    23,   812,   928,   -12,  -320,  1025,   580,  -320,
-    -320,   170,  1313,   166,  -320,  1313,  -320,  1313,  -320,   171,
-    -320,   182,  -320,  -320,  -320,  -320,  1025,   137,   157,   206,
-     192,   200,  -320,  -320,  1313,  -320,  -320,  -320,  1313,  -320,
-     187,   205,   296,  -320,   201,   696,  -320,  -320,   -11,  1313,
-     696,   137,  1313,  -320,  -320,  -320,   202,   157,  -320,  -320,
-    -320,  -320
+    2015,   -27,  -338,  -338,  -338,   137,  -338,  -338,  -338,  -338,
+    -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,
+    -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,
+    -338,  -338,  -338,  -338,  -338,  -338,  -338,    59,  -338,  -338,
+     -57,  -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,
+    -338,  -338,  -338,  -338,  -338,  -338,  -338,  -338,   -80,  -338,
+    -338,   -64,   -32,   -26,    17,   -50,  -338,    44,    27,  1132,
+    -338,  -338,  2300,    27,  -338,    61,  -338,  1940,  -338,  -338,
+    -338,  -338,  2300,  -338,  -338,    63,  -338,    78,  -338,    66,
+    -338,    62,  -338,  -338,  -338,  -338,  -338,  2164,   107,    93,
+    -338,   -79,  -338,    72,  -338,  2090,  -338,  -338,  -338,  1493,
+    -338,  -338,    68,  -338,  2090,    70,   -83,  -338,   360,  -338,
+    -338,  -338,  -338,   108,  2164,   -51,  -338,  1202,  1493,  -338,
+     141,  2164,   111,  1685,  -338,    82,  -338,  -338,  -338,  -338,
+    -338,  1493,  1493,  1493,  -338,  -338,  -338,  -338,  -338,  -338,
+       9,  -338,  -338,  -338,    83,   -21,  1588,    86,  -338,  1493,
+      31,   -35,    51,   -43,    48,    67,    69,    71,   100,   104,
+     -74,  -338,    91,  -338,  -338,  2090,  1770,    65,  -338,    78,
+      89,   102,  -338,    96,   113,   105,  1300,   116,   112,  -338,
+    -338,   110,  -338,  -338,    -2,  -338,   -64,    49,  -338,  -338,
+    -338,  -338,   476,  -338,  -338,  -338,  -338,   118,  -338,  -338,
+    1395,  1493,   101,   119,  -338,  -338,   111,   121,    12,  -338,
+     -60,  -338,  -338,  -338,   -13,  -338,  -338,  1493,  2232,  -338,
+    -338,  1493,   125,  -338,  -338,  -338,  1493,  1493,  1493,  1493,
+    1493,  1493,  1493,  1493,  1493,  1493,  1493,  1493,  1493,  1493,
+    1493,  1493,  1493,  1493,  1493,  1493,  -338,  1855,  -338,  -338,
+    -338,  -338,  -338,  -338,   122,  -338,  1493,  -338,  -338,    14,
+    -338,  -338,   592,  -338,  -338,  -338,  -338,  -338,  -338,  -338,
+    -338,  -338,  -338,  -338,  1493,  1493,  -338,  -338,  -338,  1493,
+     120,   124,  -338,  1493,   126,    16,  1493,   111,  -338,   -71,
+    -338,  -338,   128,   127,  -338,   133,  -338,  -338,  -338,  -338,
+    -338,    31,    31,   -35,   -35,    51,    51,    51,    51,   -43,
+     -43,    48,    67,    69,    71,   100,   104,    46,  -338,   176,
+      66,   824,   940,     5,  -338,  1037,   592,  -338,  -338,   134,
+    1493,   129,  -338,  1493,  -338,   138,  -338,  1493,  -338,  -338,
+    1493,   140,  -338,  -338,  -338,  -338,  1037,   122,   127,   170,
+    2164,   144,   142,  -338,  -338,  1493,  -338,  -338,   145,  -338,
+    1493,  -338,   139,   149,   239,  -338,   146,   708,  -338,  -338,
+     147,     6,  1493,   708,   122,  1493,  -338,  -338,  -338,  -338,
+     148,   127,  -338,  -338,  -338,  -338
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -320,  -320,  -320,  -320,  -320,  -320,  -320,    98,  -320,  -320,
-    -320,  -320,   -92,  -320,   -43,   -42,  -115,   -41,    79,    80,
-      81,    77,    83,    91,  -320,  -104,  -122,  -320,  -128,  -120,
-       9,    10,  -320,  -320,  -320,   199,   231,   228,   208,  -320,
-    -320,  -319,  -320,  -320,   -87,    37,   -64,   326,  -320,  -320,
-     158,   -51,     0,  -320,  -320,  -320,   169,  -157,    90,    17,
-    -180,    14,  -175,  -316,  -320,  -320,  -320,   -31,  -308,  -320,
-    -320,   -88,    74,    21,  -320,  -320,     1,  -320,  -320,  -320,
-    -320,  -320,  -320,  -320,  -320,  -320,   271,  -320,  -320
+    -338,  -338,  -338,  -338,  -338,  -338,  -338,    30,  -338,  -338,
+    -338,  -338,    37,  -338,   -77,   -76,  -205,   -75,    15,    13,
+      18,    19,    40,    41,  -338,   -97,  -125,  -338,  -134,  -119,
+    -338,    10,    11,  -338,  -338,  -338,   143,   174,   168,   172,
+    -338,  -338,  -314,  -338,  -338,  -101,    28,   -68,   263,  -338,
+    -338,   115,   -49,     0,  -338,  -338,  -338,   -99,  -128,    54,
+       1,  -204,   -33,  -196,  -317,  -338,  -338,  -338,   -86,  -337,
+    -338,  -338,   -87,    29,   -30,  -338,  -338,   -56,  -338,  -338,
+    -338,  -338,  -338,  -338,  -338,  -338,  -338,   226,  -338,  -338
 };
 
 /* 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 -222
+#define YYTABLE_NINF -227
 static const yytype_int16 yytable[] =
 {
-      75,   116,   162,   209,   208,   103,   213,   343,   349,    60,
-      61,   243,    92,   252,   149,   232,   233,   214,   215,    87,
-     162,   104,   282,    80,   168,   222,   286,   349,     7,    85,
-     205,   109,   149,   120,    92,    83,    84,   206,   216,   362,
-     211,   212,   217,    93,    94,    95,   244,   169,    88,   373,
-     234,   235,    90,   263,   373,    81,    91,   120,   224,    27,
-      28,    86,    29,   379,   110,    93,    94,    95,   173,    75,
-      37,   123,    75,   124,   174,   219,   228,    75,   229,   168,
-     125,   220,    75,   168,   209,   285,    60,    61,   291,   252,
-     289,   101,    99,   347,   376,   100,   279,    75,   295,   279,
-     279,   162,   169,   106,   247,   102,   169,   334,   -89,   279,
-     105,    75,   280,   149,   112,   192,   315,   303,   304,   305,
-     306,    75,   319,   279,   319,   320,   326,   338,     2,     3,
-       4,   115,   325,   296,   297,   298,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149,   353,   282,   122,   355,   329,   330,   165,   168,
-      93,    94,    95,   331,   172,   209,    75,   -26,    75,   106,
-      75,   225,   226,   227,   367,   230,   231,   236,   237,   162,
-     253,   254,   169,   279,   337,   299,   300,   202,   301,   302,
-     -27,   149,   380,   238,   218,   307,   308,   192,   339,   348,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     209,   223,   239,   209,   162,   356,   241,   240,   348,   277,
-     242,   245,    80,   248,   256,   259,   149,   257,   265,   261,
-     368,   287,   209,   260,   342,   264,     8,     9,    10,    11,
-     283,   377,   288,  -150,   318,  -221,    75,   333,   336,   332,
-     209,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,   192,   335,   279,   -28,
-     341,    31,    32,    33,    34,    35,    36,   352,   357,   354,
-      40,    41,   364,    42,    43,    44,   358,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,   365,    55,    56,
-      57,   369,   126,    59,   127,   128,   129,   130,   131,   366,
-     370,   132,   133,   371,   372,   294,   381,   309,   312,   310,
-     203,   311,   117,   192,   192,   313,   121,   192,   192,   204,
-     134,    82,   255,   207,   314,   246,   340,   317,   344,   378,
-     328,   135,   136,   137,   138,   345,   192,   359,   108,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   175,   176,   177,   192,   178,   179,   180,   181,
-     192,     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,
-      38,    39,    40,    41,   182,    42,    43,    44,     0,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
-      55,    56,    57,    58,   126,    59,   127,   128,   129,   130,
-     131,     0,     0,   132,   133,     0,     0,     0,     0,     0,
+      75,   106,   119,   214,   131,   221,   288,   292,   213,   224,
+      60,    61,   171,   131,   353,   176,   299,    80,   254,    85,
+     374,   359,   178,   107,    87,   126,    92,   127,   179,   123,
+     171,   233,   131,   112,   128,   347,     7,   132,   315,   316,
+     317,   318,   359,   348,   243,   244,   132,   393,   221,    81,
+      88,    86,   269,   255,   300,   210,   123,    93,    94,    95,
+     386,    99,   211,   216,   100,   132,   386,    27,    28,    75,
+      29,    92,    75,    90,   131,   131,   257,    75,    37,   245,
+     246,   239,    75,   240,   230,    91,   214,    60,    61,   342,
+     231,   291,   301,   303,   225,   226,   102,    75,   285,    83,
+      84,   108,    93,    94,    95,    75,   307,   132,   132,   285,
+     357,   390,   286,   171,    75,   227,   285,   285,   197,   228,
+     101,   327,   -94,   297,    75,   285,   298,   297,   334,   221,
+     344,    75,   333,    75,   241,   242,   364,   247,   248,   366,
+     288,     2,     3,     4,   259,   260,   158,    93,    94,    95,
+     236,   237,   238,   -26,   115,   109,   131,   285,   350,   337,
+     338,   379,   311,   312,   158,   313,   314,   109,   214,   125,
+     339,   113,   319,   320,   118,    75,    75,   345,   222,   223,
+     129,   394,   174,   177,   207,    80,   -27,   217,   229,   132,
+     234,   252,   171,   249,   250,   251,   235,   253,   256,   171,
+     265,   358,   197,   262,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   293,   214,   263,   266,   214,   267,
+     270,   271,   358,   283,   289,   369,   294,   296,   368,  -155,
+    -226,   341,   351,   340,   360,   349,   381,   -28,   285,   343,
+     214,   363,   365,   352,   370,   367,   376,   158,   391,   377,
+     171,   378,   380,   382,   383,   360,   384,    75,   306,   385,
+     214,   389,   395,   322,   321,   120,   124,   208,    82,   323,
+     295,   324,   197,   308,   309,   310,   158,   158,   158,   158,
+     158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
+     158,   158,   106,   325,   261,   326,   209,   392,   346,   354,
+     371,   336,   355,   111,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   134,     0,     0,     0,   183,   184,     0,     0,
-       0,     0,   185,   135,   136,   137,   138,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   175,   176,
-     177,     0,   178,   179,   180,   181,     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,    38,    39,    40,    41,
-     182,    42,    43,    44,     0,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
-     126,    59,   127,   128,   129,   130,   131,     0,     0,   132,
-     133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   134,     0,
-       0,     0,   183,   281,     0,     0,     0,     0,   185,   135,
-     136,   137,   138,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   175,   176,   177,     0,   178,   179,
-     180,   181,     0,     0,     0,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,     0,     0,   158,     0,     0,     0,
+       0,   197,   197,   158,     0,   197,   197,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   197,     0,     0,     0,
+      75,     0,     0,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   180,   181,   182,   197,   183,   184,
+     185,   186,     0,   197,   158,    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,    38,    39,    40,    41,   182,    42,    43,    44,
+      36,    37,    38,    39,    40,    41,   187,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,    58,   126,    59,   127,   128,
-     129,   130,   131,     0,     0,   132,   133,     0,     0,     0,
+      54,     0,    55,    56,    57,    58,   135,    59,   136,   137,
+     138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   134,     0,     0,     0,   183,     0,
-       0,     0,     0,     0,   185,   135,   136,   137,   138,     1,
+       0,     0,     0,     0,   143,     0,     0,     0,   188,   189,
+       0,     0,     0,     0,   190,   144,   145,   146,   147,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     175,   176,   177,     0,   178,   179,   180,   181,     0,     0,
+     180,   181,   182,     0,   183,   184,   185,   186,     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,    38,    39,
-      40,    41,   182,    42,    43,    44,     0,    45,    46,    47,
+      40,    41,   187,    42,    43,    44,     0,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
-      57,    58,   126,    59,   127,   128,   129,   130,   131,     0,
-       0,   132,   133,     0,     0,     0,     0,     0,     0,     0,
+      57,    58,   135,    59,   136,   137,   138,   139,   140,     0,
+       0,   141,   142,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     134,     0,     0,     0,   115,     0,     0,     0,     0,     0,
-     185,   135,   136,   137,   138,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   175,   176,   177,     0,
-     178,   179,   180,   181,     0,     0,     0,    12,    13,    14,
+     143,     0,     0,     0,   188,   287,     0,     0,     0,     0,
+     190,   144,   145,   146,   147,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   180,   181,   182,     0,
+     183,   184,   185,   186,     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,    38,    39,    40,    41,   182,    42,
+      34,    35,    36,    37,    38,    39,    40,    41,   187,    42,
       43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,   126,    59,
-     127,   128,   129,   130,   131,     0,     0,   132,   133,     0,
+      52,    53,    54,     0,    55,    56,    57,    58,   135,    59,
+     136,   137,   138,   139,   140,     0,     0,   141,   142,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   134,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   185,   135,   136,   137,
-     138,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   143,     0,     0,     0,
+     188,     0,     0,     0,     0,     0,   190,   144,   145,   146,
+     147,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   180,   181,   182,     0,   183,   184,   185,   186,
        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,
-      38,    39,    40,    41,     0,    42,    43,    44,     0,    45,
+      38,    39,    40,    41,   187,    42,    43,    44,     0,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
-      55,    56,    57,    58,   126,    59,   127,   128,   129,   130,
-     131,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   167,     2,
-       3,     4,   134,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,   185,   135,   136,   137,   138,     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,    38,    39,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,   126,    59,   127,   128,   129,   130,   131,     0,     0,
-     132,   133,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
+      55,    56,    57,    58,   135,    59,   136,   137,   138,   139,
+     140,     0,     0,   141,   142,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   143,     0,     0,     0,   118,     0,     0,     0,
+       0,     0,   190,   144,   145,   146,   147,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   180,   181,
+     182,     0,   183,   184,   185,   186,     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,    38,    39,    40,    41,
+     187,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
+     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
+     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   143,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   190,   144,
+     145,   146,   147,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-     135,   136,   137,   138,     0,    12,    13,    14,    15,    16,
+       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,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,    58,   135,    59,   136,   137,
+     138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     130,     2,     3,     4,   143,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,   190,   144,   145,   146,   147,     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,    38,
+      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
+      56,    57,    58,   135,    59,   136,   137,   138,   139,   140,
+       0,     0,   141,   142,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     2,     3,     4,     0,
+       0,   143,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,   144,   145,   146,   147,     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,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,     0,   103,    59,
+       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,   104,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,     0,   135,    59,
+     136,   137,   138,   139,   140,     0,     0,   141,   142,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   143,     0,     0,   212,
+       8,     9,    10,    11,     0,     0,     0,   144,   145,   146,
+     147,     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,    40,    41,     0,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,     0,   126,    59,   127,   128,
-     129,   130,   131,     0,     0,   132,   133,     0,     0,     0,
+      54,     0,    55,    56,    57,     0,   135,    59,   136,   137,
+     138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   134,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,   262,   135,   136,   137,   138,     0,
+       0,     0,     0,     0,   143,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,   268,   144,   145,   146,   147,     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,    40,
       41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-       0,   126,    59,   127,   128,   129,   130,   131,     0,     0,
-     132,   133,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
-       0,     0,   284,     8,     9,    10,    11,     0,     0,     0,
-     135,   136,   137,   138,     0,     0,     0,     0,    12,    13,
+       0,   135,    59,   136,   137,   138,   139,   140,     0,     0,
+     141,   142,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   143,
+       0,     0,   290,     8,     9,    10,    11,     0,     0,     0,
+     144,   145,   146,   147,     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,    40,    41,     0,
       42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,     0,    55,    56,    57,     0,   126,
-      59,   127,   128,   129,   130,   131,     0,     0,   132,   133,
+      51,    52,    53,    54,     0,    55,    56,    57,     0,   135,
+      59,   136,   137,   138,   139,   140,     0,     0,   141,   142,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   134,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,   135,   136,
-     137,   138,     0,    12,    13,    14,    15,    16,    17,    18,
+       0,     0,     0,     0,     0,     0,     0,   143,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,   144,   145,
+     146,   147,     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,    40,   221,     0,    42,    43,    44,     0,    45,
+       0,     0,    40,   232,     0,    42,    43,    44,     0,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
-      55,    56,    57,     0,   126,    59,   127,   128,   129,   130,
-     131,     0,     0,   132,   133,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   167,     2,
-       3,     4,   134,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,   135,   136,   137,   138,     0,     0,     0,
+      55,    56,    57,     0,   135,    59,   136,   137,   138,   139,
+     140,     0,     0,   141,   142,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   130,     2,
+       3,     4,   143,     6,     7,     8,     9,    10,    11,     0,
+       0,     0,     0,   144,   145,   146,   147,     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,    38,    39,    40,
       41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
       58,     0,    59,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   167,     2,     3,     4,     0,     6,     7,
+       0,     0,     0,   130,     2,     3,     4,     0,     6,     7,
        8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   251,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,   220,    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,    38,    39,    40,    41,     0,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,     0,    55,    56,    57,    58,     0,    59,     0,     0,
-       0,     0,     0,     0,     0,   107,     0,     0,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   316,
+       0,     0,     0,     0,     0,     0,     0,     0,   130,     2,
+       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   258,
       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,    38,    39,    40,
       41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,     0,    59,     1,     2,     3,     4,     5,     6,     7,
+      58,     0,    59,     0,     0,     0,     0,     0,     0,     0,
+     110,     0,     0,     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,     0,   328,    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,    38,    39,    40,    41,     0,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,    58,     0,    59,   167,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
+      54,     0,    55,    56,    57,    58,     0,    59,     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,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,     0,    59,     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,    40,    41,     0,    42,    43,    44,     0,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-       0,    55,    56,    57,     0,     0,    59,     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,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,   292,    59,     8,     9,    10,    11,   293,
-       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,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-       0,     0,    59
+      58,     0,    59,   130,     2,     3,     4,     0,     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,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,    58,     0,    59,     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,    40,    41,
+       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,     0,
+       0,    59,     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,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,     0,   304,    59,
+       8,     9,    10,    11,   305,     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,    40,    41,     0,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,     0,     0,    59
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    89,   106,   125,   124,    69,   134,   323,   327,     0,
-       0,    92,     9,   170,   106,    87,    88,    85,    86,   104,
-     124,    72,   197,    44,   111,   147,   206,   346,     9,    76,
-     106,    82,   124,    97,     9,    40,    41,   113,   106,   347,
-     132,   133,   110,    40,    41,    42,   127,   111,   114,   365,
-     122,   123,   105,   181,   370,    76,   111,   121,   150,    40,
-      41,   108,    43,   371,   108,    40,    41,    42,   105,    69,
-      51,   104,    72,   106,   111,   105,   116,    77,   118,   166,
-     113,   111,    82,   170,   206,   205,    77,    77,   216,   246,
-     105,    76,   111,   105,   105,   114,   111,    97,   220,   111,
-     111,   205,   166,   106,   168,    68,   170,   287,   105,   111,
-      73,   111,   114,   205,    76,   115,   244,   232,   233,   234,
-     235,   121,   111,   111,   111,   114,   114,   114,     4,     5,
-       6,   108,   260,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   332,   328,    76,   335,   278,   279,   114,   246,
-      40,    41,    42,   283,   113,   287,   166,   104,   168,   106,
-     170,   119,   120,   121,   354,    83,    84,    89,    90,   283,
-      79,    80,   246,   111,   112,   228,   229,    76,   230,   231,
-     104,   283,   372,   126,   105,   236,   237,   197,   318,   327,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     332,   104,   125,   335,   318,   337,    91,   124,   346,   113,
-      93,   107,    44,    76,   114,   104,   318,   114,   109,   114,
-     358,   113,   354,   104,   322,   104,    10,    11,    12,    13,
-     106,   369,   107,   104,   106,   108,   246,   107,   107,   113,
-     372,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,   266,   113,   111,   104,
-      56,    45,    46,    47,    48,    49,    50,   107,   107,   113,
-      54,    55,    76,    57,    58,    59,   104,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,   105,    72,    73,
-      74,   114,    76,    77,    78,    79,    80,    81,    82,   109,
-     105,    85,    86,    17,   113,   217,   114,   238,   241,   239,
-     121,   240,    91,   323,   324,   242,    98,   327,   328,   121,
-     104,     5,   174,   107,   243,   166,   319,   247,   324,   370,
-     266,   115,   116,   117,   118,   324,   346,   346,    77,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,   365,    18,    19,    20,    21,
-     370,    -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,
-      52,    53,    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,
+       0,    69,    89,   128,   105,   133,   202,   211,   127,   143,
+       0,     0,   109,   114,   331,   114,    76,    44,    92,    76,
+     357,   335,   105,    72,   104,   104,     9,   106,   111,    97,
+     127,   156,   133,    82,   113,   106,     9,   105,   243,   244,
+     245,   246,   356,   114,    87,    88,   114,   384,   176,    76,
+     114,   108,   186,   127,   114,   106,   124,    40,    41,    42,
+     377,   111,   113,   131,   114,   133,   383,    40,    41,    69,
+      43,     9,    72,   105,   175,   176,   175,    77,    51,   122,
+     123,   116,    82,   118,   105,   111,   211,    77,    77,   293,
+     111,   210,   105,   227,    85,    86,    68,    97,   111,    40,
+      41,    73,    40,    41,    42,   105,   231,   175,   176,   111,
+     105,   105,   114,   210,   114,   106,   111,   111,   118,   110,
+      76,   255,   105,   111,   124,   111,   114,   111,   114,   257,
+     114,   131,   266,   133,    83,    84,   340,    89,    90,   343,
+     336,     4,     5,     6,    79,    80,   109,    40,    41,    42,
+     119,   120,   121,   104,    76,   106,   257,   111,   112,   284,
+     285,   365,   239,   240,   127,   241,   242,   106,   293,    76,
+     289,   108,   247,   248,   108,   175,   176,   296,   141,   142,
+     108,   385,   114,   113,    76,    44,   104,    76,   105,   257,
+     104,    91,   289,   126,   125,   124,   159,    93,   107,   296,
+     104,   335,   202,   114,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   113,   340,   114,   104,   343,   114,
+     104,   109,   356,   113,   106,   350,   107,   106,   347,   104,
+     108,   107,    56,   113,   335,   107,   370,   104,   111,   113,
+     365,   107,   113,   330,   104,   107,    76,   210,   382,   105,
+     347,   109,   107,   114,   105,   356,    17,   257,   228,   113,
+     385,   114,   114,   250,   249,    91,    98,   124,     5,   251,
+     216,   252,   272,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   360,   253,   179,   254,   124,   383,   297,   332,
+     356,   272,   332,    77,    -1,    -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,   117,   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,    52,    53,    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,   117,   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,
+      -1,    -1,    -1,    -1,    -1,    -1,   289,    -1,    -1,    -1,
+      -1,   331,   332,   296,    -1,   335,   336,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   356,    -1,    -1,    -1,
+     360,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,   377,    18,    19,
+      20,    21,    -1,   383,   347,    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,    52,    53,    54,    55,    56,    57,    58,    59,
@@ -1317,7 +1331,7 @@ static const yytype_int16 yycheck[] =
       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,   104,    -1,    -1,    -1,   108,   109,
       -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    -1,    18,    19,    20,    21,    -1,    -1,
@@ -1329,7 +1343,7 @@ static const yytype_int16 yycheck[] =
       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,
+     104,    -1,    -1,    -1,   108,   109,    -1,    -1,    -1,    -1,
      114,   115,   116,   117,   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,
@@ -1341,29 +1355,69 @@ static const yytype_int16 yycheck[] =
       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,
-      -1,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
+     108,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
      118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      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,
-      52,    53,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      52,    53,    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,     3,     4,
-       5,     6,   104,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,   114,   115,   116,   117,   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,    46,    47,    48,    49,    50,    51,    52,    53,    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,    -1,   104,
+      -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,   117,   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,    52,    53,    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,    -1,    -1,    -1,    -1,    -1,    -1,   114,   115,
+     116,   117,   118,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-     115,   116,   117,   118,    -1,    25,    26,    27,    28,    29,
+      -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,    46,    47,    48,    49,
+      50,    51,    52,    53,    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,
+       3,     4,     5,     6,   104,     8,     9,    10,    11,    12,
+      13,    -1,    -1,    -1,   114,   115,   116,   117,   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,    46,    47,    48,    49,    50,    51,    52,
+      53,    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,     4,     5,     6,    -1,
+      -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,   115,   116,   117,   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,
+      -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,   114,    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,    -1,    -1,   107,
+      10,    11,    12,    13,    -1,    -1,    -1,   115,   116,   117,
+     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,    45,    46,    47,    48,    49,
       50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
@@ -1416,51 +1470,59 @@ static const yytype_int16 yycheck[] =
       50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
       -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    -1,    72,    73,    74,    75,    -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,     3,     4,
+       5,     6,    -1,     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,    52,    53,    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,
+      75,    -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,    -1,    25,    26,    27,    28,    29,
+      -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,    52,    53,    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,    -1,     8,     9,    10,    11,    12,    13,    -1,
+       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,    46,    47,    48,    49,    50,    51,    52,    53,    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,    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
+      75,    -1,    77,     3,     4,     5,     6,    -1,     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,    46,    47,    48,    49,
+      50,    51,    52,    53,    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,    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
@@ -1473,39 +1535,40 @@ static const yytype_uint8 yystos[] =
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       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,   170,   172,
-     173,   174,   175,   176,   179,   180,   181,   213,   214,   215,
-      44,    76,   175,    40,    41,    76,   108,   104,   114,   216,
-     105,   111,     9,    40,    41,    42,   164,   165,   171,   111,
-     114,    76,   173,   174,   179,   173,   106,     0,   214,   179,
-     108,   183,    76,   177,   178,   108,   199,   164,   163,   166,
-     174,   165,    76,   104,   106,   113,    76,    78,    79,    80,
-      81,    82,    85,    86,   104,   115,   116,   117,   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,   180,   114,   182,     3,   172,   174,
-     184,   185,   113,   105,   111,    14,    15,    16,    18,    19,
-      20,    21,    56,   108,   109,   114,   140,   153,   154,   156,
-     158,   159,   180,   189,   190,   191,   192,   200,   201,   202,
-     205,   212,    76,   163,   166,   106,   113,   107,   157,   154,
-     188,   140,   140,   156,    85,    86,   106,   110,   105,   105,
-     111,    55,   154,   104,   140,   119,   120,   121,   116,   118,
-      83,    84,    87,    88,   122,   123,    89,    90,   126,   125,
-     124,    91,    93,    92,   127,   107,   184,   174,    76,   186,
-     187,   109,   185,    79,    80,   178,   114,   114,   207,   104,
-     104,   114,   114,   156,   104,   109,   193,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   113,   155,   111,
-     114,   109,   190,   106,   107,   157,   188,   113,   107,   105,
-     132,   156,    76,    82,   135,   154,   140,   140,   140,   142,
-     142,   143,   143,   144,   144,   144,   144,   145,   145,   146,
-     147,   148,   149,   150,   151,   156,   109,   186,   106,   111,
-     114,   196,   197,   198,   208,   156,   114,   206,   200,   154,
-     154,   157,   113,   107,   188,   113,   107,   112,   114,   157,
-     187,    56,   199,   191,   189,   201,   209,   105,   156,   169,
-     204,   194,   107,   188,   113,   188,   154,   107,   104,   204,
-     210,   211,   196,   203,    76,   105,   109,   188,   156,   114,
-     105,    17,   113,   191,   195,   199,   105,   156,   195,   196,
-     188,   114
+     159,   160,   161,   162,   163,   168,   169,   170,   171,   173,
+     174,   175,   176,   177,   180,   181,   182,   214,   215,   216,
+      44,    76,   176,    40,    41,    76,   108,   104,   114,   217,
+     105,   111,     9,    40,    41,    42,   165,   166,   172,   111,
+     114,    76,   174,    76,   114,   158,   175,   180,   174,   106,
+       0,   215,   180,   108,   184,    76,   178,   179,   108,   200,
+     165,   164,   167,   175,   166,    76,   104,   106,   113,   108,
+       3,   173,   175,   185,   186,    76,    78,    79,    80,    81,
+      82,    85,    86,   104,   115,   116,   117,   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,   181,   114,   183,   185,   113,   105,   111,
+      14,    15,    16,    18,    19,    20,    21,    56,   108,   109,
+     114,   140,   153,   154,   156,   159,   160,   181,   190,   191,
+     192,   193,   201,   202,   203,   206,   213,    76,   164,   167,
+     106,   113,   107,   157,   154,   189,   175,    76,   187,   188,
+     109,   186,   140,   140,   156,    85,    86,   106,   110,   105,
+     105,   111,    55,   154,   104,   140,   119,   120,   121,   116,
+     118,    83,    84,    87,    88,   122,   123,    89,    90,   126,
+     125,   124,    91,    93,    92,   127,   107,   185,   109,    79,
+      80,   179,   114,   114,   208,   104,   104,   114,   114,   156,
+     104,   109,   194,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   113,   155,   111,   114,   109,   191,   106,
+     107,   157,   189,   113,   107,   187,   106,   111,   114,    76,
+     114,   105,   132,   156,    76,    82,   135,   154,   140,   140,
+     140,   142,   142,   143,   143,   144,   144,   144,   144,   145,
+     145,   146,   147,   148,   149,   150,   151,   156,   109,   197,
+     198,   199,   209,   156,   114,   207,   201,   154,   154,   157,
+     113,   107,   189,   113,   114,   157,   188,   106,   114,   107,
+     112,    56,   200,   192,   190,   202,   210,   105,   156,   170,
+     173,   205,   195,   107,   189,   113,   189,   107,   157,   154,
+     104,   205,   211,   212,   197,   204,    76,   105,   109,   189,
+     107,   156,   114,   105,    17,   113,   192,   196,   200,   114,
+     105,   156,   196,   197,   189,   114
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -3267,6 +3330,15 @@ yyreduce:
   case 85:
 
     {
+        if (context->enterStructDeclaration((yyvsp[(1) - (2)].lex).line, *(yyvsp[(1) - (2)].lex).string))
+            context->recover();
+        (yyval.lex) = (yyvsp[(1) - (2)].lex);
+    }
+    break;
+
+  case 86:
+
+    {
         TFunction &function = *((yyvsp[(1) - (2)].interm).function);
         
         TIntermAggregate *prototype = new TIntermAggregate;
@@ -3295,7 +3367,7 @@ yyreduce:
     }
     break;
 
-  case 86:
+  case 87:
 
     {
         TIntermAggregate *aggNode = (yyvsp[(1) - (2)].interm).intermAggregate;
@@ -3305,7 +3377,7 @@ yyreduce:
     }
     break;
 
-  case 87:
+  case 88:
 
     {
         if (!context->symbolTable.setDefaultPrecision( (yyvsp[(3) - (4)].interm.type), (yyvsp[(2) - (4)].interm.precision) )) {
@@ -3316,7 +3388,39 @@ yyreduce:
     }
     break;
 
-  case 88:
+  case 89:
+
+    {
+        ES3_ONLY(getQualifierString((yyvsp[(1) - (5)].interm.type).qualifier), (yyvsp[(1) - (5)].interm.type).line);
+        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (5)].interm.type), (yyvsp[(2) - (5)].lex).line, *(yyvsp[(2) - (5)].lex).string, (yyvsp[(3) - (5)].interm.fieldList), NULL, (yyvsp[(1) - (5)].interm.type).line, NULL, (yyvsp[(1) - (5)].interm.type).line);
+    }
+    break;
+
+  case 90:
+
+    {
+        ES3_ONLY(getQualifierString((yyvsp[(1) - (6)].interm.type).qualifier), (yyvsp[(1) - (6)].interm.type).line);
+        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (6)].interm.type), (yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string, (yyvsp[(3) - (6)].interm.fieldList), (yyvsp[(5) - (6)].lex).string, (yyvsp[(5) - (6)].lex).line, NULL, (yyvsp[(1) - (6)].interm.type).line);
+    }
+    break;
+
+  case 91:
+
+    {
+        ES3_ONLY(getQualifierString((yyvsp[(1) - (9)].interm.type).qualifier), (yyvsp[(1) - (9)].interm.type).line);
+        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (9)].interm.type), (yyvsp[(2) - (9)].lex).line, *(yyvsp[(2) - (9)].lex).string, (yyvsp[(3) - (9)].interm.fieldList), (yyvsp[(5) - (9)].lex).string, (yyvsp[(5) - (9)].lex).line, (yyvsp[(7) - (9)].interm.intermTypedNode), (yyvsp[(6) - (9)].lex).line);
+    }
+    break;
+
+  case 92:
+
+    {
+        context->parseGlobalLayoutQualifier((yyvsp[(1) - (2)].interm.type));
+        (yyval.interm.intermNode) = 0;
+    }
+    break;
+
+  case 93:
 
     {
         //
@@ -3355,21 +3459,21 @@ yyreduce:
     }
     break;
 
-  case 89:
+  case 94:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
     }
     break;
 
-  case 90:
+  case 95:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
     }
     break;
 
-  case 91:
+  case 96:
 
     {
         // Add the parameter
@@ -3381,7 +3485,7 @@ yyreduce:
     }
     break;
 
-  case 92:
+  case 97:
 
     {
         //
@@ -3403,7 +3507,7 @@ yyreduce:
     }
     break;
 
-  case 93:
+  case 98:
 
     {
         if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
@@ -3424,7 +3528,7 @@ yyreduce:
     }
     break;
 
-  case 94:
+  case 99:
 
     {
         if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
@@ -3439,7 +3543,7 @@ yyreduce:
     }
     break;
 
-  case 95:
+  case 100:
 
     {
         // Check that we can make an array out of this type
@@ -3461,7 +3565,7 @@ yyreduce:
     }
     break;
 
-  case 96:
+  case 101:
 
     {
         (yyval.interm) = (yyvsp[(3) - (3)].interm);
@@ -3470,7 +3574,7 @@ yyreduce:
     }
     break;
 
-  case 97:
+  case 102:
 
     {
         (yyval.interm) = (yyvsp[(2) - (2)].interm);
@@ -3481,7 +3585,7 @@ yyreduce:
     }
     break;
 
-  case 98:
+  case 103:
 
     {
         (yyval.interm) = (yyvsp[(3) - (3)].interm);
@@ -3490,7 +3594,7 @@ yyreduce:
     }
     break;
 
-  case 99:
+  case 104:
 
     {
         (yyval.interm) = (yyvsp[(2) - (2)].interm);
@@ -3501,35 +3605,35 @@ yyreduce:
     }
     break;
 
-  case 100:
+  case 105:
 
     {
         (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
-  case 101:
+  case 106:
 
     {
         (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
-  case 102:
+  case 107:
 
     {
         (yyval.interm.qualifier) = EvqOut;
     }
     break;
 
-  case 103:
+  case 108:
 
     {
         (yyval.interm.qualifier) = EvqInOut;
     }
     break;
 
-  case 104:
+  case 109:
 
     {
         TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
@@ -3537,14 +3641,14 @@ yyreduce:
     }
     break;
 
-  case 105:
+  case 110:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 106:
+  case 111:
 
     {
         (yyval.interm) = (yyvsp[(1) - (3)].interm);
@@ -3552,7 +3656,7 @@ yyreduce:
     }
     break;
 
-  case 107:
+  case 112:
 
     {
         (yyval.interm) = (yyvsp[(1) - (6)].interm);
@@ -3560,7 +3664,7 @@ yyreduce:
     }
     break;
 
-  case 108:
+  case 113:
 
     {
         ES3_ONLY("[]", (yyvsp[(3) - (7)].lex).line);
@@ -3569,7 +3673,7 @@ yyreduce:
     }
     break;
 
-  case 109:
+  case 114:
 
     {
         ES3_ONLY("=", (yyvsp[(7) - (8)].lex).line);
@@ -3578,7 +3682,7 @@ yyreduce:
     }
     break;
 
-  case 110:
+  case 115:
 
     {
         (yyval.interm) = (yyvsp[(1) - (5)].interm);
@@ -3586,7 +3690,7 @@ yyreduce:
     }
     break;
 
-  case 111:
+  case 116:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
@@ -3594,7 +3698,7 @@ yyreduce:
     }
     break;
 
-  case 112:
+  case 117:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (2)].interm.type);
@@ -3602,7 +3706,7 @@ yyreduce:
     }
     break;
 
-  case 113:
+  case 118:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (5)].interm.type);
@@ -3610,7 +3714,7 @@ yyreduce:
     }
     break;
 
-  case 114:
+  case 119:
 
     {
         ES3_ONLY("[]", (yyvsp[(3) - (6)].lex).line);
@@ -3619,7 +3723,7 @@ yyreduce:
     }
     break;
 
-  case 115:
+  case 120:
 
     {
         ES3_ONLY("=", (yyvsp[(6) - (7)].lex).line);
@@ -3628,7 +3732,7 @@ yyreduce:
     }
     break;
 
-  case 116:
+  case 121:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (4)].interm.type);
@@ -3636,7 +3740,7 @@ yyreduce:
     }
     break;
 
-  case 117:
+  case 122:
 
     {
         // $$.type is not used in invariant declarations.
@@ -3644,7 +3748,7 @@ yyreduce:
     }
     break;
 
-  case 118:
+  case 123:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3658,35 +3762,35 @@ yyreduce:
     }
     break;
 
-  case 119:
+  case 124:
 
     {
         (yyval.interm.type) = context->addFullySpecifiedType((yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(1) - (2)].interm.type).invariant, (yyvsp[(1) - (2)].interm.type).layoutQualifier, (yyvsp[(2) - (2)].interm.type));
     }
     break;
 
-  case 120:
+  case 125:
 
     {
         (yyval.interm.type).qualifier = EvqSmooth;
     }
     break;
 
-  case 121:
+  case 126:
 
     {
         (yyval.interm.type).qualifier = EvqFlat;
     }
     break;
 
-  case 122:
+  case 127:
 
     {
         (yyval.interm.qualifier) = EvqConstReadOnly;
     }
     break;
 
-  case 123:
+  case 128:
 
     {
         VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
@@ -3697,7 +3801,7 @@ yyreduce:
     }
     break;
 
-  case 124:
+  case 129:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
@@ -3710,7 +3814,7 @@ yyreduce:
     }
     break;
 
-  case 125:
+  case 130:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
@@ -3723,21 +3827,21 @@ yyreduce:
     }
     break;
 
-  case 126:
+  case 131:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(1) - (1)].interm.type).qualifier, (yyvsp[(1) - (1)].interm.type).line);
     }
     break;
 
-  case 127:
+  case 132:
 
     {
         (yyval.interm.type) = context->joinInterpolationQualifiers((yyvsp[(1) - (2)].interm.type).line, (yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line, (yyvsp[(2) - (2)].interm.type).qualifier);
     }
     break;
 
-  case 128:
+  case 133:
 
     {
         context->error((yyvsp[(1) - (1)].interm.type).line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getQualifierString((yyvsp[(1) - (1)].interm.type).qualifier));
@@ -3748,7 +3852,7 @@ yyreduce:
     }
     break;
 
-  case 129:
+  case 134:
 
     {
         (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3756,7 +3860,7 @@ yyreduce:
     }
     break;
 
-  case 130:
+  case 135:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line);
@@ -3764,7 +3868,7 @@ yyreduce:
     }
     break;
 
-  case 131:
+  case 136:
 
     {
         (yyval.interm.type).qualifier = EvqConstExpr;
@@ -3772,7 +3876,7 @@ yyreduce:
     }
     break;
 
-  case 132:
+  case 137:
 
     {
                ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line);
@@ -3781,7 +3885,7 @@ yyreduce:
     }
     break;
 
-  case 133:
+  case 138:
 
     {
                ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line);
@@ -3790,7 +3894,7 @@ yyreduce:
     }
     break;
 
-  case 134:
+  case 139:
 
     {
                ES3_ONLY("centroid in", (yyvsp[(1) - (2)].lex).line);
@@ -3804,7 +3908,7 @@ yyreduce:
     }
     break;
 
-  case 135:
+  case 140:
 
     {
                ES3_ONLY("centroid out", (yyvsp[(1) - (2)].lex).line);
@@ -3818,7 +3922,7 @@ yyreduce:
     }
     break;
 
-  case 136:
+  case 141:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3828,7 +3932,7 @@ yyreduce:
     }
     break;
 
-  case 137:
+  case 142:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3842,7 +3946,7 @@ yyreduce:
     }
     break;
 
-  case 138:
+  case 143:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3850,28 +3954,28 @@ yyreduce:
     }
     break;
 
-  case 139:
+  case 144:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 140:
+  case 145:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 141:
+  case 146:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 142:
+  case 147:
 
     {
         ES3_ONLY("layout", (yyvsp[(1) - (4)].lex).line);
@@ -3879,49 +3983,49 @@ yyreduce:
     }
     break;
 
-  case 143:
+  case 148:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[(1) - (1)].interm.layoutQualifier);
     }
     break;
 
-  case 144:
+  case 149:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[(1) - (3)].interm.layoutQualifier), (yyvsp[(3) - (3)].interm.layoutQualifier));
     }
     break;
 
-  case 145:
+  case 150:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (1)].lex).string, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
-  case 146:
+  case 151:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
     }
     break;
 
-  case 147:
+  case 152:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
     }
     break;
 
-  case 148:
+  case 153:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 149:
+  case 154:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3937,7 +4041,7 @@ yyreduce:
     }
     break;
 
-  case 150:
+  case 155:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3945,7 +4049,7 @@ yyreduce:
     }
     break;
 
-  case 151:
+  case 156:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3953,7 +4057,7 @@ yyreduce:
     }
     break;
 
-  case 152:
+  case 157:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3961,7 +4065,7 @@ yyreduce:
     }
     break;
 
-  case 153:
+  case 158:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3969,7 +4073,7 @@ yyreduce:
     }
     break;
 
-  case 154:
+  case 159:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3977,7 +4081,7 @@ yyreduce:
     }
     break;
 
-  case 155:
+  case 160:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3986,7 +4090,7 @@ yyreduce:
     }
     break;
 
-  case 156:
+  case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3995,7 +4099,7 @@ yyreduce:
     }
     break;
 
-  case 157:
+  case 162:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4004,7 +4108,7 @@ yyreduce:
     }
     break;
 
-  case 158:
+  case 163:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4013,7 +4117,7 @@ yyreduce:
     }
     break;
 
-  case 159:
+  case 164:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4022,7 +4126,7 @@ yyreduce:
     }
     break;
 
-  case 160:
+  case 165:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4031,7 +4135,7 @@ yyreduce:
     }
     break;
 
-  case 161:
+  case 166:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4040,7 +4144,7 @@ yyreduce:
     }
     break;
 
-  case 162:
+  case 167:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4049,7 +4153,7 @@ yyreduce:
     }
     break;
 
-  case 163:
+  case 168:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4058,7 +4162,7 @@ yyreduce:
     }
     break;
 
-  case 164:
+  case 169:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4067,7 +4171,7 @@ yyreduce:
     }
     break;
 
-  case 165:
+  case 170:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4076,7 +4180,7 @@ yyreduce:
     }
     break;
 
-  case 166:
+  case 171:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4085,7 +4189,7 @@ yyreduce:
     }
     break;
 
-  case 167:
+  case 172:
 
     {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
@@ -4095,7 +4199,7 @@ yyreduce:
     }
     break;
 
-  case 168:
+  case 173:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -4105,7 +4209,7 @@ yyreduce:
     }
     break;
 
-  case 169:
+  case 174:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -4115,7 +4219,7 @@ yyreduce:
     }
     break;
 
-  case 170:
+  case 175:
 
     {
         FRAG_VERT_ONLY("mat2x3", (yyvsp[(1) - (1)].lex).line);
@@ -4125,7 +4229,7 @@ yyreduce:
     }
     break;
 
-  case 171:
+  case 176:
 
     {
         FRAG_VERT_ONLY("mat3x2", (yyvsp[(1) - (1)].lex).line);
@@ -4135,7 +4239,7 @@ yyreduce:
     }
     break;
 
-  case 172:
+  case 177:
 
     {
         FRAG_VERT_ONLY("mat2x4", (yyvsp[(1) - (1)].lex).line);
@@ -4145,7 +4249,7 @@ yyreduce:
     }
     break;
 
-  case 173:
+  case 178:
 
     {
         FRAG_VERT_ONLY("mat4x2", (yyvsp[(1) - (1)].lex).line);
@@ -4155,7 +4259,7 @@ yyreduce:
     }
     break;
 
-  case 174:
+  case 179:
 
     {
         FRAG_VERT_ONLY("mat3x4", (yyvsp[(1) - (1)].lex).line);
@@ -4165,7 +4269,7 @@ yyreduce:
     }
     break;
 
-  case 175:
+  case 180:
 
     {
         FRAG_VERT_ONLY("mat4x3", (yyvsp[(1) - (1)].lex).line);
@@ -4175,7 +4279,7 @@ yyreduce:
     }
     break;
 
-  case 176:
+  case 181:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4184,7 +4288,7 @@ yyreduce:
     }
     break;
 
-  case 177:
+  case 182:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4193,7 +4297,7 @@ yyreduce:
     }
     break;
 
-  case 178:
+  case 183:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4206,7 +4310,7 @@ yyreduce:
     }
     break;
 
-  case 179:
+  case 184:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4215,7 +4319,7 @@ yyreduce:
     }
     break;
 
-  case 180:
+  case 185:
 
     {
         FRAG_VERT_ONLY("sampler2DArray", (yyvsp[(1) - (1)].lex).line);
@@ -4224,7 +4328,7 @@ yyreduce:
     }
     break;
 
-  case 181:
+  case 186:
 
     {
         FRAG_VERT_ONLY("isampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4233,7 +4337,7 @@ yyreduce:
     }
     break;
 
-  case 182:
+  case 187:
 
     {
         FRAG_VERT_ONLY("isampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4242,7 +4346,7 @@ yyreduce:
     }
     break;
 
-  case 183:
+  case 188:
 
     {
         FRAG_VERT_ONLY("isamplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4251,7 +4355,7 @@ yyreduce:
     }
     break;
 
-  case 184:
+  case 189:
 
     {
         FRAG_VERT_ONLY("isampler2DArray", (yyvsp[(1) - (1)].lex).line);
@@ -4260,7 +4364,7 @@ yyreduce:
     }
     break;
 
-  case 185:
+  case 190:
 
     {
         FRAG_VERT_ONLY("usampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4269,7 +4373,7 @@ yyreduce:
     }
     break;
 
-  case 186:
+  case 191:
 
     {
         FRAG_VERT_ONLY("usampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4278,7 +4382,7 @@ yyreduce:
     }
     break;
 
-  case 187:
+  case 192:
 
     {
         FRAG_VERT_ONLY("usamplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4287,7 +4391,7 @@ yyreduce:
     }
     break;
 
-  case 188:
+  case 193:
 
     {
         FRAG_VERT_ONLY("usampler2DArray", (yyvsp[(1) - (1)].lex).line);
@@ -4296,7 +4400,7 @@ yyreduce:
     }
     break;
 
-  case 189:
+  case 194:
 
     {
         FRAG_VERT_ONLY("sampler2DShadow", (yyvsp[(1) - (1)].lex).line);
@@ -4305,7 +4409,7 @@ yyreduce:
     }
     break;
 
-  case 190:
+  case 195:
 
     {
         FRAG_VERT_ONLY("samplerCubeShadow", (yyvsp[(1) - (1)].lex).line);
@@ -4314,7 +4418,7 @@ yyreduce:
     }
     break;
 
-  case 191:
+  case 196:
 
     {
         FRAG_VERT_ONLY("sampler2DArrayShadow", (yyvsp[(1) - (1)].lex).line);
@@ -4323,7 +4427,7 @@ yyreduce:
     }
     break;
 
-  case 192:
+  case 197:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4332,7 +4436,7 @@ yyreduce:
     }
     break;
 
-  case 193:
+  case 198:
 
     {
         //
@@ -4346,38 +4450,38 @@ yyreduce:
     }
     break;
 
-  case 194:
+  case 199:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 195:
+  case 200:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (6)].lex).line, (yyvsp[(2) - (6)].lex).line, (yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.fieldList));
     }
     break;
 
-  case 196:
+  case 201:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 197:
+  case 202:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (5)].lex).line, (yyvsp[(1) - (5)].lex).line, NewPoolTString(""), (yyvsp[(4) - (5)].interm.fieldList));
     }
     break;
 
-  case 198:
+  case 203:
 
     {
         (yyval.interm.fieldList) = (yyvsp[(1) - (1)].interm.fieldList);
     }
     break;
 
-  case 199:
+  case 204:
 
     {
         (yyval.interm.fieldList) = (yyvsp[(1) - (2)].interm.fieldList);
@@ -4394,14 +4498,14 @@ yyreduce:
     }
     break;
 
-  case 200:
+  case 205:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.fieldList));
     }
     break;
 
-  case 201:
+  case 206:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4411,7 +4515,7 @@ yyreduce:
     }
     break;
 
-  case 202:
+  case 207:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4419,14 +4523,14 @@ yyreduce:
     }
     break;
 
-  case 203:
+  case 208:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[(3) - (3)].interm.field));
     }
     break;
 
-  case 204:
+  case 209:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4437,7 +4541,7 @@ yyreduce:
     }
     break;
 
-  case 205:
+  case 210:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4453,67 +4557,67 @@ yyreduce:
     }
     break;
 
-  case 206:
+  case 211:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 207:
+  case 212:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 208:
+  case 213:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
-  case 209:
+  case 214:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 210:
+  case 215:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 211:
+  case 216:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 212:
+  case 217:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 213:
+  case 218:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 214:
+  case 219:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 215:
+  case 220:
 
     { (yyval.interm.intermAggregate) = 0; }
     break;
 
-  case 216:
+  case 221:
 
     { context->symbolTable.push(); }
     break;
 
-  case 217:
+  case 222:
 
     { context->symbolTable.pop(); }
     break;
 
-  case 218:
+  case 223:
 
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
@@ -4524,44 +4628,44 @@ yyreduce:
     }
     break;
 
-  case 219:
+  case 224:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 220:
+  case 225:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 221:
+  case 226:
 
     { context->symbolTable.push(); }
     break;
 
-  case 222:
+  case 227:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 223:
+  case 228:
 
     { context->symbolTable.push(); }
     break;
 
-  case 224:
+  case 229:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 225:
+  case 230:
 
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 226:
+  case 231:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4572,31 +4676,31 @@ yyreduce:
     }
     break;
 
-  case 227:
+  case 232:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 228:
+  case 233:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 229:
+  case 234:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 230:
+  case 235:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 231:
+  case 236:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4605,7 +4709,7 @@ yyreduce:
     }
     break;
 
-  case 232:
+  case 237:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4613,7 +4717,7 @@ yyreduce:
     }
     break;
 
-  case 233:
+  case 238:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4621,7 +4725,7 @@ yyreduce:
     }
     break;
 
-  case 234:
+  case 239:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4630,7 +4734,7 @@ yyreduce:
     }
     break;
 
-  case 235:
+  case 240:
 
     {
         TIntermNode* intermNode;
@@ -4648,12 +4752,12 @@ yyreduce:
     }
     break;
 
-  case 236:
+  case 241:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 237:
+  case 242:
 
     {
         context->symbolTable.pop();
@@ -4662,12 +4766,12 @@ yyreduce:
     }
     break;
 
-  case 238:
+  case 243:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 239:
+  case 244:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4678,12 +4782,12 @@ yyreduce:
     }
     break;
 
-  case 240:
+  case 245:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 241:
+  case 246:
 
     {
         context->symbolTable.pop();
@@ -4692,35 +4796,35 @@ yyreduce:
     }
     break;
 
-  case 242:
+  case 247:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 243:
+  case 248:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 244:
+  case 249:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 245:
+  case 250:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 246:
+  case 251:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4728,7 +4832,7 @@ yyreduce:
     }
     break;
 
-  case 247:
+  case 252:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4736,7 +4840,7 @@ yyreduce:
     }
     break;
 
-  case 248:
+  case 253:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4747,7 +4851,7 @@ yyreduce:
     }
     break;
 
-  case 249:
+  case 254:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4758,7 +4862,7 @@ yyreduce:
     }
     break;
 
-  case 250:
+  case 255:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4769,7 +4873,7 @@ yyreduce:
     }
     break;
 
-  case 251:
+  case 256:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4784,7 +4888,7 @@ yyreduce:
     }
     break;
 
-  case 252:
+  case 257:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4792,7 +4896,7 @@ yyreduce:
     }
     break;
 
-  case 253:
+  case 258:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4800,7 +4904,7 @@ yyreduce:
     }
     break;
 
-  case 254:
+  case 259:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4808,21 +4912,21 @@ yyreduce:
     }
     break;
 
-  case 255:
+  case 260:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 256:
+  case 261:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 257:
+  case 262:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4911,7 +5015,7 @@ yyreduce:
     }
     break;
 
-  case 258:
+  case 263:
 
     {
         //?? Check that all paths return a value if return type != void ?