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

git-svn-id: http://angleproject.googlecode.com/svn/trunk@2190 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 61454f0..7d8494d 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -1215,19 +1215,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
@@ -1247,71 +1247,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
@@ -1622,11 +1622,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
@@ -1634,7 +1634,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
@@ -1642,15 +1642,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 2231728..c7ecd80 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.4.2.  */
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* Bison implementation for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
-   Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -45,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.2"
+#define YYBISON_VERSION "2.5"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -396,11 +395,11 @@
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -423,24 +422,24 @@
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
 	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
@@ -469,23 +468,7 @@
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
@@ -505,19 +488,39 @@
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+#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
@@ -572,115 +575,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
 
@@ -705,10 +709,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",
@@ -758,454 +762,463 @@
 /* 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 rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    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 zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -165
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#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) == (-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
@@ -1215,34 +1228,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)
@@ -1278,7 +1291,6 @@
     {								\
       yychar = (Token);						\
       yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
       YYPOPSTACK (1);						\
       goto yybackup;						\
     }								\
@@ -1320,19 +1332,10 @@
 #endif
 
 
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
+/* This macro is provided for backward compatibility. */
 
 #ifndef YY_LOCATION_PRINT
-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
 #endif
 
 
@@ -1528,7 +1531,6 @@
 # define YYMAXDEPTH 10000
 #endif
 
-
 
 #if YYERROR_VERBOSE
 
@@ -1631,115 +1633,142 @@
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
     {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
 
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
     }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
@@ -1774,6 +1803,7 @@
     }
 }
 
+
 /* Prevent warnings from -Wmissing-prototypes.  */
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
@@ -1790,12 +1820,9 @@
 #endif /* ! YYPARSE_PARAM */
 
 
-
-
-
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
+/*----------.
+| yyparse.  |
+`----------*/
 
 #ifdef YYPARSE_PARAM
 #if (defined __STDC__ || defined __C99__FUNC__ \
@@ -1982,7 +2009,7 @@
 
   /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
   /* Not known => get a lookahead token if don't already have one.  */
@@ -2013,8 +2040,8 @@
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -2067,7 +2094,7 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
+        case 4:
 
     {
         // The symbol table search was done in the lexical phase
@@ -2103,14 +2130,14 @@
     }
     break;
 
-  case 3:
+  case 5:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 4:
+  case 6:
 
     {
         //
@@ -2127,7 +2154,7 @@
     }
     break;
 
-  case 5:
+  case 7:
 
     {
         ConstantUnion *unionArray = new ConstantUnion[1];
@@ -2136,7 +2163,7 @@
     }
     break;
 
-  case 6:
+  case 8:
 
     {
         ConstantUnion *unionArray = new ConstantUnion[1];
@@ -2145,21 +2172,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()) {
@@ -2242,14 +2269,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()) {
@@ -2354,7 +2381,7 @@
     }
     break;
 
-  case 12:
+  case 14:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "++", (yyvsp[(1) - (2)].interm.intermTypedNode)))
@@ -2368,7 +2395,7 @@
     }
     break;
 
-  case 13:
+  case 15:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "--", (yyvsp[(1) - (2)].interm.intermTypedNode)))
@@ -2382,7 +2409,7 @@
     }
     break;
 
-  case 14:
+  case 16:
 
     {
         if (context->integerErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]"))
@@ -2391,7 +2418,7 @@
     }
     break;
 
-  case 15:
+  case 17:
 
     {
         TFunction* fnCall = (yyvsp[(1) - (1)].interm).function;
@@ -2492,14 +2519,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", "");
@@ -2508,31 +2535,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);
@@ -2540,7 +2567,7 @@
     }
     break;
 
-  case 22:
+  case 24:
 
     {
         TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) };
@@ -2550,7 +2577,7 @@
     }
     break;
 
-  case 23:
+  case 25:
 
     {
         TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) };
@@ -2560,14 +2587,14 @@
     }
     break;
 
-  case 24:
+  case 26:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
     }
     break;
 
-  case 25:
+  case 27:
 
     {
         //
@@ -2626,36 +2653,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)))
@@ -2669,7 +2696,7 @@
     }
     break;
 
-  case 30:
+  case 32:
 
     {
         if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "--", (yyvsp[(2) - (2)].interm.intermTypedNode)))
@@ -2683,7 +2710,7 @@
     }
     break;
 
-  case 31:
+  case 33:
 
     {
         if ((yyvsp[(1) - (2)].interm).op != EOpNull) {
@@ -2704,27 +2731,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);
@@ -2737,7 +2764,7 @@
     }
     break;
 
-  case 37:
+  case 39:
 
     {
         FRAG_VERT_ONLY("/", (yyvsp[(2) - (3)].lex).line);
@@ -2750,12 +2777,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);
@@ -2767,7 +2794,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);
@@ -2779,18 +2806,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) {
@@ -2803,7 +2830,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);
@@ -2817,7 +2844,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);
@@ -2831,7 +2858,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);
@@ -2845,12 +2872,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);
@@ -2864,7 +2891,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);
@@ -2878,16 +2905,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); }
@@ -2900,16 +2917,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:
@@ -2920,9 +2928,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);
@@ -2939,9 +2947,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);
@@ -2958,6 +2966,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();
 
@@ -2973,12 +3000,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)))
@@ -2992,39 +3019,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);
@@ -3036,7 +3063,7 @@
     }
     break;
 
-  case 70:
+  case 72:
 
     {
         if (context->constErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)))
@@ -3045,7 +3072,7 @@
     }
     break;
 
-  case 71:
+  case 73:
 
     {
         TFunction &function = *((yyvsp[(1) - (2)].interm).function);
@@ -3076,7 +3103,7 @@
     }
     break;
 
-  case 72:
+  case 74:
 
     {
         if ((yyvsp[(1) - (2)].interm).intermAggregate)
@@ -3085,7 +3112,7 @@
     }
     break;
 
-  case 73:
+  case 75:
 
     {
         if (((yyvsp[(2) - (4)].interm.precision) == EbpHigh) && (context->shaderType == SH_FRAGMENT_SHADER) && !context->fragmentPrecisionHigh) {
@@ -3100,7 +3127,7 @@
     }
     break;
 
-  case 74:
+  case 76:
 
     {
         //
@@ -3139,23 +3166,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)
@@ -3165,7 +3192,7 @@
     }
     break;
 
-  case 78:
+  case 80:
 
     {
         //
@@ -3187,7 +3214,7 @@
     }
     break;
 
-  case 79:
+  case 81:
 
     {
         if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
@@ -3208,7 +3235,7 @@
     }
     break;
 
-  case 80:
+  case 82:
 
     {
         if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
@@ -3223,7 +3250,7 @@
     }
     break;
 
-  case 81:
+  case 83:
 
     {
         // Check that we can make an array out of this type
@@ -3245,26 +3272,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:
 
     {
@@ -3288,47 +3295,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)
@@ -3354,7 +3381,7 @@
     }
     break;
 
-  case 93:
+  case 95:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3376,7 +3403,7 @@
     }
     break;
 
-  case 94:
+  case 96:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
@@ -3404,7 +3431,7 @@
     }
     break;
 
-  case 95:
+  case 97:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3428,7 +3455,7 @@
     }
     break;
 
-  case 96:
+  case 98:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
@@ -3436,7 +3463,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);
@@ -3458,7 +3485,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());
@@ -3470,7 +3497,7 @@
     }
     break;
 
-  case 99:
+  case 101:
 
     {
         TType type = TType((yyvsp[(1) - (5)].interm.type));
@@ -3506,7 +3533,7 @@
     }
     break;
 
-  case 100:
+  case 102:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
@@ -3530,7 +3557,7 @@
     }
     break;
 
-  case 101:
+  case 103:
 
     {
         VERTEX_ONLY("invariant declaration", (yyvsp[(1) - (2)].lex).line);
@@ -3552,7 +3579,7 @@
     }
     break;
 
-  case 102:
+  case 104:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3565,7 +3592,7 @@
     }
     break;
 
-  case 103:
+  case 105:
 
     {
         if ((yyvsp[(2) - (2)].interm.type).array) {
@@ -3589,14 +3616,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);
@@ -3606,7 +3633,7 @@
     }
     break;
 
-  case 106:
+  case 108:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "varying"))
@@ -3618,7 +3645,7 @@
     }
     break;
 
-  case 107:
+  case 109:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
@@ -3630,7 +3657,7 @@
     }
     break;
 
-  case 108:
+  case 110:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3639,7 +3666,7 @@
     }
     break;
 
-  case 109:
+  case 111:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3653,7 +3680,7 @@
     }
     break;
 
-  case 110:
+  case 112:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3661,35 +3688,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);
@@ -3705,7 +3732,7 @@
     }
     break;
 
-  case 116:
+  case 118:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3713,27 +3740,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;
 
@@ -3741,8 +3752,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;
 
@@ -3750,8 +3760,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;
 
@@ -3760,7 +3769,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;
 
@@ -3768,8 +3777,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;
 
@@ -3777,8 +3786,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;
 
@@ -3787,7 +3796,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;
 
@@ -3795,8 +3804,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;
 
@@ -3804,8 +3813,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;
 
@@ -3814,13 +3823,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);
@@ -3828,7 +3855,7 @@
     }
     break;
 
-  case 130:
+  case 132:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -3838,7 +3865,7 @@
     }
     break;
 
-  case 131:
+  case 133:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -3848,7 +3875,7 @@
     }
     break;
 
-  case 132:
+  case 134:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -3857,7 +3884,7 @@
     }
     break;
 
-  case 133:
+  case 135:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -3866,7 +3893,7 @@
     }
     break;
 
-  case 134:
+  case 136:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -3879,7 +3906,7 @@
     }
     break;
 
-  case 135:
+  case 137:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -3892,7 +3919,7 @@
     }
     break;
 
-  case 136:
+  case 138:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -3901,7 +3928,7 @@
     }
     break;
 
-  case 137:
+  case 139:
 
     {
         //
@@ -3915,12 +3942,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))
@@ -3938,12 +3965,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(""));
@@ -3953,14 +3980,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);
@@ -3976,7 +4003,7 @@
     }
     break;
 
-  case 144:
+  case 146:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4013,7 +4040,7 @@
     }
     break;
 
-  case 145:
+  case 147:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4021,14 +4048,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))
@@ -4040,7 +4067,7 @@
     }
     break;
 
-  case 148:
+  case 150:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4057,19 +4084,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:
@@ -4079,7 +4096,7 @@
 
   case 153:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 154:
@@ -4104,21 +4121,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);
@@ -4128,24 +4155,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:
@@ -4160,12 +4177,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)) {
@@ -4176,31 +4203,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)))
@@ -4209,7 +4236,7 @@
     }
     break;
 
-  case 175:
+  case 177:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4217,7 +4244,7 @@
     }
     break;
 
-  case 176:
+  case 178:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4225,7 +4252,7 @@
     }
     break;
 
-  case 177:
+  case 179:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4234,7 +4261,7 @@
     }
     break;
 
-  case 178:
+  case 180:
 
     {
         TIntermNode* intermNode;
@@ -4252,12 +4279,12 @@
     }
     break;
 
-  case 179:
+  case 181:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 180:
+  case 182:
 
     {
         context->symbolTable.pop();
@@ -4266,12 +4293,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)))
@@ -4282,12 +4309,12 @@
     }
     break;
 
-  case 183:
+  case 185:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 184:
+  case 186:
 
     {
         context->symbolTable.pop();
@@ -4296,43 +4323,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);
@@ -4340,7 +4367,7 @@
     }
     break;
 
-  case 191:
+  case 193:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4351,7 +4378,7 @@
     }
     break;
 
-  case 192:
+  case 194:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4362,7 +4389,7 @@
     }
     break;
 
-  case 193:
+  case 195:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4373,7 +4400,7 @@
     }
     break;
 
-  case 194:
+  case 196:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4388,7 +4415,7 @@
     }
     break;
 
-  case 195:
+  case 197:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4396,7 +4423,7 @@
     }
     break;
 
-  case 196:
+  case 198:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4404,7 +4431,7 @@
     }
     break;
 
-  case 197:
+  case 199:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4412,23 +4439,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());
@@ -4515,7 +4542,7 @@
     }
     break;
 
-  case 201:
+  case 203:
 
     {
         //?? Check that all paths return a value if return type != void ?
@@ -4546,6 +4573,17 @@
 
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -4573,6 +4611,10 @@
 | yyerrlab -- here on detecting error |
 `------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -4580,37 +4622,36 @@
 #if ! YYERROR_VERBOSE
       yyerror (context, YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (context, yymsg);
-	  }
-	else
-	  {
-	    yyerror (context, YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (context, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -4669,7 +4710,7 @@
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
+      if (!yypact_value_is_default (yyn))
 	{
 	  yyn += YYTERROR;
 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -4728,8 +4769,13 @@
 
 yyreturn:
   if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval, context);
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, context);
+    }
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
diff --git a/src/compiler/glslang_tab.h b/src/compiler/glslang_tab.h
index 3e461ee..0c67257 100644
--- a/src/compiler/glslang_tab.h
+++ b/src/compiler/glslang_tab.h
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.4.2.  */
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* Skeleton interface for Bison's Yacc-like parsers in C
+/* Bison interface for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
-   Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by