Robust distinction between IDENTIFIER and TYPE_NAME tokens.

To distinguish the tokens we used to track the lexer context,
which is fragile. This patch implements a better way -
combine the two tokens into a common parser rule and let
the parser context decide if the declaration is valid,
which it already does by checking the naming conflicts.

TEST=WebGL conformance tests.

Review URL: https://codereview.appspot.com/8797044


Conflicts:

	src/compiler/glslang_tab.cpp
	src/compiler/glslang_tab.h

git-svn-id: http://angleproject.googlecode.com/svn/branches/dx11proto@2229 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/ParseHelper.h b/src/compiler/ParseHelper.h
index fc58153..3521ee6 100644
--- a/src/compiler/ParseHelper.h
+++ b/src/compiler/ParseHelper.h
@@ -33,10 +33,8 @@
             compileOptions(options),
             sourcePath(sourcePath),
             treeRoot(0),
-            lexAfterType(false),
             loopNestingLevel(0),
             structNestingLevel(0),
-            inTypeParen(false),
             currentFunctionType(NULL),
             functionReturnsValue(false),
             checksPrecisionErrors(checksPrecErrors),
@@ -51,10 +49,8 @@
     int compileOptions;
     const char* sourcePath;      // Path of source file or NULL.
     TIntermNode* treeRoot;       // root of parse tree being created
-    bool lexAfterType;           // true if we've recognized a type, so can only be looking for an identifier
     int loopNestingLevel;        // 0 if outside all loops
     int structNestingLevel;      // incremented while parsing a struct declaration
-    bool inTypeParen;            // true if in parentheses, looking only for an identifier
     const TType* currentFunctionType;  // the return type of the function that's currently being parsed
     bool functionReturnsValue;   // true if a non-void function has a return
     bool checksPrecisionErrors;  // true if an error will be generated when a variable is declared without precision, explicit or implicit.
diff --git a/src/compiler/glslang.l b/src/compiler/glslang.l
index a74a207..a926cdf 100644
--- a/src/compiler/glslang.l
+++ b/src/compiler/glslang.l
@@ -98,36 +98,36 @@
 "out"          { return OUT_QUAL; }
 "inout"        { return INOUT_QUAL; }
 
-"float"        { context->lexAfterType = true; return FLOAT_TYPE; }
-"int"          { context->lexAfterType = true; return INT_TYPE; }
-"void"         { context->lexAfterType = true; return VOID_TYPE; }
-"bool"         { context->lexAfterType = true; return BOOL_TYPE; }
+"float"        { return FLOAT_TYPE; }
+"int"          { return INT_TYPE; }
+"void"         { return VOID_TYPE; }
+"bool"         { return BOOL_TYPE; }
 "true"         { yylval->lex.b = true;  return BOOLCONSTANT; }
 "false"        { yylval->lex.b = false; return BOOLCONSTANT; }
 
 "discard"      { return DISCARD; }
 "return"       { return RETURN; }
 
-"mat2"         { context->lexAfterType = true; return MATRIX2; }
-"mat3"         { context->lexAfterType = true; return MATRIX3; }
-"mat4"         { context->lexAfterType = true; return MATRIX4; }
+"mat2"         { return MATRIX2; }
+"mat3"         { return MATRIX3; }
+"mat4"         { return MATRIX4; }
 
-"vec2"         { context->lexAfterType = true; return VEC2; }
-"vec3"         { context->lexAfterType = true; return VEC3; }
-"vec4"         { context->lexAfterType = true; return VEC4; }
-"ivec2"        { context->lexAfterType = true; return IVEC2; }
-"ivec3"        { context->lexAfterType = true; return IVEC3; }
-"ivec4"        { context->lexAfterType = true; return IVEC4; }
-"bvec2"        { context->lexAfterType = true; return BVEC2; }
-"bvec3"        { context->lexAfterType = true; return BVEC3; }
-"bvec4"        { context->lexAfterType = true; return BVEC4; }
+"vec2"         { return VEC2; }
+"vec3"         { return VEC3; }
+"vec4"         { return VEC4; }
+"ivec2"        { return IVEC2; }
+"ivec3"        { return IVEC3; }
+"ivec4"        { return IVEC4; }
+"bvec2"        { return BVEC2; }
+"bvec3"        { return BVEC3; }
+"bvec4"        { return BVEC4; }
 
-"sampler2D"          { context->lexAfterType = true; return SAMPLER2D; }
-"samplerCube"        { context->lexAfterType = true; return SAMPLERCUBE; }
-"samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
-"sampler2DRect"      { context->lexAfterType = true; return SAMPLER2DRECT; }
+"sampler2D"          { return SAMPLER2D; }
+"samplerCube"        { return SAMPLERCUBE; }
+"samplerExternalOES" { return SAMPLER_EXTERNAL_OES; }
+"sampler2DRect"      { return SAMPLER2DRECT; }
 
-"struct"       { context->lexAfterType = true; return STRUCT; }
+"struct"       { return STRUCT; }
 
 "asm"          { return reserved_word(yyscanner); }
 
@@ -222,14 +222,14 @@
 "!="            { return NE_OP; }
 "<<"            { return LEFT_OP; }
 ">>"            { return RIGHT_OP; }
-";"             { context->lexAfterType = false; return SEMICOLON; }
-("{"|"<%")      { context->lexAfterType = false; return LEFT_BRACE; }
+";"             { return SEMICOLON; }
+("{"|"<%")      { return LEFT_BRACE; }
 ("}"|"%>")      { return RIGHT_BRACE; }
-","         { if (context->inTypeParen) context->lexAfterType = false; return COMMA; }
+","         { return COMMA; }
 ":"         { return COLON; }
-"="         { context->lexAfterType = false; return EQUAL; }
-"("         { context->lexAfterType = false; context->inTypeParen = true; return LEFT_PAREN; }
-")"         { context->inTypeParen = false; return RIGHT_PAREN; }
+"="         { return EQUAL; }
+"("         { return LEFT_PAREN; }
+")"         { return RIGHT_PAREN; }
 ("["|"<:")  { return LEFT_BRACKET; }
 ("]"|":>")  { return RIGHT_BRACKET; }
 "."         { BEGIN(FIELDS); return DOT; }
@@ -280,12 +280,10 @@
     
     int token = IDENTIFIER;
     TSymbol* symbol = yyextra->symbolTable.find(yytext);
-    if (yyextra->lexAfterType == false && symbol && symbol->isVariable()) {
+    if (symbol && symbol->isVariable()) {
         TVariable* variable = static_cast<TVariable*>(symbol);
-        if (variable->isUserType()) {
-            yyextra->lexAfterType = true;
+        if (variable->isUserType())
             token = TYPE_NAME;
-        }
     }
     yylval->lex.symbol = symbol;
     return token;
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index 8dbcee3..b7e2bd6 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -127,6 +127,7 @@
 %token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
 %token <lex> LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION
 
+%type <lex> identifier
 %type <interm> assignment_operator unary_operator
 %type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
 %type <interm.intermTypedNode> expression integer_expression assignment_expression
@@ -164,6 +165,10 @@
 %start translation_unit
 %%
 
+identifier
+    : IDENTIFIER
+    | TYPE_NAME
+
 variable_identifier
     : IDENTIFIER {
         // The symbol table search was done in the lexical phase
@@ -1102,7 +1107,7 @@
 
 parameter_declarator
     // Type + name
-    : type_specifier IDENTIFIER {
+    : type_specifier identifier {
         if ($1.type == EbtVoid) {
             context->error($2.line, "illegal use of type 'void'", $2.string->c_str());
             context->recover();
@@ -1113,7 +1118,7 @@
         $$.line = $2.line;
         $$.param = param;
     }
-    | type_specifier IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET {
+    | type_specifier identifier LEFT_BRACKET constant_expression RIGHT_BRACKET {
         // Check that we can make an array out of this type
         if (context->arrayTypeErrorCheck($3.line, $1))
             context->recover();
@@ -1197,7 +1202,7 @@
     : single_declaration {
         $$ = $1;
     }
-    | init_declarator_list COMMA IDENTIFIER {
+    | init_declarator_list COMMA identifier {
         if ($1.type.type == EbtInvariant && !$3.symbol)
         {
             context->error($3.line, "undeclared identifier declared as invariant", $3.string->c_str());
@@ -1219,7 +1224,7 @@
         if (symbol && variable)
             symbol->setId(variable->getUniqueId());
     }
-    | init_declarator_list COMMA IDENTIFIER LEFT_BRACKET RIGHT_BRACKET {
+    | init_declarator_list COMMA identifier LEFT_BRACKET RIGHT_BRACKET {
         if (context->structQualifierErrorCheck($3.line, $1.type))
             context->recover();
 
@@ -1237,7 +1242,7 @@
                 context->recover();
         }
     }
-    | init_declarator_list COMMA IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET {
+    | init_declarator_list COMMA identifier LEFT_BRACKET constant_expression RIGHT_BRACKET {
         if (context->structQualifierErrorCheck($3.line, $1.type))
             context->recover();
 
@@ -1261,7 +1266,7 @@
             $$.intermAggregate = context->intermediate.growAggregate($1.intermNode, context->intermediate.addSymbol(variable ? variable->getUniqueId() : 0, *$3.string, type, $3.line), $3.line);
         }
     }
-    | init_declarator_list COMMA IDENTIFIER EQUAL initializer {
+    | init_declarator_list COMMA identifier EQUAL initializer {
         if (context->structQualifierErrorCheck($3.line, $1.type))
             context->recover();
 
@@ -1288,7 +1293,7 @@
         $$.type = $1;
         $$.intermAggregate = context->intermediate.makeAggregate(context->intermediate.addSymbol(0, "", TType($1), $1.line), $1.line);
     }
-    | fully_specified_type IDENTIFIER {
+    | fully_specified_type identifier {
         TIntermSymbol* symbol = context->intermediate.addSymbol(0, *$2.string, TType($1), $2.line);
         $$.intermAggregate = context->intermediate.makeAggregate(symbol, $2.line);
         
@@ -1306,7 +1311,7 @@
         if (variable && symbol)
             symbol->setId(variable->getUniqueId());
     }
-    | fully_specified_type IDENTIFIER LEFT_BRACKET RIGHT_BRACKET {
+    | fully_specified_type identifier LEFT_BRACKET RIGHT_BRACKET {
         context->error($2.line, "unsized array declarations not supported", $2.string->c_str());
         context->recover();
 
@@ -1314,7 +1319,7 @@
         $$.intermAggregate = context->intermediate.makeAggregate(symbol, $2.line);
         $$.type = $1;
     }
-    | fully_specified_type IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET {
+    | fully_specified_type identifier LEFT_BRACKET constant_expression RIGHT_BRACKET {
         TType type = TType($1);
         int size;
         if (context->arraySizeErrorCheck($2.line, $4, size))
@@ -1346,7 +1351,7 @@
                 symbol->setId(variable->getUniqueId());
         }
     }
-    | fully_specified_type IDENTIFIER EQUAL initializer {
+    | fully_specified_type identifier EQUAL initializer {
         if (context->structQualifierErrorCheck($2.line, $1))
             context->recover();
 
@@ -1697,7 +1702,7 @@
     ;
 
 struct_specifier
-    : STRUCT IDENTIFIER LEFT_BRACE { if (context->enterStructDeclaration($2.line, *$2.string)) context->recover(); } struct_declaration_list RIGHT_BRACE {
+    : STRUCT identifier LEFT_BRACE { if (context->enterStructDeclaration($2.line, *$2.string)) context->recover(); } struct_declaration_list RIGHT_BRACE {
         if (context->reservedErrorCheck($2.line, *$2.string))
             context->recover();
 
@@ -1784,7 +1789,7 @@
     ;
 
 struct_declarator
-    : IDENTIFIER {
+    : identifier {
         if (context->reservedErrorCheck($1.line, *$1.string))
             context->recover();
 
@@ -1792,7 +1797,7 @@
         $$.line = $1.line;
         $$.type->setFieldName(*$1.string);
     }
-    | IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET {
+    | identifier LEFT_BRACKET constant_expression RIGHT_BRACKET {
         if (context->reservedErrorCheck($1.line, *$1.string))
             context->recover();
 
@@ -1907,7 +1912,7 @@
         if (context->boolErrorCheck($1->getLine(), $1))
             context->recover();
     }
-    | fully_specified_type IDENTIFIER EQUAL initializer {
+    | fully_specified_type identifier EQUAL initializer {
         TIntermNode* intermNode;
         if (context->structQualifierErrorCheck($2.line, $1))
             context->recover();
diff --git a/src/compiler/glslang_lex.cpp b/src/compiler/glslang_lex.cpp
index 46ed3ac..79892cf 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -1214,19 +1214,19 @@
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return FLOAT_TYPE; }
+{ return FLOAT_TYPE; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return INT_TYPE; }
+{ return INT_TYPE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return VOID_TYPE; }
+{ return VOID_TYPE; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return BOOL_TYPE; }
+{ return BOOL_TYPE; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
@@ -1246,71 +1246,71 @@
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return MATRIX2; }
+{ return MATRIX2; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return MATRIX3; }
+{ return MATRIX3; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return MATRIX4; }
+{ return MATRIX4; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return VEC2; }
+{ return VEC2; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return VEC3; }
+{ return VEC3; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return VEC4; }
+{ return VEC4; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return IVEC2; }
+{ return IVEC2; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return IVEC3; }
+{ return IVEC3; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return IVEC4; }
+{ return IVEC4; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return BVEC2; }
+{ return BVEC2; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return BVEC3; }
+{ return BVEC3; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return BVEC4; }
+{ return BVEC4; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2D; }
+{ return SAMPLER2D; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLERCUBE; }
+{ return SAMPLERCUBE; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
+{ return SAMPLER_EXTERNAL_OES; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2DRECT; }
+{ return SAMPLER2DRECT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return STRUCT; }
+{ return STRUCT; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
@@ -1621,11 +1621,11 @@
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return SEMICOLON; }
+{ return SEMICOLON; }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return LEFT_BRACE; }
+{ return LEFT_BRACE; }
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
@@ -1633,7 +1633,7 @@
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return COMMA; }
+{ return COMMA; }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
@@ -1641,15 +1641,15 @@
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return EQUAL; }
+{ return EQUAL; }
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return LEFT_PAREN; }
+{ return LEFT_PAREN; }
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return RIGHT_PAREN; }
+{ return RIGHT_PAREN; }
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
@@ -2934,12 +2934,10 @@
     
     int token = IDENTIFIER;
     TSymbol* symbol = yyextra->symbolTable.find(yytext);
-    if (yyextra->lexAfterType == false && symbol && symbol->isVariable()) {
+    if (symbol && symbol->isVariable()) {
         TVariable* variable = static_cast<TVariable*>(symbol);
-        if (variable->isUserType()) {
-            yyextra->lexAfterType = true;
+        if (variable->isUserType())
             token = TYPE_NAME;
-        }
     }
     yylval->lex.symbol = symbol;
     return token;
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index afc92a0..779b911 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -532,18 +532,18 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  71
+#define YYFINAL  74
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1416
+#define YYLAST   1437
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  96
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  83
+#define YYNNTS  84
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  201
+#define YYNRULES  203
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  304
+#define YYNSTATES  307
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -598,115 +598,116 @@
    YYRHS.  */
 static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     5,     7,     9,    11,    13,    17,    19,
-      24,    26,    30,    33,    36,    38,    40,    42,    46,    49,
-      52,    55,    57,    60,    64,    67,    69,    71,    73,    75,
-      78,    81,    84,    86,    88,    90,    92,    96,   100,   102,
-     106,   110,   112,   114,   118,   122,   126,   130,   132,   136,
-     140,   142,   144,   146,   148,   152,   154,   158,   160,   164,
-     166,   172,   174,   178,   180,   182,   184,   186,   188,   190,
-     194,   196,   199,   202,   207,   210,   212,   214,   217,   221,
-     225,   228,   234,   238,   241,   245,   248,   249,   251,   253,
-     255,   257,   259,   263,   269,   276,   282,   284,   287,   292,
-     298,   303,   306,   308,   311,   313,   315,   317,   320,   322,
-     324,   327,   329,   331,   333,   335,   340,   342,   344,   346,
+       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
+      21,    23,    28,    30,    34,    37,    40,    42,    44,    46,
+      50,    53,    56,    59,    61,    64,    68,    71,    73,    75,
+      77,    79,    82,    85,    88,    90,    92,    94,    96,   100,
+     104,   106,   110,   114,   116,   118,   122,   126,   130,   134,
+     136,   140,   144,   146,   148,   150,   152,   156,   158,   162,
+     164,   168,   170,   176,   178,   182,   184,   186,   188,   190,
+     192,   194,   198,   200,   203,   206,   211,   214,   216,   218,
+     221,   225,   229,   232,   238,   242,   245,   249,   252,   253,
+     255,   257,   259,   261,   263,   267,   273,   280,   286,   288,
+     291,   296,   302,   307,   310,   312,   315,   317,   319,   321,
+     324,   326,   328,   331,   333,   335,   337,   339,   344,   346,
      348,   350,   352,   354,   356,   358,   360,   362,   364,   366,
-     368,   370,   372,   374,   376,   378,   380,   382,   384,   385,
-     392,   393,   399,   401,   404,   408,   410,   414,   416,   421,
-     423,   425,   427,   429,   431,   433,   435,   437,   439,   442,
-     443,   444,   450,   452,   454,   455,   458,   459,   462,   465,
-     469,   471,   474,   476,   479,   485,   489,   491,   493,   498,
-     499,   506,   507,   516,   517,   525,   527,   529,   531,   532,
-     535,   539,   542,   545,   548,   552,   555,   557,   560,   562,
-     564,   565
+     368,   370,   372,   374,   376,   378,   380,   382,   384,   386,
+     388,   389,   396,   397,   403,   405,   408,   412,   414,   418,
+     420,   425,   427,   429,   431,   433,   435,   437,   439,   441,
+     443,   446,   447,   448,   454,   456,   458,   459,   462,   463,
+     466,   469,   473,   475,   478,   480,   483,   489,   493,   495,
+     497,   502,   503,   510,   511,   520,   521,   529,   531,   533,
+     535,   536,   539,   543,   546,   549,   552,   556,   559,   561,
+     564,   566,   568,   569
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     175,     0,    -1,    45,    -1,    97,    -1,    48,    -1,    47,
-      -1,    49,    -1,    72,   124,    73,    -1,    98,    -1,    99,
-      74,   100,    75,    -1,   101,    -1,    99,    78,    50,    -1,
-      99,    53,    -1,    99,    54,    -1,   124,    -1,   102,    -1,
-     103,    -1,    99,    78,   103,    -1,   105,    73,    -1,   104,
-      73,    -1,   106,    39,    -1,   106,    -1,   106,   122,    -1,
-     105,    79,   122,    -1,   107,    72,    -1,   142,    -1,    45,
-      -1,    50,    -1,    99,    -1,    53,   108,    -1,    54,   108,
-      -1,   109,   108,    -1,    86,    -1,    84,    -1,    83,    -1,
-     108,    -1,   110,    87,   108,    -1,   110,    88,   108,    -1,
-     110,    -1,   111,    86,   110,    -1,   111,    84,   110,    -1,
-     111,    -1,   112,    -1,   113,    90,   112,    -1,   113,    91,
-     112,    -1,   113,    55,   112,    -1,   113,    56,   112,    -1,
-     113,    -1,   114,    57,   113,    -1,   114,    58,   113,    -1,
-     114,    -1,   115,    -1,   116,    -1,   117,    -1,   118,    59,
-     117,    -1,   118,    -1,   119,    61,   118,    -1,   119,    -1,
-     120,    60,   119,    -1,   120,    -1,   120,    95,   124,    80,
-     122,    -1,   121,    -1,   108,   123,   122,    -1,    81,    -1,
-      62,    -1,    63,    -1,    64,    -1,    71,    -1,   122,    -1,
-     124,    79,   122,    -1,   121,    -1,   127,    82,    -1,   135,
-      82,    -1,     7,   140,   141,    82,    -1,   128,    73,    -1,
-     130,    -1,   129,    -1,   130,   132,    -1,   129,    79,   132,
-      -1,   137,    45,    72,    -1,   139,    45,    -1,   139,    45,
-      74,   125,    75,    -1,   138,   133,   131,    -1,   133,   131,
-      -1,   138,   133,   134,    -1,   133,   134,    -1,    -1,    33,
-      -1,    34,    -1,    35,    -1,   139,    -1,   136,    -1,   135,
-      79,    45,    -1,   135,    79,    45,    74,    75,    -1,   135,
-      79,    45,    74,   125,    75,    -1,   135,    79,    45,    81,
-     150,    -1,   137,    -1,   137,    45,    -1,   137,    45,    74,
-      75,    -1,   137,    45,    74,   125,    75,    -1,   137,    45,
-      81,   150,    -1,     3,    45,    -1,   139,    -1,   138,   139,
-      -1,     9,    -1,     8,    -1,    37,    -1,     3,    37,    -1,
-      36,    -1,   141,    -1,   140,   141,    -1,     4,    -1,     5,
-      -1,     6,    -1,   142,    -1,   142,    74,   125,    75,    -1,
-      39,    -1,    11,    -1,    12,    -1,    10,    -1,    27,    -1,
-      28,    -1,    29,    -1,    21,    -1,    22,    -1,    23,    -1,
-      24,    -1,    25,    -1,    26,    -1,    30,    -1,    31,    -1,
-      32,    -1,    41,    -1,    42,    -1,    43,    -1,    44,    -1,
-     143,    -1,    46,    -1,    -1,    38,    45,    76,   144,   146,
-      77,    -1,    -1,    38,    76,   145,   146,    77,    -1,   147,
-      -1,   146,   147,    -1,   139,   148,    82,    -1,   149,    -1,
-     148,    79,   149,    -1,    45,    -1,    45,    74,   125,    75,
-      -1,   122,    -1,   126,    -1,   154,    -1,   153,    -1,   151,
-      -1,   163,    -1,   164,    -1,   167,    -1,   174,    -1,    76,
-      77,    -1,    -1,    -1,    76,   155,   162,   156,    77,    -1,
-     161,    -1,   153,    -1,    -1,   159,   161,    -1,    -1,   160,
-     153,    -1,    76,    77,    -1,    76,   162,    77,    -1,   152,
-      -1,   162,   152,    -1,    82,    -1,   124,    82,    -1,    18,
-      72,   124,    73,   165,    -1,   158,    16,   158,    -1,   158,
-      -1,   124,    -1,   137,    45,    81,   150,    -1,    -1,    40,
-      72,   168,   166,    73,   157,    -1,    -1,    15,   169,   158,
-      40,    72,   124,    73,    82,    -1,    -1,    17,    72,   170,
-     171,   173,    73,   157,    -1,   163,    -1,   151,    -1,   166,
-      -1,    -1,   172,    82,    -1,   172,    82,   124,    -1,    14,
-      82,    -1,    13,    82,    -1,    20,    82,    -1,    20,   124,
-      82,    -1,    19,    82,    -1,   176,    -1,   175,   176,    -1,
-     177,    -1,   126,    -1,    -1,   127,   178,   161,    -1
+     176,     0,    -1,    45,    -1,    46,    -1,    45,    -1,    98,
+      -1,    48,    -1,    47,    -1,    49,    -1,    72,   125,    73,
+      -1,    99,    -1,   100,    74,   101,    75,    -1,   102,    -1,
+     100,    78,    50,    -1,   100,    53,    -1,   100,    54,    -1,
+     125,    -1,   103,    -1,   104,    -1,   100,    78,   104,    -1,
+     106,    73,    -1,   105,    73,    -1,   107,    39,    -1,   107,
+      -1,   107,   123,    -1,   106,    79,   123,    -1,   108,    72,
+      -1,   143,    -1,    45,    -1,    50,    -1,   100,    -1,    53,
+     109,    -1,    54,   109,    -1,   110,   109,    -1,    86,    -1,
+      84,    -1,    83,    -1,   109,    -1,   111,    87,   109,    -1,
+     111,    88,   109,    -1,   111,    -1,   112,    86,   111,    -1,
+     112,    84,   111,    -1,   112,    -1,   113,    -1,   114,    90,
+     113,    -1,   114,    91,   113,    -1,   114,    55,   113,    -1,
+     114,    56,   113,    -1,   114,    -1,   115,    57,   114,    -1,
+     115,    58,   114,    -1,   115,    -1,   116,    -1,   117,    -1,
+     118,    -1,   119,    59,   118,    -1,   119,    -1,   120,    61,
+     119,    -1,   120,    -1,   121,    60,   120,    -1,   121,    -1,
+     121,    95,   125,    80,   123,    -1,   122,    -1,   109,   124,
+     123,    -1,    81,    -1,    62,    -1,    63,    -1,    64,    -1,
+      71,    -1,   123,    -1,   125,    79,   123,    -1,   122,    -1,
+     128,    82,    -1,   136,    82,    -1,     7,   141,   142,    82,
+      -1,   129,    73,    -1,   131,    -1,   130,    -1,   131,   133,
+      -1,   130,    79,   133,    -1,   138,    45,    72,    -1,   140,
+      97,    -1,   140,    97,    74,   126,    75,    -1,   139,   134,
+     132,    -1,   134,   132,    -1,   139,   134,   135,    -1,   134,
+     135,    -1,    -1,    33,    -1,    34,    -1,    35,    -1,   140,
+      -1,   137,    -1,   136,    79,    97,    -1,   136,    79,    97,
+      74,    75,    -1,   136,    79,    97,    74,   126,    75,    -1,
+     136,    79,    97,    81,   151,    -1,   138,    -1,   138,    97,
+      -1,   138,    97,    74,    75,    -1,   138,    97,    74,   126,
+      75,    -1,   138,    97,    81,   151,    -1,     3,    45,    -1,
+     140,    -1,   139,   140,    -1,     9,    -1,     8,    -1,    37,
+      -1,     3,    37,    -1,    36,    -1,   142,    -1,   141,   142,
+      -1,     4,    -1,     5,    -1,     6,    -1,   143,    -1,   143,
+      74,   126,    75,    -1,    39,    -1,    11,    -1,    12,    -1,
+      10,    -1,    27,    -1,    28,    -1,    29,    -1,    21,    -1,
+      22,    -1,    23,    -1,    24,    -1,    25,    -1,    26,    -1,
+      30,    -1,    31,    -1,    32,    -1,    41,    -1,    42,    -1,
+      43,    -1,    44,    -1,   144,    -1,    46,    -1,    -1,    38,
+      97,    76,   145,   147,    77,    -1,    -1,    38,    76,   146,
+     147,    77,    -1,   148,    -1,   147,   148,    -1,   140,   149,
+      82,    -1,   150,    -1,   149,    79,   150,    -1,    97,    -1,
+      97,    74,   126,    75,    -1,   123,    -1,   127,    -1,   155,
+      -1,   154,    -1,   152,    -1,   164,    -1,   165,    -1,   168,
+      -1,   175,    -1,    76,    77,    -1,    -1,    -1,    76,   156,
+     163,   157,    77,    -1,   162,    -1,   154,    -1,    -1,   160,
+     162,    -1,    -1,   161,   154,    -1,    76,    77,    -1,    76,
+     163,    77,    -1,   153,    -1,   163,   153,    -1,    82,    -1,
+     125,    82,    -1,    18,    72,   125,    73,   166,    -1,   159,
+      16,   159,    -1,   159,    -1,   125,    -1,   138,    97,    81,
+     151,    -1,    -1,    40,    72,   169,   167,    73,   158,    -1,
+      -1,    15,   170,   159,    40,    72,   125,    73,    82,    -1,
+      -1,    17,    72,   171,   172,   174,    73,   158,    -1,   164,
+      -1,   152,    -1,   167,    -1,    -1,   173,    82,    -1,   173,
+      82,   125,    -1,    14,    82,    -1,    13,    82,    -1,    20,
+      82,    -1,    20,   125,    82,    -1,    19,    82,    -1,   177,
+      -1,   176,   177,    -1,   178,    -1,   127,    -1,    -1,   128,
+     179,   162,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   168,   168,   203,   206,   219,   224,   229,   235,   238,
-     317,   320,   421,   431,   444,   452,   552,   555,   563,   567,
-     574,   578,   585,   591,   600,   608,   663,   670,   680,   683,
-     693,   703,   724,   725,   726,   731,   732,   741,   753,   754,
-     762,   773,   777,   778,   788,   798,   808,   821,   822,   832,
-     845,   849,   853,   857,   858,   871,   872,   885,   886,   899,
-     900,   917,   918,   931,   932,   933,   934,   935,   939,   942,
-     953,   961,   988,   993,  1007,  1045,  1048,  1055,  1063,  1084,
-    1105,  1116,  1145,  1150,  1160,  1165,  1175,  1178,  1181,  1184,
-    1190,  1197,  1200,  1222,  1240,  1264,  1287,  1291,  1309,  1317,
-    1349,  1369,  1458,  1467,  1490,  1493,  1499,  1507,  1515,  1523,
-    1533,  1540,  1543,  1546,  1552,  1555,  1570,  1574,  1578,  1582,
-    1591,  1596,  1601,  1606,  1611,  1616,  1621,  1626,  1631,  1636,
-    1642,  1648,  1654,  1659,  1664,  1673,  1682,  1687,  1700,  1700,
-    1714,  1714,  1723,  1726,  1741,  1777,  1781,  1787,  1795,  1811,
-    1815,  1819,  1820,  1826,  1827,  1828,  1829,  1830,  1834,  1835,
-    1835,  1835,  1845,  1846,  1850,  1850,  1851,  1851,  1856,  1859,
-    1869,  1872,  1878,  1879,  1883,  1891,  1895,  1905,  1910,  1927,
-    1927,  1932,  1932,  1939,  1939,  1947,  1950,  1956,  1959,  1965,
-    1969,  1976,  1983,  1990,  1997,  2008,  2017,  2021,  2028,  2031,
-    2037,  2037
+       0,   169,   169,   170,   173,   208,   211,   224,   229,   234,
+     240,   243,   322,   325,   426,   436,   449,   457,   557,   560,
+     568,   572,   579,   583,   590,   596,   605,   613,   668,   675,
+     685,   688,   698,   708,   729,   730,   731,   736,   737,   746,
+     758,   759,   767,   778,   782,   783,   793,   803,   813,   826,
+     827,   837,   850,   854,   858,   862,   863,   876,   877,   890,
+     891,   904,   905,   922,   923,   936,   937,   938,   939,   940,
+     944,   947,   958,   966,   993,   998,  1012,  1050,  1053,  1060,
+    1068,  1089,  1110,  1121,  1150,  1155,  1165,  1170,  1180,  1183,
+    1186,  1189,  1195,  1202,  1205,  1227,  1245,  1269,  1292,  1296,
+    1314,  1322,  1354,  1374,  1463,  1472,  1495,  1498,  1504,  1512,
+    1520,  1528,  1538,  1545,  1548,  1551,  1557,  1560,  1575,  1579,
+    1583,  1587,  1596,  1601,  1606,  1611,  1616,  1621,  1626,  1631,
+    1636,  1641,  1647,  1653,  1659,  1664,  1669,  1678,  1687,  1692,
+    1705,  1705,  1719,  1719,  1728,  1731,  1746,  1782,  1786,  1792,
+    1800,  1816,  1820,  1824,  1825,  1831,  1832,  1833,  1834,  1835,
+    1839,  1840,  1840,  1840,  1850,  1851,  1855,  1855,  1856,  1856,
+    1861,  1864,  1874,  1877,  1883,  1884,  1888,  1896,  1900,  1910,
+    1915,  1932,  1932,  1937,  1937,  1944,  1944,  1952,  1955,  1961,
+    1964,  1970,  1974,  1981,  1988,  1995,  2002,  2013,  2022,  2026,
+    2033,  2036,  2042,  2042
 };
 #endif
 
@@ -731,10 +732,10 @@
   "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT",
   "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS",
   "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR",
-  "CARET", "AMPERSAND", "QUESTION", "$accept", "variable_identifier",
-  "primary_expression", "postfix_expression", "integer_expression",
-  "function_call", "function_call_or_method", "function_call_generic",
-  "function_call_header_no_parameters",
+  "CARET", "AMPERSAND", "QUESTION", "$accept", "identifier",
+  "variable_identifier", "primary_expression", "postfix_expression",
+  "integer_expression", "function_call", "function_call_or_method",
+  "function_call_generic", "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
   "multiplicative_expression", "additive_expression", "shift_expression",
@@ -784,53 +785,53 @@
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    96,    97,    98,    98,    98,    98,    98,    99,    99,
-      99,    99,    99,    99,   100,   101,   102,   102,   103,   103,
-     104,   104,   105,   105,   106,   107,   107,   107,   108,   108,
-     108,   108,   109,   109,   109,   110,   110,   110,   111,   111,
-     111,   112,   113,   113,   113,   113,   113,   114,   114,   114,
-     115,   116,   117,   118,   118,   119,   119,   120,   120,   121,
-     121,   122,   122,   123,   123,   123,   123,   123,   124,   124,
-     125,   126,   126,   126,   127,   128,   128,   129,   129,   130,
-     131,   131,   132,   132,   132,   132,   133,   133,   133,   133,
-     134,   135,   135,   135,   135,   135,   136,   136,   136,   136,
-     136,   136,   137,   137,   138,   138,   138,   138,   138,   139,
-     139,   140,   140,   140,   141,   141,   142,   142,   142,   142,
-     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
-     142,   142,   142,   142,   142,   142,   142,   142,   144,   143,
-     145,   143,   146,   146,   147,   148,   148,   149,   149,   150,
-     151,   152,   152,   153,   153,   153,   153,   153,   154,   155,
-     156,   154,   157,   157,   159,   158,   160,   158,   161,   161,
-     162,   162,   163,   163,   164,   165,   165,   166,   166,   168,
-     167,   169,   167,   170,   167,   171,   171,   172,   172,   173,
-     173,   174,   174,   174,   174,   174,   175,   175,   176,   176,
-     178,   177
+       0,    96,    97,    97,    98,    99,    99,    99,    99,    99,
+     100,   100,   100,   100,   100,   100,   101,   102,   103,   103,
+     104,   104,   105,   105,   106,   106,   107,   108,   108,   108,
+     109,   109,   109,   109,   110,   110,   110,   111,   111,   111,
+     112,   112,   112,   113,   114,   114,   114,   114,   114,   115,
+     115,   115,   116,   117,   118,   119,   119,   120,   120,   121,
+     121,   122,   122,   123,   123,   124,   124,   124,   124,   124,
+     125,   125,   126,   127,   127,   127,   128,   129,   129,   130,
+     130,   131,   132,   132,   133,   133,   133,   133,   134,   134,
+     134,   134,   135,   136,   136,   136,   136,   136,   137,   137,
+     137,   137,   137,   137,   138,   138,   139,   139,   139,   139,
+     139,   140,   140,   141,   141,   141,   142,   142,   143,   143,
+     143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
+     143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
+     145,   144,   146,   144,   147,   147,   148,   149,   149,   150,
+     150,   151,   152,   153,   153,   154,   154,   154,   154,   154,
+     155,   156,   157,   155,   158,   158,   160,   159,   161,   159,
+     162,   162,   163,   163,   164,   164,   165,   166,   166,   167,
+     167,   169,   168,   170,   168,   171,   168,   172,   172,   173,
+     173,   174,   174,   175,   175,   175,   175,   175,   176,   176,
+     177,   177,   179,   178
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     1,     1,     1,     1,     3,     1,     4,
-       1,     3,     2,     2,     1,     1,     1,     3,     2,     2,
-       2,     1,     2,     3,     2,     1,     1,     1,     1,     2,
-       2,     2,     1,     1,     1,     1,     3,     3,     1,     3,
-       3,     1,     1,     3,     3,     3,     3,     1,     3,     3,
-       1,     1,     1,     1,     3,     1,     3,     1,     3,     1,
-       5,     1,     3,     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,     5,     6,     5,     1,     2,     4,     5,
-       4,     2,     1,     2,     1,     1,     1,     2,     1,     1,
-       2,     1,     1,     1,     1,     4,     1,     1,     1,     1,
+       0,     2,     1,     1,     1,     1,     1,     1,     1,     3,
+       1,     4,     1,     3,     2,     2,     1,     1,     1,     3,
+       2,     2,     2,     1,     2,     3,     2,     1,     1,     1,
+       1,     2,     2,     2,     1,     1,     1,     1,     3,     3,
+       1,     3,     3,     1,     1,     3,     3,     3,     3,     1,
+       3,     3,     1,     1,     1,     1,     3,     1,     3,     1,
+       3,     1,     5,     1,     3,     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,     5,     6,     5,     1,     2,
+       4,     5,     4,     2,     1,     2,     1,     1,     1,     2,
+       1,     1,     2,     1,     1,     1,     1,     4,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
-       0,     5,     1,     2,     3,     1,     3,     1,     4,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-       0,     5,     1,     1,     0,     2,     0,     2,     2,     3,
-       1,     2,     1,     2,     5,     3,     1,     1,     4,     0,
-       6,     0,     8,     0,     7,     1,     1,     1,     0,     2,
-       3,     2,     2,     2,     3,     2,     1,     2,     1,     1,
-       0,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     6,     0,     5,     1,     2,     3,     1,     3,     1,
+       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     0,     0,     5,     1,     1,     0,     2,     0,     2,
+       2,     3,     1,     2,     1,     2,     5,     3,     1,     1,
+       4,     0,     6,     0,     8,     0,     7,     1,     1,     1,
+       0,     2,     3,     2,     2,     2,     3,     2,     1,     2,
+       1,     1,     0,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -838,405 +839,409 @@
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   111,   112,   113,     0,   105,   104,   119,   117,
-     118,   123,   124,   125,   126,   127,   128,   120,   121,   122,
-     129,   130,   131,   108,   106,     0,   116,   132,   133,   134,
-     135,   137,   199,   200,     0,    76,    86,     0,    91,    96,
-       0,   102,     0,   109,   114,   136,     0,   196,   198,   107,
-     101,     0,     0,   140,    71,     0,    74,    86,     0,    87,
-      88,    89,    77,     0,    86,     0,    72,    97,   103,   110,
-       0,     1,   197,     0,   138,     0,     0,   201,    78,    83,
-      85,    90,     0,    92,    79,     0,     0,     2,     5,     4,
-       6,    27,     0,     0,     0,    34,    33,    32,     3,     8,
-      28,    10,    15,    16,     0,     0,    21,     0,    35,     0,
-      38,    41,    42,    47,    50,    51,    52,    53,    55,    57,
-      59,    70,     0,    25,    73,     0,     0,     0,   142,     0,
-       0,   181,     0,     0,     0,     0,     0,   159,   168,   172,
-      35,    61,    68,     0,   150,     0,   114,   153,   170,   152,
-     151,     0,   154,   155,   156,   157,    80,    82,    84,     0,
-       0,    98,     0,   149,   100,    29,    30,     0,    12,    13,
-       0,     0,    19,    18,     0,    20,    22,    24,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   115,     0,   147,     0,   145,   141,   143,
-     192,   191,   166,   183,     0,   195,   193,     0,   179,   158,
-       0,    64,    65,    66,    67,    63,     0,     0,   173,   169,
-     171,     0,    93,     0,    95,    99,     7,     0,    14,    26,
-      11,    17,    23,    36,    37,    40,    39,    45,    46,    43,
-      44,    48,    49,    54,    56,    58,     0,   139,     0,     0,
-     144,     0,     0,     0,     0,     0,   194,     0,   160,    62,
-      69,     0,    94,     9,     0,     0,   146,     0,   165,   167,
-     186,   185,   188,   166,   177,     0,     0,     0,    81,    60,
-     148,     0,   187,     0,     0,   176,   174,     0,     0,   161,
-       0,   189,     0,   166,     0,   163,   180,   162,     0,   190,
-     184,   175,   178,   182
+       0,     0,   113,   114,   115,     0,   107,   106,   121,   119,
+     120,   125,   126,   127,   128,   129,   130,   122,   123,   124,
+     131,   132,   133,   110,   108,     0,   118,   134,   135,   136,
+     137,   139,   201,   202,     0,    78,    88,     0,    93,    98,
+       0,   104,     0,   111,   116,   138,     0,   198,   200,   109,
+     103,     0,     2,     3,   142,     0,    73,     0,    76,    88,
+       0,    89,    90,    91,    79,     0,    88,     0,    74,     2,
+      99,   105,   112,     0,     1,   199,     0,     0,   140,     0,
+     203,    80,    85,    87,    92,     0,    94,    81,     0,     0,
+       4,     7,     6,     8,    29,     0,     0,     0,    36,    35,
+      34,     5,    10,    30,    12,    17,    18,     0,     0,    23,
+       0,    37,     0,    40,    43,    44,    49,    52,    53,    54,
+      55,    57,    59,    61,    72,     0,    27,    75,     0,     0,
+     144,     0,     0,     0,   183,     0,     0,     0,     0,     0,
+     161,   170,   174,    37,    63,    70,     0,   152,     0,   116,
+     155,   172,   154,   153,     0,   156,   157,   158,   159,    82,
+      84,    86,     0,     0,   100,     0,   151,   102,    31,    32,
+       0,    14,    15,     0,     0,    21,    20,     0,    22,    24,
+      26,    33,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   117,   149,     0,   147,
+     143,   145,     0,   194,   193,   168,   185,     0,   197,   195,
+       0,   181,   160,     0,    66,    67,    68,    69,    65,     0,
+       0,   175,   171,   173,     0,    95,     0,    97,   101,     9,
+       0,    16,    28,    13,    19,    25,    38,    39,    42,    41,
+      47,    48,    45,    46,    50,    51,    56,    58,    60,     0,
+       0,     0,   146,   141,     0,     0,     0,     0,     0,   196,
+       0,   162,    64,    71,     0,    96,    11,     0,     0,   148,
+       0,   167,   169,   188,   187,   190,   168,   179,     0,     0,
+       0,    83,    62,   150,     0,   189,     0,     0,   178,   176,
+       0,     0,   163,     0,   191,     0,   168,     0,   165,   182,
+     164,     0,   192,   186,   177,   180,   184
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    98,    99,   100,   227,   101,   102,   103,   104,   105,
-     106,   107,   140,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   141,   142,   216,   143,   122,
-     144,   145,    34,    35,    36,    79,    62,    63,    80,    37,
-      38,    39,    40,    41,    42,    43,   123,    45,   125,    75,
-     127,   128,   196,   197,   164,   147,   148,   149,   150,   210,
-     277,   296,   251,   252,   253,   297,   151,   152,   153,   286,
-     276,   154,   257,   202,   254,   272,   283,   284,   155,    46,
-      47,    48,    55
+      -1,   197,   101,   102,   103,   230,   104,   105,   106,   107,
+     108,   109,   110,   143,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   144,   145,   219,   146,
+     125,   147,   148,    34,    35,    36,    82,    64,    65,    83,
+      37,    38,    39,    40,    41,    42,    43,   126,    45,   131,
+      77,   129,   130,   198,   199,   167,   150,   151,   152,   153,
+     213,   280,   299,   254,   255,   256,   300,   154,   155,   156,
+     289,   279,   157,   260,   205,   257,   275,   286,   287,   158,
+      46,    47,    48,    57
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -266
+#define YYPACT_NINF -261
 static const yytype_int16 yypact[] =
 {
-    1253,   -20,  -266,  -266,  -266,   148,  -266,  -266,  -266,  -266,
-    -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-    -266,  -266,  -266,  -266,  -266,   -39,  -266,  -266,  -266,  -266,
-    -266,  -266,  -266,   -18,    -2,     6,    21,   -61,  -266,    51,
-    1296,  -266,  1370,  -266,    25,  -266,  1209,  -266,  -266,  -266,
-    -266,  1370,    42,  -266,  -266,    50,  -266,    71,    95,  -266,
-    -266,  -266,  -266,  1296,   123,   105,  -266,     9,  -266,  -266,
-     974,  -266,  -266,    81,  -266,  1296,   290,  -266,  -266,  -266,
-    -266,   125,  1296,   -13,  -266,   776,   974,    99,  -266,  -266,
-    -266,  -266,   974,   974,   974,  -266,  -266,  -266,  -266,  -266,
-      35,  -266,  -266,  -266,   100,    -6,  1040,   104,  -266,   974,
-      36,   -64,  -266,   -21,   102,  -266,  -266,  -266,   113,   117,
-     -51,  -266,   108,  -266,  -266,  1296,   129,  1109,  -266,    97,
-     103,  -266,   112,   114,   106,   842,   115,   116,  -266,  -266,
-      39,  -266,  -266,   -43,  -266,   -18,    47,  -266,  -266,  -266,
-    -266,   374,  -266,  -266,  -266,  -266,   118,  -266,  -266,   908,
-     974,  -266,   120,  -266,  -266,  -266,  -266,    19,  -266,  -266,
-     974,  1333,  -266,  -266,   974,   119,  -266,  -266,  -266,   974,
-     974,   974,   974,   974,   974,   974,   974,   974,   974,   974,
-     974,   974,   974,  -266,  1152,   122,   -29,  -266,  -266,  -266,
-    -266,  -266,   121,  -266,   974,  -266,  -266,     5,  -266,  -266,
-     458,  -266,  -266,  -266,  -266,  -266,   974,   974,  -266,  -266,
-    -266,   974,  -266,   137,  -266,  -266,  -266,   138,   111,  -266,
-     142,  -266,  -266,  -266,  -266,    36,    36,  -266,  -266,  -266,
-    -266,   -21,   -21,  -266,   113,   117,    82,  -266,   974,   129,
-    -266,   175,    50,   626,   710,    38,  -266,   197,   458,  -266,
-    -266,   141,  -266,  -266,   974,   155,  -266,   145,  -266,  -266,
-    -266,  -266,   197,   121,   111,   186,   159,   160,  -266,  -266,
-    -266,   974,  -266,   166,   176,   236,  -266,   174,   542,  -266,
-      43,   974,   542,   121,   974,  -266,  -266,  -266,   177,   111,
-    -266,  -266,  -266,  -266
+    1274,   -14,  -261,  -261,  -261,   122,  -261,  -261,  -261,  -261,
+    -261,  -261,  -261,  -261,  -261,  -261,  -261,  -261,  -261,  -261,
+    -261,  -261,  -261,  -261,  -261,   -13,  -261,  -261,  -261,  -261,
+    -261,  -261,  -261,   -57,   -59,   -41,    63,     7,  -261,    89,
+    1317,  -261,  1391,  -261,    -1,  -261,  1230,  -261,  -261,  -261,
+    -261,  1391,  -261,  -261,  -261,   -26,  -261,    11,  -261,    75,
+      76,  -261,  -261,  -261,  -261,  1317,   128,    92,  -261,     3,
+     -46,  -261,  -261,   995,  -261,  -261,    36,  1317,  -261,   293,
+    -261,  -261,  -261,  -261,    92,  1317,   -37,  -261,   194,   995,
+      58,  -261,  -261,  -261,  -261,   995,   995,   995,  -261,  -261,
+    -261,  -261,  -261,    14,  -261,  -261,  -261,    95,    -9,  1061,
+     104,  -261,   995,    77,   -27,  -261,   -29,   113,  -261,  -261,
+    -261,   119,   126,   -47,  -261,   108,  -261,  -261,    92,  1130,
+    -261,  1317,   106,   107,  -261,   118,   120,   109,   863,   123,
+     117,  -261,  -261,    96,  -261,  -261,    23,  -261,   -57,    83,
+    -261,  -261,  -261,  -261,   377,  -261,  -261,  -261,  -261,   124,
+    -261,  -261,   929,   995,  -261,   121,  -261,  -261,  -261,  -261,
+       1,  -261,  -261,   995,  1354,  -261,  -261,   995,   125,  -261,
+    -261,  -261,   995,   995,   995,   995,   995,   995,   995,   995,
+     995,   995,   995,   995,   995,   995,  -261,   134,    24,  -261,
+    -261,  -261,  1173,  -261,  -261,   133,  -261,   995,  -261,  -261,
+      38,  -261,  -261,   461,  -261,  -261,  -261,  -261,  -261,   995,
+     995,  -261,  -261,  -261,   995,  -261,   136,  -261,  -261,  -261,
+     137,   135,  -261,   127,  -261,  -261,  -261,  -261,    77,    77,
+    -261,  -261,  -261,  -261,   -29,   -29,  -261,   119,   126,    93,
+     995,    92,  -261,  -261,   160,    11,   629,   713,    28,  -261,
+     797,   461,  -261,  -261,   152,  -261,  -261,   995,   153,  -261,
+     157,  -261,  -261,  -261,  -261,   797,   133,   135,    92,   158,
+     168,  -261,  -261,  -261,   995,  -261,   148,   161,   230,  -261,
+     169,   545,  -261,    42,   995,   545,   133,   995,  -261,  -261,
+    -261,   167,   135,  -261,  -261,  -261,  -261
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -266,  -266,  -266,  -266,  -266,  -266,  -266,    85,  -266,  -266,
-    -266,  -266,   -44,  -266,   -15,  -266,   -55,   -19,  -266,  -266,
-    -266,    72,    70,    73,  -266,   -66,   -83,  -266,   -92,   -73,
-      13,    14,  -266,  -266,  -266,   180,   206,   201,   184,  -266,
-    -266,  -241,   -25,   -30,   262,    -4,     0,  -266,  -266,  -266,
-     143,  -122,  -266,    22,  -145,    16,  -144,  -226,  -266,  -266,
-    -266,   -17,  -265,  -266,  -266,   -54,    63,    20,  -266,  -266,
-       4,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-     231,  -266,  -266
+    -261,   -24,  -261,  -261,  -261,  -261,  -261,  -261,    78,  -261,
+    -261,  -261,  -261,   -43,  -261,   -10,  -261,   -64,    -5,  -261,
+    -261,  -261,    59,    60,    61,  -261,   -68,   -87,  -261,   -91,
+     -71,     9,    10,  -261,  -261,  -261,   173,   200,   196,   178,
+    -261,  -261,  -236,   -25,   -36,   259,   -30,     0,  -261,  -261,
+    -261,   139,  -121,  -261,    16,  -145,     8,  -147,  -237,  -261,
+    -261,  -261,   -23,  -260,  -261,  -261,   -54,    55,    17,  -261,
+    -261,    -4,  -261,  -261,  -261,  -261,  -261,  -261,  -261,  -261,
+    -261,   227,  -261,  -261
 };
 
 /* 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 YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -165
+#define YYTABLE_NINF -167
 static const yytype_int16 yytable[] =
 {
-      44,    77,   167,   163,   121,   199,    52,   220,   285,   191,
-      68,    64,   162,    32,    33,   224,   275,    49,    65,   121,
-     181,    66,   182,   176,    58,    50,   108,   269,   301,     6,
-       7,   275,    64,    81,   183,   184,   217,    53,    69,   218,
-      44,   108,    44,   207,   192,   126,    44,    73,   165,   166,
-     249,    44,    81,   250,    59,    60,    61,    23,    24,    32,
-      33,   159,   295,    44,    54,   178,   295,   173,   160,   185,
-     186,    56,   199,   174,    58,    44,   146,   163,   228,     6,
-       7,    84,    44,    85,   217,    57,   223,   256,   168,   169,
-      86,   232,   226,   121,   -75,   126,    67,   126,   217,    70,
-     246,   211,   212,   213,    59,    60,    61,    23,    24,   170,
-     214,   273,   255,   171,   220,   108,   298,   217,    74,   -25,
-     215,    70,   217,   179,   180,    44,    76,    44,   237,   238,
-     239,   240,    49,   259,   260,   233,   234,   108,   108,   108,
-     108,   108,   108,   108,   108,   108,   108,   108,   261,   302,
-      83,   146,     2,     3,     4,   121,    59,    60,    61,   187,
-     188,   217,   264,   124,   126,   274,   235,   236,   241,   242,
-     156,   -26,   189,   172,   195,   265,   177,   108,   190,   200,
-     274,   279,   121,   193,   203,   201,   204,   208,   205,   290,
-     217,  -116,   221,   209,    44,   225,   248,  -164,   268,   299,
-      58,     2,     3,     4,   108,     6,     7,     8,     9,    10,
-     146,   163,   262,   263,   -27,   267,   278,   281,    11,    12,
+      44,    55,   166,    80,    71,   124,   170,   223,   201,    32,
+      33,    66,    72,   194,    58,    70,   288,   165,   227,   272,
+     124,    76,   179,    49,   278,    56,   186,   187,    88,    84,
+     111,    50,    52,    53,    66,    89,   304,   162,    59,   278,
+      44,   128,    44,    86,   163,   111,    44,   210,   195,    84,
+      78,    44,   168,   169,   298,    32,    33,   184,   298,   185,
+     159,   188,   189,    54,   176,    44,    60,   171,   172,   181,
+     177,     6,     7,    73,   229,    87,   166,    44,    60,   149,
+     220,   201,   231,     6,     7,    44,    67,    79,   173,    68,
+     235,   226,   174,   128,   124,   128,    61,    62,    63,    23,
+      24,   276,   220,   251,   249,   221,   252,   220,    61,    62,
+      63,    23,    24,    49,   223,   301,   258,   220,   127,   111,
+     259,   220,   240,   241,   242,   243,     2,     3,     4,    44,
+     -28,    44,   262,   263,    69,    53,   -77,    52,    53,   236,
+     237,   111,   111,   111,   111,   111,   111,   111,   111,   111,
+     111,   111,   305,   264,   149,   -27,   124,    73,   214,   215,
+     216,    61,    62,    63,   182,   183,   128,   217,   175,   277,
+     190,   191,   220,   267,   238,   239,   180,   218,   192,   268,
+     282,   111,   124,   196,   277,   244,   245,   193,   203,   204,
+     206,   208,   207,   293,   212,   211,   228,  -118,   224,   -29,
+     270,   271,    44,   302,     8,     9,    10,   111,   250,  -166,
+     166,   265,   266,   149,   220,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,   281,   283,   284,
+     294,   291,    25,    26,   295,    27,    28,    29,    30,    90,
+      31,    91,    92,    93,    94,   292,   296,    95,    96,   306,
+     297,   246,   234,   247,   290,   248,   149,   149,   160,    81,
+     149,   149,    85,   161,    51,   273,    97,   269,   261,   164,
+     202,   285,   303,    75,   274,   149,     0,    98,    99,     0,
+     100,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   149,     0,     0,     0,   149,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,   132,   133,   134,     0,
+     135,   136,   137,   138,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
+      24,    25,    26,   139,    27,    28,    29,    30,    90,    31,
+      91,    92,    93,    94,     0,     0,    95,    96,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    97,     0,     0,     0,   140,
+     141,     0,     0,     0,     0,   142,    98,    99,     0,   100,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+     132,   133,   134,     0,   135,   136,   137,   138,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-     280,   287,   288,    23,    24,    25,    26,   289,    27,    28,
-      29,    30,    87,    31,    88,    89,    90,    91,   291,   292,
-      92,    93,   293,   146,   146,   294,   231,   146,   146,   303,
-     244,   243,   157,    78,   245,    82,   158,    51,   194,    94,
-     270,   266,   146,   258,   271,   300,   282,    72,     0,     0,
-      95,    96,     0,    97,     0,     0,     0,     0,   146,     0,
-       0,     0,   146,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,   129,   130,   131,     0,   132,   133,   134,
-     135,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-     136,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
+       0,     0,     0,    23,    24,    25,    26,   139,    27,    28,
+      29,    30,    90,    31,    91,    92,    93,    94,     0,     0,
+      95,    96,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    97,
+       0,     0,     0,   140,   222,     0,     0,     0,     0,   142,
+      98,    99,     0,   100,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,   132,   133,   134,     0,   135,   136,
+     137,   138,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,     0,     0,     0,    23,    24,    25,
+      26,   139,    27,    28,    29,    30,    90,    31,    91,    92,
+      93,    94,     0,     0,    95,    96,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    94,     0,     0,     0,   137,   138,     0,     0,
-       0,     0,   139,    95,    96,     0,    97,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,   129,   130,   131,
-       0,   132,   133,   134,   135,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-      23,    24,    25,    26,   136,    27,    28,    29,    30,    87,
-      31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
+       0,     0,     0,    97,     0,     0,     0,   140,     0,     0,
+       0,     0,     0,   142,    98,    99,     0,   100,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,   132,   133,
+     134,     0,   135,   136,   137,   138,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
+       0,    23,    24,    25,    26,   139,    27,    28,    29,    30,
+      90,    31,    91,    92,    93,    94,     0,     0,    95,    96,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    94,     0,     0,     0,
-     137,   219,     0,     0,     0,     0,   139,    95,    96,     0,
-      97,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,   129,   130,   131,     0,   132,   133,   134,   135,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,    23,    24,    25,    26,   136,    27,
-      28,    29,    30,    87,    31,    88,    89,    90,    91,     0,
-       0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      94,     0,     0,     0,   137,     0,     0,     0,     0,     0,
-     139,    95,    96,     0,    97,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   129,   130,   131,     0,   132,
-     133,   134,   135,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,    23,    24,
-      25,    26,   136,    27,    28,    29,    30,    87,    31,    88,
-      89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    94,     0,     0,     0,    76,     0,
-       0,     0,     0,     0,   139,    95,    96,     0,    97,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,   129,
-     130,   131,     0,   132,   133,   134,   135,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,    23,    24,    25,    26,   136,    27,    28,    29,
-      30,    87,    31,    88,    89,    90,    91,     0,     0,    92,
-      93,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   139,    95,
-      96,     0,    97,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-       0,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    94,     0,     0,     0,     8,     9,    10,     0,
-       0,     0,   139,    95,    96,     0,    97,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
-      30,    87,    31,    88,    89,    90,    91,     0,     0,    92,
-      93,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-       0,   161,     8,     9,    10,     0,     0,     0,     0,    95,
-      96,     0,    97,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
-      25,    26,     0,    27,    28,    29,    30,    87,    31,    88,
-      89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    94,     0,     0,     0,     8,     9,
-      10,     0,     0,     0,   206,    95,    96,     0,    97,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,     0,     0,    25,    26,     0,    27,
-      28,    29,    30,    87,    31,    88,    89,    90,    91,     0,
-       0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      94,     0,     0,   222,     8,     9,    10,     0,     0,     0,
-       0,    95,    96,     0,    97,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-       0,     0,    25,    26,     0,    27,    28,    29,    30,    87,
-      31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    94,     0,     0,     0,
-       8,     9,    10,     0,     0,     0,     0,    95,    96,     0,
-      97,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,     0,     0,    25,   175,
-       0,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    94,     2,     3,     4,     0,     0,     0,     8,
-       9,    10,     0,    95,    96,     0,    97,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    97,     0,     0,
+       0,    79,     0,     0,     0,     0,     0,   142,    98,    99,
+       0,   100,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,   132,   133,   134,     0,   135,   136,   137,   138,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
-      27,    28,    29,    30,     0,    31,     2,     3,     4,     0,
-       0,     0,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,   198,     0,     0,     0,
-      25,    26,     0,    27,    28,    29,    30,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    71,
-       0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,     0,   247,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,    23,    24,    25,    26,     0,
-      27,    28,    29,    30,     0,    31,     1,     2,     3,     4,
+      21,    22,     0,     0,     0,    23,    24,    25,    26,   139,
+      27,    28,    29,    30,    90,    31,    91,    92,    93,    94,
+       0,     0,    95,    96,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    97,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   142,    98,    99,     0,   100,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,     0,     0,     0,     0,
        0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
-      24,    25,    26,     0,    27,    28,    29,    30,     0,    31,
-       2,     3,     4,     0,     0,     0,     8,     9,    10,     0,
-       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
-      30,     0,    31,     8,     9,    10,     0,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+      24,    25,    26,     0,    27,    28,    29,    30,    90,    31,
+      91,    92,    93,    94,     0,     0,    95,    96,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    97,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   142,    98,    99,     0,   100,
+      60,     2,     3,     4,     0,     6,     7,     8,     9,    10,
+       0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+       0,     0,     0,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    90,    31,    91,    92,    93,    94,     0,     0,
+      95,    96,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    97,
+       0,     0,     0,     8,     9,    10,     0,     0,     0,     0,
+      98,    99,     0,   100,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,    25,    26,     0,    27,    28,    29,    30,   229,    31,
-       8,     9,    10,   230,     0,     0,     0,     0,     0,     0,
+       0,    25,    26,     0,    27,    28,    29,    30,    90,    31,
+      91,    92,    93,    94,     0,     0,    95,    96,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    97,     0,     0,     0,     8,
+       9,    10,     0,     0,     0,   209,    98,    99,     0,   100,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
+      27,    28,    29,    30,    90,    31,    91,    92,    93,    94,
+       0,     0,    95,    96,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    97,     0,     0,   225,     8,     9,    10,     0,     0,
+       0,     0,    98,    99,     0,   100,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
+       0,     0,     0,    25,    26,     0,    27,    28,    29,    30,
+      90,    31,    91,    92,    93,    94,     0,     0,    95,    96,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    97,     0,     0,
+       0,     8,     9,    10,     0,     0,     0,     0,    98,    99,
+       0,   100,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,     0,     0,     0,     0,     0,    25,
+     178,     0,    27,    28,    29,    30,    90,    31,    91,    92,
+      93,    94,     0,     0,    95,    96,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    97,     2,     3,     4,     0,     0,     0,
+       8,     9,    10,     0,    98,    99,     0,   100,     0,     0,
        0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,     0,     0,     0,     0,     0,    25,    26,
-       0,    27,    28,    29,    30,     0,    31
+       0,    27,    28,    29,    30,     0,    31,     2,     3,     4,
+       0,     0,     0,     8,     9,    10,     0,     0,     0,     0,
+       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,     0,   200,     0,     0,
+       0,    25,    26,     0,    27,    28,    29,    30,     0,    31,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,     0,     0,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
+     253,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
+       0,    27,    28,    29,    30,     0,    31,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,     0,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+      23,    24,    25,    26,     0,    27,    28,    29,    30,     0,
+      31,     2,     3,     4,     0,     0,     0,     8,     9,    10,
+       0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+       0,     0,     0,     0,     0,    25,    26,     0,    27,    28,
+      29,    30,     0,    31,     8,     9,    10,     0,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+       0,     0,    25,    26,     0,    27,    28,    29,    30,   232,
+      31,     8,     9,    10,   233,     0,     0,     0,     0,     0,
+       0,     0,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,     0,     0,     0,     0,     0,    25,
+      26,     0,    27,    28,    29,    30,     0,    31
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-266)))
+  (!!((Yystate) == (-261)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       0,    55,    94,    86,    70,   127,    45,   151,   273,    60,
-      40,    36,    85,     0,     0,   160,   257,    37,    79,    85,
-      84,    82,    86,   106,     3,    45,    70,   253,   293,     8,
-       9,   272,    57,    63,    55,    56,    79,    76,    42,    82,
-      40,    85,    42,   135,    95,    75,    46,    51,    92,    93,
-      79,    51,    82,    82,    33,    34,    35,    36,    37,    46,
-      46,    74,   288,    63,    82,   109,   292,    73,    81,    90,
-      91,    73,   194,    79,     3,    75,    76,   160,   170,     8,
-       9,    72,    82,    74,    79,    79,   159,    82,    53,    54,
-      81,   174,    73,   159,    73,   125,    45,   127,    79,    74,
-     192,    62,    63,    64,    33,    34,    35,    36,    37,    74,
-      71,    73,   204,    78,   258,   159,    73,    79,    76,    72,
-      81,    74,    79,    87,    88,   125,    76,   127,   183,   184,
-     185,   186,    37,   216,   217,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   221,   294,
-      45,   151,     4,     5,     6,   221,    33,    34,    35,    57,
-      58,    79,    80,    82,   194,   257,   181,   182,   187,   188,
-      45,    72,    59,    73,    45,   248,    72,   221,    61,    82,
-     272,   264,   248,    75,    72,    82,    72,    72,    82,   281,
-      79,    72,    74,    77,   194,    75,    74,    76,   252,   291,
-       3,     4,     5,     6,   248,     8,     9,    10,    11,    12,
-     210,   294,    75,    75,    72,    40,    75,    72,    21,    22,
+       0,    25,    89,    57,    40,    73,    97,   154,   129,     0,
+       0,    36,    42,    60,    73,    39,   276,    88,   163,   256,
+      88,    51,   109,    37,   260,    82,    55,    56,    74,    65,
+      73,    45,    45,    46,    59,    81,   296,    74,    79,   275,
+      40,    77,    42,    67,    81,    88,    46,   138,    95,    85,
+      76,    51,    95,    96,   291,    46,    46,    84,   295,    86,
+      84,    90,    91,    76,    73,    65,     3,    53,    54,   112,
+      79,     8,     9,    74,    73,    72,   163,    77,     3,    79,
+      79,   202,   173,     8,     9,    85,    79,    76,    74,    82,
+     177,   162,    78,   129,   162,   131,    33,    34,    35,    36,
+      37,    73,    79,    79,   195,    82,    82,    79,    33,    34,
+      35,    36,    37,    37,   261,    73,   207,    79,    82,   162,
+      82,    79,   186,   187,   188,   189,     4,     5,     6,   129,
+      72,   131,   219,   220,    45,    46,    73,    45,    46,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   297,   224,   154,    72,   224,    74,    62,    63,
+      64,    33,    34,    35,    87,    88,   202,    71,    73,   260,
+      57,    58,    79,    80,   184,   185,    72,    81,    59,   250,
+     267,   224,   250,    75,   275,   190,   191,    61,    82,    82,
+      72,    82,    72,   284,    77,    72,    75,    72,    74,    72,
+      40,   255,   202,   294,    10,    11,    12,   250,    74,    76,
+     297,    75,    75,   213,    79,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    75,    75,    72,
+      82,    73,    38,    39,    73,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    77,    16,    53,    54,    82,
+      81,   192,   174,   193,   278,   194,   256,   257,    85,    59,
+     260,   261,    66,    85,     5,   257,    72,   251,   213,    75,
+     131,   275,   295,    46,   257,   275,    -1,    83,    84,    -1,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   291,    -1,    -1,    -1,   295,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      77,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,    86,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    -1,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      75,    45,    73,    36,    37,    38,    39,    77,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    82,    73,
-      53,    54,    16,   253,   254,    81,   171,   257,   258,    82,
-     190,   189,    82,    57,   191,    64,    82,     5,   125,    72,
-     254,   249,   272,   210,   254,   292,   272,    46,    -1,    -1,
-      83,    84,    -1,    86,    -1,    -1,    -1,    -1,   288,    -1,
-      -1,    -1,   292,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      -1,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,    82,
+      83,    84,    -1,    86,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    -1,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    -1,    -1,    -1,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,    -1,    -1,    -1,    76,    77,    -1,    -1,
-      -1,    -1,    82,    83,    84,    -1,    86,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    53,    54,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      -1,    -1,    -1,    82,    83,    84,    -1,    86,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    -1,    -1,
+      -1,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    -1,    -1,    53,    54,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    77,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,
-      86,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    84,    -1,    86,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    -1,    -1,    -1,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    84,    -1,    86,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    -1,    86,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,    -1,    -1,    -1,    10,    11,    12,    -1,
-      -1,    -1,    82,    83,    84,    -1,    86,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,    75,    10,    11,    12,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    86,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      38,    39,    -1,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    10,    11,
-      12,    -1,    -1,    -1,    82,    83,    84,    -1,    86,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    75,    10,    11,    12,    -1,    -1,    -1,
-      -1,    83,    84,    -1,    86,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    53,    54,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      10,    11,    12,    -1,    -1,    -1,    -1,    83,    84,    -1,
-      86,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,     4,     5,     6,    -1,    -1,    -1,    10,
-      11,    12,    -1,    83,    84,    -1,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,
+      -1,    86,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
-      41,    42,    43,    44,    -1,    46,     4,     5,     6,    -1,
-      -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    -1,    77,    -1,    -1,    -1,
-      38,    39,    -1,    41,    42,    43,    44,    -1,    46,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
-      41,    42,    43,    44,    -1,    46,     3,     4,     5,     6,
+      31,    32,    -1,    -1,    -1,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    83,    84,    -1,    86,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    41,    42,    43,    44,    -1,    46,
-       4,     5,     6,    -1,    -1,    -1,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
-      44,    -1,    46,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      37,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,    86,
+       3,     4,     5,     6,    -1,     8,     9,    10,    11,    12,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      -1,    -1,    -1,    36,    37,    38,    39,    -1,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    86,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,
       -1,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-      10,    11,    12,    50,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    10,
+      11,    12,    -1,    -1,    -1,    82,    83,    84,    -1,    86,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    75,    10,    11,    12,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    86,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    -1,    -1,    53,    54,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    10,    11,    12,    -1,    -1,    -1,    -1,    83,    84,
+      -1,    86,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,
+      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    72,     4,     5,     6,    -1,    -1,    -1,
+      10,    11,    12,    -1,    83,    84,    -1,    86,    -1,    -1,
       -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-      -1,    41,    42,    43,    44,    -1,    46
+      -1,    41,    42,    43,    44,    -1,    46,     4,     5,     6,
+      -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    -1,    77,    -1,    -1,
+      -1,    38,    39,    -1,    41,    42,    43,    44,    -1,    46,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
+      -1,    41,    42,    43,    44,    -1,    46,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      36,    37,    38,    39,    -1,    41,    42,    43,    44,    -1,
+      46,     4,     5,     6,    -1,    -1,    -1,    10,    11,    12,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,
+      43,    44,    -1,    46,    10,    11,    12,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
+      46,    10,    11,    12,    50,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,
+      39,    -1,    41,    42,    43,    44,    -1,    46
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1246,34 +1251,34 @@
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    36,    37,    38,    39,    41,    42,    43,
-      44,    46,   126,   127,   128,   129,   130,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   175,   176,   177,    37,
-      45,   140,    45,    76,    82,   178,    73,    79,     3,    33,
-      34,    35,   132,   133,   138,    79,    82,    45,   139,   141,
-      74,     0,   176,   141,    76,   145,    76,   161,   132,   131,
-     134,   139,   133,    45,    72,    74,    81,    45,    47,    48,
-      49,    50,    53,    54,    72,    83,    84,    86,    97,    98,
-      99,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   125,   142,    82,   144,   139,   146,   147,    13,
-      14,    15,    17,    18,    19,    20,    40,    76,    77,    82,
-     108,   121,   122,   124,   126,   127,   142,   151,   152,   153,
-     154,   162,   163,   164,   167,   174,    45,   131,   134,    74,
-      81,    75,   125,   122,   150,   108,   108,   124,    53,    54,
-      74,    78,    73,    73,    79,    39,   122,    72,   108,    87,
-      88,    84,    86,    55,    56,    90,    91,    57,    58,    59,
-      61,    60,    95,    75,   146,    45,   148,   149,    77,   147,
-      82,    82,   169,    72,    72,    82,    82,   124,    72,    77,
-     155,    62,    63,    64,    71,    81,   123,    79,    82,    77,
-     152,    74,    75,   125,   150,    75,    73,   100,   124,    45,
-      50,   103,   122,   108,   108,   110,   110,   112,   112,   112,
-     112,   113,   113,   117,   118,   119,   124,    77,    74,    79,
-      82,   158,   159,   160,   170,   124,    82,   168,   162,   122,
-     122,   125,    75,    75,    80,   125,   149,    40,   161,   153,
-     151,   163,   171,    73,   124,   137,   166,   156,    75,   122,
-      75,    72,   166,   172,   173,   158,   165,    45,    73,    77,
-     124,    82,    73,    16,    81,   153,   157,   161,    73,   124,
-     157,   158,   150,    82
+      44,    46,   127,   128,   129,   130,   131,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   176,   177,   178,    37,
+      45,   141,    45,    46,    76,    97,    82,   179,    73,    79,
+       3,    33,    34,    35,   133,   134,   139,    79,    82,    45,
+      97,   140,   142,    74,     0,   177,   142,   146,    76,    76,
+     162,   133,   132,   135,   140,   134,    97,    72,    74,    81,
+      45,    47,    48,    49,    50,    53,    54,    72,    83,    84,
+      86,    98,    99,   100,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   126,   143,    82,   140,   147,
+     148,   145,    13,    14,    15,    17,    18,    19,    20,    40,
+      76,    77,    82,   109,   122,   123,   125,   127,   128,   143,
+     152,   153,   154,   155,   163,   164,   165,   168,   175,    97,
+     132,   135,    74,    81,    75,   126,   123,   151,   109,   109,
+     125,    53,    54,    74,    78,    73,    73,    79,    39,   123,
+      72,   109,    87,    88,    84,    86,    55,    56,    90,    91,
+      57,    58,    59,    61,    60,    95,    75,    97,   149,   150,
+      77,   148,   147,    82,    82,   170,    72,    72,    82,    82,
+     125,    72,    77,   156,    62,    63,    64,    71,    81,   124,
+      79,    82,    77,   153,    74,    75,   126,   151,    75,    73,
+     101,   125,    45,    50,   104,   123,   109,   109,   111,   111,
+     113,   113,   113,   113,   114,   114,   118,   119,   120,   125,
+      74,    79,    82,    77,   159,   160,   161,   171,   125,    82,
+     169,   163,   123,   123,   126,    75,    75,    80,   126,   150,
+      40,   162,   154,   152,   164,   172,    73,   125,   138,   167,
+     157,    75,   123,    75,    72,   167,   173,   174,   159,   166,
+      97,    73,    77,   125,    82,    73,    16,    81,   154,   158,
+     162,    73,   125,   158,   159,   151,    82
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2092,7 +2097,7 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
+        case 4:
 
     {
         // The symbol table search was done in the lexical phase
@@ -2128,14 +2133,14 @@
     }
     break;
 
-  case 3:
+  case 5:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 4:
+  case 6:
 
     {
         //
@@ -2152,7 +2157,7 @@
     }
     break;
 
-  case 5:
+  case 7:
 
     {
         ConstantUnion *unionArray = new ConstantUnion[1];
@@ -2161,7 +2166,7 @@
     }
     break;
 
-  case 6:
+  case 8:
 
     {
         ConstantUnion *unionArray = new ConstantUnion[1];
@@ -2170,21 +2175,21 @@
     }
     break;
 
-  case 7:
+  case 9:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
     }
     break;
 
-  case 8:
+  case 10:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 9:
+  case 11:
 
     {
         if (!(yyvsp[(1) - (4)].interm.intermTypedNode)->isArray() && !(yyvsp[(1) - (4)].interm.intermTypedNode)->isMatrix() && !(yyvsp[(1) - (4)].interm.intermTypedNode)->isVector()) {
@@ -2267,14 +2272,14 @@
     }
     break;
 
-  case 10:
+  case 12:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 11:
+  case 13:
 
     {
         if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isArray()) {
@@ -2379,7 +2384,7 @@
     }
     break;
 
-  case 12:
+  case 14:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "++", (yyvsp[(1) - (2)].interm.intermTypedNode)))
@@ -2393,7 +2398,7 @@
     }
     break;
 
-  case 13:
+  case 15:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "--", (yyvsp[(1) - (2)].interm.intermTypedNode)))
@@ -2407,7 +2412,7 @@
     }
     break;
 
-  case 14:
+  case 16:
 
     {
         if (context->integerErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]"))
@@ -2416,7 +2421,7 @@
     }
     break;
 
-  case 15:
+  case 17:
 
     {
         TFunction* fnCall = (yyvsp[(1) - (1)].interm).function;
@@ -2517,14 +2522,14 @@
     }
     break;
 
-  case 16:
+  case 18:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 17:
+  case 19:
 
     {
         context->error((yyvsp[(3) - (3)].interm).line, "methods are not supported", "");
@@ -2533,31 +2538,31 @@
     }
     break;
 
-  case 18:
-
-    {
-        (yyval.interm) = (yyvsp[(1) - (2)].interm);
-        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-    }
-    break;
-
-  case 19:
-
-    {
-        (yyval.interm) = (yyvsp[(1) - (2)].interm);
-        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-    }
-    break;
-
   case 20:
 
     {
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
+    }
+    break;
+
+  case 21:
+
+    {
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
+    }
+    break;
+
+  case 22:
+
+    {
         (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
         (yyval.interm).intermNode = 0;
     }
     break;
 
-  case 21:
+  case 23:
 
     {
         (yyval.interm).function = (yyvsp[(1) - (1)].interm.function);
@@ -2565,7 +2570,7 @@
     }
     break;
 
-  case 22:
+  case 24:
 
     {
         TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) };
@@ -2575,7 +2580,7 @@
     }
     break;
 
-  case 23:
+  case 25:
 
     {
         TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) };
@@ -2585,14 +2590,14 @@
     }
     break;
 
-  case 24:
+  case 26:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
     }
     break;
 
-  case 25:
+  case 27:
 
     {
         //
@@ -2651,36 +2656,36 @@
     }
     break;
 
-  case 26:
-
-    {
-        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
-            context->recover();
-        TType type(EbtVoid, EbpUndefined);
-        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
-        (yyval.interm.function) = function;
-    }
-    break;
-
-  case 27:
-
-    {
-        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
-            context->recover();
-        TType type(EbtVoid, EbpUndefined);
-        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
-        (yyval.interm.function) = function;
-    }
-    break;
-
   case 28:
 
     {
+        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
+            context->recover();
+        TType type(EbtVoid, EbpUndefined);
+        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
+        (yyval.interm.function) = function;
+    }
+    break;
+
+  case 29:
+
+    {
+        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
+            context->recover();
+        TType type(EbtVoid, EbpUndefined);
+        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
+        (yyval.interm.function) = function;
+    }
+    break;
+
+  case 30:
+
+    {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 29:
+  case 31:
 
     {
         if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "++", (yyvsp[(2) - (2)].interm.intermTypedNode)))
@@ -2694,7 +2699,7 @@
     }
     break;
 
-  case 30:
+  case 32:
 
     {
         if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "--", (yyvsp[(2) - (2)].interm.intermTypedNode)))
@@ -2708,7 +2713,7 @@
     }
     break;
 
-  case 31:
+  case 33:
 
     {
         if ((yyvsp[(1) - (2)].interm).op != EOpNull) {
@@ -2729,27 +2734,27 @@
     }
     break;
 
-  case 32:
+  case 34:
 
     { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpNull; }
     break;
 
-  case 33:
+  case 35:
 
     { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpNegative; }
     break;
 
-  case 34:
+  case 36:
 
     { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpLogicalNot; }
     break;
 
-  case 35:
+  case 37:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 36:
+  case 38:
 
     {
         FRAG_VERT_ONLY("*", (yyvsp[(2) - (3)].lex).line);
@@ -2762,7 +2767,7 @@
     }
     break;
 
-  case 37:
+  case 39:
 
     {
         FRAG_VERT_ONLY("/", (yyvsp[(2) - (3)].lex).line);
@@ -2775,12 +2780,12 @@
     }
     break;
 
-  case 38:
+  case 40:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 39:
+  case 41:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2792,7 +2797,7 @@
     }
     break;
 
-  case 40:
+  case 42:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2804,18 +2809,18 @@
     }
     break;
 
-  case 41:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
-  case 42:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
   case 43:
 
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 44:
+
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 45:
+
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
@@ -2828,7 +2833,7 @@
     }
     break;
 
-  case 44:
+  case 46:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2842,7 +2847,7 @@
     }
     break;
 
-  case 45:
+  case 47:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2856,7 +2861,7 @@
     }
     break;
 
-  case 46:
+  case 48:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2870,12 +2875,12 @@
     }
     break;
 
-  case 47:
+  case 49:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 48:
+  case 50:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2889,7 +2894,7 @@
     }
     break;
 
-  case 49:
+  case 51:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2903,16 +2908,6 @@
     }
     break;
 
-  case 50:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
-  case 51:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
   case 52:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
@@ -2925,16 +2920,7 @@
 
   case 54:
 
-    {
-        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
-        if ((yyval.interm.intermTypedNode) == 0) {
-            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "&&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-            context->recover();
-            ConstantUnion *unionArray = new ConstantUnion[1];
-            unionArray->setBConst(false);
-            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
-        }
-    }
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 55:
@@ -2945,9 +2931,9 @@
   case 56:
 
     {
-        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
-            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "^^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "&&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
             context->recover();
             ConstantUnion *unionArray = new ConstantUnion[1];
             unionArray->setBConst(false);
@@ -2964,9 +2950,9 @@
   case 58:
 
     {
-        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
-            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "||", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "^^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
             context->recover();
             ConstantUnion *unionArray = new ConstantUnion[1];
             unionArray->setBConst(false);
@@ -2983,6 +2969,25 @@
   case 60:
 
     {
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "||", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yyvsp[(2) - (3)].lex).line);
+        }
+    }
+    break;
+
+  case 61:
+
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 62:
+
+    {
        if (context->boolErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(1) - (5)].interm.intermTypedNode)))
             context->recover();
 
@@ -2998,12 +3003,12 @@
     }
     break;
 
-  case 61:
+  case 63:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 62:
+  case 64:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (3)].interm).line, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)))
@@ -3017,39 +3022,39 @@
     }
     break;
 
-  case 63:
+  case 65:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAssign; }
     break;
 
-  case 64:
+  case 66:
 
     { FRAG_VERT_ONLY("*=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpMulAssign; }
     break;
 
-  case 65:
+  case 67:
 
     { FRAG_VERT_ONLY("/=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpDivAssign; }
     break;
 
-  case 66:
+  case 68:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAddAssign; }
     break;
 
-  case 67:
+  case 69:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpSubAssign; }
     break;
 
-  case 68:
+  case 70:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 69:
+  case 71:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3061,7 +3066,7 @@
     }
     break;
 
-  case 70:
+  case 72:
 
     {
         if (context->constErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)))
@@ -3070,7 +3075,7 @@
     }
     break;
 
-  case 71:
+  case 73:
 
     {
         TFunction &function = *((yyvsp[(1) - (2)].interm).function);
@@ -3101,7 +3106,7 @@
     }
     break;
 
-  case 72:
+  case 74:
 
     {
         if ((yyvsp[(1) - (2)].interm).intermAggregate)
@@ -3110,7 +3115,7 @@
     }
     break;
 
-  case 73:
+  case 75:
 
     {
         if (((yyvsp[(2) - (4)].interm.precision) == EbpHigh) && (context->shaderType == SH_FRAGMENT_SHADER) && !context->fragmentPrecisionHigh) {
@@ -3125,7 +3130,7 @@
     }
     break;
 
-  case 74:
+  case 76:
 
     {
         //
@@ -3164,23 +3169,23 @@
     }
     break;
 
-  case 75:
-
-    {
-        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
-    }
-    break;
-
-  case 76:
-
-    {
-        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
-    }
-    break;
-
   case 77:
 
     {
+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+    }
+    break;
+
+  case 78:
+
+    {
+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+    }
+    break;
+
+  case 79:
+
+    {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
         if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid)
@@ -3190,7 +3195,7 @@
     }
     break;
 
-  case 78:
+  case 80:
 
     {
         //
@@ -3212,7 +3217,7 @@
     }
     break;
 
-  case 79:
+  case 81:
 
     {
         if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
@@ -3233,7 +3238,7 @@
     }
     break;
 
-  case 80:
+  case 82:
 
     {
         if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
@@ -3248,7 +3253,7 @@
     }
     break;
 
-  case 81:
+  case 83:
 
     {
         // Check that we can make an array out of this type
@@ -3270,26 +3275,6 @@
     }
     break;
 
-  case 82:
-
-    {
-        (yyval.interm) = (yyvsp[(3) - (3)].interm);
-        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.type).qualifier, (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
-            context->recover();
-    }
-    break;
-
-  case 83:
-
-    {
-        (yyval.interm) = (yyvsp[(2) - (2)].interm);
-        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
-            context->recover();
-        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
-            context->recover();
-    }
-    break;
-
   case 84:
 
     {
@@ -3313,47 +3298,67 @@
   case 86:
 
     {
-        (yyval.interm.qualifier) = EvqIn;
+        (yyval.interm) = (yyvsp[(3) - (3)].interm);
+        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.type).qualifier, (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
+            context->recover();
     }
     break;
 
   case 87:
 
     {
-        (yyval.interm.qualifier) = EvqIn;
+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
+        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
+            context->recover();
+        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
+            context->recover();
     }
     break;
 
   case 88:
 
     {
-        (yyval.interm.qualifier) = EvqOut;
+        (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
   case 89:
 
     {
-        (yyval.interm.qualifier) = EvqInOut;
+        (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
   case 90:
 
     {
+        (yyval.interm.qualifier) = EvqOut;
+    }
+    break;
+
+  case 91:
+
+    {
+        (yyval.interm.qualifier) = EvqInOut;
+    }
+    break;
+
+  case 92:
+
+    {
         TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
         (yyval.interm).param = param;
     }
     break;
 
-  case 91:
+  case 93:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 92:
+  case 94:
 
     {
         if ((yyvsp[(1) - (3)].interm).type.type == EbtInvariant && !(yyvsp[(3) - (3)].lex).symbol)
@@ -3379,7 +3384,7 @@
     }
     break;
 
-  case 93:
+  case 95:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3401,7 +3406,7 @@
     }
     break;
 
-  case 94:
+  case 96:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
@@ -3429,7 +3434,7 @@
     }
     break;
 
-  case 95:
+  case 97:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3453,7 +3458,7 @@
     }
     break;
 
-  case 96:
+  case 98:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
@@ -3461,7 +3466,7 @@
     }
     break;
 
-  case 97:
+  case 99:
 
     {
         TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyvsp[(1) - (2)].interm.type)), (yyvsp[(2) - (2)].lex).line);
@@ -3483,7 +3488,7 @@
     }
     break;
 
-  case 98:
+  case 100:
 
     {
         context->error((yyvsp[(2) - (4)].lex).line, "unsized array declarations not supported", (yyvsp[(2) - (4)].lex).string->c_str());
@@ -3495,7 +3500,7 @@
     }
     break;
 
-  case 99:
+  case 101:
 
     {
         TType type = TType((yyvsp[(1) - (5)].interm.type));
@@ -3531,7 +3536,7 @@
     }
     break;
 
-  case 100:
+  case 102:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
@@ -3555,7 +3560,7 @@
     }
     break;
 
-  case 101:
+  case 103:
 
     {
         VERTEX_ONLY("invariant declaration", (yyvsp[(1) - (2)].lex).line);
@@ -3577,7 +3582,7 @@
     }
     break;
 
-  case 102:
+  case 104:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3590,7 +3595,7 @@
     }
     break;
 
-  case 103:
+  case 105:
 
     {
         if ((yyvsp[(2) - (2)].interm.type).array) {
@@ -3614,14 +3619,14 @@
     }
     break;
 
-  case 104:
+  case 106:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, EvqConst, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
-  case 105:
+  case 107:
 
     {
         VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
@@ -3631,7 +3636,7 @@
     }
     break;
 
-  case 106:
+  case 108:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "varying"))
@@ -3643,7 +3648,7 @@
     }
     break;
 
-  case 107:
+  case 109:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
@@ -3655,7 +3660,7 @@
     }
     break;
 
-  case 108:
+  case 110:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3664,7 +3669,7 @@
     }
     break;
 
-  case 109:
+  case 111:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3678,7 +3683,7 @@
     }
     break;
 
-  case 110:
+  case 112:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3686,35 +3691,35 @@
     }
     break;
 
-  case 111:
+  case 113:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 112:
+  case 114:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 113:
+  case 115:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 114:
+  case 116:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 115:
+  case 117:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3730,7 +3735,7 @@
     }
     break;
 
-  case 116:
+  case 118:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3738,27 +3743,11 @@
     }
     break;
 
-  case 117:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 118:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
   case 119:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3766,8 +3755,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3775,8 +3763,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3785,7 +3772,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3793,8 +3780,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3802,8 +3789,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3812,7 +3799,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3820,8 +3807,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3829,8 +3816,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3839,13 +3826,31 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
   case 129:
 
     {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
+    }
+    break;
+
+  case 130:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 131:
+
+    {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
@@ -3853,7 +3858,7 @@
     }
     break;
 
-  case 130:
+  case 132:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -3863,7 +3868,7 @@
     }
     break;
 
-  case 131:
+  case 133:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -3873,7 +3878,7 @@
     }
     break;
 
-  case 132:
+  case 134:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -3882,7 +3887,7 @@
     }
     break;
 
-  case 133:
+  case 135:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -3891,7 +3896,7 @@
     }
     break;
 
-  case 134:
+  case 136:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -3904,7 +3909,7 @@
     }
     break;
 
-  case 135:
+  case 137:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -3917,7 +3922,7 @@
     }
     break;
 
-  case 136:
+  case 138:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -3926,7 +3931,7 @@
     }
     break;
 
-  case 137:
+  case 139:
 
     {
         //
@@ -3940,12 +3945,12 @@
     }
     break;
 
-  case 138:
+  case 140:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 139:
+  case 141:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
@@ -3963,12 +3968,12 @@
     }
     break;
 
-  case 140:
+  case 142:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 141:
+  case 143:
 
     {
         TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
@@ -3978,14 +3983,14 @@
     }
     break;
 
-  case 142:
+  case 144:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 143:
+  case 145:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4001,7 +4006,7 @@
     }
     break;
 
-  case 144:
+  case 146:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4038,7 +4043,7 @@
     }
     break;
 
-  case 145:
+  case 147:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4046,14 +4051,14 @@
     }
     break;
 
-  case 146:
+  case 148:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 147:
+  case 149:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4065,7 +4070,7 @@
     }
     break;
 
-  case 148:
+  case 150:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4082,19 +4087,9 @@
     }
     break;
 
-  case 149:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
-  case 150:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 151:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 152:
@@ -4104,7 +4099,7 @@
 
   case 153:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 154:
@@ -4129,21 +4124,31 @@
 
   case 158:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 159:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 160:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermAggregate) = 0; }
     break;
 
   case 161:
 
+    { context->symbolTable.push(); }
+    break;
+
+  case 162:
+
+    { context->symbolTable.pop(); }
+    break;
+
+  case 163:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4153,24 +4158,14 @@
     }
     break;
 
-  case 162:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 163:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 164:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 165:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 166:
@@ -4185,12 +4180,22 @@
 
   case 168:
 
+    { context->symbolTable.push(); }
+    break;
+
+  case 169:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 170:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 169:
+  case 171:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4201,31 +4206,31 @@
     }
     break;
 
-  case 170:
+  case 172:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 171:
+  case 173:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 172:
+  case 174:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 173:
+  case 175:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 174:
+  case 176:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4234,7 +4239,7 @@
     }
     break;
 
-  case 175:
+  case 177:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4242,7 +4247,7 @@
     }
     break;
 
-  case 176:
+  case 178:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4250,7 +4255,7 @@
     }
     break;
 
-  case 177:
+  case 179:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4259,7 +4264,7 @@
     }
     break;
 
-  case 178:
+  case 180:
 
     {
         TIntermNode* intermNode;
@@ -4277,12 +4282,12 @@
     }
     break;
 
-  case 179:
+  case 181:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 180:
+  case 182:
 
     {
         context->symbolTable.pop();
@@ -4291,12 +4296,12 @@
     }
     break;
 
-  case 181:
+  case 183:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 182:
+  case 184:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4307,12 +4312,12 @@
     }
     break;
 
-  case 183:
+  case 185:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 184:
+  case 186:
 
     {
         context->symbolTable.pop();
@@ -4321,43 +4326,43 @@
     }
     break;
 
-  case 185:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-    }
-    break;
-
-  case 186:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-    }
-    break;
-
   case 187:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
   case 188:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
   case 189:
 
     {
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+    }
+    break;
+
+  case 190:
+
+    {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+    break;
+
+  case 191:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
     break;
 
-  case 190:
+  case 192:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4365,7 +4370,7 @@
     }
     break;
 
-  case 191:
+  case 193:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4376,7 +4381,7 @@
     }
     break;
 
-  case 192:
+  case 194:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4387,7 +4392,7 @@
     }
     break;
 
-  case 193:
+  case 195:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4398,7 +4403,7 @@
     }
     break;
 
-  case 194:
+  case 196:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4413,7 +4418,7 @@
     }
     break;
 
-  case 195:
+  case 197:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4421,7 +4426,7 @@
     }
     break;
 
-  case 196:
+  case 198:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4429,7 +4434,7 @@
     }
     break;
 
-  case 197:
+  case 199:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4437,23 +4442,23 @@
     }
     break;
 
-  case 198:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-    }
-    break;
-
-  case 199:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-    }
-    break;
-
   case 200:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+    }
+    break;
+
+  case 201:
+
+    {
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+    }
+    break;
+
+  case 202:
+
+    {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
         
         const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName());
@@ -4540,7 +4545,7 @@
     }
     break;
 
-  case 201:
+  case 203:
 
     {
         //?? Check that all paths return a value if return type != void ?