diff --git a/src/libs/glsl/glsl.g b/src/libs/glsl/glsl.g
index 597d5d12d9524f1f41e3a20e015efe7a8808fa4a..934545d74a2fcb63f54aca908f9312c864335594 100644
--- a/src/libs/glsl/glsl.g
+++ b/src/libs/glsl/glsl.g
@@ -207,6 +207,7 @@
 %token PREPROC "preprocessor directive"
 %token COMMENT "comment"
 %token ERROR "error"
+%token RESERVED "reserved word"
 
 %start translation_unit
 
diff --git a/src/libs/glsl/glsllexer.cpp b/src/libs/glsl/glsllexer.cpp
index a400643c119239e147812e82e276e49392551c69..232ab46a28a63c5aa5317baec6c93b6adbe5a858 100644
--- a/src/libs/glsl/glsllexer.cpp
+++ b/src/libs/glsl/glsllexer.cpp
@@ -393,10 +393,11 @@ int Lexer::findKeyword(const char *word, int length) const
     if (!(t & Variant_Mask))
         return t;
     if ((_variant & t & Variant_Mask) == 0) {
-        // TODO: issue a proper error for the unsupported keyword
-        QByteArray keyword(word, length);
-        fprintf(stderr, "unsupported keyword `%s' at line %d\n",
-                keyword.constData(), _lineno);
+        // Return a "reserved word" token if this keyword is not permitted
+        // in the current language variant so that the syntax highlighter
+        // can warn the user about the word.
+        if (!_scanKeywords)
+            return Parser::T_RESERVED;
     }
     return t & ~Variant_Mask;
 }
diff --git a/src/libs/glsl/glslparser.cpp b/src/libs/glsl/glslparser.cpp
index 6268a0dcc7c57aa54b8cf69f208b837d73e866c9..a1a73aad58d5b033c848f08111c5076e87e90aba 100644
--- a/src/libs/glsl/glslparser.cpp
+++ b/src/libs/glsl/glslparser.cpp
@@ -1,5 +1,5 @@
 
-#line 399 "./glsl.g"
+#line 400 "./glsl.g"
 
 /**************************************************************************
 **
@@ -168,137 +168,137 @@ TranslationUnit *Parser::parse()
     return 0;
 }
 
-#line 570 "./glsl.g"
+#line 571 "./glsl.g"
 
 void Parser::reduce(int ruleno)
 {
 switch(ruleno) {
 
-#line 579 "./glsl.g"
+#line 580 "./glsl.g"
 
 case 0: {
     ast(1) = makeAstNode<IdentifierExpression>(string(1));
 }   break;
 
-#line 586 "./glsl.g"
+#line 587 "./glsl.g"
 
 case 1: {
     ast(1) = makeAstNode<LiteralExpression>(string(1));
 }   break;
 
-#line 593 "./glsl.g"
+#line 594 "./glsl.g"
 
 case 2: {
     ast(1) = makeAstNode<LiteralExpression>(_engine->identifier("true", 4));
 }   break;
 
-#line 600 "./glsl.g"
+#line 601 "./glsl.g"
 
 case 3: {
     ast(1) = makeAstNode<LiteralExpression>(_engine->identifier("false", 5));
 }   break;
 
-#line 607 "./glsl.g"
+#line 608 "./glsl.g"
 
 case 4: {
     // nothing to do.
 }   break;
 
-#line 614 "./glsl.g"
+#line 615 "./glsl.g"
 
 case 5: {
     ast(1) = ast(2);
 }   break;
 
-#line 621 "./glsl.g"
+#line 622 "./glsl.g"
 
 case 6: {
     // nothing to do.
 }   break;
 
-#line 628 "./glsl.g"
+#line 629 "./glsl.g"
 
 case 7: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_ArrayAccess, expression(1), expression(3));
 }   break;
 
-#line 635 "./glsl.g"
+#line 636 "./glsl.g"
 
 case 8: {
     // nothing to do.
 }   break;
 
-#line 642 "./glsl.g"
+#line 643 "./glsl.g"
 
 case 9: {
     ast(1) = makeAstNode<MemberAccessExpression>(expression(1), string(3));
 }   break;
 
-#line 649 "./glsl.g"
+#line 650 "./glsl.g"
 
 case 10: {
     ast(1) = makeAstNode<UnaryExpression>(AST::Kind_PostIncrement, expression(1));
 }   break;
 
-#line 656 "./glsl.g"
+#line 657 "./glsl.g"
 
 case 11: {
     ast(1) = makeAstNode<UnaryExpression>(AST::Kind_PostDecrement, expression(1));
 }   break;
 
-#line 663 "./glsl.g"
+#line 664 "./glsl.g"
 
 case 12: {
     // nothing to do.
 }   break;
 
-#line 670 "./glsl.g"
+#line 671 "./glsl.g"
 
 case 13: {
     // nothing to do.
 }   break;
 
-#line 677 "./glsl.g"
+#line 678 "./glsl.g"
 
 case 14: {
     ast(1) = makeAstNode<FunctionCallExpression>
         (sym(1).function.id, sym(1).function.arguments);
 }   break;
 
-#line 685 "./glsl.g"
+#line 686 "./glsl.g"
 
 case 15: {
     ast(1) = makeAstNode<FunctionCallExpression>
         (expression(1), sym(3).function.id, sym(3).function.arguments);
 }   break;
 
-#line 693 "./glsl.g"
+#line 694 "./glsl.g"
 
 case 16: {
     // nothing to do.
 }   break;
 
-#line 700 "./glsl.g"
+#line 701 "./glsl.g"
 
 case 17: {
     // nothing to do.
 }   break;
 
-#line 707 "./glsl.g"
+#line 708 "./glsl.g"
 
 case 18: {
     sym(1).function.id = sym(1).function_identifier;
     sym(1).function.arguments = 0;
 }   break;
 
-#line 715 "./glsl.g"
+#line 716 "./glsl.g"
 
 case 19: {
     sym(1).function.id = sym(1).function_identifier;
     sym(1).function.arguments = 0;
 }   break;
 
-#line 723 "./glsl.g"
+#line 724 "./glsl.g"
 
 case 20: {
     sym(1).function.id = sym(1).function_identifier;
@@ -306,7 +306,7 @@ case 20: {
         makeAstNode< List<Expression *> >(expression(2));
 }   break;
 
-#line 732 "./glsl.g"
+#line 733 "./glsl.g"
 
 case 21: {
     sym(1).function.arguments =
@@ -314,379 +314,379 @@ case 21: {
             (sym(1).function.arguments, expression(3));
 }   break;
 
-#line 741 "./glsl.g"
+#line 742 "./glsl.g"
 
 case 22: {
     // nothing to do.
 }   break;
 
-#line 748 "./glsl.g"
+#line 749 "./glsl.g"
 
 case 23: {
     ast(1) = makeAstNode<FunctionIdentifier>(type(1));
 }   break;
 
-#line 755 "./glsl.g"
+#line 756 "./glsl.g"
 
 case 24: {
     ast(1) = makeAstNode<FunctionIdentifier>(string(1));
 }   break;
 
-#line 762 "./glsl.g"
+#line 763 "./glsl.g"
 
 case 25: {
     // nothing to do.
 }   break;
 
-#line 769 "./glsl.g"
+#line 770 "./glsl.g"
 
 case 26: {
     ast(1) = makeAstNode<UnaryExpression>(AST::Kind_PreIncrement, expression(2));
 }   break;
 
-#line 776 "./glsl.g"
+#line 777 "./glsl.g"
 
 case 27: {
     ast(1) = makeAstNode<UnaryExpression>(AST::Kind_PreDecrement, expression(2));
 }   break;
 
-#line 783 "./glsl.g"
+#line 784 "./glsl.g"
 
 case 28: {
     ast(1) = makeAstNode<UnaryExpression>(sym(1).kind, expression(2));
 }   break;
 
-#line 790 "./glsl.g"
+#line 791 "./glsl.g"
 
 case 29: {
     sym(1).kind = AST::Kind_UnaryPlus;
 }   break;
 
-#line 797 "./glsl.g"
+#line 798 "./glsl.g"
 
 case 30: {
     sym(1).kind = AST::Kind_UnaryMinus;
 }   break;
 
-#line 804 "./glsl.g"
+#line 805 "./glsl.g"
 
 case 31: {
     sym(1).kind = AST::Kind_LogicalNot;
 }   break;
 
-#line 811 "./glsl.g"
+#line 812 "./glsl.g"
 
 case 32: {
     sym(1).kind = AST::Kind_BitwiseNot;
 }   break;
 
-#line 818 "./glsl.g"
+#line 819 "./glsl.g"
 
 case 33: {
     // nothing to do.
 }   break;
 
-#line 825 "./glsl.g"
+#line 826 "./glsl.g"
 
 case 34: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Multiply, expression(1), expression(3));
 }   break;
 
-#line 832 "./glsl.g"
+#line 833 "./glsl.g"
 
 case 35: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Divide, expression(1), expression(3));
 }   break;
 
-#line 839 "./glsl.g"
+#line 840 "./glsl.g"
 
 case 36: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Modulus, expression(1), expression(3));
 }   break;
 
-#line 846 "./glsl.g"
+#line 847 "./glsl.g"
 
 case 37: {
     // nothing to do.
 }   break;
 
-#line 853 "./glsl.g"
+#line 854 "./glsl.g"
 
 case 38: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Plus, expression(1), expression(3));
 }   break;
 
-#line 860 "./glsl.g"
+#line 861 "./glsl.g"
 
 case 39: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Minus, expression(1), expression(3));
 }   break;
 
-#line 867 "./glsl.g"
+#line 868 "./glsl.g"
 
 case 40: {
     // nothing to do.
 }   break;
 
-#line 874 "./glsl.g"
+#line 875 "./glsl.g"
 
 case 41: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_ShiftLeft, expression(1), expression(3));
 }   break;
 
-#line 881 "./glsl.g"
+#line 882 "./glsl.g"
 
 case 42: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_ShiftRight, expression(1), expression(3));
 }   break;
 
-#line 888 "./glsl.g"
+#line 889 "./glsl.g"
 
 case 43: {
     // nothing to do.
 }   break;
 
-#line 895 "./glsl.g"
+#line 896 "./glsl.g"
 
 case 44: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_LessThan, expression(1), expression(3));
 }   break;
 
-#line 902 "./glsl.g"
+#line 903 "./glsl.g"
 
 case 45: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_GreaterThan, expression(1), expression(3));
 }   break;
 
-#line 909 "./glsl.g"
+#line 910 "./glsl.g"
 
 case 46: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_LessEqual, expression(1), expression(3));
 }   break;
 
-#line 916 "./glsl.g"
+#line 917 "./glsl.g"
 
 case 47: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_GreaterEqual, expression(1), expression(3));
 }   break;
 
-#line 923 "./glsl.g"
+#line 924 "./glsl.g"
 
 case 48: {
     // nothing to do.
 }   break;
 
-#line 930 "./glsl.g"
+#line 931 "./glsl.g"
 
 case 49: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Equal, expression(1), expression(3));
 }   break;
 
-#line 937 "./glsl.g"
+#line 938 "./glsl.g"
 
 case 50: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_NotEqual, expression(1), expression(3));
 }   break;
 
-#line 944 "./glsl.g"
+#line 945 "./glsl.g"
 
 case 51: {
     // nothing to do.
 }   break;
 
-#line 951 "./glsl.g"
+#line 952 "./glsl.g"
 
 case 52: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_BitwiseAnd, expression(1), expression(3));
 }   break;
 
-#line 958 "./glsl.g"
+#line 959 "./glsl.g"
 
 case 53: {
     // nothing to do.
 }   break;
 
-#line 965 "./glsl.g"
+#line 966 "./glsl.g"
 
 case 54: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_BitwiseXor, expression(1), expression(3));
 }   break;
 
-#line 972 "./glsl.g"
+#line 973 "./glsl.g"
 
 case 55: {
     // nothing to do.
 }   break;
 
-#line 979 "./glsl.g"
+#line 980 "./glsl.g"
 
 case 56: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_BitwiseOr, expression(1), expression(3));
 }   break;
 
-#line 986 "./glsl.g"
+#line 987 "./glsl.g"
 
 case 57: {
     // nothing to do.
 }   break;
 
-#line 993 "./glsl.g"
+#line 994 "./glsl.g"
 
 case 58: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_LogicalAnd, expression(1), expression(3));
 }   break;
 
-#line 1000 "./glsl.g"
+#line 1001 "./glsl.g"
 
 case 59: {
     // nothing to do.
 }   break;
 
-#line 1007 "./glsl.g"
+#line 1008 "./glsl.g"
 
 case 60: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_LogicalXor, expression(1), expression(3));
 }   break;
 
-#line 1014 "./glsl.g"
+#line 1015 "./glsl.g"
 
 case 61: {
     // nothing to do.
 }   break;
 
-#line 1021 "./glsl.g"
+#line 1022 "./glsl.g"
 
 case 62: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_LogicalOr, expression(1), expression(3));
 }   break;
 
-#line 1028 "./glsl.g"
+#line 1029 "./glsl.g"
 
 case 63: {
     // nothing to do.
 }   break;
 
-#line 1035 "./glsl.g"
+#line 1036 "./glsl.g"
 
 case 64: {
     ast(1) = makeAstNode<TernaryExpression>(AST::Kind_Conditional, expression(1), expression(3), expression(5));
 }   break;
 
-#line 1042 "./glsl.g"
+#line 1043 "./glsl.g"
 
 case 65: {
     // nothing to do.
 }   break;
 
-#line 1049 "./glsl.g"
+#line 1050 "./glsl.g"
 
 case 66: {
     ast(1) = makeAstNode<AssignmentExpression>(sym(2).kind, expression(1), expression(3));
 }   break;
 
-#line 1056 "./glsl.g"
+#line 1057 "./glsl.g"
 
 case 67: {
     sym(1).kind = AST::Kind_Assign;
 }   break;
 
-#line 1063 "./glsl.g"
+#line 1064 "./glsl.g"
 
 case 68: {
     sym(1).kind = AST::Kind_AssignMultiply;
 }   break;
 
-#line 1070 "./glsl.g"
+#line 1071 "./glsl.g"
 
 case 69: {
     sym(1).kind = AST::Kind_AssignDivide;
 }   break;
 
-#line 1077 "./glsl.g"
+#line 1078 "./glsl.g"
 
 case 70: {
     sym(1).kind = AST::Kind_AssignModulus;
 }   break;
 
-#line 1084 "./glsl.g"
+#line 1085 "./glsl.g"
 
 case 71: {
     sym(1).kind = AST::Kind_AssignPlus;
 }   break;
 
-#line 1091 "./glsl.g"
+#line 1092 "./glsl.g"
 
 case 72: {
     sym(1).kind = AST::Kind_AssignMinus;
 }   break;
 
-#line 1098 "./glsl.g"
+#line 1099 "./glsl.g"
 
 case 73: {
     sym(1).kind = AST::Kind_AssignShiftLeft;
 }   break;
 
-#line 1105 "./glsl.g"
+#line 1106 "./glsl.g"
 
 case 74: {
     sym(1).kind = AST::Kind_AssignShiftRight;
 }   break;
 
-#line 1112 "./glsl.g"
+#line 1113 "./glsl.g"
 
 case 75: {
     sym(1).kind = AST::Kind_AssignAnd;
 }   break;
 
-#line 1119 "./glsl.g"
+#line 1120 "./glsl.g"
 
 case 76: {
     sym(1).kind = AST::Kind_AssignXor;
 }   break;
 
-#line 1126 "./glsl.g"
+#line 1127 "./glsl.g"
 
 case 77: {
     sym(1).kind = AST::Kind_AssignOr;
 }   break;
 
-#line 1133 "./glsl.g"
+#line 1134 "./glsl.g"
 
 case 78: {
     // nothing to do.
 }   break;
 
-#line 1140 "./glsl.g"
+#line 1141 "./glsl.g"
 
 case 79: {
     ast(1) = makeAstNode<BinaryExpression>(AST::Kind_Comma, expression(1), expression(3));
 }   break;
 
-#line 1147 "./glsl.g"
+#line 1148 "./glsl.g"
 
 case 80: {
     // nothing to do.
 }   break;
 
-#line 1154 "./glsl.g"
+#line 1155 "./glsl.g"
 
 case 81: {
     // nothing to do.
 }   break;
 
-#line 1161 "./glsl.g"
+#line 1162 "./glsl.g"
 
 case 82: {
     ast(1) = makeAstNode<InitDeclaration>(sym(1).declaration_list);
 }   break;
 
-#line 1168 "./glsl.g"
+#line 1169 "./glsl.g"
 
 case 83: {
     ast(1) = makeAstNode<PrecisionDeclaration>(sym(2).precision, type(3));
 }   break;
 
-#line 1175 "./glsl.g"
+#line 1176 "./glsl.g"
 
 case 84: {
     if (sym(1).type_qualifier.qualifier != QualifiedType::Struct) {
@@ -696,7 +696,7 @@ case 84: {
     ast(1) = makeAstNode<TypeDeclaration>(type);
 }   break;
 
-#line 1186 "./glsl.g"
+#line 1187 "./glsl.g"
 
 case 85: {
     if ((sym(1).type_qualifier.qualifier & QualifiedType::Struct) == 0) {
@@ -714,7 +714,7 @@ case 85: {
          makeAstNode<VariableDeclaration>(qualtype, string(6)));
 }   break;
 
-#line 1205 "./glsl.g"
+#line 1206 "./glsl.g"
 
 case 86: {
     if ((sym(1).type_qualifier.qualifier & QualifiedType::Struct) == 0) {
@@ -733,7 +733,7 @@ case 86: {
             (makeAstNode<ArrayType>(qualtype), string(6)));
 }   break;
 
-#line 1225 "./glsl.g"
+#line 1226 "./glsl.g"
 
 case 87: {
     if ((sym(1).type_qualifier.qualifier & QualifiedType::Struct) == 0) {
@@ -752,7 +752,7 @@ case 87: {
             (makeAstNode<ArrayType>(qualtype, expression(8)), string(6)));
 }   break;
 
-#line 1245 "./glsl.g"
+#line 1246 "./glsl.g"
 
 case 88: {
     Type *type = makeAstNode<QualifiedType>
@@ -761,59 +761,59 @@ case 88: {
     ast(1) = makeAstNode<TypeDeclaration>(type);
 }   break;
 
-#line 1255 "./glsl.g"
+#line 1256 "./glsl.g"
 
 case 89: {
     function(1)->finishParams();
 }   break;
 
-#line 1262 "./glsl.g"
+#line 1263 "./glsl.g"
 
 case 90: {
     // nothing to do.
 }   break;
 
-#line 1269 "./glsl.g"
+#line 1270 "./glsl.g"
 
 case 91: {
     // nothing to do.
 }   break;
 
-#line 1276 "./glsl.g"
+#line 1277 "./glsl.g"
 
 case 92: {
     function(1)->params = makeAstNode< List<ParameterDeclaration *> >
         (sym(2).param_declaration);
 }   break;
 
-#line 1284 "./glsl.g"
+#line 1285 "./glsl.g"
 
 case 93: {
     function(1)->params = makeAstNode< List<ParameterDeclaration *> >
         (function(1)->params, sym(3).param_declaration);
 }   break;
 
-#line 1292 "./glsl.g"
+#line 1293 "./glsl.g"
 
 case 94: {
     function(1) = makeAstNode<FunctionDeclaration>(type(1), string(2));
 }   break;
 
-#line 1299 "./glsl.g"
+#line 1300 "./glsl.g"
 
 case 95: {
     sym(1).param_declarator.type = type(1);
     sym(1).param_declarator.name = string(2);
 }   break;
 
-#line 1307 "./glsl.g"
+#line 1308 "./glsl.g"
 
 case 96: {
     sym(1).param_declarator.type = makeAstNode<ArrayType>(type(1), expression(4));
     sym(1).param_declarator.name = string(2);
 }   break;
 
-#line 1315 "./glsl.g"
+#line 1316 "./glsl.g"
 
 case 97: {
     ast(1) = makeAstNode<ParameterDeclaration>
@@ -824,7 +824,7 @@ case 97: {
          sym(3).param_declarator.name);
 }   break;
 
-#line 1327 "./glsl.g"
+#line 1328 "./glsl.g"
 
 case 98: {
     ast(1) = makeAstNode<ParameterDeclaration>
@@ -833,7 +833,7 @@ case 98: {
          sym(2).param_declarator.name);
 }   break;
 
-#line 1337 "./glsl.g"
+#line 1338 "./glsl.g"
 
 case 99: {
     ast(1) = makeAstNode<ParameterDeclaration>
@@ -843,7 +843,7 @@ case 99: {
          (const QString *)0);
 }   break;
 
-#line 1348 "./glsl.g"
+#line 1349 "./glsl.g"
 
 case 100: {
     ast(1) = makeAstNode<ParameterDeclaration>
@@ -851,44 +851,44 @@ case 100: {
          (const QString *)0);
 }   break;
 
-#line 1357 "./glsl.g"
+#line 1358 "./glsl.g"
 
 case 101: {
     sym(1).qualifier = ParameterDeclaration::In;
 }   break;
 
-#line 1364 "./glsl.g"
+#line 1365 "./glsl.g"
 
 case 102: {
     sym(1).qualifier = ParameterDeclaration::In;
 }   break;
 
-#line 1371 "./glsl.g"
+#line 1372 "./glsl.g"
 
 case 103: {
     sym(1).qualifier = ParameterDeclaration::Out;
 }   break;
 
-#line 1378 "./glsl.g"
+#line 1379 "./glsl.g"
 
 case 104: {
     sym(1).qualifier = ParameterDeclaration::InOut;
 }   break;
 
-#line 1385 "./glsl.g"
+#line 1386 "./glsl.g"
 
 case 105: {
     // nothing to do.
 }   break;
 
-#line 1392 "./glsl.g"
+#line 1393 "./glsl.g"
 
 case 106: {
     sym(1).declaration_list = makeAstNode< List<Declaration *> >
         (sym(1).declaration);
 }   break;
 
-#line 1400 "./glsl.g"
+#line 1401 "./glsl.g"
 
 case 107: {
     Type *type = VariableDeclaration::declarationType(sym(1).declaration_list);
@@ -897,7 +897,7 @@ case 107: {
             (sym(1).declaration_list, decl);
 }   break;
 
-#line 1410 "./glsl.g"
+#line 1411 "./glsl.g"
 
 case 108: {
     Type *type = VariableDeclaration::declarationType(sym(1).declaration_list);
@@ -907,7 +907,7 @@ case 108: {
             (sym(1).declaration_list, decl);
 }   break;
 
-#line 1421 "./glsl.g"
+#line 1422 "./glsl.g"
 
 case 109: {
     Type *type = VariableDeclaration::declarationType(sym(1).declaration_list);
@@ -917,7 +917,7 @@ case 109: {
             (sym(1).declaration_list, decl);
 }   break;
 
-#line 1432 "./glsl.g"
+#line 1433 "./glsl.g"
 
 case 110: {
     Type *type = VariableDeclaration::declarationType(sym(1).declaration_list);
@@ -928,7 +928,7 @@ case 110: {
             (sym(1).declaration_list, decl);
 }   break;
 
-#line 1444 "./glsl.g"
+#line 1445 "./glsl.g"
 
 case 111: {
     Type *type = VariableDeclaration::declarationType(sym(1).declaration_list);
@@ -939,7 +939,7 @@ case 111: {
             (sym(1).declaration_list, decl);
 }   break;
 
-#line 1456 "./glsl.g"
+#line 1457 "./glsl.g"
 
 case 112: {
     Type *type = VariableDeclaration::declarationType(sym(1).declaration_list);
@@ -949,40 +949,40 @@ case 112: {
             (sym(1).declaration_list, decl);
 }   break;
 
-#line 1467 "./glsl.g"
+#line 1468 "./glsl.g"
 
 case 113: {
     ast(1) = makeAstNode<TypeDeclaration>(type(1));
 }   break;
 
-#line 1474 "./glsl.g"
+#line 1475 "./glsl.g"
 
 case 114: {
     ast(1) = makeAstNode<VariableDeclaration>(type(1), string(2));
 }   break;
 
-#line 1481 "./glsl.g"
+#line 1482 "./glsl.g"
 
 case 115: {
     ast(1) = makeAstNode<VariableDeclaration>
         (makeAstNode<ArrayType>(type(1)), string(2));
 }   break;
 
-#line 1489 "./glsl.g"
+#line 1490 "./glsl.g"
 
 case 116: {
     ast(1) = makeAstNode<VariableDeclaration>
         (makeAstNode<ArrayType>(type(1), expression(4)), string(2));
 }   break;
 
-#line 1497 "./glsl.g"
+#line 1498 "./glsl.g"
 
 case 117: {
     ast(1) = makeAstNode<VariableDeclaration>
         (makeAstNode<ArrayType>(type(1)), string(2), expression(6));
 }   break;
 
-#line 1505 "./glsl.g"
+#line 1506 "./glsl.g"
 
 case 118: {
     ast(1) = makeAstNode<VariableDeclaration>
@@ -990,26 +990,26 @@ case 118: {
          string(2), expression(7));
 }   break;
 
-#line 1514 "./glsl.g"
+#line 1515 "./glsl.g"
 
 case 119: {
     ast(1) = makeAstNode<VariableDeclaration>
         (type(1), string(2), expression(4));
 }   break;
 
-#line 1522 "./glsl.g"
+#line 1523 "./glsl.g"
 
 case 120: {
     ast(1) = makeAstNode<InvariantDeclaration>(string(2));
 }   break;
 
-#line 1529 "./glsl.g"
+#line 1530 "./glsl.g"
 
 case 121: {
     ast(1) = makeAstNode<QualifiedType>(0, type(1), (List<LayoutQualifier *> *)0);
 }   break;
 
-#line 1536 "./glsl.g"
+#line 1537 "./glsl.g"
 
 case 122: {
     ast(1) = makeAstNode<QualifiedType>
@@ -1017,207 +1017,207 @@ case 122: {
          sym(1).type_qualifier.layout_list);
 }   break;
 
-#line 1545 "./glsl.g"
+#line 1546 "./glsl.g"
 
 case 123: {
     sym(1).qualifier = QualifiedType::Invariant;
 }   break;
 
-#line 1552 "./glsl.g"
+#line 1553 "./glsl.g"
 
 case 124: {
     sym(1).qualifier = QualifiedType::Smooth;
 }   break;
 
-#line 1559 "./glsl.g"
+#line 1560 "./glsl.g"
 
 case 125: {
     sym(1).qualifier = QualifiedType::Flat;
 }   break;
 
-#line 1566 "./glsl.g"
+#line 1567 "./glsl.g"
 
 case 126: {
     sym(1).qualifier = QualifiedType::NoPerspective;
 }   break;
 
-#line 1573 "./glsl.g"
+#line 1574 "./glsl.g"
 
 case 127: {
     sym(1) = sym(3);
 }   break;
 
-#line 1580 "./glsl.g"
+#line 1581 "./glsl.g"
 
 case 128: {
     sym(1).layout_list = makeAstNode< List<LayoutQualifier *> >(sym(1).layout);
 }   break;
 
-#line 1587 "./glsl.g"
+#line 1588 "./glsl.g"
 
 case 129: {
     sym(1).layout_list = makeAstNode< List<LayoutQualifier *> >(sym(1).layout_list, sym(3).layout);
 }   break;
 
-#line 1594 "./glsl.g"
+#line 1595 "./glsl.g"
 
 case 130: {
     sym(1).layout = makeAstNode<LayoutQualifier>(string(1), (const QString *)0);
 }   break;
 
-#line 1601 "./glsl.g"
+#line 1602 "./glsl.g"
 
 case 131: {
     sym(1).layout = makeAstNode<LayoutQualifier>(string(1), string(3));
 }   break;
 
-#line 1608 "./glsl.g"
+#line 1609 "./glsl.g"
 
 case 132: {
     sym(1).qualifier = QualifiedType::Const;
 }   break;
 
-#line 1615 "./glsl.g"
+#line 1616 "./glsl.g"
 
 case 133: {
     sym(1).type_qualifier.qualifier = sym(1).qualifier;
     sym(1).type_qualifier.layout_list = 0;
 }   break;
 
-#line 1623 "./glsl.g"
+#line 1624 "./glsl.g"
 
 case 134: {
     sym(1).type_qualifier.layout_list = sym(1).layout_list;
     sym(1).type_qualifier.qualifier = 0;
 }   break;
 
-#line 1631 "./glsl.g"
+#line 1632 "./glsl.g"
 
 case 135: {
     sym(1).type_qualifier.layout_list = sym(1).layout_list;
     sym(1).type_qualifier.qualifier = sym(2).qualifier;
 }   break;
 
-#line 1639 "./glsl.g"
+#line 1640 "./glsl.g"
 
 case 136: {
     sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
     sym(1).type_qualifier.layout_list = 0;
 }   break;
 
-#line 1647 "./glsl.g"
+#line 1648 "./glsl.g"
 
 case 137: {
     sym(1).type_qualifier.qualifier = sym(1).qualifier;
     sym(1).type_qualifier.layout_list = 0;
 }   break;
 
-#line 1655 "./glsl.g"
+#line 1656 "./glsl.g"
 
 case 138: {
     sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
     sym(1).type_qualifier.layout_list = 0;
 }   break;
 
-#line 1663 "./glsl.g"
+#line 1664 "./glsl.g"
 
 case 139: {
     sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier | sym(3).qualifier;
     sym(1).type_qualifier.layout_list = 0;
 }   break;
 
-#line 1671 "./glsl.g"
+#line 1672 "./glsl.g"
 
 case 140: {
     sym(1).type_qualifier.qualifier = QualifiedType::Invariant;
     sym(1).type_qualifier.layout_list = 0;
 }   break;
 
-#line 1679 "./glsl.g"
+#line 1680 "./glsl.g"
 
 case 141: {
     sym(1).qualifier = QualifiedType::Const;
 }   break;
 
-#line 1686 "./glsl.g"
+#line 1687 "./glsl.g"
 
 case 142: {
     sym(1).qualifier = QualifiedType::Attribute;
 }   break;
 
-#line 1693 "./glsl.g"
+#line 1694 "./glsl.g"
 
 case 143: {
     sym(1).qualifier = QualifiedType::Varying;
 }   break;
 
-#line 1700 "./glsl.g"
+#line 1701 "./glsl.g"
 
 case 144: {
     sym(1).qualifier = QualifiedType::CentroidVarying;
 }   break;
 
-#line 1707 "./glsl.g"
+#line 1708 "./glsl.g"
 
 case 145: {
     sym(1).qualifier = QualifiedType::In;
 }   break;
 
-#line 1714 "./glsl.g"
+#line 1715 "./glsl.g"
 
 case 146: {
     sym(1).qualifier = QualifiedType::Out;
 }   break;
 
-#line 1721 "./glsl.g"
+#line 1722 "./glsl.g"
 
 case 147: {
     sym(1).qualifier = QualifiedType::CentroidIn;
 }   break;
 
-#line 1728 "./glsl.g"
+#line 1729 "./glsl.g"
 
 case 148: {
     sym(1).qualifier = QualifiedType::CentroidOut;
 }   break;
 
-#line 1735 "./glsl.g"
+#line 1736 "./glsl.g"
 
 case 149: {
     sym(1).qualifier = QualifiedType::PatchIn;
 }   break;
 
-#line 1742 "./glsl.g"
+#line 1743 "./glsl.g"
 
 case 150: {
     sym(1).qualifier = QualifiedType::PatchOut;
 }   break;
 
-#line 1749 "./glsl.g"
+#line 1750 "./glsl.g"
 
 case 151: {
     sym(1).qualifier = QualifiedType::SampleIn;
 }   break;
 
-#line 1756 "./glsl.g"
+#line 1757 "./glsl.g"
 
 case 152: {
     sym(1).qualifier = QualifiedType::SampleOut;
 }   break;
 
-#line 1763 "./glsl.g"
+#line 1764 "./glsl.g"
 
 case 153: {
     sym(1).qualifier = QualifiedType::Uniform;
 }   break;
 
-#line 1770 "./glsl.g"
+#line 1771 "./glsl.g"
 
 case 154: {
     // nothing to do.
 }   break;
 
-#line 1777 "./glsl.g"
+#line 1778 "./glsl.g"
 
 case 155: {
     if (!type(2)->setPrecision(sym(1).precision)) {
@@ -1226,595 +1226,595 @@ case 155: {
     ast(1) = type(2);
 }   break;
 
-#line 1787 "./glsl.g"
+#line 1788 "./glsl.g"
 
 case 156: {
     // nothing to do.
 }   break;
 
-#line 1794 "./glsl.g"
+#line 1795 "./glsl.g"
 
 case 157: {
     ast(1) = makeAstNode<ArrayType>(type(1));
 }   break;
 
-#line 1801 "./glsl.g"
+#line 1802 "./glsl.g"
 
 case 158: {
     ast(1) = makeAstNode<ArrayType>(type(1), expression(3));
 }   break;
 
-#line 1808 "./glsl.g"
+#line 1809 "./glsl.g"
 
 case 159: {
     ast(1) = makeBasicType(T_VOID, Type::Void);
 }   break;
 
-#line 1815 "./glsl.g"
+#line 1816 "./glsl.g"
 
 case 160: {
     ast(1) = makeBasicType(T_FLOAT, Type::Primitive);
 }   break;
 
-#line 1822 "./glsl.g"
+#line 1823 "./glsl.g"
 
 case 161: {
     ast(1) = makeBasicType(T_DOUBLE, Type::Primitive);
 }   break;
 
-#line 1829 "./glsl.g"
+#line 1830 "./glsl.g"
 
 case 162: {
     ast(1) = makeBasicType(T_INT, Type::Primitive);
 }   break;
 
-#line 1836 "./glsl.g"
+#line 1837 "./glsl.g"
 
 case 163: {
     ast(1) = makeBasicType(T_UINT, Type::Primitive);
 }   break;
 
-#line 1843 "./glsl.g"
+#line 1844 "./glsl.g"
 
 case 164: {
     ast(1) = makeBasicType(T_BOOL, Type::Primitive);
 }   break;
 
-#line 1850 "./glsl.g"
+#line 1851 "./glsl.g"
 
 case 165: {
     ast(1) = makeBasicType(T_VEC2, Type::Vector2);
 }   break;
 
-#line 1857 "./glsl.g"
+#line 1858 "./glsl.g"
 
 case 166: {
     ast(1) = makeBasicType(T_VEC3, Type::Vector3);
 }   break;
 
-#line 1864 "./glsl.g"
+#line 1865 "./glsl.g"
 
 case 167: {
     ast(1) = makeBasicType(T_VEC4, Type::Vector4);
 }   break;
 
-#line 1871 "./glsl.g"
+#line 1872 "./glsl.g"
 
 case 168: {
     ast(1) = makeBasicType(T_DVEC2, Type::Vector2);
 }   break;
 
-#line 1878 "./glsl.g"
+#line 1879 "./glsl.g"
 
 case 169: {
     ast(1) = makeBasicType(T_DVEC3, Type::Vector3);
 }   break;
 
-#line 1885 "./glsl.g"
+#line 1886 "./glsl.g"
 
 case 170: {
     ast(1) = makeBasicType(T_DVEC4, Type::Vector4);
 }   break;
 
-#line 1892 "./glsl.g"
+#line 1893 "./glsl.g"
 
 case 171: {
     ast(1) = makeBasicType(T_BVEC2, Type::Vector2);
 }   break;
 
-#line 1899 "./glsl.g"
+#line 1900 "./glsl.g"
 
 case 172: {
     ast(1) = makeBasicType(T_BVEC3, Type::Vector3);
 }   break;
 
-#line 1906 "./glsl.g"
+#line 1907 "./glsl.g"
 
 case 173: {
     ast(1) = makeBasicType(T_BVEC4, Type::Vector4);
 }   break;
 
-#line 1913 "./glsl.g"
+#line 1914 "./glsl.g"
 
 case 174: {
     ast(1) = makeBasicType(T_IVEC2, Type::Vector2);
 }   break;
 
-#line 1920 "./glsl.g"
+#line 1921 "./glsl.g"
 
 case 175: {
     ast(1) = makeBasicType(T_IVEC3, Type::Vector3);
 }   break;
 
-#line 1927 "./glsl.g"
+#line 1928 "./glsl.g"
 
 case 176: {
     ast(1) = makeBasicType(T_IVEC4, Type::Vector4);
 }   break;
 
-#line 1934 "./glsl.g"
+#line 1935 "./glsl.g"
 
 case 177: {
     ast(1) = makeBasicType(T_UVEC2, Type::Vector2);
 }   break;
 
-#line 1941 "./glsl.g"
+#line 1942 "./glsl.g"
 
 case 178: {
     ast(1) = makeBasicType(T_UVEC3, Type::Vector3);
 }   break;
 
-#line 1948 "./glsl.g"
+#line 1949 "./glsl.g"
 
 case 179: {
     ast(1) = makeBasicType(T_UVEC4, Type::Vector4);
 }   break;
 
-#line 1955 "./glsl.g"
+#line 1956 "./glsl.g"
 
 case 180: {
     ast(1) = makeBasicType(T_MAT2, Type::Matrix);
 }   break;
 
-#line 1962 "./glsl.g"
+#line 1963 "./glsl.g"
 
 case 181: {
     ast(1) = makeBasicType(T_MAT3, Type::Matrix);
 }   break;
 
-#line 1969 "./glsl.g"
+#line 1970 "./glsl.g"
 
 case 182: {
     ast(1) = makeBasicType(T_MAT4, Type::Matrix);
 }   break;
 
-#line 1976 "./glsl.g"
+#line 1977 "./glsl.g"
 
 case 183: {
     ast(1) = makeBasicType(T_MAT2, Type::Matrix);
 }   break;
 
-#line 1983 "./glsl.g"
+#line 1984 "./glsl.g"
 
 case 184: {
     ast(1) = makeBasicType(T_MAT2X3, Type::Matrix);
 }   break;
 
-#line 1990 "./glsl.g"
+#line 1991 "./glsl.g"
 
 case 185: {
     ast(1) = makeBasicType(T_MAT2X4, Type::Matrix);
 }   break;
 
-#line 1997 "./glsl.g"
+#line 1998 "./glsl.g"
 
 case 186: {
     ast(1) = makeBasicType(T_MAT3X2, Type::Matrix);
 }   break;
 
-#line 2004 "./glsl.g"
+#line 2005 "./glsl.g"
 
 case 187: {
     ast(1) = makeBasicType(T_MAT3, Type::Matrix);
 }   break;
 
-#line 2011 "./glsl.g"
+#line 2012 "./glsl.g"
 
 case 188: {
     ast(1) = makeBasicType(T_MAT3X4, Type::Matrix);
 }   break;
 
-#line 2018 "./glsl.g"
+#line 2019 "./glsl.g"
 
 case 189: {
     ast(1) = makeBasicType(T_MAT4X2, Type::Matrix);
 }   break;
 
-#line 2025 "./glsl.g"
+#line 2026 "./glsl.g"
 
 case 190: {
     ast(1) = makeBasicType(T_MAT4X3, Type::Matrix);
 }   break;
 
-#line 2032 "./glsl.g"
+#line 2033 "./glsl.g"
 
 case 191: {
     ast(1) = makeBasicType(T_MAT4, Type::Matrix);
 }   break;
 
-#line 2039 "./glsl.g"
+#line 2040 "./glsl.g"
 
 case 192: {
     ast(1) = makeBasicType(T_DMAT2, Type::Matrix);
 }   break;
 
-#line 2046 "./glsl.g"
+#line 2047 "./glsl.g"
 
 case 193: {
     ast(1) = makeBasicType(T_DMAT3, Type::Matrix);
 }   break;
 
-#line 2053 "./glsl.g"
+#line 2054 "./glsl.g"
 
 case 194: {
     ast(1) = makeBasicType(T_DMAT4, Type::Matrix);
 }   break;
 
-#line 2060 "./glsl.g"
+#line 2061 "./glsl.g"
 
 case 195: {
     ast(1) = makeBasicType(T_DMAT2, Type::Matrix);
 }   break;
 
-#line 2067 "./glsl.g"
+#line 2068 "./glsl.g"
 
 case 196: {
     ast(1) = makeBasicType(T_DMAT2X3, Type::Matrix);
 }   break;
 
-#line 2074 "./glsl.g"
+#line 2075 "./glsl.g"
 
 case 197: {
     ast(1) = makeBasicType(T_DMAT2X4, Type::Matrix);
 }   break;
 
-#line 2081 "./glsl.g"
+#line 2082 "./glsl.g"
 
 case 198: {
     ast(1) = makeBasicType(T_DMAT3X2, Type::Matrix);
 }   break;
 
-#line 2088 "./glsl.g"
+#line 2089 "./glsl.g"
 
 case 199: {
     ast(1) = makeBasicType(T_DMAT3, Type::Matrix);
 }   break;
 
-#line 2095 "./glsl.g"
+#line 2096 "./glsl.g"
 
 case 200: {
     ast(1) = makeBasicType(T_DMAT3X4, Type::Matrix);
 }   break;
 
-#line 2102 "./glsl.g"
+#line 2103 "./glsl.g"
 
 case 201: {
     ast(1) = makeBasicType(T_DMAT4X2, Type::Matrix);
 }   break;
 
-#line 2109 "./glsl.g"
+#line 2110 "./glsl.g"
 
 case 202: {
     ast(1) = makeBasicType(T_DMAT4X3, Type::Matrix);
 }   break;
 
-#line 2116 "./glsl.g"
+#line 2117 "./glsl.g"
 
 case 203: {
     ast(1) = makeBasicType(T_DMAT4, Type::Matrix);
 }   break;
 
-#line 2123 "./glsl.g"
+#line 2124 "./glsl.g"
 
 case 204: {
     ast(1) = makeBasicType(T_SAMPLER1D, Type::Sampler1D);
 }   break;
 
-#line 2130 "./glsl.g"
+#line 2131 "./glsl.g"
 
 case 205: {
     ast(1) = makeBasicType(T_SAMPLER2D, Type::Sampler2D);
 }   break;
 
-#line 2137 "./glsl.g"
+#line 2138 "./glsl.g"
 
 case 206: {
     ast(1) = makeBasicType(T_SAMPLER3D, Type::Sampler3D);
 }   break;
 
-#line 2144 "./glsl.g"
+#line 2145 "./glsl.g"
 
 case 207: {
     ast(1) = makeBasicType(T_SAMPLERCUBE, Type::SamplerCube);
 }   break;
 
-#line 2151 "./glsl.g"
+#line 2152 "./glsl.g"
 
 case 208: {
     ast(1) = makeBasicType(T_SAMPLER1DSHADOW, Type::Sampler1DShadow);
 }   break;
 
-#line 2158 "./glsl.g"
+#line 2159 "./glsl.g"
 
 case 209: {
     ast(1) = makeBasicType(T_SAMPLER2DSHADOW, Type::Sampler2DShadow);
 }   break;
 
-#line 2165 "./glsl.g"
+#line 2166 "./glsl.g"
 
 case 210: {
     ast(1) = makeBasicType(T_SAMPLERCUBESHADOW, Type::SamplerCubeShadow);
 }   break;
 
-#line 2172 "./glsl.g"
+#line 2173 "./glsl.g"
 
 case 211: {
     ast(1) = makeBasicType(T_SAMPLER1DARRAY, Type::Sampler1DArray);
 }   break;
 
-#line 2179 "./glsl.g"
+#line 2180 "./glsl.g"
 
 case 212: {
     ast(1) = makeBasicType(T_SAMPLER2DARRAY, Type::Sampler2DArray);
 }   break;
 
-#line 2186 "./glsl.g"
+#line 2187 "./glsl.g"
 
 case 213: {
     ast(1) = makeBasicType(T_SAMPLER1DARRAYSHADOW, Type::Sampler1DArrayShadow);
 }   break;
 
-#line 2193 "./glsl.g"
+#line 2194 "./glsl.g"
 
 case 214: {
     ast(1) = makeBasicType(T_SAMPLER2DARRAYSHADOW, Type::Sampler2DArrayShadow);
 }   break;
 
-#line 2200 "./glsl.g"
+#line 2201 "./glsl.g"
 
 case 215: {
     ast(1) = makeBasicType(T_SAMPLERCUBEARRAY, Type::SamplerCubeShadow);
 }   break;
 
-#line 2207 "./glsl.g"
+#line 2208 "./glsl.g"
 
 case 216: {
     ast(1) = makeBasicType(T_SAMPLERCUBEARRAYSHADOW, Type::SamplerCubeArrayShadow);
 }   break;
 
-#line 2214 "./glsl.g"
+#line 2215 "./glsl.g"
 
 case 217: {
     ast(1) = makeBasicType(T_ISAMPLER1D, Type::Sampler1D);
 }   break;
 
-#line 2221 "./glsl.g"
+#line 2222 "./glsl.g"
 
 case 218: {
     ast(1) = makeBasicType(T_ISAMPLER2D, Type::Sampler2D);
 }   break;
 
-#line 2228 "./glsl.g"
+#line 2229 "./glsl.g"
 
 case 219: {
     ast(1) = makeBasicType(T_ISAMPLER3D, Type::Sampler3D);
 }   break;
 
-#line 2235 "./glsl.g"
+#line 2236 "./glsl.g"
 
 case 220: {
     ast(1) = makeBasicType(T_ISAMPLERCUBE, Type::SamplerCube);
 }   break;
 
-#line 2242 "./glsl.g"
+#line 2243 "./glsl.g"
 
 case 221: {
     ast(1) = makeBasicType(T_ISAMPLER1DARRAY, Type::Sampler1DArray);
 }   break;
 
-#line 2249 "./glsl.g"
+#line 2250 "./glsl.g"
 
 case 222: {
     ast(1) = makeBasicType(T_ISAMPLER2DARRAY, Type::Sampler2DArray);
 }   break;
 
-#line 2256 "./glsl.g"
+#line 2257 "./glsl.g"
 
 case 223: {
     ast(1) = makeBasicType(T_ISAMPLERCUBEARRAY, Type::SamplerCubeArray);
 }   break;
 
-#line 2263 "./glsl.g"
+#line 2264 "./glsl.g"
 
 case 224: {
     ast(1) = makeBasicType(T_USAMPLER1D, Type::Sampler1D);
 }   break;
 
-#line 2270 "./glsl.g"
+#line 2271 "./glsl.g"
 
 case 225: {
     ast(1) = makeBasicType(T_USAMPLER2D, Type::Sampler2D);
 }   break;
 
-#line 2277 "./glsl.g"
+#line 2278 "./glsl.g"
 
 case 226: {
     ast(1) = makeBasicType(T_USAMPLER3D, Type::Sampler3D);
 }   break;
 
-#line 2284 "./glsl.g"
+#line 2285 "./glsl.g"
 
 case 227: {
     ast(1) = makeBasicType(T_USAMPLERCUBE, Type::SamplerCube);
 }   break;
 
-#line 2291 "./glsl.g"
+#line 2292 "./glsl.g"
 
 case 228: {
     ast(1) = makeBasicType(T_USAMPLER1DARRAY, Type::Sampler1DArray);
 }   break;
 
-#line 2298 "./glsl.g"
+#line 2299 "./glsl.g"
 
 case 229: {
     ast(1) = makeBasicType(T_USAMPLER2DARRAY, Type::Sampler2DArray);
 }   break;
 
-#line 2305 "./glsl.g"
+#line 2306 "./glsl.g"
 
 case 230: {
     ast(1) = makeBasicType(T_USAMPLERCUBEARRAY, Type::SamplerCubeArray);
 }   break;
 
-#line 2312 "./glsl.g"
+#line 2313 "./glsl.g"
 
 case 231: {
     ast(1) = makeBasicType(T_SAMPLER2DRECT, Type::Sampler2DRect);
 }   break;
 
-#line 2319 "./glsl.g"
+#line 2320 "./glsl.g"
 
 case 232: {
     ast(1) = makeBasicType(T_SAMPLER2DRECTSHADOW, Type::Sampler2DRectShadow);
 }   break;
 
-#line 2326 "./glsl.g"
+#line 2327 "./glsl.g"
 
 case 233: {
     ast(1) = makeBasicType(T_ISAMPLER2DRECT, Type::Sampler2DRect);
 }   break;
 
-#line 2333 "./glsl.g"
+#line 2334 "./glsl.g"
 
 case 234: {
     ast(1) = makeBasicType(T_USAMPLER2DRECT, Type::Sampler2DRect);
 }   break;
 
-#line 2340 "./glsl.g"
+#line 2341 "./glsl.g"
 
 case 235: {
     ast(1) = makeBasicType(T_SAMPLERBUFFER, Type::SamplerBuffer);
 }   break;
 
-#line 2347 "./glsl.g"
+#line 2348 "./glsl.g"
 
 case 236: {
     ast(1) = makeBasicType(T_ISAMPLERBUFFER, Type::SamplerBuffer);
 }   break;
 
-#line 2354 "./glsl.g"
+#line 2355 "./glsl.g"
 
 case 237: {
     ast(1) = makeBasicType(T_USAMPLERBUFFER, Type::SamplerBuffer);
 }   break;
 
-#line 2361 "./glsl.g"
+#line 2362 "./glsl.g"
 
 case 238: {
     ast(1) = makeBasicType(T_SAMPLER2DMS, Type::Sampler2DMS);
 }   break;
 
-#line 2368 "./glsl.g"
+#line 2369 "./glsl.g"
 
 case 239: {
     ast(1) = makeBasicType(T_ISAMPLER2DMS, Type::Sampler2DMS);
 }   break;
 
-#line 2375 "./glsl.g"
+#line 2376 "./glsl.g"
 
 case 240: {
     ast(1) = makeBasicType(T_USAMPLER2DMS, Type::Sampler2DMS);
 }   break;
 
-#line 2382 "./glsl.g"
+#line 2383 "./glsl.g"
 
 case 241: {
     ast(1) = makeBasicType(T_SAMPLER2DMSARRAY, Type::Sampler2DMSArray);
 }   break;
 
-#line 2389 "./glsl.g"
+#line 2390 "./glsl.g"
 
 case 242: {
     ast(1) = makeBasicType(T_ISAMPLER2DMSARRAY, Type::Sampler2DMSArray);
 }   break;
 
-#line 2396 "./glsl.g"
+#line 2397 "./glsl.g"
 
 case 243: {
     ast(1) = makeBasicType(T_USAMPLER2DMSARRAY, Type::Sampler2DMSArray);
 }   break;
 
-#line 2403 "./glsl.g"
+#line 2404 "./glsl.g"
 
 case 244: {
     // nothing to do.
 }   break;
 
-#line 2410 "./glsl.g"
+#line 2411 "./glsl.g"
 
 case 245: {
     ast(1) = makeAstNode<NamedType>(string(1));
 }   break;
 
-#line 2417 "./glsl.g"
+#line 2418 "./glsl.g"
 
 case 246: {
     sym(1).precision = Type::Highp;
 }   break;
 
-#line 2424 "./glsl.g"
+#line 2425 "./glsl.g"
 
 case 247: {
     sym(1).precision = Type::Mediump;
 }   break;
 
-#line 2431 "./glsl.g"
+#line 2432 "./glsl.g"
 
 case 248: {
     sym(1).precision = Type::Lowp;
 }   break;
 
-#line 2438 "./glsl.g"
+#line 2439 "./glsl.g"
 
 case 249: {
     ast(1) = makeAstNode<StructType>(string(2), sym(4).field_list);
 }   break;
 
-#line 2445 "./glsl.g"
+#line 2446 "./glsl.g"
 
 case 250: {
     ast(1) = makeAstNode<StructType>(sym(3).field_list);
 }   break;
 
-#line 2452 "./glsl.g"
+#line 2453 "./glsl.g"
 
 case 251: {
     // nothing to do.
 }   break;
 
-#line 2459 "./glsl.g"
+#line 2460 "./glsl.g"
 
 case 252: {
     sym(1).field_list = appendLists(sym(1).field_list, sym(2).field_list);
 }   break;
 
-#line 2466 "./glsl.g"
+#line 2467 "./glsl.g"
 
 case 253: {
     sym(1).field_list = StructType::fixInnerTypes(type(1), sym(2).field_list);
 }   break;
 
-#line 2473 "./glsl.g"
+#line 2474 "./glsl.g"
 
 case 254: {
     sym(1).field_list = StructType::fixInnerTypes
@@ -1823,321 +1823,321 @@ case 254: {
              sym(1).type_qualifier.layout_list), sym(3).field_list);
 }   break;
 
-#line 2483 "./glsl.g"
+#line 2484 "./glsl.g"
 
 case 255: {
     // nothing to do.
     sym(1).field_list = makeAstNode< List<StructType::Field *> >(sym(1).field);
 }   break;
 
-#line 2491 "./glsl.g"
+#line 2492 "./glsl.g"
 
 case 256: {
     sym(1).field_list = makeAstNode< List<StructType::Field *> >(sym(1).field_list, sym(3).field);
 }   break;
 
-#line 2498 "./glsl.g"
+#line 2499 "./glsl.g"
 
 case 257: {
     sym(1).field = makeAstNode<StructType::Field>(string(1));
 }   break;
 
-#line 2505 "./glsl.g"
+#line 2506 "./glsl.g"
 
 case 258: {
     sym(1).field = makeAstNode<StructType::Field>
         (string(1), makeAstNode<ArrayType>((Type *)0));
 }   break;
 
-#line 2513 "./glsl.g"
+#line 2514 "./glsl.g"
 
 case 259: {
     sym(1).field = makeAstNode<StructType::Field>
         (string(1), makeAstNode<ArrayType>((Type *)0, expression(3)));
 }   break;
 
-#line 2521 "./glsl.g"
+#line 2522 "./glsl.g"
 
 case 260: {
     // nothing to do.
 }   break;
 
-#line 2528 "./glsl.g"
+#line 2529 "./glsl.g"
 
 case 261: {
     ast(1) = makeAstNode<DeclarationStatement>(sym(1).declaration_list);
 }   break;
 
-#line 2535 "./glsl.g"
+#line 2536 "./glsl.g"
 
 case 262: {
     // nothing to do.
 }   break;
 
-#line 2542 "./glsl.g"
+#line 2543 "./glsl.g"
 
 case 263: {
     // nothing to do.
 }   break;
 
-#line 2549 "./glsl.g"
+#line 2550 "./glsl.g"
 
 case 264: {
     // nothing to do.
 }   break;
 
-#line 2556 "./glsl.g"
+#line 2557 "./glsl.g"
 
 case 265: {
     // nothing to do.
 }   break;
 
-#line 2563 "./glsl.g"
+#line 2564 "./glsl.g"
 
 case 266: {
     // nothing to do.
 }   break;
 
-#line 2570 "./glsl.g"
+#line 2571 "./glsl.g"
 
 case 267: {
     // nothing to do.
 }   break;
 
-#line 2577 "./glsl.g"
+#line 2578 "./glsl.g"
 
 case 268: {
     // nothing to do.
 }   break;
 
-#line 2584 "./glsl.g"
+#line 2585 "./glsl.g"
 
 case 269: {
     // nothing to do.
 }   break;
 
-#line 2591 "./glsl.g"
+#line 2592 "./glsl.g"
 
 case 270: {
     // nothing to do.
 }   break;
 
-#line 2598 "./glsl.g"
+#line 2599 "./glsl.g"
 
 case 271: {
     ast(1) = makeAstNode<CompoundStatement>();
 }   break;
 
-#line 2605 "./glsl.g"
+#line 2606 "./glsl.g"
 
 case 272: {
     ast(1) = makeAstNode<CompoundStatement>(sym(2).statement_list);
 }   break;
 
-#line 2612 "./glsl.g"
+#line 2613 "./glsl.g"
 
 case 273: {
     // nothing to do.
 }   break;
 
-#line 2619 "./glsl.g"
+#line 2620 "./glsl.g"
 
 case 274: {
     // nothing to do.
 }   break;
 
-#line 2626 "./glsl.g"
+#line 2627 "./glsl.g"
 
 case 275: {
     ast(1) = makeAstNode<CompoundStatement>();
 }   break;
 
-#line 2633 "./glsl.g"
+#line 2634 "./glsl.g"
 
 case 276: {
     ast(1) = makeAstNode<CompoundStatement>(sym(2).statement_list);
 }   break;
 
-#line 2640 "./glsl.g"
+#line 2641 "./glsl.g"
 
 case 277: {
     sym(1).statement_list = makeAstNode< List<Statement *> >(sym(1).statement);
 }   break;
 
-#line 2647 "./glsl.g"
+#line 2648 "./glsl.g"
 
 case 278: {
     sym(1).statement_list = makeAstNode< List<Statement *> >(sym(1).statement_list, sym(2).statement);
 }   break;
 
-#line 2654 "./glsl.g"
+#line 2655 "./glsl.g"
 
 case 279: {
     ast(1) = makeAstNode<CompoundStatement>();  // Empty statement
 }   break;
 
-#line 2661 "./glsl.g"
+#line 2662 "./glsl.g"
 
 case 280: {
     ast(1) = makeAstNode<ExpressionStatement>(expression(1));
 }   break;
 
-#line 2668 "./glsl.g"
+#line 2669 "./glsl.g"
 
 case 281: {
     ast(1) = makeAstNode<IfStatement>(expression(3), sym(5).ifstmt.thenClause, sym(5).ifstmt.elseClause);
 }   break;
 
-#line 2675 "./glsl.g"
+#line 2676 "./glsl.g"
 
 case 282: {
     sym(1).ifstmt.thenClause = statement(1);
     sym(1).ifstmt.elseClause = statement(3);
 }   break;
 
-#line 2683 "./glsl.g"
+#line 2684 "./glsl.g"
 
 case 283: {
     sym(1).ifstmt.thenClause = statement(1);
     sym(1).ifstmt.elseClause = 0;
 }   break;
 
-#line 2691 "./glsl.g"
+#line 2692 "./glsl.g"
 
 case 284: {
     // nothing to do.
 }   break;
 
-#line 2698 "./glsl.g"
+#line 2699 "./glsl.g"
 
 case 285: {
     ast(1) = makeAstNode<DeclarationExpression>
         (type(1), string(2), expression(4));
 }   break;
 
-#line 2706 "./glsl.g"
+#line 2707 "./glsl.g"
 
 case 286: {
     ast(1) = makeAstNode<SwitchStatement>(expression(3), statement(6));
 }   break;
 
-#line 2713 "./glsl.g"
+#line 2714 "./glsl.g"
 
 case 287: {
     ast(1) = makeAstNode<CompoundStatement>();
 }   break;
 
-#line 2720 "./glsl.g"
+#line 2721 "./glsl.g"
 
 case 288: {
     ast(1) = makeAstNode<CompoundStatement>(sym(1).statement_list);
 }   break;
 
-#line 2727 "./glsl.g"
+#line 2728 "./glsl.g"
 
 case 289: {
     ast(1) = makeAstNode<CaseLabelStatement>(expression(2));
 }   break;
 
-#line 2734 "./glsl.g"
+#line 2735 "./glsl.g"
 
 case 290: {
     ast(1) = makeAstNode<CaseLabelStatement>();
 }   break;
 
-#line 2741 "./glsl.g"
+#line 2742 "./glsl.g"
 
 case 291: {
     ast(1) = makeAstNode<WhileStatement>(expression(3), statement(5));
 }   break;
 
-#line 2748 "./glsl.g"
+#line 2749 "./glsl.g"
 
 case 292: {
     ast(1) = makeAstNode<DoStatement>(statement(2), expression(5));
 }   break;
 
-#line 2755 "./glsl.g"
+#line 2756 "./glsl.g"
 
 case 293: {
     ast(1) = makeAstNode<ForStatement>(statement(3), sym(4).forstmt.condition, sym(4).forstmt.increment, statement(6));
 }   break;
 
-#line 2762 "./glsl.g"
+#line 2763 "./glsl.g"
 
 case 294: {
     // nothing to do.
 }   break;
 
-#line 2769 "./glsl.g"
+#line 2770 "./glsl.g"
 
 case 295: {
     // nothing to do.
 }   break;
 
-#line 2776 "./glsl.g"
+#line 2777 "./glsl.g"
 
 case 296: {
     // nothing to do.
 }   break;
 
-#line 2783 "./glsl.g"
+#line 2784 "./glsl.g"
 
 case 297: {
     // nothing to do.
 }   break;
 
-#line 2790 "./glsl.g"
+#line 2791 "./glsl.g"
 
 case 298: {
     sym(1).forstmt.condition = expression(1);
     sym(1).forstmt.increment = 0;
 }   break;
 
-#line 2798 "./glsl.g"
+#line 2799 "./glsl.g"
 
 case 299: {
     sym(1).forstmt.condition = expression(1);
     sym(1).forstmt.increment = expression(3);
 }   break;
 
-#line 2806 "./glsl.g"
+#line 2807 "./glsl.g"
 
 case 300: {
     ast(1) = makeAstNode<JumpStatement>(AST::Kind_Continue);
 }   break;
 
-#line 2813 "./glsl.g"
+#line 2814 "./glsl.g"
 
 case 301: {
     ast(1) = makeAstNode<JumpStatement>(AST::Kind_Break);
 }   break;
 
-#line 2820 "./glsl.g"
+#line 2821 "./glsl.g"
 
 case 302: {
     ast(1) = makeAstNode<ReturnStatement>();
 }   break;
 
-#line 2827 "./glsl.g"
+#line 2828 "./glsl.g"
 
 case 303: {
     ast(1) = makeAstNode<ReturnStatement>(expression(2));
 }   break;
 
-#line 2834 "./glsl.g"
+#line 2835 "./glsl.g"
 
 case 304: {
     ast(1) = makeAstNode<JumpStatement>(AST::Kind_Discard);
 }   break;
 
-#line 2841 "./glsl.g"
+#line 2842 "./glsl.g"
 
 case 305: {
     ast(1) = makeAstNode<TranslationUnit>(sym(1).declaration_list);
 }   break;
 
-#line 2848 "./glsl.g"
+#line 2849 "./glsl.g"
 
 case 306: {
     if (sym(1).declaration) {
@@ -2148,7 +2148,7 @@ case 306: {
     }
 }   break;
 
-#line 2860 "./glsl.g"
+#line 2861 "./glsl.g"
 
 case 307: {
     if (sym(1).declaration_list && sym(2).declaration) {
@@ -2164,37 +2164,37 @@ case 307: {
     }
 }   break;
 
-#line 2877 "./glsl.g"
+#line 2878 "./glsl.g"
 
 case 308: {
     // nothing to do.
 }   break;
 
-#line 2884 "./glsl.g"
+#line 2885 "./glsl.g"
 
 case 309: {
     // nothing to do.
 }   break;
 
-#line 2891 "./glsl.g"
+#line 2892 "./glsl.g"
 
 case 310: {
     ast(1) = 0;
 }   break;
 
-#line 2898 "./glsl.g"
+#line 2899 "./glsl.g"
 
 case 311: {
     function(1)->body = statement(2);
 }   break;
 
-#line 2905 "./glsl.g"
+#line 2906 "./glsl.g"
 
 case 312: {
     ast(1) = 0;
 }   break;
 
-#line 2913 "./glsl.g"
+#line 2914 "./glsl.g"
 
 } // end switch
 } // end Parser::reduce()
diff --git a/src/libs/glsl/glslparser.h b/src/libs/glsl/glslparser.h
index a548a0883a870b6bf1aa6dfc110ad1f745ee0723..0902465fa07dcfa601ea2d7ccfbe40fb5bc52453 100644
--- a/src/libs/glsl/glslparser.h
+++ b/src/libs/glsl/glslparser.h
@@ -1,5 +1,5 @@
 
-#line 213 "./glsl.g"
+#line 214 "./glsl.g"
 
 /**************************************************************************
 **
diff --git a/src/libs/glsl/glslparsertable.cpp b/src/libs/glsl/glslparsertable.cpp
index 576fa94e04d9df9bc8a190c819a35df1b71a18c4..9e9cf2df7f92c667005f3ba10002075496079df3 100644
--- a/src/libs/glsl/glslparsertable.cpp
+++ b/src/libs/glsl/glslparsertable.cpp
@@ -62,41 +62,41 @@ const char *const GLSLParserTable::spell [] = {
   "~", "type_name", "uint", "uniform", "usampler1D", "usampler1DArray", "usampler2D", "usampler2DArray", "usampler2DMS", "usampler2DMSarray", 
   "usampler2DRect", "usampler3D", "usamplerBuffer", "usamplerCube", "usamplerCubeArray", "uvec2", "uvec3", "uvec4", "varying", "vec2", 
   "vec3", "vec4", "|", "void", "while", "^=", "^", "true", "false", "preprocessor directive", 
-  "comment", "error"};
+  "comment", "error", "reserved word"};
 
 const short GLSLParserTable::lhs [] = {
-  173, 174, 174, 174, 174, 174, 176, 176, 176, 176, 
-  176, 176, 177, 178, 179, 179, 180, 180, 182, 182, 
-  181, 181, 183, 185, 185, 187, 187, 187, 187, 188, 
-  188, 188, 188, 189, 189, 189, 189, 190, 190, 190, 
-  191, 191, 191, 192, 192, 192, 192, 192, 193, 193, 
-  193, 194, 194, 195, 195, 196, 196, 197, 197, 198, 
-  198, 199, 199, 200, 200, 184, 184, 201, 201, 201, 
-  201, 201, 201, 201, 201, 201, 201, 201, 175, 175, 
-  202, 203, 203, 203, 203, 203, 203, 203, 203, 204, 
-  210, 210, 212, 212, 211, 215, 215, 213, 213, 213, 
-  213, 217, 217, 217, 217, 218, 205, 205, 205, 205, 
-  205, 205, 205, 220, 220, 220, 220, 220, 220, 220, 
-  220, 214, 214, 222, 223, 223, 223, 224, 225, 225, 
-  226, 226, 216, 208, 208, 208, 208, 208, 208, 208, 
-  208, 227, 227, 227, 227, 227, 227, 227, 227, 227, 
-  227, 227, 227, 227, 186, 186, 207, 207, 207, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-  228, 228, 228, 228, 228, 228, 206, 206, 206, 229, 
-  229, 209, 209, 230, 230, 231, 231, 232, 232, 232, 
-  221, 233, 234, 234, 236, 236, 236, 236, 236, 236, 
-  236, 235, 235, 244, 244, 245, 245, 243, 243, 237, 
-  237, 238, 246, 246, 247, 247, 239, 248, 248, 240, 
-  240, 241, 241, 241, 249, 249, 251, 251, 250, 250, 
-  242, 242, 242, 242, 242, 172, 252, 252, 253, 253, 
-  253, 254, 219, 255};
+  174, 175, 175, 175, 175, 175, 177, 177, 177, 177, 
+  177, 177, 178, 179, 180, 180, 181, 181, 183, 183, 
+  182, 182, 184, 186, 186, 188, 188, 188, 188, 189, 
+  189, 189, 189, 190, 190, 190, 190, 191, 191, 191, 
+  192, 192, 192, 193, 193, 193, 193, 193, 194, 194, 
+  194, 195, 195, 196, 196, 197, 197, 198, 198, 199, 
+  199, 200, 200, 201, 201, 185, 185, 202, 202, 202, 
+  202, 202, 202, 202, 202, 202, 202, 202, 176, 176, 
+  203, 204, 204, 204, 204, 204, 204, 204, 204, 205, 
+  211, 211, 213, 213, 212, 216, 216, 214, 214, 214, 
+  214, 218, 218, 218, 218, 219, 206, 206, 206, 206, 
+  206, 206, 206, 221, 221, 221, 221, 221, 221, 221, 
+  221, 215, 215, 223, 224, 224, 224, 225, 226, 226, 
+  227, 227, 217, 209, 209, 209, 209, 209, 209, 209, 
+  209, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
+  228, 228, 228, 228, 187, 187, 208, 208, 208, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 
+  229, 229, 229, 229, 229, 229, 207, 207, 207, 230, 
+  230, 210, 210, 231, 231, 232, 232, 233, 233, 233, 
+  222, 234, 235, 235, 237, 237, 237, 237, 237, 237, 
+  237, 236, 236, 245, 245, 246, 246, 244, 244, 238, 
+  238, 239, 247, 247, 248, 248, 240, 249, 249, 241, 
+  241, 242, 242, 242, 250, 250, 252, 252, 251, 251, 
+  243, 243, 243, 243, 243, 173, 253, 253, 254, 254, 
+  254, 255, 220, 256};
 
 const short GLSLParserTable::rhs [] = {
   1, 1, 1, 1, 1, 3, 1, 4, 1, 3, 
@@ -192,52 +192,52 @@ const short GLSLParserTable::goto_default [] = {
   109, 108, 112, 0};
 
 const short GLSLParserTable::action_index [] = {
-  3220, -172, -172, -172, -172, -172, 54, -172, -172, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, 239, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, -54, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 
-  -172, 47, 76, 43, -172, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, 36, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, 3220, 
-  -6, -72, -172, 143, 32, 5, 64, 172, 397, 211, 
-  562, -172, -172, -172, 37, 1057, -172, -172, -44, -172, 
-  -172, -172, -172, 6, 14, -172, 57, -36, -172, 19, 
-  -172, -172, -172, -172, 562, -73, -172, -172, -172, -11, 
-  2552, 2552, 231, -172, 2719, 727, 10, -172, -172, -14, 
-  -37, -172, 55, 1721, -172, -172, 1223, -172, -38, 1223, 
-  1223, -172, -172, -172, -172, -172, 62, 31, -172, -69, 
-  40, 30, -172, -172, 1389, -62, 67, -172, -28, -115, 
-  42, -27, -121, 7, 138, -172, 230, 25, -172, -172, 
-  1223, -172, -172, -172, -172, -172, 86, 228, 1223, -172, 
-  -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 
-  -172, -172, 1223, -172, 1223, 1223, 24, 1223, 1223, 1223, 
-  -172, -172, -172, 16, 1223, 46, 1223, 1223, 230, 1223, 
-  1223, 1223, 1223, 20, 1223, 1223, 70, 73, 18, 21, 
-  17, 102, -172, 1223, 65, -47, -172, -172, 1223, -172, 
-  -172, -172, 1223, 56, 1223, -92, 1223, 1223, -112, 1223, 
-  51, 72, 1223, -172, -172, 892, -172, 1223, -26, -172, 
-  106, -48, -172, -172, 8, -172, -172, 69, -172, 2886, 
-  -172, -172, 71, 1223, 2219, -172, -172, -172, -40, -109, 
-  1223, -172, -35, 1223, -172, -172, -172, -172, -172, -172, 
-  -172, -172, 727, 53, -172, -172, -25, -51, 1223, -90, 
-  -172, 727, -172, -172, -39, 110, -172, 4556, -172, -172, 
-  -123, 1223, -117, -2, -104, 3721, -60, -61, 4389, 1887, 
-  -172, -172, -63, -65, -172, -172, -172, -172, 61, -172, 
-  -122, -172, -172, -172, -172, -172, 4055, -172, -59, -172, 
-  59, -172, -172, -172, -172, -135, -70, 1223, 60, -105, 
-  -172, 3554, -172, -172, 3387, -56, -172, -106, -172, 106, 
-  -108, -50, 727, 1223, 106, 3888, -172, -172, -172, -41, 
-  1223, -172, -172, 1223, 66, 3721, -172, -23, 3721, -172, 
-  -172, 4222, -172, -172, -172, 82, -172, 1223, 87, -52, 
-  3721, -172, 3721, -103, -172, 3387, -107, 3888, -172, -172, 
-  -172, -20, -172, 48, 1223, 2053, -172, 23, -75, 1223, 
-  -172, -9, 1223, -172, -172, 206, -172, -172, -172, -172, 
-  -172, -22, -172, 2552, 3053, 50, 29, -172, 1555, -172, 
-  -100, -57, -172, -68, -172, 2385, -172, -67, -172, 
+  3240, -173, -173, -173, -173, -173, 54, -173, -173, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, 248, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, -54, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 
+  -173, 47, 76, 43, -173, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, 36, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, 3240, 
+  -6, -72, -173, 110, 32, 5, 64, 166, 212, 189, 
+  566, -173, -173, -173, 37, 1064, -173, -173, -44, -173, 
+  -173, -173, -173, 6, 14, -173, 57, -36, -173, 19, 
+  -173, -173, -173, -173, 566, -73, -173, -173, -173, -11, 
+  2568, 2568, 400, -173, 2736, 732, 10, -173, -173, -14, 
+  -37, -173, 55, 1732, -173, -173, 1231, -173, -38, 1231, 
+  1231, -173, -173, -173, -173, -173, 62, 31, -173, -69, 
+  40, 30, -173, -173, 1398, -62, 67, -173, -28, -115, 
+  42, -27, -121, 7, 91, -173, 232, 25, -173, -173, 
+  1231, -173, -173, -173, -173, -173, 86, 188, 1231, -173, 
+  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 
+  -173, -173, 1231, -173, 1231, 1231, 17, 1231, 1231, 1231, 
+  -173, -173, -173, 16, 1231, 46, 1231, 1231, 232, 1231, 
+  1231, 1231, 1231, 20, 1231, 1231, 70, 74, 18, 21, 
+  15, 85, -173, 1231, 65, -47, -173, -173, 1231, -173, 
+  -173, -173, 1231, 56, 1231, -92, 1231, 1231, -112, 1231, 
+  51, 72, 1231, -173, -173, 898, -173, 1231, -26, -173, 
+  107, -48, -173, -173, 8, -173, -173, 69, -173, 2904, 
+  -173, -173, 71, 1231, 2233, -173, -173, -173, -40, -109, 
+  1231, -173, -35, 1231, -173, -173, -173, -173, -173, -173, 
+  -173, -173, 732, 53, -173, -173, -25, -51, 1231, -90, 
+  -173, 732, -173, -173, -39, 104, -173, 4584, -173, -173, 
+  -123, 1231, -117, -2, -104, 3744, -60, -61, 4416, 1899, 
+  -173, -173, -63, -65, -173, -173, -173, -173, 61, -173, 
+  -122, -173, -173, -173, -173, -173, 4080, -173, -59, -173, 
+  59, -173, -173, -173, -173, -135, -70, 1231, 60, -105, 
+  -173, 3576, -173, -173, 3408, -56, -173, -106, -173, 107, 
+  -108, -50, 732, 1231, 107, 3912, -173, -173, -173, -41, 
+  1231, -173, -173, 1231, 66, 3744, -173, -23, 3744, -173, 
+  -173, 4248, -173, -173, -173, 82, -173, 1231, 87, -52, 
+  3744, -173, 3744, -103, -173, 3408, -107, 3912, -173, -173, 
+  -173, -20, -173, 49, 1231, 2066, -173, 23, -75, 1231, 
+  -173, -9, 1231, -173, -173, 171, -173, -173, -173, -173, 
+  -173, -22, -173, 2568, 3072, 50, 29, -173, 1565, -173, 
+  -100, -57, -173, -68, -173, 2400, -173, -67, -173, 
 
   124, -84, -84, -84, -84, -84, -84, -84, -84, -84, 
   -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, 
@@ -296,92 +296,76 @@ const short GLSLParserTable::action_info [] = {
   160, 138, 282, 151, 454, -19, 429, 234, 253, 134, 
   262, 284, 266, 139, 361, 208, 208, 208, 267, 327, 
   421, 224, 208, 258, 236, 284, 149, 272, 208, 224, 
-  236, 424, 224, 244, 244, 147, 244, 244, 208, 142, 
+  236, 244, 424, 224, 244, 147, 244, 244, 208, 142, 
   446, 244, 208, 208, 448, 307, 129, 308, 0, 227, 
-  150, 0, 0, 0, 293, 0, 0, 0, 227, 0, 
-  0, 0, 208, 425, 0, 26, 227, 306, 245, 245, 
-  0, 245, 245, 0, 0, 237, 245, 328, 0, 0, 
-  228, 237, 229, 148, 0, 0, 294, 143, 295, 228, 
-  239, 229, 0, 309, 130, 45, 0, 228, 274, 229, 
-  306, 449, 307, 0, 308, 225, 0, 0, 58, 140, 
-  0, 0, 369, 225, 240, 275, 225, 1, 395, 259, 
-  241, 0, 447, 0, 0, 0, 6, 285, 0, 7, 
-  0, 276, 0, 419, 0, 307, 422, 308, 209, 409, 
-  0, 288, 0, 0, 0, 0, 0, 0, 0, 242, 
-  309, 1, 131, 277, 406, 0, 1, 0, 0, 0, 
-  6, 0, 0, 7, 27, 6, 0, 0, 7, 211, 
-  0, 212, 0, 0, 0, 0, -124, 0, 0, 0, 
-  0, 0, 0, 309, -124, -124, 0, 0, -124, 0, 
-  0, 213, 0, -124, 0, -91, -124, 0, 27, 0, 
-  0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 
-  0, 214, 60, 61, 0, 0, -124, 0, 239, 0, 
-  0, 0, 0, -124, -124, 63, 0, 0, 0, 132, 
+  150, 274, 0, 0, 293, 0, 0, 0, 227, 227, 
+  0, 306, 0, 208, 425, 26, 245, 306, 275, 245, 
+  0, 245, 245, 239, 0, 237, 245, 328, 0, 0, 
+  228, 237, 229, 148, 276, 0, 294, 143, 295, 228, 
+  228, 229, 229, 309, 130, 45, 307, 240, 308, 0, 
+  0, 449, 307, 241, 308, 225, 277, 0, 58, 140, 
+  0, 1, 369, 225, 0, 0, 1, 225, 395, 259, 
+  6, 0, 447, 7, 0, 6, 0, 285, 7, 211, 
+  0, 212, 242, 419, 1, 0, 422, 0, 209, 409, 
+  0, 288, 0, 6, 309, 0, 7, 0, 0, 0, 
+  309, 213, 131, 0, 406, 0, 0, 1, 27, 0, 
+  0, 0, -91, 27, 0, 0, 6, 0, 0, 7, 
+  0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, -124, 0, 0, 0, 24, 0, 0, 
+  0, 215, -124, 0, 27, -124, 60, 61, 0, 0, 
+  0, 60, 61, 0, 0, 0, 0, 0, 0, 63, 
+  239, 216, 217, 0, 63, 0, 218, 0, 0, 60, 
+  61, 0, 0, -124, 0, 0, 219, 0, 132, 0, 
+  -124, 0, 63, 0, 240, 0, 0, 0, 59, 87, 
+  241, 0, 60, 61, 87, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 102, 63, 220, 0, 0, 102, 
+  0, 0, 87, 0, 0, 0, 0, 0, 0, 242, 
+  0, 0, 0, 0, -124, 0, 83, 102, -124, -124, 
+  0, 0, 0, 221, 0, 87, 0, 0, 0, 0, 
   0, -124, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 215, 240, 0, 0, 0, 60, 61, 241, 0, 
-  0, 60, 61, 0, 0, 87, 0, 0, 0, 63, 
-  0, 216, 217, 0, 63, 0, 218, -124, 0, 0, 
-  102, -124, -124, 0, 0, -124, 219, 242, 0, -124, 
-  -124, 0, 0, 0, -124, 0, 0, 0, 0, 87, 
-  0, 0, -124, 0, 87, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 102, -124, 220, 0, 0, 102, 
-  0, 0, 0, -124, -124, 0, 0, 0, 0, 0, 
-  0, 0, -124, 0, 0, 0, 0, 0, 0, -124, 
-  0, 0, 0, 221, 0, 0, 0, -124, 0, 0, 
-  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
-  0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 24, 0, 0, 0, 0, 0, 0, 27, 
+  102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 
+  0, -124, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, -124, -124, 0, 0, 0, 
+  0, 0, 0, 0, -124, 0, 0, -124, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, -124, 0, 0, 0, 0, 
+  0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 59, 0, 0, 0, 60, 61, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, -124, 0, 0, 0, 
+  -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 
-  87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 
-  0, 3, 4, 5, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 
-  12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 
-  20, 21, 22, 23, 0, 0, 0, 0, 25, 0, 
-  0, 0, 0, 0, 0, 0, 0, 28, 0, 30, 
-  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
-  41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 46, 47, 48, 49, 50, 51, 52, 53, 
-  54, 55, 56, 57, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, -124, 0, 0, 0, 0, 0, 
+  0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, -124, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 64, 65, 66, 67, 
-  68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
-  78, 79, 80, 81, 0, 0, 0, 0, 84, 0, 
-  0, 0, 0, 85, 86, 0, 88, 89, 90, 91, 
-  92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 
-  0, 103, 104, 105, 0, 106, 0, 0, 0, 0, 
-  0, 0, 0, 0, 2, 0, 3, 4, 5, 0, 
+  0, 0, 0, 2, 0, 3, 4, 5, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
-  17, 18, 19, 0, 0, 20, 21, 22, 23, 0, 
-  0, 0, 0, 25, 0, 0, 26, 0, 0, 0, 
-  0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 
-  36, 37, 38, 39, 40, 41, 42, 43, 0, 0, 
-  0, 0, 0, 0, 0, 0, 45, 46, 47, 48, 
-  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 
+  8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
+  18, 19, 0, 0, 20, 21, 22, 23, 0, 0, 
+  0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 
+  0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 
+  37, 38, 39, 40, 41, 42, 43, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 46, 47, 48, 49, 
+  50, 51, 52, 53, 54, 55, 56, 57, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 
-  73, 74, 75, 76, 77, 78, 79, 80, 81, 0, 
-  0, 0, 0, 84, 0, 0, 0, 0, 85, 86, 
-  0, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
-  97, 98, 99, 100, 101, 0, 103, 104, 105, 0, 
-  106, 0, 0, 0, 0, 0, 0, 0, 0, 2, 
+  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 
+  74, 75, 76, 77, 78, 79, 80, 81, 0, 0, 
+  0, 0, 84, 0, 0, 0, 0, 85, 86, 0, 
+  88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 
+  98, 99, 100, 101, 0, 103, 104, 105, 0, 106, 
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 
   0, 3, 4, 5, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 
   12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 
   20, 21, 22, 23, 0, 0, 0, 0, 25, 0, 
-  0, 26, 278, 0, 0, 0, 0, 28, 0, 30, 
+  0, 26, 0, 0, 0, 0, 0, 28, 0, 30, 
   31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
   41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 
   0, 45, 46, 47, 48, 49, 50, 51, 52, 53, 
@@ -393,73 +377,40 @@ const short GLSLParserTable::action_info [] = {
   0, 0, 0, 85, 86, 0, 88, 89, 90, 91, 
   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 
   0, 103, 104, 105, 0, 106, 0, 0, 0, 0, 
-  0, 0, 0, 0, 2, 0, 3, 4, 5, 0, 
+  0, 0, 0, 0, 0, 2, 0, 3, 4, 5, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
-  17, 18, 19, 0, 0, 20, 21, 22, 23, 0, 
-  0, 0, 0, 25, 0, 0, 26, 441, 0, 0, 
-  0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 
-  36, 37, 38, 39, 40, 41, 42, 43, 0, 0, 
-  0, 0, 0, 0, 0, 0, 45, 46, 47, 48, 
-  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 
+  0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 
+  16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 
+  0, 0, 0, 0, 25, 0, 0, 26, 278, 0, 
+  0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 
+  35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 
+  0, 0, 0, 0, 0, 0, 0, 45, 46, 47, 
+  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 
+  58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 
+  72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 
+  0, 0, 0, 0, 84, 0, 0, 0, 0, 85, 
+  86, 0, 88, 89, 90, 91, 92, 93, 94, 95, 
+  96, 97, 98, 99, 100, 101, 0, 103, 104, 105, 
+  0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2, 0, 3, 4, 5, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 
+  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
+  0, 0, 20, 21, 22, 23, 0, 0, 0, 0, 
+  25, 0, 0, 26, 441, 0, 0, 0, 0, 28, 
+  0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
+  39, 40, 41, 42, 43, 0, 0, 0, 0, 0, 
+  0, 0, 0, 45, 46, 47, 48, 49, 50, 51, 
+  52, 53, 54, 55, 56, 57, 58, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 
-  73, 74, 75, 76, 77, 78, 79, 80, 81, 442, 
-  0, 0, 0, 84, 0, 0, 0, 0, 85, 86, 
-  0, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
-  97, 98, 99, 100, 101, 0, 103, 104, 105, 0, 
-  106, 0, 0, 0, 0, 0, 0, 0, 0, 164, 
-  2, 0, 3, 4, 5, 0, 0, 0, 0, 0, 
-  0, 0, 165, 166, 0, 0, 0, 8, 9, 10, 
-  11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 
-  0, 20, 21, 22, 23, 0, 0, 0, 0, 25, 
-  0, 0, 26, 168, 0, 0, 169, 0, 28, 0, 
-  30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
-  40, 41, 42, 43, 0, 0, 0, 0, 0, 0, 
-  170, 0, 45, 46, 47, 48, 49, 50, 51, 52, 
-  53, 54, 55, 56, 57, 58, 0, 0, 0, 0, 
-  171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 64, 65, 66, 
-  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 
-  77, 78, 79, 80, 81, 0, 0, 0, 0, 84, 
-  0, 0, 0, 174, 85, 86, 0, 88, 89, 90, 
-  91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 
-  101, 0, 103, 104, 105, 0, 106, 0, 0, 0, 
-  175, 167, 0, 0, 0, 164, 2, 0, 3, 4, 
-  5, 0, 0, 0, 0, 0, 0, 0, 165, 166, 
-  0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 
-  15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 
-  23, 0, 0, 0, 0, 25, 0, 0, 26, 168, 
-  0, 0, 169, 0, 28, 0, 30, 31, 32, 33, 
-  34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 
-  0, 0, 0, 0, 0, 0, 170, 0, 45, 46, 
-  47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
-  57, 58, 0, 0, 0, 0, 171, 0, 0, 0, 
-  0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 64, 65, 66, 67, 68, 69, 70, 
-  71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 
-  81, 0, 0, 0, 0, 84, 0, 0, 0, 174, 
-  85, 86, 0, 88, 89, 90, 91, 92, 93, 94, 
-  95, 96, 97, 98, 99, 100, 101, 0, 103, 104, 
-  105, 0, 255, 0, 0, 0, 175, 167, 0, 0, 
-  0, 164, 2, 0, 3, 4, 5, 0, 0, 0, 
-  0, 0, 0, 0, 165, 166, 0, 0, 0, 8, 
-  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
-  19, 0, 0, 20, 21, 22, 23, 0, 0, 0, 
-  0, 25, 0, 0, 26, 168, 0, 0, 169, 0, 
-  28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 
-  38, 39, 40, 41, 42, 43, 0, 0, 0, 0, 
-  0, 0, 170, 0, 45, 46, 47, 48, 49, 50, 
-  51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 
-  0, 0, 171, 0, 0, 0, 0, 0, 172, 0, 
-  0, 0, 0, 0, 0, 450, 0, 0, 0, 64, 
-  65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 
-  75, 76, 77, 78, 79, 80, 81, 0, 0, 0, 
-  0, 84, 0, 0, 0, 174, 85, 86, 0, 88, 
-  89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 
-  99, 100, 101, 0, 103, 104, 105, 0, 106, 0, 
-  0, 0, 175, 167, 0, 0, 0, 164, 2, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 
+  66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 
+  76, 77, 78, 79, 80, 81, 442, 0, 0, 0, 
+  84, 0, 0, 0, 0, 85, 86, 0, 88, 89, 
+  90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 
+  100, 101, 0, 103, 104, 105, 0, 106, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 164, 2, 0, 
   3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 
   165, 166, 0, 0, 0, 8, 9, 10, 11, 12, 
   13, 14, 15, 16, 17, 18, 19, 0, 0, 20, 
@@ -470,62 +421,29 @@ const short GLSLParserTable::action_info [] = {
   45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 
   55, 56, 57, 58, 0, 0, 0, 0, 171, 0, 
   0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 
-  0, 173, 0, 0, 0, 64, 65, 66, 67, 68, 
+  0, 0, 0, 0, 0, 64, 65, 66, 67, 68, 
   69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 
   79, 80, 81, 0, 0, 0, 0, 84, 0, 0, 
   0, 174, 85, 86, 0, 88, 89, 90, 91, 92, 
   93, 94, 95, 96, 97, 98, 99, 100, 101, 0, 
   103, 104, 105, 0, 106, 0, 0, 0, 175, 167, 
-  0, 0, 0, 164, 2, 0, 3, 4, 5, 0, 
-  0, 0, 0, 0, 0, 0, 165, 166, 0, 0, 
-  0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
-  17, 18, 19, 0, 0, 20, 21, 22, 23, 0, 
-  0, 0, 0, 25, 0, 0, 26, 168, 0, 0, 
-  169, 0, 28, 0, 30, 31, 32, 33, 34, 35, 
-  36, 37, 38, 39, 40, 41, 42, 43, 0, 0, 
-  0, 0, 0, 0, 170, 0, 45, 46, 47, 48, 
-  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 
-  0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 
-  172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 
-  73, 74, 75, 76, 77, 78, 79, 80, 81, 404, 
-  0, 0, 0, 84, 0, 0, 0, 174, 85, 86, 
-  0, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
-  97, 98, 99, 100, 101, 0, 103, 104, 105, 0, 
-  106, 0, 0, 0, 175, 167, 0, 0, 0, 164, 
-  2, 0, 3, 4, 5, 0, 0, 0, 0, 0, 
-  0, 0, 165, 166, 0, 0, 0, 8, 9, 10, 
-  11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 
-  0, 20, 21, 22, 23, 0, 0, 0, 0, 25, 
-  0, 0, 26, 168, 0, 0, 169, 0, 28, 0, 
-  30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
-  40, 41, 42, 43, 0, 0, 0, 0, 0, 0, 
-  170, 0, 45, 46, 47, 48, 49, 50, 51, 52, 
-  53, 54, 55, 56, 57, 58, 0, 0, 0, 0, 
-  171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 
-  0, 0, 0, 427, 0, 0, 0, 64, 65, 66, 
-  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 
-  77, 78, 79, 80, 81, 0, 0, 0, 0, 84, 
-  0, 0, 0, 174, 85, 86, 0, 88, 89, 90, 
-  91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 
-  101, 0, 103, 104, 105, 0, 106, 0, 0, 0, 
-  175, 167, 0, 0, 0, 164, 2, 0, 3, 4, 
-  5, 0, 0, 0, 0, 0, 0, 0, 165, 166, 
-  0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 
-  15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 
-  23, 0, 0, 0, 0, 25, 0, 0, 26, 168, 
-  0, 0, 169, 0, 28, 0, 30, 31, 32, 33, 
-  34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 
-  0, 0, 0, 0, 0, 0, 170, 0, 45, 46, 
-  47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
-  57, 58, 0, 0, 0, 0, 171, 0, 0, 0, 
-  0, 0, 172, 0, 0, 0, 0, 0, 0, 298, 
-  0, 0, 0, 64, 65, 66, 67, 68, 69, 70, 
-  71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 
-  81, 0, 0, 0, 0, 84, 0, 0, 0, 174, 
-  85, 86, 0, 88, 89, 90, 91, 92, 93, 94, 
-  95, 96, 97, 98, 99, 100, 101, 0, 103, 104, 
-  105, 0, 106, 0, 0, 0, 175, 167, 0, 0, 
+  0, 0, 0, 0, 164, 2, 0, 3, 4, 5, 
+  0, 0, 0, 0, 0, 0, 0, 165, 166, 0, 
+  0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 
+  16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 
+  0, 0, 0, 0, 25, 0, 0, 26, 168, 0, 
+  0, 169, 0, 28, 0, 30, 31, 32, 33, 34, 
+  35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 
+  0, 0, 0, 0, 0, 170, 0, 45, 46, 47, 
+  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 
+  58, 0, 0, 0, 0, 171, 0, 0, 0, 0, 
+  0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 
+  72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 
+  0, 0, 0, 0, 84, 0, 0, 0, 174, 85, 
+  86, 0, 88, 89, 90, 91, 92, 93, 94, 95, 
+  96, 97, 98, 99, 100, 101, 0, 103, 104, 105, 
+  0, 255, 0, 0, 0, 175, 167, 0, 0, 0, 
   0, 164, 2, 0, 3, 4, 5, 0, 0, 0, 
   0, 0, 0, 0, 165, 166, 0, 0, 0, 8, 
   9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
@@ -536,46 +454,113 @@ const short GLSLParserTable::action_info [] = {
   0, 0, 170, 0, 45, 46, 47, 48, 49, 50, 
   51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 
   0, 0, 171, 0, 0, 0, 0, 0, 172, 0, 
-  0, 0, 0, 0, 0, 456, 0, 0, 0, 64, 
+  0, 0, 0, 0, 0, 450, 0, 0, 0, 64, 
   65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 
   75, 76, 77, 78, 79, 80, 81, 0, 0, 0, 
   0, 84, 0, 0, 0, 174, 85, 86, 0, 88, 
   89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 
   99, 100, 101, 0, 103, 104, 105, 0, 106, 0, 
-  0, 0, 175, 167, 0, 0, 0, 1, 0, 2, 
-  0, 3, 4, 5, 0, 0, 6, 0, 0, 7, 
-  0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 
+  0, 0, 175, 167, 0, 0, 0, 0, 164, 2, 
+  0, 3, 4, 5, 0, 0, 0, 0, 0, 0, 
+  0, 165, 166, 0, 0, 0, 8, 9, 10, 11, 
   12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 
-  20, 21, 22, 23, 0, 0, 0, 24, 25, 0, 
-  0, 26, 0, 0, 27, 0, 0, 28, 152, 30, 
+  20, 21, 22, 23, 0, 0, 0, 0, 25, 0, 
+  0, 26, 168, 0, 0, 169, 0, 28, 0, 30, 
   31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
-  41, 42, 43, 44, 0, 0, 0, 0, 0, 0, 
+  41, 42, 43, 0, 0, 0, 0, 0, 0, 170, 
   0, 45, 46, 47, 48, 49, 50, 51, 52, 53, 
-  54, 55, 56, 57, 58, 0, 0, 0, 59, 0, 
-  0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 63, 64, 65, 66, 67, 
+  54, 55, 56, 57, 58, 0, 0, 0, 0, 171, 
+  0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 
+  0, 0, 173, 0, 0, 0, 64, 65, 66, 67, 
   68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
-  78, 79, 80, 81, 0, 0, 83, 0, 84, 0, 
-  0, 0, 0, 85, 86, 87, 88, 89, 90, 91, 
+  78, 79, 80, 81, 0, 0, 0, 0, 84, 0, 
+  0, 0, 174, 85, 86, 0, 88, 89, 90, 91, 
   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 
-  102, 103, 104, 105, 0, 106, 0, 0, 0, 0, 
-  0, 0, 0, 0, 1, 0, 2, 0, 3, 4, 
-  5, 0, 0, 6, 0, 0, 7, 0, 0, 0, 
+  0, 103, 104, 105, 0, 106, 0, 0, 0, 175, 
+  167, 0, 0, 0, 0, 164, 2, 0, 3, 4, 
+  5, 0, 0, 0, 0, 0, 0, 0, 165, 166, 
   0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 
   15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 
-  23, 0, 0, 0, 24, 25, 0, 0, 26, 0, 
-  0, 27, 0, 0, 28, 152, 30, 31, 32, 33, 
+  23, 0, 0, 0, 0, 25, 0, 0, 26, 168, 
+  0, 0, 169, 0, 28, 0, 30, 31, 32, 33, 
   34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 
-  44, 0, 0, 0, 0, 0, 0, 0, 45, 46, 
+  0, 0, 0, 0, 0, 0, 170, 0, 45, 46, 
   47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
-  57, 58, 0, 0, 0, 59, 0, 0, 0, 60, 
-  61, 0, 0, 0, 0, 0, 0, 0, 157, 0, 
-  0, 0, 63, 64, 65, 66, 67, 68, 69, 70, 
+  57, 58, 0, 0, 0, 0, 171, 0, 0, 0, 
+  0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 64, 65, 66, 67, 68, 69, 70, 
   71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 
-  81, 0, 0, 83, 0, 84, 0, 0, 0, 0, 
-  85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 
-  95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 
-  105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 
+  81, 404, 0, 0, 0, 84, 0, 0, 0, 174, 
+  85, 86, 0, 88, 89, 90, 91, 92, 93, 94, 
+  95, 96, 97, 98, 99, 100, 101, 0, 103, 104, 
+  105, 0, 106, 0, 0, 0, 175, 167, 0, 0, 
+  0, 0, 164, 2, 0, 3, 4, 5, 0, 0, 
+  0, 0, 0, 0, 0, 165, 166, 0, 0, 0, 
+  8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
+  18, 19, 0, 0, 20, 21, 22, 23, 0, 0, 
+  0, 0, 25, 0, 0, 26, 168, 0, 0, 169, 
+  0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 
+  37, 38, 39, 40, 41, 42, 43, 0, 0, 0, 
+  0, 0, 0, 170, 0, 45, 46, 47, 48, 49, 
+  50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 
+  0, 0, 0, 171, 0, 0, 0, 0, 0, 172, 
+  0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 
+  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 
+  74, 75, 76, 77, 78, 79, 80, 81, 0, 0, 
+  0, 0, 84, 0, 0, 0, 174, 85, 86, 0, 
+  88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 
+  98, 99, 100, 101, 0, 103, 104, 105, 0, 106, 
+  0, 0, 0, 175, 167, 0, 0, 0, 0, 164, 
+  2, 0, 3, 4, 5, 0, 0, 0, 0, 0, 
+  0, 0, 165, 166, 0, 0, 0, 8, 9, 10, 
+  11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 
+  0, 20, 21, 22, 23, 0, 0, 0, 0, 25, 
+  0, 0, 26, 168, 0, 0, 169, 0, 28, 0, 
+  30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
+  40, 41, 42, 43, 0, 0, 0, 0, 0, 0, 
+  170, 0, 45, 46, 47, 48, 49, 50, 51, 52, 
+  53, 54, 55, 56, 57, 58, 0, 0, 0, 0, 
+  171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 
+  0, 0, 0, 298, 0, 0, 0, 64, 65, 66, 
+  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 
+  77, 78, 79, 80, 81, 0, 0, 0, 0, 84, 
+  0, 0, 0, 174, 85, 86, 0, 88, 89, 90, 
+  91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 
+  101, 0, 103, 104, 105, 0, 106, 0, 0, 0, 
+  175, 167, 0, 0, 0, 0, 164, 2, 0, 3, 
+  4, 5, 0, 0, 0, 0, 0, 0, 0, 165, 
+  166, 0, 0, 0, 8, 9, 10, 11, 12, 13, 
+  14, 15, 16, 17, 18, 19, 0, 0, 20, 21, 
+  22, 23, 0, 0, 0, 0, 25, 0, 0, 26, 
+  168, 0, 0, 169, 0, 28, 0, 30, 31, 32, 
+  33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 
+  43, 0, 0, 0, 0, 0, 0, 170, 0, 45, 
+  46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 
+  56, 57, 58, 0, 0, 0, 0, 171, 0, 0, 
+  0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 
+  456, 0, 0, 0, 64, 65, 66, 67, 68, 69, 
+  70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 
+  80, 81, 0, 0, 0, 0, 84, 0, 0, 0, 
+  174, 85, 86, 0, 88, 89, 90, 91, 92, 93, 
+  94, 95, 96, 97, 98, 99, 100, 101, 0, 103, 
+  104, 105, 0, 106, 0, 0, 0, 175, 167, 0, 
+  0, 0, 0, 1, 0, 2, 0, 3, 4, 5, 
+  0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 
+  0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 
+  16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 
+  0, 0, 0, 24, 25, 0, 0, 26, 0, 0, 
+  27, 0, 0, 28, 152, 30, 31, 32, 33, 34, 
+  35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 
+  0, 0, 0, 0, 0, 0, 0, 45, 46, 47, 
+  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 
+  58, 0, 0, 0, 59, 0, 0, 0, 60, 61, 
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 
+  72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 
+  0, 0, 83, 0, 84, 0, 0, 0, 0, 85, 
+  86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 
+  96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 
+  0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 
   0, 1, 0, 2, 0, 3, 4, 5, 0, 0, 
   6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 
   8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
@@ -586,29 +571,46 @@ const short GLSLParserTable::action_info [] = {
   0, 0, 0, 0, 0, 45, 46, 47, 48, 49, 
   50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 
   0, 0, 59, 0, 0, 0, 60, 61, 0, 0, 
-  0, 0, 0, 0, 0, 290, 0, 0, 0, 63, 
+  0, 0, 0, 0, 0, 157, 0, 0, 0, 63, 
   64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 
   74, 75, 76, 77, 78, 79, 80, 81, 0, 0, 
   83, 0, 84, 0, 0, 0, 0, 85, 86, 87, 
   88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 
   98, 99, 100, 101, 102, 103, 104, 105, 0, 106, 
-  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-  2, 0, 3, 4, 5, 0, 0, 6, 0, 0, 
-  7, 0, 0, 0, 0, 0, 0, 8, 9, 10, 
-  11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 
-  0, 20, 21, 22, 23, 0, 0, 0, 24, 25, 
-  0, 0, 26, 0, 0, 27, 0, 0, 28, 152, 
-  30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
-  40, 41, 42, 43, 44, 0, 0, 0, 0, 0, 
-  0, 0, 45, 46, 47, 48, 49, 50, 51, 52, 
-  53, 54, 55, 56, 57, 58, 0, 0, 0, 59, 
-  0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 
-  0, 0, 445, 0, 0, 0, 63, 64, 65, 66, 
-  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 
-  77, 78, 79, 80, 81, 0, 0, 83, 0, 84, 
-  0, 0, 0, 0, 85, 86, 87, 88, 89, 90, 
-  91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 
-  101, 102, 103, 104, 105, 0, 106, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+  0, 2, 0, 3, 4, 5, 0, 0, 6, 0, 
+  0, 7, 0, 0, 0, 0, 0, 0, 8, 9, 
+  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
+  0, 0, 20, 21, 22, 23, 0, 0, 0, 24, 
+  25, 0, 0, 26, 0, 0, 27, 0, 0, 28, 
+  152, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
+  39, 40, 41, 42, 43, 44, 0, 0, 0, 0, 
+  0, 0, 0, 45, 46, 47, 48, 49, 50, 51, 
+  52, 53, 54, 55, 56, 57, 58, 0, 0, 0, 
+  59, 0, 0, 0, 60, 61, 0, 0, 0, 0, 
+  0, 0, 0, 290, 0, 0, 0, 63, 64, 65, 
+  66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 
+  76, 77, 78, 79, 80, 81, 0, 0, 83, 0, 
+  84, 0, 0, 0, 0, 85, 86, 87, 88, 89, 
+  90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 
+  100, 101, 102, 103, 104, 105, 0, 106, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 
+  0, 3, 4, 5, 0, 0, 6, 0, 0, 7, 
+  0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 
+  12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 
+  20, 21, 22, 23, 0, 0, 0, 24, 25, 0, 
+  0, 26, 0, 0, 27, 0, 0, 28, 152, 30, 
+  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
+  41, 42, 43, 44, 0, 0, 0, 0, 0, 0, 
+  0, 45, 46, 47, 48, 49, 50, 51, 52, 53, 
+  54, 55, 56, 57, 58, 0, 0, 0, 59, 0, 
+  0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 
+  0, 445, 0, 0, 0, 63, 64, 65, 66, 67, 
+  68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
+  78, 79, 80, 81, 0, 0, 83, 0, 84, 0, 
+  0, 0, 0, 85, 86, 87, 88, 89, 90, 91, 
+  92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 
+  102, 103, 104, 105, 0, 106, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 1, 0, 2, 0, 3, 
   4, 5, 0, 0, 6, 0, 0, 7, 0, 0, 
   0, 0, 0, 0, 8, 9, 10, 11, 12, 13, 
@@ -626,56 +628,90 @@ const short GLSLParserTable::action_info [] = {
   0, 85, 86, 87, 88, 89, 90, 91, 92, 93, 
   94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 
   104, 105, 0, 106, 0, 0, 0, 0, 0, 0, 
-  0, 0, 1, 164, 2, 0, 3, 4, 5, 0, 
-  0, 6, 0, 0, 7, 0, 165, 166, 0, 0, 
-  0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
-  17, 18, 19, 0, 0, 20, 21, 22, 23, 0, 
-  0, 0, 24, 25, 0, 0, 26, 168, 0, 27, 
-  169, 0, 28, 152, 30, 31, 32, 33, 34, 35, 
-  36, 37, 38, 39, 40, 41, 42, 43, 44, 0, 
-  0, 0, 0, 0, 170, 0, 45, 46, 47, 48, 
-  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 
-  0, 0, 0, 59, 171, 0, 0, 60, 61, 0, 
-  172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-  63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 
-  73, 74, 75, 76, 77, 78, 79, 80, 81, 0, 
-  0, 83, 0, 84, 0, 0, 0, 174, 85, 86, 
-  87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
-  97, 98, 99, 100, 101, 102, 103, 104, 105, 0, 
-  106, 0, 0, 0, 175, 167, 0, 0, 0, 1, 
-  164, 2, 0, 3, 4, 5, 0, 0, 6, 0, 
-  0, 7, 0, 165, 166, 0, 0, 0, 8, 9, 
+  0, 0, 0, 1, 164, 2, 0, 3, 4, 5, 
+  0, 0, 6, 0, 0, 7, 0, 165, 166, 0, 
+  0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 
+  16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 
+  0, 0, 0, 24, 25, 0, 0, 26, 168, 0, 
+  27, 169, 0, 28, 152, 30, 31, 32, 33, 34, 
+  35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 
+  0, 0, 0, 0, 0, 170, 0, 45, 46, 47, 
+  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 
+  58, 0, 0, 0, 59, 171, 0, 0, 60, 61, 
+  0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 
+  72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 
+  0, 0, 83, 0, 84, 0, 0, 0, 174, 85, 
+  86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 
+  96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 
+  0, 106, 0, 0, 0, 175, 167, 0, 0, 0, 
+  0, 1, 164, 2, 0, 3, 4, 5, 0, 0, 
+  6, 0, 0, 7, 0, 165, 166, 0, 0, 0, 
+  8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
+  18, 19, 0, 0, 20, 21, 22, 23, 0, 0, 
+  0, 24, 25, 0, 0, 26, 168, 0, 27, 169, 
+  0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 
+  37, 38, 39, 40, 41, 42, 43, 44, 0, 0, 
+  0, 0, 0, 170, 0, 45, 46, 47, 48, 49, 
+  50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 
+  0, 0, 59, 171, 0, 0, 60, 61, 0, 172, 
+  62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 
+  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 
+  74, 75, 76, 77, 78, 79, 80, 81, 341, 0, 
+  83, 0, 84, 0, 0, 0, 174, 85, 86, 87, 
+  88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 
+  98, 99, 100, 101, 102, 103, 104, 105, 0, 106, 
+  0, 0, 0, 175, 167, 0, 0, 0, 0, 1, 
+  164, 2, 330, 3, 4, 5, 0, 331, 6, 0, 
+  0, 7, 332, 165, 166, 333, 334, 0, 8, 9, 
   10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
-  0, 0, 20, 21, 22, 23, 0, 0, 0, 24, 
-  25, 0, 0, 26, 168, 0, 27, 169, 0, 28, 
+  335, 0, 20, 21, 22, 23, 0, 0, 0, 24, 
+  25, 336, 0, 26, 168, 337, 27, 169, 0, 28, 
   29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
-  39, 40, 41, 42, 43, 44, 0, 0, 0, 0, 
+  39, 40, 41, 42, 43, 44, 0, 0, 338, 0, 
   0, 170, 0, 45, 46, 47, 48, 49, 50, 51, 
   52, 53, 54, 55, 56, 57, 58, 0, 0, 0, 
   59, 171, 0, 0, 60, 61, 0, 172, 62, 0, 
-  0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 
+  339, 0, 0, 0, 0, 0, 0, 63, 64, 65, 
   66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 
   76, 77, 78, 79, 80, 81, 341, 0, 83, 0, 
-  84, 0, 0, 0, 174, 85, 86, 87, 88, 89, 
+  84, 0, 0, 342, 174, 85, 86, 87, 88, 89, 
   90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 
-  100, 101, 102, 103, 104, 105, 0, 106, 0, 0, 
-  0, 175, 167, 0, 0, 0, 1, 164, 2, 330, 
-  3, 4, 5, 0, 331, 6, 0, 0, 7, 332, 
-  165, 166, 333, 334, 0, 8, 9, 10, 11, 12, 
-  13, 14, 15, 16, 17, 18, 19, 335, 0, 20, 
-  21, 22, 23, 0, 0, 0, 24, 25, 336, 0, 
-  26, 168, 337, 27, 169, 0, 28, 29, 30, 31, 
-  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 
-  42, 43, 44, 0, 0, 338, 0, 0, 170, 0, 
-  45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 
-  55, 56, 57, 58, 0, 0, 0, 59, 171, 0, 
-  0, 60, 61, 0, 172, 62, 0, 339, 0, 0, 
-  0, 0, 0, 0, 63, 64, 65, 66, 67, 68, 
-  69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 
-  79, 80, 81, 341, 0, 83, 0, 84, 0, 0, 
-  342, 174, 85, 86, 87, 88, 89, 90, 91, 92, 
-  93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 
-  103, 104, 105, 0, 106, 343, 0, 0, 175, 167, 
+  100, 101, 102, 103, 104, 105, 0, 106, 343, 0, 
+  0, 175, 167, 0, 0, 0, 0, 1, 164, 2, 
+  330, 3, 4, 5, 0, 331, 6, 0, 0, 7, 
+  332, 165, 166, 333, 334, 0, 8, 9, 10, 11, 
+  12, 13, 14, 15, 16, 17, 18, 19, 335, 0, 
+  20, 21, 22, 23, 0, 0, 0, 24, 25, 336, 
+  0, 26, 168, 337, 27, 169, 0, 28, 29, 30, 
+  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
+  41, 42, 43, 44, 0, 0, 327, 0, 0, 170, 
+  0, 45, 46, 47, 48, 49, 50, 51, 52, 53, 
+  54, 55, 56, 57, 58, 0, 0, 0, 59, 171, 
+  0, 0, 60, 61, 0, 172, 62, 0, 339, 0, 
+  0, 0, 0, 0, 0, 63, 64, 65, 66, 67, 
+  68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
+  78, 79, 80, 81, 341, 0, 83, 0, 84, 0, 
+  0, 342, 174, 85, 86, 87, 88, 89, 90, 91, 
+  92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 
+  102, 103, 104, 105, 0, 106, 343, 0, 0, 175, 
+  167, 0, 0, 0, 0, 1, 164, 2, 330, 3, 
+  4, 5, 0, 331, 6, 0, 0, 7, 332, 165, 
+  166, 333, 334, 0, 8, 9, 10, 11, 12, 13, 
+  14, 15, 16, 17, 18, 19, 335, 0, 20, 21, 
+  22, 23, 0, 0, 0, 24, 25, 336, 0, 26, 
+  168, 337, 27, 169, 0, 28, 29, 30, 31, 32, 
+  33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 
+  43, 44, 0, 0, 338, 0, 0, 170, 0, 45, 
+  46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 
+  56, 57, 58, 0, 0, 0, 59, 171, 0, 0, 
+  60, 61, 0, 172, 62, 0, 339, 0, 0, 420, 
+  0, 0, 0, 63, 64, 65, 66, 67, 68, 69, 
+  70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 
+  80, 81, 341, 0, 83, 0, 84, 0, 0, 342, 
+  174, 85, 86, 87, 88, 89, 90, 91, 92, 93, 
+  94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 
+  104, 105, 0, 106, 343, 0, 0, 175, 167, 0, 
   0, 0, 0, 1, 164, 2, 330, 3, 4, 5, 
   0, 331, 6, 0, 0, 7, 332, 165, 166, 333, 
   334, 0, 8, 9, 10, 11, 12, 13, 14, 15, 
@@ -683,66 +719,16 @@ const short GLSLParserTable::action_info [] = {
   0, 0, 0, 24, 25, 336, 0, 26, 168, 337, 
   27, 169, 0, 28, 29, 30, 31, 32, 33, 34, 
   35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 
-  0, 0, 327, 0, 0, 170, 0, 45, 46, 47, 
+  0, 0, 338, 0, 0, 170, 0, 45, 46, 47, 
   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 
   58, 0, 0, 0, 59, 171, 0, 0, 60, 61, 
-  0, 172, 62, 0, 339, 0, 0, 0, 0, 0, 
+  0, 172, 62, 0, 339, 0, 0, 402, 0, 0, 
   0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 
   72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 
   341, 0, 83, 0, 84, 0, 0, 342, 174, 85, 
   86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 
   96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 
   0, 106, 343, 0, 0, 175, 167, 0, 0, 0, 
-  1, 164, 2, 330, 3, 4, 5, 0, 331, 6, 
-  0, 0, 7, 332, 165, 166, 333, 334, 0, 8, 
-  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
-  19, 335, 0, 20, 21, 22, 23, 0, 0, 0, 
-  24, 25, 336, 0, 26, 168, 337, 27, 169, 0, 
-  28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 
-  38, 39, 40, 41, 42, 43, 44, 0, 0, 338, 
-  0, 0, 170, 0, 45, 46, 47, 48, 49, 50, 
-  51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 
-  0, 59, 171, 0, 0, 60, 61, 0, 172, 62, 
-  0, 339, 0, 0, 420, 0, 0, 0, 63, 64, 
-  65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 
-  75, 76, 77, 78, 79, 80, 81, 341, 0, 83, 
-  0, 84, 0, 0, 342, 174, 85, 86, 87, 88, 
-  89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 
-  99, 100, 101, 102, 103, 104, 105, 0, 106, 343, 
-  0, 0, 175, 167, 0, 0, 0, 1, 164, 2, 
-  330, 3, 4, 5, 0, 331, 6, 0, 0, 7, 
-  332, 165, 166, 333, 334, 0, 8, 9, 10, 11, 
-  12, 13, 14, 15, 16, 17, 18, 19, 335, 0, 
-  20, 21, 22, 23, 0, 0, 0, 24, 25, 336, 
-  0, 26, 168, 337, 27, 169, 0, 28, 29, 30, 
-  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
-  41, 42, 43, 44, 0, 0, 338, 0, 0, 170, 
-  0, 45, 46, 47, 48, 49, 50, 51, 52, 53, 
-  54, 55, 56, 57, 58, 0, 0, 0, 59, 171, 
-  0, 0, 60, 61, 0, 172, 62, 0, 339, 0, 
-  0, 402, 0, 0, 0, 63, 64, 65, 66, 67, 
-  68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
-  78, 79, 80, 81, 341, 0, 83, 0, 84, 0, 
-  0, 342, 174, 85, 86, 87, 88, 89, 90, 91, 
-  92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 
-  102, 103, 104, 105, 0, 106, 343, 0, 0, 175, 
-  167, 0, 0, 0, 1, 164, 2, 330, 3, 4, 
-  5, 0, 331, 6, 0, 0, 7, 332, 165, 166, 
-  333, 334, 0, 8, 9, 10, 11, 12, 13, 14, 
-  15, 16, 17, 18, 19, 335, 0, 20, 21, 22, 
-  23, 0, 0, 0, 24, 25, 336, 0, 26, 168, 
-  337, 27, 169, 0, 28, 29, 30, 31, 32, 33, 
-  34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 
-  44, 0, 0, 338, 0, 0, 170, 0, 45, 46, 
-  47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
-  57, 58, 0, 0, 0, 59, 171, 0, 0, 60, 
-  61, 0, 172, 62, 0, 339, 0, 0, 400, 0, 
-  0, 0, 63, 64, 65, 66, 67, 68, 69, 70, 
-  71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 
-  81, 341, 0, 83, 0, 84, 0, 0, 342, 174, 
-  85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 
-  95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 
-  105, 0, 106, 343, 0, 0, 175, 167, 0, 0, 
   0, 1, 164, 2, 330, 3, 4, 5, 0, 331, 
   6, 0, 0, 7, 332, 165, 166, 333, 334, 0, 
   8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
@@ -753,17 +739,34 @@ const short GLSLParserTable::action_info [] = {
   338, 0, 0, 170, 0, 45, 46, 47, 48, 49, 
   50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 
   0, 0, 59, 171, 0, 0, 60, 61, 0, 172, 
-  62, 0, 339, 0, 0, 340, 0, 0, 0, 63, 
+  62, 0, 339, 0, 0, 400, 0, 0, 0, 63, 
   64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 
   74, 75, 76, 77, 78, 79, 80, 81, 341, 0, 
   83, 0, 84, 0, 0, 342, 174, 85, 86, 87, 
   88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 
   98, 99, 100, 101, 102, 103, 104, 105, 0, 106, 
-  343, 0, 0, 175, 167, 0, 0, 0, 
-
-  384, 437, 394, 392, 273, 232, 279, 434, 280, 392, 
-  439, 283, 296, 256, 210, 438, 223, 141, 231, 271, 
-  260, 230, 286, 358, 360, 326, 159, 405, 145, 368, 
+  343, 0, 0, 175, 167, 0, 0, 0, 0, 1, 
+  164, 2, 330, 3, 4, 5, 0, 331, 6, 0, 
+  0, 7, 332, 165, 166, 333, 334, 0, 8, 9, 
+  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
+  335, 0, 20, 21, 22, 23, 0, 0, 0, 24, 
+  25, 336, 0, 26, 168, 337, 27, 169, 0, 28, 
+  29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
+  39, 40, 41, 42, 43, 44, 0, 0, 338, 0, 
+  0, 170, 0, 45, 46, 47, 48, 49, 50, 51, 
+  52, 53, 54, 55, 56, 57, 58, 0, 0, 0, 
+  59, 171, 0, 0, 60, 61, 0, 172, 62, 0, 
+  339, 0, 0, 340, 0, 0, 0, 63, 64, 65, 
+  66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 
+  76, 77, 78, 79, 80, 81, 341, 0, 83, 0, 
+  84, 0, 0, 342, 174, 85, 86, 87, 88, 89, 
+  90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 
+  100, 101, 102, 103, 104, 105, 0, 106, 343, 0, 
+  0, 175, 167, 0, 0, 0, 0, 
+
+  384, 437, 394, 392, 273, 232, 279, 434, 280, 392, 
+  439, 283, 296, 256, 210, 438, 223, 141, 231, 271, 
+  260, 230, 286, 358, 360, 326, 159, 405, 145, 368, 
   206, 316, 321, 202, 329, 162, 0, 203, 199, 0, 
   199, 144, 156, 251, 199, 296, 235, 296, 296, 238, 
   0, 296, 199, 199, 233, 199, 199, 226, 199, 247, 
@@ -796,92 +799,76 @@ const short GLSLParserTable::action_check [] = {
   50, 97, 110, 74, 132, 112, 43, 2, 12, 50, 
   162, 16, 99, 16, 15, 16, 16, 16, 105, 74, 
   16, 19, 16, 16, 44, 16, 50, 15, 16, 19, 
-  44, 43, 19, 76, 76, 52, 76, 76, 16, 52, 
+  44, 76, 43, 19, 76, 52, 76, 76, 16, 52, 
   50, 76, 16, 16, 75, 52, 52, 54, -1, 102, 
-  74, -1, -1, -1, 43, -1, -1, -1, 102, -1, 
-  -1, -1, 16, 75, -1, 49, 102, 17, 111, 111, 
-  -1, 111, 111, -1, -1, 95, 111, 132, -1, -1, 
-  133, 95, 135, 100, -1, -1, 75, 100, 77, 133, 
-  48, 135, -1, 100, 100, 79, -1, 133, 20, 135, 
-  17, 132, 52, -1, 54, 103, -1, -1, 92, 112, 
-  -1, -1, 112, 103, 72, 37, 103, 5, 112, 112, 
-  78, -1, 132, -1, -1, -1, 14, 132, -1, 17, 
-  -1, 53, -1, 132, -1, 52, 132, 54, 112, 112, 
-  -1, 132, -1, -1, -1, -1, -1, -1, -1, 107, 
-  100, 5, 158, 75, 132, -1, 5, -1, -1, -1, 
-  14, -1, -1, 17, 52, 14, -1, -1, 17, 1, 
-  -1, 3, -1, -1, -1, -1, 5, -1, -1, -1, 
-  -1, -1, -1, 100, 5, 14, -1, -1, 17, -1, 
-  -1, 23, -1, 14, -1, 112, 17, -1, 52, -1, 
-  -1, -1, -1, 52, -1, -1, -1, -1, -1, -1, 
-  -1, 43, 100, 101, -1, -1, 45, -1, 48, -1, 
-  -1, -1, -1, 52, 45, 113, -1, -1, -1, 50, 
+  74, 20, -1, -1, 43, -1, -1, -1, 102, 102, 
+  -1, 17, -1, 16, 75, 49, 111, 17, 37, 111, 
+  -1, 111, 111, 48, -1, 95, 111, 132, -1, -1, 
+  133, 95, 135, 100, 53, -1, 75, 100, 77, 133, 
+  133, 135, 135, 100, 100, 79, 52, 72, 54, -1, 
+  -1, 132, 52, 78, 54, 103, 75, -1, 92, 112, 
+  -1, 5, 112, 103, -1, -1, 5, 103, 112, 112, 
+  14, -1, 132, 17, -1, 14, -1, 132, 17, 1, 
+  -1, 3, 107, 132, 5, -1, 132, -1, 112, 112, 
+  -1, 132, -1, 14, 100, -1, 17, -1, -1, -1, 
+  100, 23, 158, -1, 132, -1, -1, 5, 52, -1, 
+  -1, -1, 112, 52, -1, -1, 14, -1, -1, 17, 
+  -1, 43, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 73, 72, -1, -1, -1, 100, 101, 78, -1, 
-  -1, 100, 101, -1, -1, 143, -1, -1, -1, 113, 
-  -1, 93, 94, -1, 113, -1, 98, 96, -1, -1, 
-  158, 100, 101, -1, -1, 96, 108, 107, -1, 100, 
-  101, -1, -1, -1, 113, -1, -1, -1, -1, 143, 
-  -1, -1, 113, -1, 143, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 158, 134, 138, -1, -1, 158, 
-  -1, -1, -1, 134, 143, -1, -1, -1, -1, -1, 
-  -1, -1, 143, -1, -1, -1, -1, -1, -1, 158, 
-  -1, -1, -1, 165, -1, -1, -1, 158, -1, -1, 
-  -1, -1, 5, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 14, -1, -1, 17, -1, -1, -1, -1, -1, 
+  -1, -1, -1, 5, -1, -1, -1, 45, -1, -1, 
+  -1, 73, 14, -1, 52, 17, 100, 101, -1, -1, 
+  -1, 100, 101, -1, -1, -1, -1, -1, -1, 113, 
+  48, 93, 94, -1, 113, -1, 98, -1, -1, 100, 
+  101, -1, -1, 45, -1, -1, 108, -1, 50, -1, 
+  52, -1, 113, -1, 72, -1, -1, -1, 96, 143, 
+  78, -1, 100, 101, 143, -1, -1, -1, -1, -1, 
+  -1, -1, -1, -1, 158, 113, 138, -1, -1, 158, 
+  -1, -1, 143, -1, -1, -1, -1, -1, -1, 107, 
+  -1, -1, -1, -1, 96, -1, 134, 158, 100, 101, 
+  -1, -1, -1, 165, -1, 143, -1, -1, -1, -1, 
+  -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, 
+  158, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, 134, -1, -1, -1, -1, -1, -1, -1, 
+  -1, 143, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, -1, -1, -1, 5, 158, -1, -1, -1, 
+  -1, -1, -1, -1, 14, -1, -1, 17, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 45, -1, -1, -1, -1, -1, -1, 52, 
+  -1, -1, -1, -1, -1, 45, -1, -1, -1, -1, 
+  -1, -1, 52, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, -1, -1, -1, -1, 96, -1, -1, -1, 
+  100, 101, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, -1, 113, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 96, -1, -1, -1, 100, 101, -1, 
+  -1, -1, -1, -1, 134, -1, -1, -1, -1, -1, 
+  -1, -1, -1, 143, -1, -1, -1, -1, -1, -1, 
+  -1, -1, -1, -1, -1, -1, -1, -1, 158, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  113, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, -1, 7, -1, 9, 10, 11, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 134, -1, -1, -1, -1, -1, -1, -1, -1, 
-  143, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 158, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 
-  -1, 9, 10, 11, -1, -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, 
-  38, 39, 40, 41, -1, -1, -1, -1, 46, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 55, -1, 57, 
-  58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
-  68, 69, 70, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, 
-  88, 89, 90, 91, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 114, 115, 116, 117, 
-  118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 
-  128, 129, 130, 131, -1, -1, -1, -1, 136, -1, 
-  -1, -1, -1, 141, 142, -1, 144, 145, 146, 147, 
-  148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 
-  -1, 159, 160, 161, -1, 163, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7, -1, 9, 10, 11, -1, 
-  -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, 38, 39, 40, 41, -1, 
-  -1, -1, -1, 46, -1, -1, 49, -1, -1, -1, 
-  -1, -1, 55, -1, 57, 58, 59, 60, 61, 62, 
-  63, 64, 65, 66, 67, 68, 69, 70, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 79, 80, 81, 82, 
-  83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 
+  24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
+  34, 35, -1, -1, 38, 39, 40, 41, -1, -1, 
+  -1, -1, 46, -1, -1, -1, -1, -1, -1, -1, 
+  -1, 55, -1, 57, 58, 59, 60, 61, 62, 63, 
+  64, 65, 66, 67, 68, 69, 70, -1, -1, -1, 
+  -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, 
+  84, 85, 86, 87, 88, 89, 90, 91, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 114, 115, 116, 117, 118, 119, 120, 121, 122, 
-  123, 124, 125, 126, 127, 128, 129, 130, 131, -1, 
-  -1, -1, -1, 136, -1, -1, -1, -1, 141, 142, 
-  -1, 144, 145, 146, 147, 148, 149, 150, 151, 152, 
-  153, 154, 155, 156, 157, -1, 159, 160, 161, -1, 
-  163, -1, -1, -1, -1, -1, -1, -1, -1, 7, 
+  114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 
+  124, 125, 126, 127, 128, 129, 130, 131, -1, -1, 
+  -1, -1, 136, -1, -1, -1, -1, 141, 142, -1, 
+  144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 
+  154, 155, 156, 157, -1, 159, 160, 161, -1, 163, 
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 
   -1, 9, 10, 11, -1, -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, 
   38, 39, 40, 41, -1, -1, -1, -1, 46, -1, 
-  -1, 49, 50, -1, -1, -1, -1, 55, -1, 57, 
+  -1, 49, -1, -1, -1, -1, -1, 55, -1, 57, 
   58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
   68, 69, 70, -1, -1, -1, -1, -1, -1, -1, 
   -1, 79, 80, 81, 82, 83, 84, 85, 86, 87, 
@@ -893,73 +880,40 @@ const short GLSLParserTable::action_check [] = {
   -1, -1, -1, 141, 142, -1, 144, 145, 146, 147, 
   148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 
   -1, 159, 160, 161, -1, 163, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7, -1, 9, 10, 11, -1, 
+  -1, -1, -1, -1, -1, 7, -1, 9, 10, 11, 
   -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, 38, 39, 40, 41, -1, 
-  -1, -1, -1, 46, -1, -1, 49, 50, -1, -1, 
-  -1, -1, 55, -1, 57, 58, 59, 60, 61, 62, 
-  63, 64, 65, 66, 67, 68, 69, 70, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 79, 80, 81, 82, 
-  83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 
+  -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, 
+  32, 33, 34, 35, -1, -1, 38, 39, 40, 41, 
+  -1, -1, -1, -1, 46, -1, -1, 49, 50, -1, 
+  -1, -1, -1, 55, -1, 57, 58, 59, 60, 61, 
+  62, 63, 64, 65, 66, 67, 68, 69, 70, -1, 
+  -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, 
+  82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 
+  92, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, 114, 115, 116, 117, 118, 119, 120, 121, 
+  122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 
+  -1, -1, -1, -1, 136, -1, -1, -1, -1, 141, 
+  142, -1, 144, 145, 146, 147, 148, 149, 150, 151, 
+  152, 153, 154, 155, 156, 157, -1, 159, 160, 161, 
+  -1, 163, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, 7, -1, 9, 10, 11, -1, -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, 38, 39, 40, 41, -1, -1, -1, -1, 
+  46, -1, -1, 49, 50, -1, -1, -1, -1, 55, 
+  -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 
+  66, 67, 68, 69, 70, -1, -1, -1, -1, -1, 
+  -1, -1, -1, 79, 80, 81, 82, 83, 84, 85, 
+  86, 87, 88, 89, 90, 91, 92, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 114, 115, 116, 117, 118, 119, 120, 121, 122, 
-  123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 
-  -1, -1, -1, 136, -1, -1, -1, -1, 141, 142, 
-  -1, 144, 145, 146, 147, 148, 149, 150, 151, 152, 
-  153, 154, 155, 156, 157, -1, 159, 160, 161, -1, 
-  163, -1, -1, -1, -1, -1, -1, -1, -1, 6, 
-  7, -1, 9, 10, 11, -1, -1, -1, -1, -1, 
-  -1, -1, 19, 20, -1, -1, -1, 24, 25, 26, 
-  27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 
-  -1, 38, 39, 40, 41, -1, -1, -1, -1, 46, 
-  -1, -1, 49, 50, -1, -1, 53, -1, 55, -1, 
-  57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
-  67, 68, 69, 70, -1, -1, -1, -1, -1, -1, 
-  77, -1, 79, 80, 81, 82, 83, 84, 85, 86, 
-  87, 88, 89, 90, 91, 92, -1, -1, -1, -1, 
-  97, -1, -1, -1, -1, -1, 103, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 114, 115, 116, 
-  117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 
-  127, 128, 129, 130, 131, -1, -1, -1, -1, 136, 
-  -1, -1, -1, 140, 141, 142, -1, 144, 145, 146, 
-  147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 
-  157, -1, 159, 160, 161, -1, 163, -1, -1, -1, 
-  167, 168, -1, -1, -1, 6, 7, -1, 9, 10, 
-  11, -1, -1, -1, -1, -1, -1, -1, 19, 20, 
-  -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 
-  31, 32, 33, 34, 35, -1, -1, 38, 39, 40, 
-  41, -1, -1, -1, -1, 46, -1, -1, 49, 50, 
-  -1, -1, 53, -1, 55, -1, 57, 58, 59, 60, 
-  61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 
-  -1, -1, -1, -1, -1, -1, 77, -1, 79, 80, 
-  81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 
-  91, 92, -1, -1, -1, -1, 97, -1, -1, -1, 
-  -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 114, 115, 116, 117, 118, 119, 120, 
-  121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 
-  131, -1, -1, -1, -1, 136, -1, -1, -1, 140, 
-  141, 142, -1, 144, 145, 146, 147, 148, 149, 150, 
-  151, 152, 153, 154, 155, 156, 157, -1, 159, 160, 
-  161, -1, 163, -1, -1, -1, 167, 168, -1, -1, 
-  -1, 6, 7, -1, 9, 10, 11, -1, -1, -1, 
-  -1, -1, -1, -1, 19, 20, -1, -1, -1, 24, 
-  25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 
-  35, -1, -1, 38, 39, 40, 41, -1, -1, -1, 
-  -1, 46, -1, -1, 49, 50, -1, -1, 53, -1, 
-  55, -1, 57, 58, 59, 60, 61, 62, 63, 64, 
-  65, 66, 67, 68, 69, 70, -1, -1, -1, -1, 
-  -1, -1, 77, -1, 79, 80, 81, 82, 83, 84, 
-  85, 86, 87, 88, 89, 90, 91, 92, -1, -1, 
-  -1, -1, 97, -1, -1, -1, -1, -1, 103, -1, 
-  -1, -1, -1, -1, -1, 110, -1, -1, -1, 114, 
-  115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 
-  125, 126, 127, 128, 129, 130, 131, -1, -1, -1, 
-  -1, 136, -1, -1, -1, 140, 141, 142, -1, 144, 
-  145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 
-  155, 156, 157, -1, 159, 160, 161, -1, 163, -1, 
-  -1, -1, 167, 168, -1, -1, -1, 6, 7, -1, 
+  -1, -1, -1, -1, -1, -1, -1, -1, 114, 115, 
+  116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 
+  126, 127, 128, 129, 130, 131, 132, -1, -1, -1, 
+  136, -1, -1, -1, -1, 141, 142, -1, 144, 145, 
+  146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 
+  156, 157, -1, 159, 160, 161, -1, 163, -1, -1, 
+  -1, -1, -1, -1, -1, -1, -1, 6, 7, -1, 
   9, 10, 11, -1, -1, -1, -1, -1, -1, -1, 
   19, 20, -1, -1, -1, 24, 25, 26, 27, 28, 
   29, 30, 31, 32, 33, 34, 35, -1, -1, 38, 
@@ -970,62 +924,29 @@ const short GLSLParserTable::action_check [] = {
   79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 
   89, 90, 91, 92, -1, -1, -1, -1, 97, -1, 
   -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, 
-  -1, 110, -1, -1, -1, 114, 115, 116, 117, 118, 
+  -1, -1, -1, -1, -1, 114, 115, 116, 117, 118, 
   119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 
   129, 130, 131, -1, -1, -1, -1, 136, -1, -1, 
   -1, 140, 141, 142, -1, 144, 145, 146, 147, 148, 
   149, 150, 151, 152, 153, 154, 155, 156, 157, -1, 
   159, 160, 161, -1, 163, -1, -1, -1, 167, 168, 
-  -1, -1, -1, 6, 7, -1, 9, 10, 11, -1, 
-  -1, -1, -1, -1, -1, -1, 19, 20, -1, -1, 
-  -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 
-  33, 34, 35, -1, -1, 38, 39, 40, 41, -1, 
-  -1, -1, -1, 46, -1, -1, 49, 50, -1, -1, 
-  53, -1, 55, -1, 57, 58, 59, 60, 61, 62, 
-  63, 64, 65, 66, 67, 68, 69, 70, -1, -1, 
-  -1, -1, -1, -1, 77, -1, 79, 80, 81, 82, 
-  83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 
-  -1, -1, -1, -1, 97, -1, -1, -1, -1, -1, 
-  103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 114, 115, 116, 117, 118, 119, 120, 121, 122, 
-  123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 
-  -1, -1, -1, 136, -1, -1, -1, 140, 141, 142, 
-  -1, 144, 145, 146, 147, 148, 149, 150, 151, 152, 
-  153, 154, 155, 156, 157, -1, 159, 160, 161, -1, 
-  163, -1, -1, -1, 167, 168, -1, -1, -1, 6, 
-  7, -1, 9, 10, 11, -1, -1, -1, -1, -1, 
-  -1, -1, 19, 20, -1, -1, -1, 24, 25, 26, 
-  27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 
-  -1, 38, 39, 40, 41, -1, -1, -1, -1, 46, 
-  -1, -1, 49, 50, -1, -1, 53, -1, 55, -1, 
-  57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
-  67, 68, 69, 70, -1, -1, -1, -1, -1, -1, 
-  77, -1, 79, 80, 81, 82, 83, 84, 85, 86, 
-  87, 88, 89, 90, 91, 92, -1, -1, -1, -1, 
-  97, -1, -1, -1, -1, -1, 103, -1, -1, -1, 
-  -1, -1, -1, 110, -1, -1, -1, 114, 115, 116, 
-  117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 
-  127, 128, 129, 130, 131, -1, -1, -1, -1, 136, 
-  -1, -1, -1, 140, 141, 142, -1, 144, 145, 146, 
-  147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 
-  157, -1, 159, 160, 161, -1, 163, -1, -1, -1, 
-  167, 168, -1, -1, -1, 6, 7, -1, 9, 10, 
-  11, -1, -1, -1, -1, -1, -1, -1, 19, 20, 
-  -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 
-  31, 32, 33, 34, 35, -1, -1, 38, 39, 40, 
-  41, -1, -1, -1, -1, 46, -1, -1, 49, 50, 
-  -1, -1, 53, -1, 55, -1, 57, 58, 59, 60, 
-  61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 
-  -1, -1, -1, -1, -1, -1, 77, -1, 79, 80, 
-  81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 
-  91, 92, -1, -1, -1, -1, 97, -1, -1, -1, 
-  -1, -1, 103, -1, -1, -1, -1, -1, -1, 110, 
-  -1, -1, -1, 114, 115, 116, 117, 118, 119, 120, 
-  121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 
-  131, -1, -1, -1, -1, 136, -1, -1, -1, 140, 
-  141, 142, -1, 144, 145, 146, 147, 148, 149, 150, 
-  151, 152, 153, 154, 155, 156, 157, -1, 159, 160, 
-  161, -1, 163, -1, -1, -1, 167, 168, -1, -1, 
+  -1, -1, -1, -1, 6, 7, -1, 9, 10, 11, 
+  -1, -1, -1, -1, -1, -1, -1, 19, 20, -1, 
+  -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, 
+  32, 33, 34, 35, -1, -1, 38, 39, 40, 41, 
+  -1, -1, -1, -1, 46, -1, -1, 49, 50, -1, 
+  -1, 53, -1, 55, -1, 57, 58, 59, 60, 61, 
+  62, 63, 64, 65, 66, 67, 68, 69, 70, -1, 
+  -1, -1, -1, -1, -1, 77, -1, 79, 80, 81, 
+  82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 
+  92, -1, -1, -1, -1, 97, -1, -1, -1, -1, 
+  -1, 103, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, 114, 115, 116, 117, 118, 119, 120, 121, 
+  122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 
+  -1, -1, -1, -1, 136, -1, -1, -1, 140, 141, 
+  142, -1, 144, 145, 146, 147, 148, 149, 150, 151, 
+  152, 153, 154, 155, 156, 157, -1, 159, 160, 161, 
+  -1, 163, -1, -1, -1, 167, 168, -1, -1, -1, 
   -1, 6, 7, -1, 9, 10, 11, -1, -1, -1, 
   -1, -1, -1, -1, 19, 20, -1, -1, -1, 24, 
   25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 
@@ -1042,40 +963,107 @@ const short GLSLParserTable::action_check [] = {
   -1, 136, -1, -1, -1, 140, 141, 142, -1, 144, 
   145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 
   155, 156, 157, -1, 159, 160, 161, -1, 163, -1, 
-  -1, -1, 167, 168, -1, -1, -1, 5, -1, 7, 
-  -1, 9, 10, 11, -1, -1, 14, -1, -1, 17, 
-  -1, -1, -1, -1, -1, -1, 24, 25, 26, 27, 
+  -1, -1, 167, 168, -1, -1, -1, -1, 6, 7, 
+  -1, 9, 10, 11, -1, -1, -1, -1, -1, -1, 
+  -1, 19, 20, -1, -1, -1, 24, 25, 26, 27, 
   28, 29, 30, 31, 32, 33, 34, 35, -1, -1, 
-  38, 39, 40, 41, -1, -1, -1, 45, 46, -1, 
-  -1, 49, -1, -1, 52, -1, -1, 55, 56, 57, 
+  38, 39, 40, 41, -1, -1, -1, -1, 46, -1, 
+  -1, 49, 50, -1, -1, 53, -1, 55, -1, 57, 
   58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
-  68, 69, 70, 71, -1, -1, -1, -1, -1, -1, 
+  68, 69, 70, -1, -1, -1, -1, -1, -1, 77, 
   -1, 79, 80, 81, 82, 83, 84, 85, 86, 87, 
-  88, 89, 90, 91, 92, -1, -1, -1, 96, -1, 
-  -1, -1, 100, 101, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 113, 114, 115, 116, 117, 
+  88, 89, 90, 91, 92, -1, -1, -1, -1, 97, 
+  -1, -1, -1, -1, -1, 103, -1, -1, -1, -1, 
+  -1, -1, 110, -1, -1, -1, 114, 115, 116, 117, 
   118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 
-  128, 129, 130, 131, -1, -1, 134, -1, 136, -1, 
-  -1, -1, -1, 141, 142, 143, 144, 145, 146, 147, 
+  128, 129, 130, 131, -1, -1, -1, -1, 136, -1, 
+  -1, -1, 140, 141, 142, -1, 144, 145, 146, 147, 
   148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 
-  158, 159, 160, 161, -1, 163, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 5, -1, 7, -1, 9, 10, 
-  11, -1, -1, 14, -1, -1, 17, -1, -1, -1, 
+  -1, 159, 160, 161, -1, 163, -1, -1, -1, 167, 
+  168, -1, -1, -1, -1, 6, 7, -1, 9, 10, 
+  11, -1, -1, -1, -1, -1, -1, -1, 19, 20, 
   -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 
   31, 32, 33, 34, 35, -1, -1, 38, 39, 40, 
-  41, -1, -1, -1, 45, 46, -1, -1, 49, -1, 
-  -1, 52, -1, -1, 55, 56, 57, 58, 59, 60, 
+  41, -1, -1, -1, -1, 46, -1, -1, 49, 50, 
+  -1, -1, 53, -1, 55, -1, 57, 58, 59, 60, 
   61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 
-  71, -1, -1, -1, -1, -1, -1, -1, 79, 80, 
+  -1, -1, -1, -1, -1, -1, 77, -1, 79, 80, 
   81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 
-  91, 92, -1, -1, -1, 96, -1, -1, -1, 100, 
-  101, -1, -1, -1, -1, -1, -1, -1, 109, -1, 
-  -1, -1, 113, 114, 115, 116, 117, 118, 119, 120, 
+  91, 92, -1, -1, -1, -1, 97, -1, -1, -1, 
+  -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, 
+  -1, -1, -1, 114, 115, 116, 117, 118, 119, 120, 
   121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 
-  131, -1, -1, 134, -1, 136, -1, -1, -1, -1, 
-  141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 
-  151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 
-  161, -1, 163, -1, -1, -1, -1, -1, -1, -1, 
+  131, 132, -1, -1, -1, 136, -1, -1, -1, 140, 
+  141, 142, -1, 144, 145, 146, 147, 148, 149, 150, 
+  151, 152, 153, 154, 155, 156, 157, -1, 159, 160, 
+  161, -1, 163, -1, -1, -1, 167, 168, -1, -1, 
+  -1, -1, 6, 7, -1, 9, 10, 11, -1, -1, 
+  -1, -1, -1, -1, -1, 19, 20, -1, -1, -1, 
+  24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
+  34, 35, -1, -1, 38, 39, 40, 41, -1, -1, 
+  -1, -1, 46, -1, -1, 49, 50, -1, -1, 53, 
+  -1, 55, -1, 57, 58, 59, 60, 61, 62, 63, 
+  64, 65, 66, 67, 68, 69, 70, -1, -1, -1, 
+  -1, -1, -1, 77, -1, 79, 80, 81, 82, 83, 
+  84, 85, 86, 87, 88, 89, 90, 91, 92, -1, 
+  -1, -1, -1, 97, -1, -1, -1, -1, -1, 103, 
+  -1, -1, -1, -1, -1, -1, 110, -1, -1, -1, 
+  114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 
+  124, 125, 126, 127, 128, 129, 130, 131, -1, -1, 
+  -1, -1, 136, -1, -1, -1, 140, 141, 142, -1, 
+  144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 
+  154, 155, 156, 157, -1, 159, 160, 161, -1, 163, 
+  -1, -1, -1, 167, 168, -1, -1, -1, -1, 6, 
+  7, -1, 9, 10, 11, -1, -1, -1, -1, -1, 
+  -1, -1, 19, 20, -1, -1, -1, 24, 25, 26, 
+  27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 
+  -1, 38, 39, 40, 41, -1, -1, -1, -1, 46, 
+  -1, -1, 49, 50, -1, -1, 53, -1, 55, -1, 
+  57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
+  67, 68, 69, 70, -1, -1, -1, -1, -1, -1, 
+  77, -1, 79, 80, 81, 82, 83, 84, 85, 86, 
+  87, 88, 89, 90, 91, 92, -1, -1, -1, -1, 
+  97, -1, -1, -1, -1, -1, 103, -1, -1, -1, 
+  -1, -1, -1, 110, -1, -1, -1, 114, 115, 116, 
+  117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 
+  127, 128, 129, 130, 131, -1, -1, -1, -1, 136, 
+  -1, -1, -1, 140, 141, 142, -1, 144, 145, 146, 
+  147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 
+  157, -1, 159, 160, 161, -1, 163, -1, -1, -1, 
+  167, 168, -1, -1, -1, -1, 6, 7, -1, 9, 
+  10, 11, -1, -1, -1, -1, -1, -1, -1, 19, 
+  20, -1, -1, -1, 24, 25, 26, 27, 28, 29, 
+  30, 31, 32, 33, 34, 35, -1, -1, 38, 39, 
+  40, 41, -1, -1, -1, -1, 46, -1, -1, 49, 
+  50, -1, -1, 53, -1, 55, -1, 57, 58, 59, 
+  60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 
+  70, -1, -1, -1, -1, -1, -1, 77, -1, 79, 
+  80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 
+  90, 91, 92, -1, -1, -1, -1, 97, -1, -1, 
+  -1, -1, -1, 103, -1, -1, -1, -1, -1, -1, 
+  110, -1, -1, -1, 114, 115, 116, 117, 118, 119, 
+  120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 
+  130, 131, -1, -1, -1, -1, 136, -1, -1, -1, 
+  140, 141, 142, -1, 144, 145, 146, 147, 148, 149, 
+  150, 151, 152, 153, 154, 155, 156, 157, -1, 159, 
+  160, 161, -1, 163, -1, -1, -1, 167, 168, -1, 
+  -1, -1, -1, 5, -1, 7, -1, 9, 10, 11, 
+  -1, -1, 14, -1, -1, 17, -1, -1, -1, -1, 
+  -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, 
+  32, 33, 34, 35, -1, -1, 38, 39, 40, 41, 
+  -1, -1, -1, 45, 46, -1, -1, 49, -1, -1, 
+  52, -1, -1, 55, 56, 57, 58, 59, 60, 61, 
+  62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 
+  -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, 
+  82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 
+  92, -1, -1, -1, 96, -1, -1, -1, 100, 101, 
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, 
+  122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 
+  -1, -1, 134, -1, 136, -1, -1, -1, -1, 141, 
+  142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 
+  152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 
+  -1, 163, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, 5, -1, 7, -1, 9, 10, 11, -1, -1, 
   14, -1, -1, 17, -1, -1, -1, -1, -1, -1, 
   24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
@@ -1092,23 +1080,40 @@ const short GLSLParserTable::action_check [] = {
   134, -1, 136, -1, -1, -1, -1, 141, 142, 143, 
   144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 
   154, 155, 156, 157, 158, 159, 160, 161, -1, 163, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 
-  7, -1, 9, 10, 11, -1, -1, 14, -1, -1, 
-  17, -1, -1, -1, -1, -1, -1, 24, 25, 26, 
-  27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 
-  -1, 38, 39, 40, 41, -1, -1, -1, 45, 46, 
-  -1, -1, 49, -1, -1, 52, -1, -1, 55, 56, 
-  57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
-  67, 68, 69, 70, 71, -1, -1, -1, -1, -1, 
-  -1, -1, 79, 80, 81, 82, 83, 84, 85, 86, 
-  87, 88, 89, 90, 91, 92, -1, -1, -1, 96, 
-  -1, -1, -1, 100, 101, -1, -1, -1, -1, -1, 
-  -1, -1, 109, -1, -1, -1, 113, 114, 115, 116, 
-  117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 
-  127, 128, 129, 130, 131, -1, -1, 134, -1, 136, 
-  -1, -1, -1, -1, 141, 142, 143, 144, 145, 146, 
-  147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 
-  157, 158, 159, 160, 161, -1, 163, -1, -1, -1, 
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 
+  -1, 7, -1, 9, 10, 11, -1, -1, 14, -1, 
+  -1, 17, -1, -1, -1, -1, -1, -1, 24, 25, 
+  26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 
+  -1, -1, 38, 39, 40, 41, -1, -1, -1, 45, 
+  46, -1, -1, 49, -1, -1, 52, -1, -1, 55, 
+  56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 
+  66, 67, 68, 69, 70, 71, -1, -1, -1, -1, 
+  -1, -1, -1, 79, 80, 81, 82, 83, 84, 85, 
+  86, 87, 88, 89, 90, 91, 92, -1, -1, -1, 
+  96, -1, -1, -1, 100, 101, -1, -1, -1, -1, 
+  -1, -1, -1, 109, -1, -1, -1, 113, 114, 115, 
+  116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 
+  126, 127, 128, 129, 130, 131, -1, -1, 134, -1, 
+  136, -1, -1, -1, -1, 141, 142, 143, 144, 145, 
+  146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 
+  156, 157, 158, 159, 160, 161, -1, 163, -1, -1, 
+  -1, -1, -1, -1, -1, -1, -1, 5, -1, 7, 
+  -1, 9, 10, 11, -1, -1, 14, -1, -1, 17, 
+  -1, -1, -1, -1, -1, -1, 24, 25, 26, 27, 
+  28, 29, 30, 31, 32, 33, 34, 35, -1, -1, 
+  38, 39, 40, 41, -1, -1, -1, 45, 46, -1, 
+  -1, 49, -1, -1, 52, -1, -1, 55, 56, 57, 
+  58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
+  68, 69, 70, 71, -1, -1, -1, -1, -1, -1, 
+  -1, 79, 80, 81, 82, 83, 84, 85, 86, 87, 
+  88, 89, 90, 91, 92, -1, -1, -1, 96, -1, 
+  -1, -1, 100, 101, -1, -1, -1, -1, -1, -1, 
+  -1, 109, -1, -1, -1, 113, 114, 115, 116, 117, 
+  118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 
+  128, 129, 130, 131, -1, -1, 134, -1, 136, -1, 
+  -1, -1, -1, 141, 142, 143, 144, 145, 146, 147, 
+  148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 
+  158, 159, 160, 161, -1, 163, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, 5, -1, 7, -1, 9, 
   10, 11, -1, -1, 14, -1, -1, 17, -1, -1, 
   -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, 
@@ -1126,56 +1131,90 @@ const short GLSLParserTable::action_check [] = {
   -1, 141, 142, 143, 144, 145, 146, 147, 148, 149, 
   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 
   160, 161, -1, 163, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 5, 6, 7, -1, 9, 10, 11, -1, 
-  -1, 14, -1, -1, 17, -1, 19, 20, -1, -1, 
-  -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 
-  33, 34, 35, -1, -1, 38, 39, 40, 41, -1, 
-  -1, -1, 45, 46, -1, -1, 49, 50, -1, 52, 
-  53, -1, 55, 56, 57, 58, 59, 60, 61, 62, 
-  63, 64, 65, 66, 67, 68, 69, 70, 71, -1, 
-  -1, -1, -1, -1, 77, -1, 79, 80, 81, 82, 
-  83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 
-  -1, -1, -1, 96, 97, -1, -1, 100, 101, -1, 
-  103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-  113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 
-  123, 124, 125, 126, 127, 128, 129, 130, 131, -1, 
-  -1, 134, -1, 136, -1, -1, -1, 140, 141, 142, 
-  143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 
-  153, 154, 155, 156, 157, 158, 159, 160, 161, -1, 
-  163, -1, -1, -1, 167, 168, -1, -1, -1, 5, 
-  6, 7, -1, 9, 10, 11, -1, -1, 14, -1, 
-  -1, 17, -1, 19, 20, -1, -1, -1, 24, 25, 
+  -1, -1, -1, 5, 6, 7, -1, 9, 10, 11, 
+  -1, -1, 14, -1, -1, 17, -1, 19, 20, -1, 
+  -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, 
+  32, 33, 34, 35, -1, -1, 38, 39, 40, 41, 
+  -1, -1, -1, 45, 46, -1, -1, 49, 50, -1, 
+  52, 53, -1, 55, 56, 57, 58, 59, 60, 61, 
+  62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 
+  -1, -1, -1, -1, -1, 77, -1, 79, 80, 81, 
+  82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 
+  92, -1, -1, -1, 96, 97, -1, -1, 100, 101, 
+  -1, 103, -1, -1, -1, -1, -1, -1, -1, -1, 
+  -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, 
+  122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 
+  -1, -1, 134, -1, 136, -1, -1, -1, 140, 141, 
+  142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 
+  152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 
+  -1, 163, -1, -1, -1, 167, 168, -1, -1, -1, 
+  -1, 5, 6, 7, -1, 9, 10, 11, -1, -1, 
+  14, -1, -1, 17, -1, 19, 20, -1, -1, -1, 
+  24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
+  34, 35, -1, -1, 38, 39, 40, 41, -1, -1, 
+  -1, 45, 46, -1, -1, 49, 50, -1, 52, 53, 
+  -1, 55, 56, 57, 58, 59, 60, 61, 62, 63, 
+  64, 65, 66, 67, 68, 69, 70, 71, -1, -1, 
+  -1, -1, -1, 77, -1, 79, 80, 81, 82, 83, 
+  84, 85, 86, 87, 88, 89, 90, 91, 92, -1, 
+  -1, -1, 96, 97, -1, -1, 100, 101, -1, 103, 
+  104, -1, -1, -1, -1, -1, -1, -1, -1, 113, 
+  114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 
+  124, 125, 126, 127, 128, 129, 130, 131, 132, -1, 
+  134, -1, 136, -1, -1, -1, 140, 141, 142, 143, 
+  144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 
+  154, 155, 156, 157, 158, 159, 160, 161, -1, 163, 
+  -1, -1, -1, 167, 168, -1, -1, -1, -1, 5, 
+  6, 7, 8, 9, 10, 11, -1, 13, 14, -1, 
+  -1, 17, 18, 19, 20, 21, 22, -1, 24, 25, 
   26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 
-  -1, -1, 38, 39, 40, 41, -1, -1, -1, 45, 
-  46, -1, -1, 49, 50, -1, 52, 53, -1, 55, 
+  36, -1, 38, 39, 40, 41, -1, -1, -1, 45, 
+  46, 47, -1, 49, 50, 51, 52, 53, -1, 55, 
   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 
-  66, 67, 68, 69, 70, 71, -1, -1, -1, -1, 
+  66, 67, 68, 69, 70, 71, -1, -1, 74, -1, 
   -1, 77, -1, 79, 80, 81, 82, 83, 84, 85, 
   86, 87, 88, 89, 90, 91, 92, -1, -1, -1, 
   96, 97, -1, -1, 100, 101, -1, 103, 104, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 113, 114, 115, 
+  106, -1, -1, -1, -1, -1, -1, 113, 114, 115, 
   116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 
   126, 127, 128, 129, 130, 131, 132, -1, 134, -1, 
-  136, -1, -1, -1, 140, 141, 142, 143, 144, 145, 
+  136, -1, -1, 139, 140, 141, 142, 143, 144, 145, 
   146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 
-  156, 157, 158, 159, 160, 161, -1, 163, -1, -1, 
-  -1, 167, 168, -1, -1, -1, 5, 6, 7, 8, 
-  9, 10, 11, -1, 13, 14, -1, -1, 17, 18, 
-  19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 
-  29, 30, 31, 32, 33, 34, 35, 36, -1, 38, 
-  39, 40, 41, -1, -1, -1, 45, 46, 47, -1, 
-  49, 50, 51, 52, 53, -1, 55, 56, 57, 58, 
-  59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 
-  69, 70, 71, -1, -1, 74, -1, -1, 77, -1, 
-  79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 
-  89, 90, 91, 92, -1, -1, -1, 96, 97, -1, 
-  -1, 100, 101, -1, 103, 104, -1, 106, -1, -1, 
-  -1, -1, -1, -1, 113, 114, 115, 116, 117, 118, 
-  119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 
-  129, 130, 131, 132, -1, 134, -1, 136, -1, -1, 
-  139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 
-  149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 
-  159, 160, 161, -1, 163, 164, -1, -1, 167, 168, 
+  156, 157, 158, 159, 160, 161, -1, 163, 164, -1, 
+  -1, 167, 168, -1, -1, -1, -1, 5, 6, 7, 
+  8, 9, 10, 11, -1, 13, 14, -1, -1, 17, 
+  18, 19, 20, 21, 22, -1, 24, 25, 26, 27, 
+  28, 29, 30, 31, 32, 33, 34, 35, 36, -1, 
+  38, 39, 40, 41, -1, -1, -1, 45, 46, 47, 
+  -1, 49, 50, 51, 52, 53, -1, 55, 56, 57, 
+  58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
+  68, 69, 70, 71, -1, -1, 74, -1, -1, 77, 
+  -1, 79, 80, 81, 82, 83, 84, 85, 86, 87, 
+  88, 89, 90, 91, 92, -1, -1, -1, 96, 97, 
+  -1, -1, 100, 101, -1, 103, 104, -1, 106, -1, 
+  -1, -1, -1, -1, -1, 113, 114, 115, 116, 117, 
+  118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 
+  128, 129, 130, 131, 132, -1, 134, -1, 136, -1, 
+  -1, 139, 140, 141, 142, 143, 144, 145, 146, 147, 
+  148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 
+  158, 159, 160, 161, -1, 163, 164, -1, -1, 167, 
+  168, -1, -1, -1, -1, 5, 6, 7, 8, 9, 
+  10, 11, -1, 13, 14, -1, -1, 17, 18, 19, 
+  20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 
+  30, 31, 32, 33, 34, 35, 36, -1, 38, 39, 
+  40, 41, -1, -1, -1, 45, 46, 47, -1, 49, 
+  50, 51, 52, 53, -1, 55, 56, 57, 58, 59, 
+  60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 
+  70, 71, -1, -1, 74, -1, -1, 77, -1, 79, 
+  80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 
+  90, 91, 92, -1, -1, -1, 96, 97, -1, -1, 
+  100, 101, -1, 103, 104, -1, 106, -1, -1, 109, 
+  -1, -1, -1, 113, 114, 115, 116, 117, 118, 119, 
+  120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 
+  130, 131, 132, -1, 134, -1, 136, -1, -1, 139, 
+  140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 
+  150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 
+  160, 161, -1, 163, 164, -1, -1, 167, 168, -1, 
   -1, -1, -1, 5, 6, 7, 8, 9, 10, 11, 
   -1, 13, 14, -1, -1, 17, 18, 19, 20, 21, 
   22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 
@@ -1186,63 +1225,13 @@ const short GLSLParserTable::action_check [] = {
   -1, -1, 74, -1, -1, 77, -1, 79, 80, 81, 
   82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 
   92, -1, -1, -1, 96, 97, -1, -1, 100, 101, 
-  -1, 103, 104, -1, 106, -1, -1, -1, -1, -1, 
+  -1, 103, 104, -1, 106, -1, -1, 109, -1, -1, 
   -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, 
   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 
   132, -1, 134, -1, 136, -1, -1, 139, 140, 141, 
   142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 
   152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 
   -1, 163, 164, -1, -1, 167, 168, -1, -1, -1, 
-  5, 6, 7, 8, 9, 10, 11, -1, 13, 14, 
-  -1, -1, 17, 18, 19, 20, 21, 22, -1, 24, 
-  25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 
-  35, 36, -1, 38, 39, 40, 41, -1, -1, -1, 
-  45, 46, 47, -1, 49, 50, 51, 52, 53, -1, 
-  55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 
-  65, 66, 67, 68, 69, 70, 71, -1, -1, 74, 
-  -1, -1, 77, -1, 79, 80, 81, 82, 83, 84, 
-  85, 86, 87, 88, 89, 90, 91, 92, -1, -1, 
-  -1, 96, 97, -1, -1, 100, 101, -1, 103, 104, 
-  -1, 106, -1, -1, 109, -1, -1, -1, 113, 114, 
-  115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 
-  125, 126, 127, 128, 129, 130, 131, 132, -1, 134, 
-  -1, 136, -1, -1, 139, 140, 141, 142, 143, 144, 
-  145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 
-  155, 156, 157, 158, 159, 160, 161, -1, 163, 164, 
-  -1, -1, 167, 168, -1, -1, -1, 5, 6, 7, 
-  8, 9, 10, 11, -1, 13, 14, -1, -1, 17, 
-  18, 19, 20, 21, 22, -1, 24, 25, 26, 27, 
-  28, 29, 30, 31, 32, 33, 34, 35, 36, -1, 
-  38, 39, 40, 41, -1, -1, -1, 45, 46, 47, 
-  -1, 49, 50, 51, 52, 53, -1, 55, 56, 57, 
-  58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
-  68, 69, 70, 71, -1, -1, 74, -1, -1, 77, 
-  -1, 79, 80, 81, 82, 83, 84, 85, 86, 87, 
-  88, 89, 90, 91, 92, -1, -1, -1, 96, 97, 
-  -1, -1, 100, 101, -1, 103, 104, -1, 106, -1, 
-  -1, 109, -1, -1, -1, 113, 114, 115, 116, 117, 
-  118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 
-  128, 129, 130, 131, 132, -1, 134, -1, 136, -1, 
-  -1, 139, 140, 141, 142, 143, 144, 145, 146, 147, 
-  148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 
-  158, 159, 160, 161, -1, 163, 164, -1, -1, 167, 
-  168, -1, -1, -1, 5, 6, 7, 8, 9, 10, 
-  11, -1, 13, 14, -1, -1, 17, 18, 19, 20, 
-  21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 
-  31, 32, 33, 34, 35, 36, -1, 38, 39, 40, 
-  41, -1, -1, -1, 45, 46, 47, -1, 49, 50, 
-  51, 52, 53, -1, 55, 56, 57, 58, 59, 60, 
-  61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 
-  71, -1, -1, 74, -1, -1, 77, -1, 79, 80, 
-  81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 
-  91, 92, -1, -1, -1, 96, 97, -1, -1, 100, 
-  101, -1, 103, 104, -1, 106, -1, -1, 109, -1, 
-  -1, -1, 113, 114, 115, 116, 117, 118, 119, 120, 
-  121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 
-  131, 132, -1, 134, -1, 136, -1, -1, 139, 140, 
-  141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 
-  151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 
-  161, -1, 163, 164, -1, -1, 167, 168, -1, -1, 
   -1, 5, 6, 7, 8, 9, 10, 11, -1, 13, 
   14, -1, -1, 17, 18, 19, 20, 21, 22, -1, 
   24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
@@ -1259,7 +1248,24 @@ const short GLSLParserTable::action_check [] = {
   134, -1, 136, -1, -1, 139, 140, 141, 142, 143, 
   144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 
   154, 155, 156, 157, 158, 159, 160, 161, -1, 163, 
-  164, -1, -1, 167, 168, -1, -1, -1, 
+  164, -1, -1, 167, 168, -1, -1, -1, -1, 5, 
+  6, 7, 8, 9, 10, 11, -1, 13, 14, -1, 
+  -1, 17, 18, 19, 20, 21, 22, -1, 24, 25, 
+  26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 
+  36, -1, 38, 39, 40, 41, -1, -1, -1, 45, 
+  46, 47, -1, 49, 50, 51, 52, 53, -1, 55, 
+  56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 
+  66, 67, 68, 69, 70, 71, -1, -1, 74, -1, 
+  -1, 77, -1, 79, 80, 81, 82, 83, 84, 85, 
+  86, 87, 88, 89, 90, 91, 92, -1, -1, -1, 
+  96, 97, -1, -1, 100, 101, -1, 103, 104, -1, 
+  106, -1, -1, 109, -1, -1, -1, 113, 114, 115, 
+  116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 
+  126, 127, 128, 129, 130, 131, 132, -1, 134, -1, 
+  136, -1, -1, 139, 140, 141, 142, 143, 144, 145, 
+  146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 
+  156, 157, 158, 159, 160, 161, -1, 163, 164, -1, 
+  -1, 167, 168, -1, -1, -1, -1, 
 
   3, 55, 3, 14, 12, 15, 8, 55, 3, 14, 
   35, 15, 12, 12, 12, 55, 12, 54, 15, 3, 
diff --git a/src/libs/glsl/glslparsertable_p.h b/src/libs/glsl/glslparsertable_p.h
index 6cbdf9f1132542e02494c6418eb9bca14567fbe2..4faa7e655d05c08d93cb9d2166befec68c63e4a7 100644
--- a/src/libs/glsl/glslparsertable_p.h
+++ b/src/libs/glsl/glslparsertable_p.h
@@ -172,6 +172,7 @@ public:
     T_PRECISION = 104,
     T_PREPROC = 169,
     T_QUESTION = 105,
+    T_RESERVED = 172,
     T_RETURN = 106,
     T_RIGHT_ANGLE = 107,
     T_RIGHT_ASSIGN = 108,
@@ -238,12 +239,12 @@ public:
     ACCEPT_STATE = 440,
     RULE_COUNT = 314,
     STATE_COUNT = 459,
-    TERMINAL_COUNT = 172,
+    TERMINAL_COUNT = 173,
     NON_TERMINAL_COUNT = 84,
 
     GOTO_INDEX_OFFSET = 459,
-    GOTO_INFO_OFFSET = 4728,
-    GOTO_CHECK_OFFSET = 4728
+    GOTO_INFO_OFFSET = 4757,
+    GOTO_CHECK_OFFSET = 4757
   };
 
   static const char  *const    spell [];
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp
index 586894d99c891aa11ce4228c09cb8b079f7fa4d2..c933ce20fee12b588cb28d7247249a8ee5f2346a 100644
--- a/src/plugins/glsleditor/glsleditor.cpp
+++ b/src/plugins/glsleditor/glsleditor.cpp
@@ -176,9 +176,14 @@ void GLSLTextEditor::setFontSettings(const TextEditor::FontSettings &fs)
                    << QLatin1String(TextEditor::Constants::C_STRING)
                    << QLatin1String(TextEditor::Constants::C_TYPE)
                    << QLatin1String(TextEditor::Constants::C_KEYWORD)
-                   << QLatin1String(TextEditor::Constants::C_FIELD)
+                   << QLatin1String(TextEditor::Constants::C_OPERATOR)
+                   << QLatin1String(TextEditor::Constants::C_PREPROCESSOR)
+                   << QLatin1String(TextEditor::Constants::C_LABEL)
                    << QLatin1String(TextEditor::Constants::C_COMMENT)
-                   << QLatin1String(TextEditor::Constants::C_VISUAL_WHITESPACE);
+                   << QLatin1String(TextEditor::Constants::C_DOXYGEN_COMMENT)
+                   << QLatin1String(TextEditor::Constants::C_DOXYGEN_TAG)
+                   << QLatin1String(TextEditor::Constants::C_VISUAL_WHITESPACE)
+                   << QLatin1String(TextEditor::Constants::C_REMOVED_LINE);
     }
 
     highlighter->setFormats(fs.toTextCharFormats(categories));
@@ -252,7 +257,6 @@ void GLSLTextEditor::updateDocumentNow()
     m_updateDocumentTimer->stop();
 
     const int variant = Lexer::Variant_GLSL_Qt | // ### hardcoded
-                        Lexer::Variant_GLSL_ES_100 |
                         Lexer::Variant_VertexShader |
                         Lexer::Variant_FragmentShader;
     const QString contents = toPlainText(); // get the code from the editor
diff --git a/src/plugins/glsleditor/glslhighlighter.cpp b/src/plugins/glsleditor/glslhighlighter.cpp
index d8bf89928bb208e0d2f27ec7bad7615f5a6ab86f..72b58460d040290be95897dbaf5cc5b0459fbdd4 100644
--- a/src/plugins/glsleditor/glslhighlighter.cpp
+++ b/src/plugins/glsleditor/glslhighlighter.cpp
@@ -57,6 +57,10 @@ void Highlighter::highlightBlock(const QString &text)
     lex.setState(qMax(0, previousBlockState()));
     lex.setScanKeywords(false);
     lex.setScanComments(true);
+    const int variant = GLSL::Lexer::Variant_GLSL_Qt | // ### FIXME: hardcoded
+                        GLSL::Lexer::Variant_VertexShader |
+                        GLSL::Lexer::Variant_FragmentShader;
+    lex.setVariant(variant);
     GLSL::Token tk;
     do {
         lex.yylex(&tk);
@@ -66,7 +70,10 @@ void Highlighter::highlightBlock(const QString &text)
         else if (tk.is(GLSL::Parser::T_COMMENT))
             setFormat(tk.position, tk.length, Qt::darkGreen); // ### FIXME: m_formats[GLSLCommentFormat]);
         else if (tk.is(GLSL::Parser::T_IDENTIFIER)) {
-            if (lex.findKeyword(data.constData() + tk.position, tk.length) != GLSL::Parser::T_IDENTIFIER)
+            int kind = lex.findKeyword(data.constData() + tk.position, tk.length);
+            if (kind == GLSL::Parser::T_RESERVED)
+                setFormat(tk.position, tk.length, m_formats[GLSLReservedKeyword]);
+            else if (kind != GLSL::Parser::T_IDENTIFIER)
                 setFormat(tk.position, tk.length, m_formats[GLSLKeywordFormat]);
         }
     } while (tk.isNot(GLSL::Parser::EOF_SYMBOL));
diff --git a/src/plugins/glsleditor/glslhighlighter.h b/src/plugins/glsleditor/glslhighlighter.h
index 4971ff5bd1cc51848ad3802d38de3a34e0f282ec..b92763bc6b3006b37f984a6fb9d7225795ea2a99 100644
--- a/src/plugins/glsleditor/glslhighlighter.h
+++ b/src/plugins/glsleditor/glslhighlighter.h
@@ -51,6 +51,7 @@ public:
         GLSLDoxygenCommentFormat,
         GLSLDoxygenTagFormat,
         GLSLVisualWhitespace,
+        GLSLReservedKeyword,
         NumGLSLFormats
     };