Implemented interpolation qualifier parsing.

TRAC #22857
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2149 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/BaseTypes.h b/src/compiler/BaseTypes.h
index af4c7e3..0a8553b 100644
--- a/src/compiler/BaseTypes.h
+++ b/src/compiler/BaseTypes.h
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -113,6 +113,16 @@
     EvqFragColor,
     EvqFragData,
 
+    // GLSL ES 3.0 vertex output and fragment input
+    EvqSmooth,        // Incomplete qualifier, smooth is the default
+    EvqFlat,          // Incomplete qualifier
+    EvqSmoothOut = EvqSmooth,
+    EvqFlatOut = EvqFlat,
+    EvqCentroidOut,   // Implies smooth
+    EvqSmoothIn,
+    EvqFlatIn,
+    EvqCentroidIn,    // Implies smooth
+
     // end of list
     EvqLast
 };
@@ -144,9 +154,29 @@
     case EvqFragCoord:      return "FragCoord";      break;
     case EvqFrontFacing:    return "FrontFacing";    break;
     case EvqFragColor:      return "FragColor";      break;
-    case EvqFragData:       return "FragData";      break;
+    case EvqFragData:       return "FragData";       break;
+    case EvqSmoothOut:      return "smooth out";     break;
+    case EvqCentroidOut:    return "centroid out";   break;
+    case EvqFlatOut:        return "flat out";       break;
+    case EvqSmoothIn:       return "smooth in";      break;
+    case EvqCentroidIn:     return "centroid in";    break;
+    case EvqFlatIn:         return "flat in";        break;
     default:                return "unknown qualifier";
     }
 }
 
+inline const char* getInterpolationString(TQualifier q)
+{
+    switch(q)
+    {
+    case EvqSmoothOut:      return "smooth";   break;
+    case EvqCentroidOut:    return "centroid"; break;
+    case EvqFlatOut:        return "flat";     break;
+    case EvqSmoothIn:       return "smooth";   break;
+    case EvqCentroidIn:     return "centroid"; break;
+    case EvqFlatIn:         return "flat";     break;
+    default:                return "unknown interpolation";
+    }
+}
+
 #endif // _BASICTYPES_INCLUDED_
diff --git a/src/compiler/OutputHLSL.cpp b/src/compiler/OutputHLSL.cpp
index 78c737a..3690589 100644
--- a/src/compiler/OutputHLSL.cpp
+++ b/src/compiler/OutputHLSL.cpp
@@ -1150,7 +1150,7 @@
             mReferencedAttributes[name] = node;
             out << decorate(name);
         }
-        else if (qualifier == EvqVaryingOut || qualifier == EvqInvariantVaryingOut || qualifier == EvqVaryingIn || qualifier == EvqInvariantVaryingIn)
+        else if (isVarying(qualifier))
         {
             mReferencedVaryings[name] = node;
             out << decorate(name);
@@ -1644,7 +1644,7 @@
                 }
                 else UNREACHABLE();
             }
-            else if (variable && (variable->getQualifier() == EvqVaryingOut || variable->getQualifier() == EvqInvariantVaryingOut))
+            else if (variable && isVaryingOut(variable->getQualifier()))
             {
                 for (TIntermSequence::iterator sit = sequence.begin(); sit != sequence.end(); sit++)
                 {
@@ -3221,4 +3221,39 @@
     return GL_NONE;
 }
 
+bool OutputHLSL::isVaryingOut(TQualifier qualifier)
+{
+    switch(qualifier)
+    {
+      case EvqVaryingOut:
+      case EvqInvariantVaryingOut:
+      case EvqSmoothOut:
+      case EvqFlatOut:
+      case EvqCentroidOut:
+        return true;
+    }
+
+    return false;
+}
+
+bool OutputHLSL::isVaryingIn(TQualifier qualifier)
+{
+    switch(qualifier)
+    {
+      case EvqVaryingIn:
+      case EvqInvariantVaryingIn:
+      case EvqSmoothIn:
+      case EvqFlatIn:
+      case EvqCentroidIn:
+        return true;
+    }
+
+    return false;
+}
+
+bool OutputHLSL::isVarying(TQualifier qualifier)
+{
+    return isVaryingIn(qualifier) || isVaryingOut(qualifier);
+}
+
 }
diff --git a/src/compiler/OutputHLSL.h b/src/compiler/OutputHLSL.h
index 4a6d12a..2567c16 100644
--- a/src/compiler/OutputHLSL.h
+++ b/src/compiler/OutputHLSL.h
@@ -168,8 +168,12 @@
     int samplerRegister(TIntermSymbol *sampler);
     int uniformRegister(TIntermSymbol *uniform);
     void declareUniform(const TType &type, const TString &name, int index);
+    
     static GLenum glVariableType(const TType &type);
     static GLenum glVariablePrecision(const TType &type);
+    static bool isVaryingIn(TQualifier qualifier);
+    static bool isVaryingOut(TQualifier qualifier);
+    static bool isVarying(TQualifier qualifier);
 
     ActiveUniforms mActiveUniforms;
 };
diff --git a/src/compiler/Types.h b/src/compiler/Types.h
index 854bb44..5bf211c 100644
--- a/src/compiler/Types.h
+++ b/src/compiler/Types.h
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -277,7 +277,7 @@
     void computeDeepestStructNesting();
 
     TBasicType type      : 6;
-    TPrecision precision;
+    TPrecision precision : 4;
     TQualifier qualifier : 7;
     int size             : 8; // size of vector or matrix, not size of array
     unsigned int matrix  : 1;
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index ee5c1b7..305107a 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -167,7 +167,7 @@
 %type <interm.qualifier> parameter_qualifier parameter_type_qualifier 
 
 %type <interm.precision> precision_qualifier
-%type <interm.type> type_qualifier fully_specified_type type_specifier storage_qualifier
+%type <interm.type> type_qualifier fully_specified_type type_specifier storage_qualifier interpolation_qualifier
 %type <interm.type> type_specifier_no_prec type_specifier_nonarray
 %type <interm.type> struct_specifier
 %type <interm.typeLine> struct_declarator
@@ -1502,6 +1502,17 @@
     }
     ;
 
+interpolation_qualifier
+    : SMOOTH {
+        $$.qualifier = EvqSmooth;
+        $$.line = $1.line;
+    }
+    | FLAT {
+        $$.qualifier = EvqFlat;
+        $$.line = $1.line;
+    }
+    ;
+
 parameter_type_qualifier
     : CONST_QUAL {
         $$ = EvqConst;
@@ -1511,13 +1522,13 @@
 type_qualifier
     : ATTRIBUTE {
         VERTEX_ONLY("attribute", $1.line);
-		ES2_ONLY("attribute", $1.line);
+        ES2_ONLY("attribute", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "attribute"))
             context->recover();
         $$.setBasic(EbtVoid, EvqAttribute, $1.line);
     }
     | VARYING {
-	    ES2_ONLY("varying", $1.line);
+        ES2_ONLY("varying", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
@@ -1526,7 +1537,7 @@
             $$.setBasic(EbtVoid, EvqVaryingIn, $1.line);
     }
     | INVARIANT VARYING {
-	    ES2_ONLY("varying", $1.line);
+        ES2_ONLY("varying", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "invariant varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
@@ -1534,43 +1545,84 @@
         else
             $$.setBasic(EbtVoid, EvqInvariantVaryingIn, $1.line);
     }
-	| storage_qualifier {
+    | storage_qualifier {
         $$.setBasic(EbtVoid, $1.qualifier, $1.line);
     }
+    | interpolation_qualifier storage_qualifier {
+        if ($2.qualifier == EvqSmoothIn) {
+            if ($1.qualifier == EvqSmooth)
+                $$.setBasic(EbtVoid, EvqSmoothIn, $2.line);
+            else if ($1.qualifier == EvqFlat)
+                $$.setBasic(EbtVoid, EvqFlatIn, $2.line);
+            else UNREACHABLE();
+        }
+        else if ($2.qualifier == EvqCentroidIn) {
+            if ($1.qualifier == EvqSmooth)
+                $$.setBasic(EbtVoid, EvqCentroidIn, $2.line);
+            else if ($1.qualifier == EvqFlat)
+                $$.setBasic(EbtVoid, EvqFlatIn, $2.line);
+            else UNREACHABLE();
+        }
+        else if ($2.qualifier == EvqSmoothOut) {
+            if ($1.qualifier == EvqSmooth)
+                $$.setBasic(EbtVoid, EvqSmoothOut, $2.line);
+            else if ($1.qualifier == EvqFlat)
+                $$.setBasic(EbtVoid, EvqFlatOut, $2.line);
+            else UNREACHABLE();
+        }
+        else if ($2.qualifier == EvqCentroidOut) {
+            if ($1.qualifier == EvqSmooth)
+                $$.setBasic(EbtVoid, EvqCentroidOut, $2.line);
+            else if ($1.qualifier == EvqFlat)
+                $$.setBasic(EbtVoid, EvqFlatOut, $2.line);
+            else UNREACHABLE();
+        }
+        else {
+            context->error($1.line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString($1.qualifier));
+            context->recover();
+
+            $$.setBasic(EbtVoid, $2.qualifier, $2.line);
+        }
+    }
+    | interpolation_qualifier {
+        context->error($1.line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString($1.qualifier));
+        context->recover();
+        
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtVoid, qual, $1.line);
+    }
     ;
 
 storage_qualifier
     : CONST_QUAL {
         $$.qualifier = EvqConst;
-		$$.line = $1.line;
+        $$.line = $1.line;
     }
     | IN_QUAL {
-		ES3_ONLY("in", $1.line);
-        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqVaryingIn : EvqAttribute;
-		$$.line = $1.line;
+        ES3_ONLY("in", $1.line);
+        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqSmoothIn : EvqAttribute;
+        $$.line = $1.line;
     }
     | OUT_QUAL {
-		ES3_ONLY("out", $1.line);
-        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqVaryingOut;
-		$$.line = $1.line;
+        ES3_ONLY("out", $1.line);
+        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqSmoothOut;
+        $$.line = $1.line;
     }
     | CENTROID IN_QUAL {
-		ES3_ONLY("in", $1.line);
-	    // FIXME: Handle centroid qualifier
-        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqVaryingIn : EvqAttribute;
-		$$.line = $2.line;
+        ES3_ONLY("centroid in", $1.line);
+        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqCentroidIn : EvqAttribute;
+        $$.line = $1.line;
     }
-	| CENTROID OUT_QUAL {
-		ES3_ONLY("out", $1.line);
-	    // FIXME: Handle centroid qualifier
-        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqVaryingOut;
-		$$.line = $2.line;
+    | CENTROID OUT_QUAL {
+        ES3_ONLY("centroid out", $1.line);
+        $$.qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqCentroidOut;
+        $$.line = $1.line;
     }
-	| UNIFORM {
+    | UNIFORM {
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "uniform"))
             context->recover();
         $$.qualifier = EvqUniform;
-		$$.line = $1.line;
+        $$.line = $1.line;
     }
     ;
 
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index 035e2a8..b7aeab9 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -529,18 +529,18 @@
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  77
+#define YYFINAL  81
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1546
+#define YYLAST   1551
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  105
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  85
+#define YYNNTS  86
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  207
+#define YYNRULES  211
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  311
+#define YYNSTATES  315
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -605,29 +605,30 @@
      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,   326,   328,   331,   334,   336,   338,   341,   343,   345,
-     347,   349,   354,   356,   358,   360,   362,   364,   366,   368,
-     370,   372,   374,   376,   378,   380,   382,   384,   386,   388,
-     390,   392,   394,   396,   398,   399,   406,   407,   413,   415,
-     418,   422,   424,   428,   430,   435,   437,   439,   441,   443,
-     445,   447,   449,   451,   453,   456,   457,   458,   464,   466,
-     468,   469,   472,   473,   476,   479,   483,   485,   488,   490,
-     493,   499,   503,   505,   507,   512,   513,   520,   521,   530,
-     531,   539,   541,   543,   545,   546,   549,   553,   556,   559,
-     562,   566,   569,   571,   574,   576,   578,   579
+     298,   303,   306,   308,   311,   313,   315,   317,   319,   321,
+     324,   326,   329,   331,   333,   335,   337,   340,   343,   345,
+     347,   350,   352,   354,   356,   358,   363,   365,   367,   369,
+     371,   373,   375,   377,   379,   381,   383,   385,   387,   389,
+     391,   393,   395,   397,   399,   401,   403,   405,   407,   408,
+     415,   416,   422,   424,   427,   431,   433,   437,   439,   444,
+     446,   448,   450,   452,   454,   456,   458,   460,   462,   465,
+     466,   467,   473,   475,   477,   478,   481,   482,   485,   488,
+     492,   494,   497,   499,   502,   508,   512,   514,   516,   521,
+     522,   529,   530,   539,   540,   548,   550,   552,   554,   555,
+     558,   562,   565,   568,   571,   575,   578,   580,   583,   585,
+     587,   588
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     186,     0,    -1,    54,    -1,   106,    -1,    57,    -1,    56,
+     187,     0,    -1,    54,    -1,   106,    -1,    57,    -1,    56,
       -1,    58,    -1,    81,   133,    82,    -1,   107,    -1,   108,
       83,   109,    84,    -1,   110,    -1,   108,    87,    59,    -1,
      108,    62,    -1,   108,    63,    -1,   133,    -1,   111,    -1,
      112,    -1,   108,    87,   112,    -1,   114,    82,    -1,   113,
       82,    -1,   115,    45,    -1,   115,    -1,   115,   131,    -1,
-     114,    88,   131,    -1,   116,    81,    -1,   153,    -1,    54,
+     114,    88,   131,    -1,   116,    81,    -1,   154,    -1,    54,
       -1,    59,    -1,   108,    -1,    62,   117,    -1,    63,   117,
       -1,   118,   117,    -1,    95,    -1,    93,    -1,    92,    -1,
      117,    -1,   119,    96,   117,    -1,   119,    97,   117,    -1,
@@ -641,45 +642,46 @@
      131,    -1,   130,    -1,   117,   132,   131,    -1,    90,    -1,
       71,    -1,    72,    -1,    73,    -1,    80,    -1,   131,    -1,
      133,    88,   131,    -1,   130,    -1,   136,    91,    -1,   144,
-      91,    -1,     7,   151,   152,    91,    -1,   137,    82,    -1,
+      91,    -1,     7,   152,   153,    91,    -1,   137,    82,    -1,
      139,    -1,   138,    -1,   139,   141,    -1,   138,    88,   141,
-      -1,   146,    54,    81,    -1,   150,    54,    -1,   150,    54,
-      83,   134,    84,    -1,   147,   142,   140,    -1,   142,   140,
-      -1,   147,   142,   143,    -1,   142,   143,    -1,    -1,    36,
-      -1,    37,    -1,    38,    -1,   150,    -1,   145,    -1,   144,
+      -1,   146,    54,    81,    -1,   151,    54,    -1,   151,    54,
+      83,   134,    84,    -1,   148,   142,   140,    -1,   142,   140,
+      -1,   148,   142,   143,    -1,   142,   143,    -1,    -1,    36,
+      -1,    37,    -1,    38,    -1,   151,    -1,   145,    -1,   144,
       88,    54,    -1,   144,    88,    54,    83,    84,    -1,   144,
       88,    54,    83,   134,    84,    -1,   144,    88,    54,    90,
-     161,    -1,   146,    -1,   146,    54,    -1,   146,    54,    83,
+     162,    -1,   146,    -1,   146,    54,    -1,   146,    54,    83,
       84,    -1,   146,    54,    83,   134,    84,    -1,   146,    54,
-      90,   161,    -1,     3,    54,    -1,   150,    -1,   148,   150,
-      -1,     9,    -1,     8,    -1,    40,    -1,     3,    40,    -1,
-     149,    -1,     9,    -1,    36,    -1,    37,    -1,    41,    36,
-      -1,    41,    37,    -1,    39,    -1,   152,    -1,   151,   152,
-      -1,     4,    -1,     5,    -1,     6,    -1,   153,    -1,   153,
-      83,   134,    84,    -1,    45,    -1,    11,    -1,    12,    -1,
-      10,    -1,    30,    -1,    31,    -1,    32,    -1,    24,    -1,
-      25,    -1,    26,    -1,    27,    -1,    28,    -1,    29,    -1,
-      33,    -1,    34,    -1,    35,    -1,    47,    -1,    48,    -1,
-      49,    -1,    50,    -1,   154,    -1,    55,    -1,    -1,    44,
-      54,    85,   155,   157,    86,    -1,    -1,    44,    85,   156,
-     157,    86,    -1,   158,    -1,   157,   158,    -1,   150,   159,
-      91,    -1,   160,    -1,   159,    88,   160,    -1,    54,    -1,
-      54,    83,   134,    84,    -1,   131,    -1,   135,    -1,   165,
-      -1,   164,    -1,   162,    -1,   174,    -1,   175,    -1,   178,
-      -1,   185,    -1,    85,    86,    -1,    -1,    -1,    85,   166,
-     173,   167,    86,    -1,   172,    -1,   164,    -1,    -1,   170,
-     172,    -1,    -1,   171,   164,    -1,    85,    86,    -1,    85,
-     173,    86,    -1,   163,    -1,   173,   163,    -1,    91,    -1,
-     133,    91,    -1,    18,    81,   133,    82,   176,    -1,   169,
-      16,   169,    -1,   169,    -1,   133,    -1,   146,    54,    90,
-     161,    -1,    -1,    46,    81,   179,   177,    82,   168,    -1,
-      -1,    15,   180,   169,    46,    81,   133,    82,    91,    -1,
-      -1,    17,    81,   181,   182,   184,    82,   168,    -1,   174,
-      -1,   162,    -1,   177,    -1,    -1,   183,    91,    -1,   183,
-      91,   133,    -1,    14,    91,    -1,    13,    91,    -1,    20,
-      91,    -1,    20,   133,    91,    -1,    19,    91,    -1,   187,
-      -1,   186,   187,    -1,   188,    -1,   135,    -1,    -1,   136,
-     189,   172,    -1
+      90,   162,    -1,     3,    54,    -1,   151,    -1,   149,   151,
+      -1,    43,    -1,    42,    -1,     9,    -1,     8,    -1,    40,
+      -1,     3,    40,    -1,   150,    -1,   147,   150,    -1,   147,
+      -1,     9,    -1,    36,    -1,    37,    -1,    41,    36,    -1,
+      41,    37,    -1,    39,    -1,   153,    -1,   152,   153,    -1,
+       4,    -1,     5,    -1,     6,    -1,   154,    -1,   154,    83,
+     134,    84,    -1,    45,    -1,    11,    -1,    12,    -1,    10,
+      -1,    30,    -1,    31,    -1,    32,    -1,    24,    -1,    25,
+      -1,    26,    -1,    27,    -1,    28,    -1,    29,    -1,    33,
+      -1,    34,    -1,    35,    -1,    47,    -1,    48,    -1,    49,
+      -1,    50,    -1,   155,    -1,    55,    -1,    -1,    44,    54,
+      85,   156,   158,    86,    -1,    -1,    44,    85,   157,   158,
+      86,    -1,   159,    -1,   158,   159,    -1,   151,   160,    91,
+      -1,   161,    -1,   160,    88,   161,    -1,    54,    -1,    54,
+      83,   134,    84,    -1,   131,    -1,   135,    -1,   166,    -1,
+     165,    -1,   163,    -1,   175,    -1,   176,    -1,   179,    -1,
+     186,    -1,    85,    86,    -1,    -1,    -1,    85,   167,   174,
+     168,    86,    -1,   173,    -1,   165,    -1,    -1,   171,   173,
+      -1,    -1,   172,   165,    -1,    85,    86,    -1,    85,   174,
+      86,    -1,   164,    -1,   174,   164,    -1,    91,    -1,   133,
+      91,    -1,    18,    81,   133,    82,   177,    -1,   170,    16,
+     170,    -1,   170,    -1,   133,    -1,   146,    54,    90,   162,
+      -1,    -1,    46,    81,   180,   178,    82,   169,    -1,    -1,
+      15,   181,   170,    46,    81,   133,    82,    91,    -1,    -1,
+      17,    81,   182,   183,   185,    82,   169,    -1,   175,    -1,
+     163,    -1,   178,    -1,    -1,   184,    91,    -1,   184,    91,
+     133,    -1,    14,    91,    -1,    13,    91,    -1,    20,    91,
+      -1,    20,   133,    91,    -1,    19,    91,    -1,   188,    -1,
+     187,   188,    -1,   189,    -1,   135,    -1,    -1,   136,   190,
+     173,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -695,17 +697,18 @@
      969,   977,  1004,  1009,  1023,  1061,  1064,  1071,  1079,  1100,
     1121,  1132,  1161,  1166,  1176,  1181,  1191,  1194,  1197,  1200,
     1206,  1213,  1216,  1238,  1256,  1280,  1303,  1307,  1325,  1333,
-    1365,  1385,  1474,  1483,  1506,  1512,  1519,  1528,  1537,  1543,
-    1547,  1552,  1557,  1563,  1569,  1578,  1588,  1595,  1598,  1601,
-    1607,  1610,  1625,  1629,  1633,  1637,  1646,  1651,  1656,  1661,
-    1666,  1671,  1676,  1681,  1686,  1691,  1697,  1703,  1709,  1714,
-    1719,  1728,  1737,  1742,  1755,  1755,  1769,  1769,  1778,  1781,
-    1796,  1832,  1836,  1842,  1850,  1866,  1870,  1874,  1875,  1881,
-    1882,  1883,  1884,  1885,  1889,  1890,  1890,  1890,  1900,  1901,
-    1905,  1905,  1906,  1906,  1911,  1914,  1924,  1927,  1933,  1934,
-    1938,  1946,  1950,  1960,  1965,  1982,  1982,  1987,  1987,  1994,
-    1994,  2002,  2005,  2011,  2014,  2020,  2024,  2031,  2038,  2045,
-    2052,  2063,  2072,  2076,  2083,  2086,  2092,  2092
+    1365,  1385,  1474,  1483,  1506,  1510,  1517,  1523,  1530,  1539,
+    1548,  1551,  1587,  1597,  1601,  1606,  1611,  1616,  1621,  1630,
+    1640,  1647,  1650,  1653,  1659,  1662,  1677,  1681,  1685,  1689,
+    1698,  1703,  1708,  1713,  1718,  1723,  1728,  1733,  1738,  1743,
+    1749,  1755,  1761,  1766,  1771,  1780,  1789,  1794,  1807,  1807,
+    1821,  1821,  1830,  1833,  1848,  1884,  1888,  1894,  1902,  1918,
+    1922,  1926,  1927,  1933,  1934,  1935,  1936,  1937,  1941,  1942,
+    1942,  1942,  1952,  1953,  1957,  1957,  1958,  1958,  1963,  1966,
+    1976,  1979,  1985,  1986,  1990,  1998,  2002,  2012,  2017,  2034,
+    2034,  2039,  2039,  2046,  2046,  2054,  2057,  2063,  2066,  2072,
+    2076,  2083,  2090,  2097,  2104,  2115,  2124,  2128,  2135,  2138,
+    2144,  2144
 };
 #endif
 
@@ -749,10 +752,10 @@
   "function_header", "parameter_declarator", "parameter_declaration",
   "parameter_qualifier", "parameter_type_specifier",
   "init_declarator_list", "single_declaration", "fully_specified_type",
-  "parameter_type_qualifier", "type_qualifier", "storage_qualifier",
-  "type_specifier", "precision_qualifier", "type_specifier_no_prec",
-  "type_specifier_nonarray", "struct_specifier", "$@1", "$@2",
-  "struct_declaration_list", "struct_declaration",
+  "interpolation_qualifier", "parameter_type_qualifier", "type_qualifier",
+  "storage_qualifier", "type_specifier", "precision_qualifier",
+  "type_specifier_no_prec", "type_specifier_nonarray", "struct_specifier",
+  "$@1", "$@2", "struct_declaration_list", "struct_declaration",
   "struct_declarator_list", "struct_declarator", "initializer",
   "declaration_statement", "statement", "simple_statement",
   "compound_statement", "$@3", "$@4", "statement_no_new_scope",
@@ -797,17 +800,18 @@
      134,   135,   135,   135,   136,   137,   137,   138,   138,   139,
      140,   140,   141,   141,   141,   141,   142,   142,   142,   142,
      143,   144,   144,   144,   144,   144,   145,   145,   145,   145,
-     145,   145,   146,   146,   147,   148,   148,   148,   148,   149,
-     149,   149,   149,   149,   149,   150,   150,   151,   151,   151,
-     152,   152,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   153,   153,   155,   154,   156,   154,   157,   157,
-     158,   159,   159,   160,   160,   161,   162,   163,   163,   164,
-     164,   164,   164,   164,   165,   166,   167,   165,   168,   168,
-     170,   169,   171,   169,   172,   172,   173,   173,   174,   174,
-     175,   176,   176,   177,   177,   179,   178,   180,   178,   181,
-     178,   182,   182,   183,   183,   184,   184,   185,   185,   185,
-     185,   185,   186,   186,   187,   187,   189,   188
+     145,   145,   146,   146,   147,   147,   148,   149,   149,   149,
+     149,   149,   149,   150,   150,   150,   150,   150,   150,   151,
+     151,   152,   152,   152,   153,   153,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   154,   156,   155,
+     157,   155,   158,   158,   159,   160,   160,   161,   161,   162,
+     163,   164,   164,   165,   165,   165,   165,   165,   166,   167,
+     168,   166,   169,   169,   171,   170,   172,   170,   173,   173,
+     174,   174,   175,   175,   176,   177,   177,   178,   178,   180,
+     179,   181,   179,   182,   179,   183,   183,   184,   184,   185,
+     185,   186,   186,   186,   186,   186,   187,   187,   188,   188,
+     190,   189
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -823,17 +827,18 @@
        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,
-       1,     1,     2,     2,     1,     1,     2,     1,     1,     1,
-       1,     4,     1,     1,     1,     1,     1,     1,     1,     1,
+       4,     2,     1,     2,     1,     1,     1,     1,     1,     2,
+       1,     2,     1,     1,     1,     1,     2,     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,     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,     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
@@ -841,428 +846,430 @@
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   117,   118,   119,     0,   105,   109,   125,   123,
-     124,   129,   130,   131,   132,   133,   134,   126,   127,   128,
-     135,   136,   137,   110,   111,   114,   106,     0,     0,   122,
-     138,   139,   140,   141,   143,   205,   206,     0,    76,    86,
-       0,    91,    96,     0,   108,   102,     0,   115,   120,   142,
-       0,   202,   204,   107,   101,     0,   112,   113,     0,   146,
-      71,     0,    74,    86,   104,    87,    88,    89,    77,     0,
-      86,     0,    72,    97,   103,   116,     0,     1,   203,     0,
-     144,     0,     0,   207,    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,   148,     0,     0,   187,     0,     0,
-       0,     0,     0,   165,   174,   178,    35,    61,    68,     0,
-     156,     0,   120,   159,   176,   158,   157,     0,   160,   161,
-     162,   163,    80,    82,    84,     0,     0,    98,     0,   155,
-     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,   121,
-       0,   153,     0,   151,   147,   149,   198,   197,   172,   189,
-       0,   201,   199,     0,   185,   164,     0,    64,    65,    66,
-      67,    63,     0,     0,   179,   175,   177,     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,   145,     0,     0,   150,     0,     0,     0,
-       0,     0,   200,     0,   166,    62,    69,     0,    94,     9,
-       0,     0,   152,     0,   171,   173,   192,   191,   194,   172,
-       0,   183,     0,     0,     0,    81,    60,   154,     0,   193,
-       0,     0,   182,   180,     0,     0,   167,     0,   195,     0,
-     172,     0,   169,   186,   168,     0,   196,   190,   181,   184,
-     188
+       0,     0,   121,   122,   123,     0,   107,   113,   129,   127,
+     128,   133,   134,   135,   136,   137,   138,   130,   131,   132,
+     139,   140,   141,   114,   115,   118,   108,     0,   105,   104,
+       0,   126,   142,   143,   144,   145,   147,   209,   210,     0,
+      76,    86,     0,    91,    96,   112,     0,   110,   102,     0,
+     119,   124,   146,     0,   206,   208,   109,   101,     0,   116,
+     117,     0,   150,    71,     0,    74,    86,   106,    87,    88,
+      89,    77,     0,    86,     0,    72,    97,   111,   103,   120,
+       0,     1,   207,     0,   148,     0,     0,   211,    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,   152,     0,
+       0,   191,     0,     0,     0,     0,     0,   169,   178,   182,
+      35,    61,    68,     0,   160,     0,   124,   163,   180,   162,
+     161,     0,   164,   165,   166,   167,    80,    82,    84,     0,
+       0,    98,     0,   159,   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,   125,     0,   157,     0,   155,   151,   153,
+     202,   201,   176,   193,     0,   205,   203,     0,   189,   168,
+       0,    64,    65,    66,    67,    63,     0,     0,   183,   179,
+     181,     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,   149,     0,     0,
+     154,     0,     0,     0,     0,     0,   204,     0,   170,    62,
+      69,     0,    94,     9,     0,     0,   156,     0,   175,   177,
+     196,   195,   198,   176,     0,   187,     0,     0,     0,    81,
+      60,   158,     0,   197,     0,     0,   186,   184,     0,     0,
+     171,     0,   199,     0,   176,     0,   173,   190,   172,     0,
+     200,   194,   185,   188,   192
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   104,   105,   106,   233,   107,   108,   109,   110,   111,
-     112,   113,   146,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   147,   148,   222,   149,   128,
-     150,   151,    37,    38,    39,    85,    68,    69,    86,    40,
-      41,    42,    70,    43,    44,    45,    46,    47,   129,    49,
-     131,    81,   133,   134,   202,   203,   170,   153,   154,   155,
-     156,   216,   284,   303,   257,   258,   259,   304,   157,   158,
-     159,   293,   283,   160,   263,   208,   260,   278,   290,   291,
-     161,    50,    51,    52,    61
+      -1,   108,   109,   110,   237,   111,   112,   113,   114,   115,
+     116,   117,   150,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   151,   152,   226,   153,   132,
+     154,   155,    39,    40,    41,    89,    71,    72,    90,    42,
+      43,    44,    45,    73,    46,    47,    48,    49,    50,   133,
+      52,   135,    85,   137,   138,   206,   207,   174,   157,   158,
+     159,   160,   220,   288,   307,   261,   262,   263,   308,   161,
+     162,   163,   297,   287,   164,   267,   212,   264,   282,   294,
+     295,   165,    53,    54,    55,    64
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -268
+#define YYPACT_NINF -270
 static const yytype_int16 yypact[] =
 {
-    1362,    -6,  -268,  -268,  -268,   135,  -268,  -268,  -268,  -268,
-    -268,  -268,  -268,  -268,  -268,  -268,  -268,  -268,  -268,  -268,
-    -268,  -268,  -268,  -268,  -268,  -268,  -268,   -21,   -26,  -268,
-    -268,  -268,  -268,  -268,  -268,  -268,   -51,   -47,     6,    16,
-     -20,  -268,    46,  1409,  -268,  -268,  1491,  -268,    29,  -268,
-    1309,  -268,  -268,  -268,  -268,  1491,  -268,  -268,    31,  -268,
-    -268,    67,  -268,    27,  -268,  -268,  -268,  -268,  -268,  1409,
-     111,   102,  -268,   -11,  -268,  -268,  1055,  -268,  -268,    69,
-    -268,  1409,   297,  -268,  -268,  -268,  -268,   104,  1409,   -45,
-    -268,   193,  1055,    80,  -268,  -268,  -268,  -268,  1055,  1055,
-    1055,  -268,  -268,  -268,  -268,  -268,    21,  -268,  -268,  -268,
-      81,   -15,  1127,    84,  -268,  1055,   -22,    20,  -268,   -43,
-      70,  -268,  -268,  -268,    94,    96,   -55,  -268,    83,  -268,
-    -268,  1409,   114,  1199,  -268,    82,    85,  -268,    90,    91,
-      86,   908,    93,    89,  -268,  -268,   -53,  -268,  -268,    14,
-    -268,   -51,    49,  -268,  -268,  -268,  -268,   390,  -268,  -268,
-    -268,  -268,    95,  -268,  -268,   980,  1055,  -268,    97,  -268,
-    -268,  -268,  -268,     5,  -268,  -268,  1055,  1450,  -268,  -268,
-    1055,   103,  -268,  -268,  -268,  1055,  1055,  1055,  1055,  1055,
-    1055,  1055,  1055,  1055,  1055,  1055,  1055,  1055,  1055,  -268,
-    1246,   100,    18,  -268,  -268,  -268,  -268,  -268,   105,  -268,
-    1055,  -268,  -268,    19,  -268,  -268,   483,  -268,  -268,  -268,
-    -268,  -268,  1055,  1055,  -268,  -268,  -268,  1055,  -268,   101,
-    -268,  -268,  -268,   107,    99,  -268,   112,  -268,  -268,  -268,
-    -268,   -22,   -22,  -268,  -268,  -268,  -268,   -43,   -43,  -268,
-      94,    96,    -3,  -268,  1055,   114,  -268,   142,    67,   669,
-     762,     7,  -268,   836,   483,  -268,  -268,   108,  -268,  -268,
-    1055,   110,  -268,   115,  -268,  -268,  -268,  -268,   836,   105,
-     155,    99,   143,   116,   120,  -268,  -268,  -268,  1055,  -268,
-     117,   119,   191,  -268,   121,   576,  -268,     8,  1055,   576,
-     105,  1055,  -268,  -268,  -268,   118,    99,  -268,  -268,  -268,
-    -268
+    1367,   -24,  -270,  -270,  -270,   141,  -270,  -270,  -270,  -270,
+    -270,  -270,  -270,  -270,  -270,  -270,  -270,  -270,  -270,  -270,
+    -270,  -270,  -270,  -270,  -270,  -270,  -270,    30,  -270,  -270,
+     -28,  -270,  -270,  -270,  -270,  -270,  -270,  -270,   -62,   -32,
+     -26,     1,    -9,  -270,    34,    32,  1414,  -270,  -270,  1496,
+    -270,    15,  -270,  1314,  -270,  -270,  -270,  -270,  1496,  -270,
+    -270,     6,  -270,  -270,    17,  -270,    67,  -270,  -270,  -270,
+    -270,  -270,  1414,   113,    57,  -270,   -20,  -270,  -270,  -270,
+    1060,  -270,  -270,    37,  -270,  1414,   301,  -270,  -270,  -270,
+    -270,    80,  1414,    -6,  -270,   838,  1060,    62,  -270,  -270,
+    -270,  -270,  1060,  1060,  1060,  -270,  -270,  -270,  -270,  -270,
+     -31,  -270,  -270,  -270,    56,   -65,  1132,    72,  -270,  1060,
+      63,   -53,  -270,   -40,    96,  -270,  -270,  -270,    89,    94,
+     -56,  -270,    90,  -270,  -270,  1414,   121,  1204,  -270,    85,
+      86,  -270,    97,   100,    93,   913,   104,   101,  -270,  -270,
+      68,  -270,  -270,    22,  -270,   -62,    71,  -270,  -270,  -270,
+    -270,   394,  -270,  -270,  -270,  -270,   103,  -270,  -270,   985,
+    1060,  -270,   105,  -270,  -270,  -270,  -270,    -1,  -270,  -270,
+    1060,  1455,  -270,  -270,  1060,   107,  -270,  -270,  -270,  1060,
+    1060,  1060,  1060,  1060,  1060,  1060,  1060,  1060,  1060,  1060,
+    1060,  1060,  1060,  -270,  1251,   108,    39,  -270,  -270,  -270,
+    -270,  -270,   109,  -270,  1060,  -270,  -270,    45,  -270,  -270,
+     487,  -270,  -270,  -270,  -270,  -270,  1060,  1060,  -270,  -270,
+    -270,  1060,  -270,   111,  -270,  -270,  -270,   112,   110,  -270,
+     116,  -270,  -270,  -270,  -270,    63,    63,  -270,  -270,  -270,
+    -270,   -40,   -40,  -270,    89,    94,    79,  -270,  1060,   121,
+    -270,   146,    17,   673,   766,     8,  -270,   203,   487,  -270,
+    -270,   115,  -270,  -270,  1060,   118,  -270,   122,  -270,  -270,
+    -270,  -270,   203,   109,   153,   110,   151,   134,   131,  -270,
+    -270,  -270,  1060,  -270,   127,   137,   205,  -270,   132,   580,
+    -270,    13,  1060,   580,   109,  1060,  -270,  -270,  -270,   133,
+     110,  -270,  -270,  -270,  -270
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -268,  -268,  -268,  -268,  -268,  -268,  -268,    33,  -268,  -268,
-    -268,  -268,   -68,  -268,   -37,  -268,   -46,   -39,  -268,  -268,
-    -268,    17,    34,    32,  -268,   -74,   -88,  -268,   -99,   -85,
-      10,    11,  -268,  -268,  -268,   126,   152,   161,   144,  -268,
-    -268,  -234,  -268,  -268,  -268,   -30,   228,   -14,     0,  -268,
-    -268,  -268,   113,  -124,  -268,   -19,  -163,   -25,  -150,  -233,
-    -268,  -268,  -268,   -65,  -267,  -268,  -268,   -56,    23,    -7,
-    -268,  -268,   -33,  -268,  -268,  -268,  -268,  -268,  -268,  -268,
-    -268,  -268,   196,  -268,  -268
+    -270,  -270,  -270,  -270,  -270,  -270,  -270,    42,  -270,  -270,
+    -270,  -270,   -75,  -270,   -21,  -270,   -87,   -25,  -270,  -270,
+    -270,    26,    41,    25,  -270,   -76,   -95,  -270,  -102,   -89,
+      11,    12,  -270,  -270,  -270,   157,   188,   182,   164,  -270,
+    -270,  -249,  -270,  -270,  -270,   224,   -38,   265,   -13,     0,
+    -270,  -270,  -270,   136,  -130,  -270,    14,  -161,    10,  -139,
+    -248,  -270,  -270,  -270,   -27,  -269,  -270,  -270,   -61,    52,
+      16,  -270,  -270,    -7,  -270,  -270,  -270,  -270,  -270,  -270,
+    -270,  -270,  -270,   225,  -270,  -270
 };
 
 /* 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 -171
+#define YYTABLE_NINF -175
 static const yytype_int16 yytable[] =
 {
-      48,   173,   127,   230,   169,    83,   168,   226,   114,   205,
-      35,    36,   292,    74,   197,    56,    57,   127,   217,   218,
-     219,   189,   190,   114,   182,    64,   275,   220,    58,   282,
-     171,   172,    75,   308,    53,    62,    64,   221,   165,    87,
-      60,    79,   213,    48,   282,   166,    48,   184,    54,   198,
-      48,   132,    65,    66,    67,    48,   191,   192,    87,    59,
-      35,    36,   302,    65,    66,    67,   302,   179,    71,    48,
-      90,    72,    91,   180,   185,   186,   205,   234,   169,    92,
-     229,    48,   152,   174,   175,   223,   270,   232,    48,   279,
-     305,   127,   238,   223,    63,   223,   223,   114,   -75,   252,
-      73,   132,   223,   132,   176,   224,   255,   223,   177,   256,
-     262,   261,    76,   187,   226,   188,    80,   239,   240,   114,
-     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
-     -25,    48,    76,    48,   265,   266,   193,   194,   309,     2,
-       3,     4,   267,   243,   244,   245,   246,    65,    66,    67,
-     241,   242,    82,   127,   247,   248,    89,   152,   162,   114,
-     130,   -26,   195,   178,   281,   183,   196,   199,   201,   271,
-     132,   209,   210,   206,   214,   215,   207,   211,   227,   281,
-     127,   231,   286,   254,  -122,   268,   114,   223,   273,   297,
-    -170,   269,   285,   -27,   287,    53,   288,   294,   295,   306,
-      48,   299,   274,     8,     9,    10,   296,   300,   298,   310,
-     237,   301,   249,   169,   163,    84,   152,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,   251,
-     250,    88,   164,    55,   307,   276,   272,    28,    29,   264,
-      30,    31,    32,    33,   200,   289,    78,    93,    34,    94,
-      95,    96,    97,   277,     0,    98,    99,     0,     0,   152,
-     152,     0,     0,   152,   152,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   100,     0,     0,   167,   152,     0,
-       0,     0,     0,     0,     0,   101,   102,     0,   103,     0,
-       0,     0,     0,     0,     0,   152,     0,     0,     0,   152,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-     135,   136,   137,     0,   138,   139,   140,   141,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,    25,    26,    27,     0,
-       0,    28,    29,   142,    30,    31,    32,    33,     0,     0,
-       0,    93,    34,    94,    95,    96,    97,     0,     0,    98,
-      99,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   100,     0,
-       0,     0,   143,   144,     0,     0,     0,     0,   145,   101,
-     102,     0,   103,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,   135,   136,   137,     0,   138,   139,   140,
-     141,     0,     0,     0,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,    25,
-      26,    27,     0,     0,    28,    29,   142,    30,    31,    32,
-      33,     0,     0,     0,    93,    34,    94,    95,    96,    97,
-       0,     0,    98,    99,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   100,     0,     0,     0,   143,   225,     0,     0,     0,
-       0,   145,   101,   102,     0,   103,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,   135,   136,   137,     0,
-     138,   139,   140,   141,     0,     0,     0,    11,    12,    13,
+      51,   173,   177,    87,   131,   118,   172,   209,    78,   234,
+      67,    37,    38,   201,   296,   279,    56,   183,   286,   131,
+     118,   186,   230,   184,   193,   194,    61,   175,   176,    63,
+      57,   178,   179,   286,    91,   312,    79,    68,    69,    70,
+     191,     7,   192,   217,   188,    83,    51,   136,   202,    51,
+      65,   306,   180,    51,    91,   306,   181,    62,    51,   195,
+     196,    94,    66,    95,    37,    38,    59,    60,    23,    24,
+      96,    25,    51,    27,   209,   173,    67,   169,   238,    74,
+     233,   236,    75,   -75,   170,    51,   156,   227,    76,   242,
+     283,    84,    51,   131,   118,   309,   227,   136,    80,   136,
+     256,   227,    86,    68,    69,    70,   247,   248,   249,   250,
+     227,    93,   265,   228,   243,   244,   118,   118,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   259,   134,   230,
+     260,   269,   270,   227,   166,    51,   266,    51,   182,   221,
+     222,   223,   271,   -26,   313,     2,     3,     4,   224,    68,
+      69,    70,   -25,   187,    80,   131,   118,   199,   225,   189,
+     190,   156,   197,   198,   200,   285,   136,   227,   274,   275,
+     245,   246,   251,   252,   203,   205,   210,   211,   213,   290,
+     285,   214,   131,   118,   215,   218,   231,   219,  -126,   235,
+     301,   258,   277,    56,  -174,   272,   273,   -27,   227,   289,
+     310,   278,   291,   292,    51,   298,   284,     2,     3,     4,
+     173,     6,     7,     8,     9,    10,   299,   300,   302,   303,
+     156,   304,   305,   241,   314,   253,   255,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    25,    26,    27,     0,     0,    28,    29,   142,
-      30,    31,    32,    33,     0,     0,     0,    93,    34,    94,
-      95,    96,    97,     0,     0,    98,    99,     0,     0,     0,
+      24,   254,    25,    26,    27,    28,    29,    30,    31,   167,
+      32,    33,    34,    35,    88,    92,   168,    97,    36,    98,
+      99,   100,   101,   156,   156,   102,   103,   156,   156,    77,
+      58,   204,   268,   276,   280,   293,   311,     0,    82,     0,
+     281,     0,   156,     0,   104,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   105,   106,     0,   107,   156,
+       0,     0,     0,   156,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,   139,   140,   141,     0,   142,   143,
+     144,   145,     0,     0,     0,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
+      25,    26,    27,    28,    29,    30,    31,   146,    32,    33,
+      34,    35,     0,     0,     0,    97,    36,    98,    99,   100,
+     101,     0,     0,   102,   103,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   100,     0,     0,     0,   143,     0,
-       0,     0,     0,     0,   145,   101,   102,     0,   103,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,   135,
-     136,   137,     0,   138,   139,   140,   141,     0,     0,     0,
+       0,     0,   104,     0,     0,     0,   147,   148,     0,     0,
+       0,     0,   149,   105,   106,     0,   107,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,   139,   140,   141,
+       0,   142,   143,   144,   145,     0,     0,     0,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,    25,    26,    27,    28,    29,    30,    31,
+     146,    32,    33,    34,    35,     0,     0,     0,    97,    36,
+      98,    99,   100,   101,     0,     0,   102,   103,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   104,     0,     0,     0,   147,
+     229,     0,     0,     0,     0,   149,   105,   106,     0,   107,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+     139,   140,   141,     0,   142,   143,   144,   145,     0,     0,
+       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,     0,    25,    26,    27,    28,
+      29,    30,    31,   146,    32,    33,    34,    35,     0,     0,
+       0,    97,    36,    98,    99,   100,   101,     0,     0,   102,
+     103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   104,     0,
+       0,     0,   147,     0,     0,     0,     0,     0,   149,   105,
+     106,     0,   107,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,   139,   140,   141,     0,   142,   143,   144,
+     145,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,     0,    25,
+      26,    27,    28,    29,    30,    31,   146,    32,    33,    34,
+      35,     0,     0,     0,    97,    36,    98,    99,   100,   101,
+       0,     0,   102,   103,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   104,     0,     0,     0,    86,     0,     0,     0,     0,
+       0,   149,   105,   106,     0,   107,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,   139,   140,   141,     0,
+     142,   143,   144,   145,     0,     0,     0,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,    25,    26,    27,    28,    29,    30,    31,   146,
+      32,    33,    34,    35,     0,     0,     0,    97,    36,    98,
+      99,   100,   101,     0,     0,   102,   103,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   104,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   149,   105,   106,     0,   107,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,    26,    27,     0,     0,
-      28,    29,   142,    30,    31,    32,    33,     0,     0,     0,
-      93,    34,    94,    95,    96,    97,     0,     0,    98,    99,
+      21,    22,    23,    24,     0,    25,    26,    27,    28,    29,
+      30,    31,     0,    32,    33,    34,    35,     0,     0,     0,
+      97,    36,    98,    99,   100,   101,     0,     0,   102,   103,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   100,     0,     0,
-       0,    82,     0,     0,     0,     0,     0,   145,   101,   102,
-       0,   103,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,   135,   136,   137,     0,   138,   139,   140,   141,
-       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,    25,    26,
-      27,     0,     0,    28,    29,   142,    30,    31,    32,    33,
-       0,     0,     0,    93,    34,    94,    95,    96,    97,     0,
-       0,    98,    99,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     100,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     145,   101,   102,     0,   103,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    25,    26,    27,     0,     0,    28,    29,     0,    30,
-      31,    32,    33,     0,     0,     0,    93,    34,    94,    95,
-      96,    97,     0,     0,    98,    99,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   280,
-       2,     3,     4,   100,     6,     7,     8,     9,    10,     0,
-       0,     0,     0,   145,   101,   102,     0,   103,     0,     0,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,    26,    27,     0,     0,
-      28,    29,     0,    30,    31,    32,    33,     0,     0,     0,
-      93,    34,    94,    95,    96,    97,     0,     0,    98,    99,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   100,     8,     9,
-      10,     0,     0,     0,     0,     0,     0,     0,   101,   102,
-       0,   103,    11,    12,    13,    14,    15,    16,    17,    18,
+       0,     0,     0,     0,     0,     0,     0,   104,     8,     9,
+      10,     0,     0,     0,     0,     0,     0,   149,   105,   106,
+       0,   107,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,     0,     0,     0,     0,     0,     0,
-       0,     0,    28,    29,     0,    30,    31,    32,    33,     0,
-       0,     0,    93,    34,    94,    95,    96,    97,     0,     0,
-      98,    99,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   100,
-       8,     9,    10,     0,     0,     0,     0,     0,     0,   212,
-     101,   102,     0,   103,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,     0,     0,     0,    28,    29,     0,    30,    31,    32,
-      33,     0,     0,     0,    93,    34,    94,    95,    96,    97,
-       0,     0,    98,    99,     0,     0,     0,     0,     0,     0,
+       0,     0,    30,    31,     0,    32,    33,    34,    35,     0,
+       0,     0,    97,    36,    98,    99,   100,   101,     0,     0,
+     102,   103,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
+       0,     0,   171,     8,     9,    10,     0,     0,     0,     0,
+     105,   106,     0,   107,     0,     0,     0,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
+       0,     0,     0,     0,     0,     0,     0,    30,    31,     0,
+      32,    33,    34,    35,     0,     0,     0,    97,    36,    98,
+      99,   100,   101,     0,     0,   102,   103,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   100,     0,     0,   228,     8,     9,    10,     0,     0,
-       0,     0,   101,   102,     0,   103,     0,     0,     0,    11,
+       0,     0,     0,     0,   104,     8,     9,    10,     0,     0,
+       0,     0,     0,     0,   216,   105,   106,     0,   107,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,     0,     0,     0,     0,     0,    28,
-      29,     0,    30,    31,    32,    33,     0,     0,     0,    93,
-      34,    94,    95,    96,    97,     0,     0,    98,    99,     0,
+      22,     0,     0,     0,     0,     0,     0,     0,     0,    30,
+      31,     0,    32,    33,    34,    35,     0,     0,     0,    97,
+      36,    98,    99,   100,   101,     0,     0,   102,   103,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   100,     8,     9,    10,
-       0,     0,     0,     0,     0,     0,     0,   101,   102,     0,
-     103,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,     0,     0,     0,     0,
-       0,    28,   181,     0,    30,    31,    32,    33,     0,     0,
-       0,    93,    34,    94,    95,    96,    97,     0,     0,    98,
-      99,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     2,     3,     4,     0,     0,   100,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,     0,   101,
-     102,     0,   103,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
-       0,     0,     0,    28,    29,     0,    30,    31,    32,    33,
-       2,     3,     4,     0,    34,     0,     8,     9,    10,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,   204,     0,     0,     0,     0,
-      28,    29,     0,    30,    31,    32,    33,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,     0,    77,
-       0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   253,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,    25,    26,
-      27,     0,     0,    28,    29,     0,    30,    31,    32,    33,
-       0,     0,     0,     0,    34,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    25,    26,    27,     0,     0,    28,    29,     0,    30,
-      31,    32,    33,     2,     3,     4,     0,    34,     0,     8,
-       9,    10,     0,     0,     0,     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,
-       0,     0,     0,    28,    29,     0,    30,    31,    32,    33,
-       8,     9,    10,     0,    34,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,     0,     0,   104,     0,     0,   232,
+       8,     9,    10,     0,     0,     0,     0,   105,   106,     0,
+     107,     0,     0,     0,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,     0,     0,     0,    28,    29,     0,    30,    31,    32,
-      33,     8,     9,    10,   235,    34,     0,     0,     0,   236,
+       0,     0,     0,     0,    30,    31,     0,    32,    33,    34,
+      35,     0,     0,     0,    97,    36,    98,    99,   100,   101,
+       0,     0,   102,   103,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   104,     8,     9,    10,     0,     0,     0,     0,     0,
+       0,     0,   105,   106,     0,   107,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
+       0,     0,     0,     0,     0,     0,    30,   185,     0,    32,
+      33,    34,    35,     0,     0,     0,    97,    36,    98,    99,
+     100,   101,     0,     0,   102,   103,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     2,     3,
+       4,     0,     0,   104,     8,     9,    10,     0,     0,     0,
+       0,     0,     0,     0,   105,   106,     0,   107,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+       0,     0,     0,     0,     0,     0,     0,     0,    30,    31,
+       0,    32,    33,    34,    35,     2,     3,     4,     0,    36,
+       0,     8,     9,    10,     0,     0,     0,     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,     0,     0,     0,    28,    29,     0,    30,    31,
-      32,    33,     0,     0,     0,     0,    34
+     208,     0,     0,     0,     0,    30,    31,     0,    32,    33,
+      34,    35,     0,     0,     0,     0,    36,     0,     0,     0,
+       0,     0,     0,     0,    81,     0,     0,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   257,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,     0,    25,    26,    27,    28,    29,    30,    31,
+       0,    32,    33,    34,    35,     0,     0,     0,     0,    36,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,     0,    25,    26,    27,    28,
+      29,    30,    31,     0,    32,    33,    34,    35,     2,     3,
+       4,     0,    36,     0,     8,     9,    10,     0,     0,     0,
+       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,     0,     0,     0,    30,    31,
+       0,    32,    33,    34,    35,     8,     9,    10,     0,    36,
+       0,     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,     0,     0,     0,    30,
+      31,     0,    32,    33,    34,    35,     8,     9,    10,   239,
+      36,     0,     0,     0,   240,     0,     0,     0,     0,     0,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,     0,     0,     0,     0,     0,     0,     0,     0,
+      30,    31,     0,    32,    33,    34,    35,     0,     0,     0,
+       0,    36
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   100,    76,   166,    92,    61,    91,   157,    76,   133,
-       0,     0,   279,    43,    69,    36,    37,    91,    71,    72,
-      73,    64,    65,    91,   112,     9,   259,    80,    54,   263,
-      98,    99,    46,   300,    40,    82,     9,    90,    83,    69,
-      91,    55,   141,    43,   278,    90,    46,   115,    54,   104,
-      50,    81,    36,    37,    38,    55,    99,   100,    88,    85,
-      50,    50,   295,    36,    37,    38,   299,    82,    88,    69,
-      81,    91,    83,    88,    96,    97,   200,   176,   166,    90,
-     165,    81,    82,    62,    63,    88,    89,    82,    88,    82,
-      82,   165,   180,    88,    88,    88,    88,   165,    82,   198,
-      54,   131,    88,   133,    83,    91,    88,    88,    87,    91,
-      91,   210,    83,    93,   264,    95,    85,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-      81,   131,    83,   133,   222,   223,    66,    67,   301,     4,
-       5,     6,   227,   189,   190,   191,   192,    36,    37,    38,
-     187,   188,    85,   227,   193,   194,    54,   157,    54,   227,
-      91,    81,    68,    82,   263,    81,    70,    84,    54,   254,
-     200,    81,    81,    91,    81,    86,    91,    91,    83,   278,
-     254,    84,   270,    83,    81,    84,   254,    88,    46,   288,
-      85,    84,    84,    81,    84,    40,    81,    54,    82,   298,
-     200,    82,   258,    10,    11,    12,    86,    16,    91,    91,
-     177,    90,   195,   301,    88,    63,   216,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,   197,
-     196,    70,    88,     5,   299,   260,   255,    44,    45,   216,
-      47,    48,    49,    50,   131,   278,    50,    54,    55,    56,
-      57,    58,    59,   260,    -1,    62,    63,    -1,    -1,   259,
-     260,    -1,    -1,   263,   264,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    81,    -1,    -1,    84,   278,    -1,
-      -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    95,    -1,
-      -1,    -1,    -1,    -1,    -1,   295,    -1,    -1,    -1,   299,
+       0,    96,   104,    64,    80,    80,    95,   137,    46,   170,
+       9,     0,     0,    69,   283,   263,    40,    82,   267,    95,
+      95,   116,   161,    88,    64,    65,    54,   102,   103,    91,
+      54,    62,    63,   282,    72,   304,    49,    36,    37,    38,
+      93,     9,    95,   145,   119,    58,    46,    85,   104,    49,
+      82,   299,    83,    53,    92,   303,    87,    85,    58,    99,
+     100,    81,    88,    83,    53,    53,    36,    37,    36,    37,
+      90,    39,    72,    41,   204,   170,     9,    83,   180,    88,
+     169,    82,    91,    82,    90,    85,    86,    88,    54,   184,
+      82,    85,    92,   169,   169,    82,    88,   135,    83,   137,
+     202,    88,    85,    36,    37,    38,   193,   194,   195,   196,
+      88,    54,   214,    91,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,    88,    91,   268,
+      91,   226,   227,    88,    54,   135,    91,   137,    82,    71,
+      72,    73,   231,    81,   305,     4,     5,     6,    80,    36,
+      37,    38,    81,    81,    83,   231,   231,    68,    90,    96,
+      97,   161,    66,    67,    70,   267,   204,    88,    89,   258,
+     191,   192,   197,   198,    84,    54,    91,    91,    81,   274,
+     282,    81,   258,   258,    91,    81,    83,    86,    81,    84,
+     292,    83,    46,    40,    85,    84,    84,    81,    88,    84,
+     302,   262,    84,    81,   204,    54,     3,     4,     5,     6,
+     305,     8,     9,    10,    11,    12,    82,    86,    91,    82,
+     220,    16,    90,   181,    91,   199,   201,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,   200,    39,    40,    41,    42,    43,    44,    45,    92,
+      47,    48,    49,    50,    66,    73,    92,    54,    55,    56,
+      57,    58,    59,   263,   264,    62,    63,   267,   268,    45,
+       5,   135,   220,   259,   264,   282,   303,    -1,    53,    -1,
+     264,    -1,   282,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    95,   299,
+      -1,    -1,    -1,   303,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    -1,    17,    18,
+      19,    20,    -1,    -1,    -1,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    81,    -1,    -1,    -1,    85,    86,    -1,    -1,
+      -1,    -1,    91,    92,    93,    -1,    95,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      -1,    17,    18,    19,    20,    -1,    -1,    -1,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    -1,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    62,    63,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    85,
+      86,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    95,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    -1,    17,    18,    19,    20,    -1,    -1,
       -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    44,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      33,    34,    35,    36,    37,    -1,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    -1,    -1,
       -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
       63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    91,    92,
+      -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,    91,    92,
       93,    -1,    95,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
       20,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    44,    45,    46,    47,    48,    49,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
       -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    81,    -1,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    81,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,
       -1,    91,    92,    93,    -1,    95,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
       17,    18,    19,    20,    -1,    -1,    -1,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    44,    45,    46,
+      37,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
       57,    58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    85,    -1,
+      -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    91,    92,    93,    -1,    95,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    -1,    17,    18,    19,    20,    -1,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
-      -1,    85,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    95,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
-      -1,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    44,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      91,    92,    93,    -1,    95,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      -1,    39,    40,    41,    -1,    -1,    44,    45,    -1,    47,
-      48,    49,    50,    -1,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,     6,    81,     8,     9,    10,    11,    12,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    95,    -1,    -1,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
       44,    45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,
       54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      12,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
       -1,    95,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    44,    45,    -1,    47,    48,    49,    50,    -1,
       -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
       62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
-      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    95,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,
-      50,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    84,    10,    11,    12,    -1,    -1,    -1,    -1,
+      92,    93,    -1,    95,    -1,    -1,    -1,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    -1,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    81,    -1,    -1,    84,    10,    11,    12,    -1,    -1,
-      -1,    -1,    92,    93,    -1,    95,    -1,    -1,    -1,    24,
+      -1,    -1,    -1,    -1,    81,    10,    11,    12,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    95,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
       45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    54,
       55,    56,    57,    58,    59,    -1,    -1,    62,    63,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    81,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,
-      95,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    44,    45,    -1,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     4,     5,     6,    -1,    -1,    81,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    -1,    95,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,    50,
-       4,     5,     6,    -1,    55,    -1,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    -1,    -1,    -1,    86,    -1,    -1,    -1,    -1,
-      44,    45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,
-      -1,    55,    -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,    -1,
-      -1,    -1,    86,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    44,    45,    -1,    47,    48,    49,    50,
-      -1,    -1,    -1,    -1,    55,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      -1,    39,    40,    41,    -1,    -1,    44,    45,    -1,    47,
-      48,    49,    50,     4,     5,     6,    -1,    55,    -1,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,    50,
-      10,    11,    12,    -1,    55,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    84,
+      10,    11,    12,    -1,    -1,    -1,    -1,    92,    93,    -1,
+      95,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,
-      50,    10,    11,    12,    54,    55,    -1,    -1,    -1,    59,
+      50,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    81,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    92,    93,    -1,    95,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,
+       6,    -1,    -1,    81,    10,    11,    12,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    92,    93,    -1,    95,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,
+      -1,    47,    48,    49,    50,     4,     5,     6,    -1,    55,
+      -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,
-      49,    50,    -1,    -1,    -1,    -1,    55
+      86,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,
+      49,    50,    -1,    -1,    -1,    -1,    55,    -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,    -1,    -1,    -1,    86,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    -1,    39,    40,    41,    42,    43,    44,    45,
+      -1,    47,    48,    49,    50,    -1,    -1,    -1,    -1,    55,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    -1,    39,    40,    41,    42,
+      43,    44,    45,    -1,    47,    48,    49,    50,     4,     5,
+       6,    -1,    55,    -1,    10,    11,    12,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,
+      -1,    47,    48,    49,    50,    10,    11,    12,    -1,    55,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
+      45,    -1,    47,    48,    49,    50,    10,    11,    12,    54,
+      55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      44,    45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,
+      -1,    55
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1271,36 +1278,36 @@
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    39,    40,    41,    44,    45,
-      47,    48,    49,    50,    55,   135,   136,   137,   138,   139,
-     144,   145,   146,   148,   149,   150,   151,   152,   153,   154,
-     186,   187,   188,    40,    54,   151,    36,    37,    54,    85,
-      91,   189,    82,    88,     9,    36,    37,    38,   141,   142,
-     147,    88,    91,    54,   150,   152,    83,     0,   187,   152,
-      85,   156,    85,   172,   141,   140,   143,   150,   142,    54,
-      81,    83,    90,    54,    56,    57,    58,    59,    62,    63,
-      81,    92,    93,    95,   106,   107,   108,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   134,   153,
-      91,   155,   150,   157,   158,    13,    14,    15,    17,    18,
-      19,    20,    46,    85,    86,    91,   117,   130,   131,   133,
-     135,   136,   153,   162,   163,   164,   165,   173,   174,   175,
-     178,   185,    54,   140,   143,    83,    90,    84,   134,   131,
-     161,   117,   117,   133,    62,    63,    83,    87,    82,    82,
-      88,    45,   131,    81,   117,    96,    97,    93,    95,    64,
-      65,    99,   100,    66,    67,    68,    70,    69,   104,    84,
-     157,    54,   159,   160,    86,   158,    91,    91,   180,    81,
-      81,    91,    91,   133,    81,    86,   166,    71,    72,    73,
-      80,    90,   132,    88,    91,    86,   163,    83,    84,   134,
-     161,    84,    82,   109,   133,    54,    59,   112,   131,   117,
-     117,   119,   119,   121,   121,   121,   121,   122,   122,   126,
-     127,   128,   133,    86,    83,    88,    91,   169,   170,   171,
-     181,   133,    91,   179,   173,   131,   131,   134,    84,    84,
-      89,   134,   160,    46,   172,   164,   162,   174,   182,    82,
-       3,   133,   146,   177,   167,    84,   131,    84,    81,   177,
-     183,   184,   169,   176,    54,    82,    86,   133,    91,    82,
-      16,    90,   164,   168,   172,    82,   133,   168,   169,   161,
-      91
+      33,    34,    35,    36,    37,    39,    40,    41,    42,    43,
+      44,    45,    47,    48,    49,    50,    55,   135,   136,   137,
+     138,   139,   144,   145,   146,   147,   149,   150,   151,   152,
+     153,   154,   155,   187,   188,   189,    40,    54,   152,    36,
+      37,    54,    85,    91,   190,    82,    88,     9,    36,    37,
+      38,   141,   142,   148,    88,    91,    54,   150,   151,   153,
+      83,     0,   188,   153,    85,   157,    85,   173,   141,   140,
+     143,   151,   142,    54,    81,    83,    90,    54,    56,    57,
+      58,    59,    62,    63,    81,    92,    93,    95,   106,   107,
+     108,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   134,   154,    91,   156,   151,   158,   159,    13,
+      14,    15,    17,    18,    19,    20,    46,    85,    86,    91,
+     117,   130,   131,   133,   135,   136,   154,   163,   164,   165,
+     166,   174,   175,   176,   179,   186,    54,   140,   143,    83,
+      90,    84,   134,   131,   162,   117,   117,   133,    62,    63,
+      83,    87,    82,    82,    88,    45,   131,    81,   117,    96,
+      97,    93,    95,    64,    65,    99,   100,    66,    67,    68,
+      70,    69,   104,    84,   158,    54,   160,   161,    86,   159,
+      91,    91,   181,    81,    81,    91,    91,   133,    81,    86,
+     167,    71,    72,    73,    80,    90,   132,    88,    91,    86,
+     164,    83,    84,   134,   162,    84,    82,   109,   133,    54,
+      59,   112,   131,   117,   117,   119,   119,   121,   121,   121,
+     121,   122,   122,   126,   127,   128,   133,    86,    83,    88,
+      91,   170,   171,   172,   182,   133,    91,   180,   174,   131,
+     131,   134,    84,    84,    89,   134,   161,    46,   173,   165,
+     163,   175,   183,    82,     3,   133,   146,   178,   168,    84,
+     131,    84,    81,   178,   184,   185,   170,   177,    54,    82,
+      86,   133,    91,    82,    16,    90,   165,   169,   173,    82,
+     133,   169,   170,   162,    91
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3650,25 +3657,41 @@
   case 104:
 
     {
-        (yyval.interm.qualifier) = EvqConst;
+        (yyval.interm.type).qualifier = EvqSmooth;
+        (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
     }
     break;
 
   case 105:
 
     {
-        VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
-		ES2_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
-        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "attribute"))
-            context->recover();
-        (yyval.interm.type).setBasic(EbtVoid, EvqAttribute, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).qualifier = EvqFlat;
+        (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
     }
     break;
 
   case 106:
 
     {
-	    ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.qualifier) = EvqConst;
+    }
+    break;
+
+  case 107:
+
+    {
+        VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
+        ES2_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
+        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "attribute"))
+            context->recover();
+        (yyval.interm.type).setBasic(EbtVoid, EvqAttribute, (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 108:
+
+    {
+        ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
@@ -3678,10 +3701,10 @@
     }
     break;
 
-  case 107:
+  case 109:
 
     {
-	    ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
+        ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
         if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
@@ -3691,72 +3714,121 @@
     }
     break;
 
-  case 108:
+  case 110:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(1) - (1)].interm.type).qualifier, (yyvsp[(1) - (1)].interm.type).line);
     }
     break;
 
-  case 109:
-
-    {
-        (yyval.interm.type).qualifier = EvqConst;
-		(yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
-    }
-    break;
-
-  case 110:
-
-    {
-		ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqVaryingIn : EvqAttribute;
-		(yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
-    }
-    break;
-
   case 111:
 
     {
-		ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqVaryingOut;
-		(yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
+        if ((yyvsp[(2) - (2)].interm.type).qualifier == EvqSmoothIn) {
+            if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqSmooth)
+                (yyval.interm.type).setBasic(EbtVoid, EvqSmoothIn, (yyvsp[(2) - (2)].interm.type).line);
+            else if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqFlat)
+                (yyval.interm.type).setBasic(EbtVoid, EvqFlatIn, (yyvsp[(2) - (2)].interm.type).line);
+            else UNREACHABLE();
+        }
+        else if ((yyvsp[(2) - (2)].interm.type).qualifier == EvqCentroidIn) {
+            if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqSmooth)
+                (yyval.interm.type).setBasic(EbtVoid, EvqCentroidIn, (yyvsp[(2) - (2)].interm.type).line);
+            else if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqFlat)
+                (yyval.interm.type).setBasic(EbtVoid, EvqFlatIn, (yyvsp[(2) - (2)].interm.type).line);
+            else UNREACHABLE();
+        }
+        else if ((yyvsp[(2) - (2)].interm.type).qualifier == EvqSmoothOut) {
+            if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqSmooth)
+                (yyval.interm.type).setBasic(EbtVoid, EvqSmoothOut, (yyvsp[(2) - (2)].interm.type).line);
+            else if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqFlat)
+                (yyval.interm.type).setBasic(EbtVoid, EvqFlatOut, (yyvsp[(2) - (2)].interm.type).line);
+            else UNREACHABLE();
+        }
+        else if ((yyvsp[(2) - (2)].interm.type).qualifier == EvqCentroidOut) {
+            if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqSmooth)
+                (yyval.interm.type).setBasic(EbtVoid, EvqCentroidOut, (yyvsp[(2) - (2)].interm.type).line);
+            else if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqFlat)
+                (yyval.interm.type).setBasic(EbtVoid, EvqFlatOut, (yyvsp[(2) - (2)].interm.type).line);
+            else UNREACHABLE();
+        }
+        else {
+            context->error((yyvsp[(1) - (2)].interm.type).line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString((yyvsp[(1) - (2)].interm.type).qualifier));
+            context->recover();
+
+            (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line);
+        }
     }
     break;
 
   case 112:
 
     {
-		ES3_ONLY("in", (yyvsp[(1) - (2)].lex).line);
-	    // FIXME: Handle centroid qualifier
-        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqVaryingIn : EvqAttribute;
-		(yyval.interm.type).line = (yyvsp[(2) - (2)].lex).line;
+        context->error((yyvsp[(1) - (1)].interm.type).line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString((yyvsp[(1) - (1)].interm.type).qualifier));
+        context->recover();
+        
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtVoid, qual, (yyvsp[(1) - (1)].interm.type).line);
     }
     break;
 
   case 113:
 
     {
-		ES3_ONLY("out", (yyvsp[(1) - (2)].lex).line);
-	    // FIXME: Handle centroid qualifier
-        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqVaryingOut;
-		(yyval.interm.type).line = (yyvsp[(2) - (2)].lex).line;
+        (yyval.interm.type).qualifier = EvqConst;
+        (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
     }
     break;
 
   case 114:
 
     {
-        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
-            context->recover();
-        (yyval.interm.type).qualifier = EvqUniform;
-		(yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
+        ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqSmoothIn : EvqAttribute;
+        (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
     }
     break;
 
   case 115:
 
     {
+        ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqSmoothOut;
+        (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
+    }
+    break;
+
+  case 116:
+
+    {
+        ES3_ONLY("centroid in", (yyvsp[(1) - (2)].lex).line);
+        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqCentroidIn : EvqAttribute;
+        (yyval.interm.type).line = (yyvsp[(1) - (2)].lex).line;
+    }
+    break;
+
+  case 117:
+
+    {
+        ES3_ONLY("centroid out", (yyvsp[(1) - (2)].lex).line);
+        (yyval.interm.type).qualifier = (context->shaderType == SH_FRAGMENT_SHADER) ? EvqFragColor : EvqCentroidOut;
+        (yyval.interm.type).line = (yyvsp[(1) - (2)].lex).line;
+    }
+    break;
+
+  case 118:
+
+    {
+        if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
+            context->recover();
+        (yyval.interm.type).qualifier = EvqUniform;
+        (yyval.interm.type).line = (yyvsp[(1) - (1)].lex).line;
+    }
+    break;
+
+  case 119:
+
+    {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
 
         if ((yyval.interm.type).precision == EbpUndefined) {
@@ -3768,7 +3840,7 @@
     }
     break;
 
-  case 116:
+  case 120:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3776,35 +3848,35 @@
     }
     break;
 
-  case 117:
+  case 121:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 118:
+  case 122:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 119:
+  case 123:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 120:
+  case 124:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 121:
+  case 125:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3820,44 +3892,11 @@
     }
     break;
 
-  case 122:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtVoid, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 123:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 124:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
-  case 125:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
   case 126:
 
     {
         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(EbtVoid, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3866,7 +3905,6 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3874,8 +3912,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).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3884,7 +3921,6 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3892,12 +3928,48 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(2);
+    }
+    break;
+
+  case 131:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
+    }
+    break;
+
+  case 132:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 133:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(2);
+    }
+    break;
+
+  case 134:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
         (yyval.interm.type).setAggregate(3);
     }
     break;
 
-  case 131:
+  case 135:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3906,7 +3978,7 @@
     }
     break;
 
-  case 132:
+  case 136:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3915,7 +3987,7 @@
     }
     break;
 
-  case 133:
+  case 137:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3924,7 +3996,7 @@
     }
     break;
 
-  case 134:
+  case 138:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3933,7 +4005,7 @@
     }
     break;
 
-  case 135:
+  case 139:
 
     {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
@@ -3943,7 +4015,7 @@
     }
     break;
 
-  case 136:
+  case 140:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -3953,7 +4025,7 @@
     }
     break;
 
-  case 137:
+  case 141:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -3963,7 +4035,7 @@
     }
     break;
 
-  case 138:
+  case 142:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -3972,7 +4044,7 @@
     }
     break;
 
-  case 139:
+  case 143:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -3981,7 +4053,7 @@
     }
     break;
 
-  case 140:
+  case 144:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -3994,7 +4066,7 @@
     }
     break;
 
-  case 141:
+  case 145:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4007,7 +4079,7 @@
     }
     break;
 
-  case 142:
+  case 146:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4016,7 +4088,7 @@
     }
     break;
 
-  case 143:
+  case 147:
 
     {
         //
@@ -4030,12 +4102,12 @@
     }
     break;
 
-  case 144:
+  case 148:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 145:
+  case 149:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
@@ -4053,12 +4125,12 @@
     }
     break;
 
-  case 146:
+  case 150:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 147:
+  case 151:
 
     {
         TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
@@ -4068,14 +4140,14 @@
     }
     break;
 
-  case 148:
+  case 152:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 149:
+  case 153:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4091,7 +4163,7 @@
     }
     break;
 
-  case 150:
+  case 154:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4128,7 +4200,7 @@
     }
     break;
 
-  case 151:
+  case 155:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4136,14 +4208,14 @@
     }
     break;
 
-  case 152:
+  case 156:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 153:
+  case 157:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4155,7 +4227,7 @@
     }
     break;
 
-  case 154:
+  case 158:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4172,29 +4244,9 @@
     }
     break;
 
-  case 155:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
-  case 156:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 157:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
-    break;
-
-  case 158:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 159:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 160:
@@ -4204,7 +4256,7 @@
 
   case 161:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 162:
@@ -4219,21 +4271,41 @@
 
   case 164:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 165:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 166:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 167:
 
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    break;
+
+  case 168:
+
+    { (yyval.interm.intermAggregate) = 0; }
+    break;
+
+  case 169:
+
+    { context->symbolTable.push(); }
+    break;
+
+  case 170:
+
+    { context->symbolTable.pop(); }
+    break;
+
+  case 171:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4243,44 +4315,44 @@
     }
     break;
 
-  case 168:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 169:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 170:
-
-    { context->symbolTable.push(); }
-    break;
-
-  case 171:
-
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
-    break;
-
   case 172:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 173:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 174:
 
+    { context->symbolTable.push(); }
+    break;
+
+  case 175:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 176:
+
+    { context->symbolTable.push(); }
+    break;
+
+  case 177:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 178:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 175:
+  case 179:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4291,31 +4363,31 @@
     }
     break;
 
-  case 176:
+  case 180:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 177:
+  case 181:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 178:
+  case 182:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 179:
+  case 183:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 180:
+  case 184:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4324,7 +4396,7 @@
     }
     break;
 
-  case 181:
+  case 185:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4332,7 +4404,7 @@
     }
     break;
 
-  case 182:
+  case 186:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4340,7 +4412,7 @@
     }
     break;
 
-  case 183:
+  case 187:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4349,7 +4421,7 @@
     }
     break;
 
-  case 184:
+  case 188:
 
     {
         TIntermNode* intermNode;
@@ -4367,12 +4439,12 @@
     }
     break;
 
-  case 185:
+  case 189:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 186:
+  case 190:
 
     {
         context->symbolTable.pop();
@@ -4381,12 +4453,12 @@
     }
     break;
 
-  case 187:
+  case 191:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 188:
+  case 192:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4397,12 +4469,12 @@
     }
     break;
 
-  case 189:
+  case 193:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 190:
+  case 194:
 
     {
         context->symbolTable.pop();
@@ -4411,35 +4483,35 @@
     }
     break;
 
-  case 191:
+  case 195:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 192:
+  case 196:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 193:
+  case 197:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 194:
+  case 198:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 195:
+  case 199:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4447,7 +4519,7 @@
     }
     break;
 
-  case 196:
+  case 200:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4455,7 +4527,7 @@
     }
     break;
 
-  case 197:
+  case 201:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4466,7 +4538,7 @@
     }
     break;
 
-  case 198:
+  case 202:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4477,7 +4549,7 @@
     }
     break;
 
-  case 199:
+  case 203:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4488,7 +4560,7 @@
     }
     break;
 
-  case 200:
+  case 204:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4503,7 +4575,7 @@
     }
     break;
 
-  case 201:
+  case 205:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4511,7 +4583,7 @@
     }
     break;
 
-  case 202:
+  case 206:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4519,7 +4591,7 @@
     }
     break;
 
-  case 203:
+  case 207:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4527,21 +4599,21 @@
     }
     break;
 
-  case 204:
+  case 208:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 205:
+  case 209:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 206:
+  case 210:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4630,7 +4702,7 @@
     }
     break;
 
-  case 207:
+  case 211:
 
     {
         //?? Check that all paths return a value if return type != void ?