Revert "ARB prog parser: Fix epic memory leak in lexer / parser interface"
[mesa.git] / src / mesa / shader / program_parse.tab.c
index 4a05d106be394819514098ddc420907ec3cc7878..c255e912ed238c0778bcf44ac16e10a06712f344 100644 (file)
@@ -251,7 +251,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
      PALETTE = 309,
      PARAMS = 310,
      PLANE = 311,
-     POINT = 312,
+     POINT_TOK = 312,
      POINTSIZE = 313,
      POSITION = 314,
      PRIMARY = 315,
@@ -263,7 +263,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
      SCENECOLOR = 321,
      SECONDARY = 322,
      SHININESS = 323,
-     SIZE = 324,
+     SIZE_TOK = 324,
      SPECULAR = 325,
      SPOT = 326,
      STATE = 327,
@@ -324,15 +324,22 @@ typedef union YYSTYPE
    unsigned attrib;
    int integer;
    float real;
-   unsigned state[5];
+   gl_state_index state[STATE_LENGTH];
    int negate;
    struct asm_vector vector;
    gl_inst_opcode opcode;
 
+   struct {
+      unsigned swz;
+      unsigned rgba_valid:1;
+      unsigned xyzw_valid:1;
+      unsigned negate:1;
+   } ext_swizzle;
+
 
 
 /* Line 214 of yacc.c  */
-#line 336 "program_parse.tab.c"
+#line 343 "program_parse.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -356,14 +363,14 @@ typedef struct YYLTYPE
 /* Copy the second part of user declarations.  */
 
 /* Line 264 of yacc.c  */
-#line 242 "program_parse.y"
+#line 249 "program_parse.y"
 
 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
     void *yyscanner);
 
 
 /* Line 264 of yacc.c  */
-#line 367 "program_parse.tab.c"
+#line 374 "program_parse.tab.c"
 
 #ifdef short
 # undef short
@@ -580,16 +587,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   337
+#define YYLAST   342
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  115
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  133
+#define YYNNTS  134
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  262
+#define YYNRULES  264
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  431
+#define YYNSTATES  436
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -658,20 +665,20 @@ static const yytype_uint16 yyprhs[] =
      277,   278,   282,   284,   286,   289,   291,   294,   296,   298,
      302,   309,   310,   312,   315,   320,   322,   326,   328,   330,
      332,   334,   336,   338,   340,   342,   344,   346,   349,   352,
-     355,   358,   361,   364,   367,   370,   373,   376,   379,   383,
-     385,   387,   389,   395,   397,   399,   401,   404,   406,   408,
-     411,   413,   416,   423,   425,   429,   431,   433,   435,   437,
-     439,   444,   446,   448,   450,   452,   454,   456,   459,   461,
-     463,   469,   471,   474,   476,   478,   484,   487,   488,   495,
-     499,   500,   502,   504,   506,   508,   510,   513,   515,   517,
-     520,   525,   530,   531,   533,   535,   537,   539,   541,   543,
-     545,   547,   553,   555,   559,   565,   571,   573,   577,   583,
-     585,   587,   589,   591,   593,   595,   597,   599,   601,   605,
-     611,   619,   629,   632,   635,   637,   639,   640,   641,   645,
-     646,   650,   654,   656,   661,   664,   667,   670,   673,   677,
-     680,   684,   685,   687,   689,   690,   692,   694,   695,   697,
-     699,   700,   702,   704,   705,   709,   710,   714,   715,   719,
-     721,   723,   725
+     355,   358,   361,   364,   367,   370,   373,   376,   379,   382,
+     386,   388,   390,   392,   398,   400,   402,   404,   407,   409,
+     411,   414,   416,   419,   426,   428,   432,   434,   436,   438,
+     440,   442,   447,   449,   451,   453,   455,   457,   459,   462,
+     464,   466,   472,   474,   477,   479,   481,   487,   490,   491,
+     498,   502,   503,   505,   507,   509,   511,   513,   516,   518,
+     520,   523,   528,   533,   534,   538,   540,   542,   544,   547,
+     549,   551,   553,   555,   561,   563,   567,   573,   579,   581,
+     585,   591,   593,   595,   597,   599,   601,   603,   605,   607,
+     609,   613,   619,   627,   637,   640,   643,   645,   647,   648,
+     649,   653,   654,   658,   662,   664,   669,   672,   675,   678,
+     681,   685,   688,   692,   693,   695,   697,   698,   700,   702,
+     703,   705,   707,   708,   710,   712,   713,   717,   718,   722,
+     723,   727,   729,   731,   733
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -687,101 +694,102 @@ static const yytype_int16 yyrhs[] =
      136,   107,   136,    -1,    13,   138,   107,   137,   107,   137,
       -1,    17,   138,   107,   137,   107,   137,   107,   137,    -1,
       15,   138,   107,   137,   107,   133,   107,   134,    -1,    20,
-     137,    -1,    82,   242,    -1,    83,    -1,    84,    -1,    85,
+     137,    -1,    82,   243,    -1,    83,    -1,    84,    -1,    85,
       -1,    86,    -1,    87,    -1,    88,    -1,    89,    -1,    90,
       -1,    91,    -1,    92,    -1,    93,    -1,    94,    -1,    21,
-     138,   107,   143,   107,   140,    -1,   228,   143,   155,    -1,
-     228,   143,   156,    -1,   144,   157,    -1,   152,   154,    -1,
-     141,   107,   141,   107,   141,   107,   141,    -1,   228,   142,
+     138,   107,   143,   107,   140,    -1,   229,   143,   155,    -1,
+     229,   143,   156,    -1,   144,   157,    -1,   152,   154,    -1,
+     141,   107,   141,   107,   141,   107,   141,    -1,   229,   142,
       -1,    22,    -1,    98,    -1,    98,    -1,   160,    -1,   145,
-     108,   146,   109,    -1,   174,    -1,   235,    -1,    98,    -1,
+     108,   146,   109,    -1,   174,    -1,   236,    -1,    98,    -1,
       98,    -1,   147,    -1,   148,    -1,    22,    -1,   152,   153,
      149,    -1,    -1,   110,   150,    -1,   111,   151,    -1,    22,
       -1,    22,    -1,    98,    -1,   102,    -1,   102,    -1,   102,
       -1,   102,    -1,    99,    -1,   103,    -1,    -1,    99,    -1,
      100,    -1,   101,    -1,   102,    -1,    -1,   159,    -1,   166,
-      -1,   229,    -1,   231,    -1,   234,    -1,   247,    -1,     7,
+      -1,   230,    -1,   232,    -1,   235,    -1,   248,    -1,     7,
       98,   112,   160,    -1,    95,   161,    -1,    37,   165,    -1,
-      59,    -1,    97,   163,    -1,    52,    -1,    28,   240,    -1,
-      36,    -1,    73,   241,    -1,    49,   108,   164,   109,    -1,
+      59,    -1,    97,   163,    -1,    52,    -1,    28,   241,    -1,
+      36,    -1,    73,   242,    -1,    49,   108,   164,   109,    -1,
       96,   108,   162,   109,    -1,    22,    -1,    -1,   108,   164,
-     109,    -1,    22,    -1,    59,    -1,    28,   240,    -1,    36,
-      -1,    73,   241,    -1,   167,    -1,   168,    -1,    10,    98,
+     109,    -1,    22,    -1,    59,    -1,    28,   241,    -1,    36,
+      -1,    73,   242,    -1,   167,    -1,   168,    -1,    10,    98,
      170,    -1,    10,    98,   108,   169,   109,   171,    -1,    -1,
       22,    -1,   112,   173,    -1,   112,   113,   172,   114,    -1,
-     175,    -1,   172,   107,   175,    -1,   177,    -1,   212,    -1,
-     222,    -1,   177,    -1,   212,    -1,   223,    -1,   176,    -1,
-     213,    -1,   222,    -1,   177,    -1,    72,   201,    -1,    72,
+     175,    -1,   172,   107,   175,    -1,   177,    -1,   213,    -1,
+     223,    -1,   177,    -1,   213,    -1,   224,    -1,   176,    -1,
+     214,    -1,   223,    -1,   177,    -1,    72,   201,    -1,    72,
      178,    -1,    72,   180,    -1,    72,   183,    -1,    72,   185,
       -1,    72,   191,    -1,    72,   187,    -1,    72,   194,    -1,
-      72,   196,    -1,    72,   198,    -1,    72,   200,    -1,    46,
-     239,   179,    -1,   189,    -1,    32,    -1,    68,    -1,    42,
-     108,   190,   109,   181,    -1,   189,    -1,    59,    -1,    25,
-      -1,    71,   182,    -1,    39,    -1,    31,    -1,    43,   184,
-      -1,    24,    -1,   239,    66,    -1,    44,   108,   190,   109,
-     239,   186,    -1,   189,    -1,    74,   243,   188,    -1,    28,
-      -1,    24,    -1,    30,    -1,    70,    -1,    22,    -1,    75,
-     241,   192,   193,    -1,    34,    -1,    53,    -1,    78,    -1,
-      79,    -1,    77,    -1,    76,    -1,    35,   195,    -1,    28,
-      -1,    55,    -1,    27,   108,   197,   109,    56,    -1,    22,
-      -1,    57,   199,    -1,    69,    -1,    25,    -1,   203,    65,
-     108,   206,   109,    -1,   203,   202,    -1,    -1,    65,   108,
-     206,   104,   206,   109,    -1,    48,   207,   204,    -1,    -1,
-     205,    -1,    40,    -1,    81,    -1,    41,    -1,    22,    -1,
-      50,   208,    -1,    62,    -1,    51,    -1,    80,   241,    -1,
-      54,   108,   210,   109,    -1,    47,   108,   211,   109,    -1,
-      -1,   209,    -1,    22,    -1,    22,    -1,    22,    -1,   216,
-      -1,   219,    -1,   214,    -1,   217,    -1,    61,    33,   108,
-     215,   109,    -1,   220,    -1,   220,   104,   220,    -1,    61,
-      33,   108,   220,   109,    -1,    61,    45,   108,   218,   109,
-      -1,   221,    -1,   221,   104,   221,    -1,    61,    45,   108,
-     221,   109,    -1,    22,    -1,    22,    -1,   224,    -1,   226,
-      -1,   225,    -1,   226,    -1,   227,    -1,    23,    -1,    22,
-      -1,   113,   227,   114,    -1,   113,   227,   107,   227,   114,
-      -1,   113,   227,   107,   227,   107,   227,   114,    -1,   113,
-     227,   107,   227,   107,   227,   107,   227,   114,    -1,   228,
-      23,    -1,   228,    22,    -1,   110,    -1,   111,    -1,    -1,
-      -1,    11,   230,   233,    -1,    -1,     5,   232,   233,    -1,
-     233,   107,    98,    -1,    98,    -1,     9,    98,   112,   235,
-      -1,    64,    59,    -1,    64,    36,    -1,    64,   236,    -1,
-      64,    58,    -1,    64,    73,   241,    -1,    64,    29,    -1,
-      28,   237,   238,    -1,    -1,    38,    -1,    26,    -1,    -1,
-      60,    -1,    67,    -1,    -1,    38,    -1,    26,    -1,    -1,
-      60,    -1,    67,    -1,    -1,   108,   244,   109,    -1,    -1,
-     108,   245,   109,    -1,    -1,   108,   246,   109,    -1,    22,
-      -1,    22,    -1,    22,    -1,     6,    98,   112,    98,    -1
+      72,   196,    -1,    72,   198,    -1,    72,   200,    -1,    72,
+     212,    -1,    46,   240,   179,    -1,   189,    -1,    32,    -1,
+      68,    -1,    42,   108,   190,   109,   181,    -1,   189,    -1,
+      59,    -1,    25,    -1,    71,   182,    -1,    39,    -1,    31,
+      -1,    43,   184,    -1,    24,    -1,   240,    66,    -1,    44,
+     108,   190,   109,   240,   186,    -1,   189,    -1,    74,   244,
+     188,    -1,    28,    -1,    24,    -1,    30,    -1,    70,    -1,
+      22,    -1,    75,   242,   192,   193,    -1,    34,    -1,    53,
+      -1,    78,    -1,    79,    -1,    77,    -1,    76,    -1,    35,
+     195,    -1,    28,    -1,    55,    -1,    27,   108,   197,   109,
+      56,    -1,    22,    -1,    57,   199,    -1,    69,    -1,    25,
+      -1,   203,    65,   108,   206,   109,    -1,   203,   202,    -1,
+      -1,    65,   108,   206,   104,   206,   109,    -1,    48,   207,
+     204,    -1,    -1,   205,    -1,    40,    -1,    81,    -1,    41,
+      -1,    22,    -1,    50,   208,    -1,    62,    -1,    51,    -1,
+      80,   242,    -1,    54,   108,   210,   109,    -1,    47,   108,
+     211,   109,    -1,    -1,   108,   209,   109,    -1,    22,    -1,
+      22,    -1,    22,    -1,    29,    63,    -1,   217,    -1,   220,
+      -1,   215,    -1,   218,    -1,    61,    33,   108,   216,   109,
+      -1,   221,    -1,   221,   104,   221,    -1,    61,    33,   108,
+     221,   109,    -1,    61,    45,   108,   219,   109,    -1,   222,
+      -1,   222,   104,   222,    -1,    61,    45,   108,   222,   109,
+      -1,    22,    -1,    22,    -1,   225,    -1,   227,    -1,   226,
+      -1,   227,    -1,   228,    -1,    23,    -1,    22,    -1,   113,
+     228,   114,    -1,   113,   228,   107,   228,   114,    -1,   113,
+     228,   107,   228,   107,   228,   114,    -1,   113,   228,   107,
+     228,   107,   228,   107,   228,   114,    -1,   229,    23,    -1,
+     229,    22,    -1,   110,    -1,   111,    -1,    -1,    -1,    11,
+     231,   234,    -1,    -1,     5,   233,   234,    -1,   234,   107,
+      98,    -1,    98,    -1,     9,    98,   112,   236,    -1,    64,
+      59,    -1,    64,    36,    -1,    64,   237,    -1,    64,    58,
+      -1,    64,    73,   242,    -1,    64,    29,    -1,    28,   238,
+     239,    -1,    -1,    38,    -1,    26,    -1,    -1,    60,    -1,
+      67,    -1,    -1,    38,    -1,    26,    -1,    -1,    60,    -1,
+      67,    -1,    -1,   108,   245,   109,    -1,    -1,   108,   246,
+     109,    -1,    -1,   108,   247,   109,    -1,    22,    -1,    22,
+      -1,    22,    -1,     6,    98,   112,    98,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   249,   249,   252,   260,   272,   273,   276,   298,   299,
-     302,   317,   320,   325,   332,   333,   334,   335,   336,   337,
-     338,   341,   342,   345,   351,   358,   365,   373,   380,   388,
-     433,   440,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,   456,   457,   460,   472,   485,   498,   520,   529,
-     538,   545,   554,   582,   624,   635,   656,   666,   672,   696,
-     713,   713,   715,   722,   734,   735,   736,   739,   751,   763,
-     781,   792,   804,   806,   807,   808,   809,   812,   812,   812,
-     812,   813,   816,   817,   818,   819,   820,   821,   824,   842,
-     846,   852,   856,   860,   864,   873,   882,   886,   891,   897,
-     908,   908,   909,   911,   915,   919,   923,   929,   929,   931,
-     947,   970,   973,   984,   990,   996,   997,  1004,  1010,  1016,
-    1024,  1030,  1036,  1044,  1050,  1056,  1064,  1065,  1068,  1069,
-    1070,  1071,  1072,  1073,  1074,  1075,  1076,  1077,  1080,  1089,
-    1093,  1097,  1103,  1112,  1116,  1120,  1129,  1133,  1139,  1145,
-    1152,  1157,  1165,  1175,  1177,  1185,  1191,  1195,  1199,  1205,
-    1216,  1225,  1229,  1234,  1238,  1242,  1246,  1252,  1259,  1263,
-    1269,  1277,  1288,  1295,  1299,  1305,  1315,  1326,  1330,  1348,
-    1357,  1360,  1366,  1370,  1374,  1380,  1391,  1396,  1401,  1406,
-    1411,  1416,  1424,  1427,  1432,  1445,  1453,  1466,  1466,  1468,
-    1468,  1470,  1480,  1485,  1492,  1502,  1511,  1516,  1523,  1533,
-    1543,  1555,  1555,  1556,  1556,  1558,  1565,  1570,  1577,  1585,
-    1593,  1602,  1613,  1617,  1623,  1624,  1625,  1628,  1628,  1631,
-    1631,  1634,  1640,  1648,  1661,  1670,  1679,  1683,  1692,  1701,
-    1712,  1719,  1724,  1733,  1745,  1748,  1757,  1768,  1769,  1770,
-    1773,  1774,  1775,  1778,  1779,  1782,  1783,  1786,  1787,  1790,
-    1801,  1812,  1823
+       0,   256,   256,   259,   267,   279,   280,   283,   305,   306,
+     309,   324,   327,   332,   339,   340,   341,   342,   343,   344,
+     345,   348,   349,   352,   358,   365,   372,   380,   387,   395,
+     440,   447,   453,   454,   455,   456,   457,   458,   459,   460,
+     461,   462,   463,   464,   467,   480,   493,   506,   528,   537,
+     570,   577,   592,   642,   684,   695,   716,   726,   732,   763,
+     780,   780,   782,   789,   801,   802,   803,   806,   818,   830,
+     848,   859,   871,   873,   874,   875,   876,   879,   879,   879,
+     879,   880,   883,   884,   885,   886,   887,   888,   891,   909,
+     913,   919,   923,   927,   931,   940,   949,   953,   958,   964,
+     975,   975,   976,   978,   982,   986,   990,   996,   996,   998,
+    1014,  1037,  1040,  1051,  1057,  1063,  1064,  1071,  1077,  1083,
+    1091,  1097,  1103,  1111,  1117,  1123,  1131,  1132,  1135,  1136,
+    1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1148,
+    1157,  1161,  1165,  1171,  1180,  1184,  1188,  1197,  1201,  1207,
+    1213,  1220,  1225,  1233,  1243,  1245,  1253,  1259,  1263,  1267,
+    1273,  1284,  1293,  1297,  1302,  1306,  1310,  1314,  1320,  1327,
+    1331,  1337,  1345,  1356,  1363,  1367,  1373,  1383,  1394,  1398,
+    1416,  1425,  1428,  1434,  1438,  1442,  1448,  1459,  1464,  1469,
+    1474,  1479,  1484,  1492,  1495,  1500,  1513,  1521,  1532,  1540,
+    1540,  1542,  1542,  1544,  1554,  1559,  1566,  1576,  1585,  1590,
+    1597,  1607,  1617,  1629,  1629,  1630,  1630,  1632,  1642,  1650,
+    1660,  1668,  1676,  1685,  1696,  1700,  1706,  1707,  1708,  1711,
+    1711,  1714,  1714,  1717,  1723,  1731,  1744,  1753,  1762,  1766,
+    1775,  1784,  1795,  1802,  1807,  1816,  1828,  1831,  1840,  1851,
+    1852,  1853,  1856,  1857,  1858,  1861,  1862,  1865,  1866,  1869,
+    1870,  1873,  1884,  1895,  1906
 };
 #endif
 
@@ -798,9 +806,9 @@ static const char *const yytname[] =
   "EYE", "FOG", "FOGCOORD", "FRAGMENT", "FRONT", "HALF", "INVERSE",
   "INVTRANS", "LIGHT", "LIGHTMODEL", "LIGHTPROD", "LOCAL", "MATERIAL",
   "MAT_PROGRAM", "MATRIX", "MATRIXINDEX", "MODELVIEW", "MVP", "NORMAL",
-  "OBJECT", "PALETTE", "PARAMS", "PLANE", "POINT", "POINTSIZE", "POSITION",
-  "PRIMARY", "PROGRAM", "PROJECTION", "RANGE", "RESULT", "ROW",
-  "SCENECOLOR", "SECONDARY", "SHININESS", "SIZE", "SPECULAR", "SPOT",
+  "OBJECT", "PALETTE", "PARAMS", "PLANE", "POINT_TOK", "POINTSIZE",
+  "POSITION", "PRIMARY", "PROGRAM", "PROJECTION", "RANGE", "RESULT", "ROW",
+  "SCENECOLOR", "SECONDARY", "SHININESS", "SIZE_TOK", "SPECULAR", "SPOT",
   "STATE", "TEXCOORD", "TEXENV", "TEXGEN", "TEXGEN_Q", "TEXGEN_R",
   "TEXGEN_S", "TEXGEN_T", "TEXTURE", "TRANSPOSE", "TEXTURE_UNIT", "TEX_1D",
   "TEX_2D", "TEX_3D", "TEX_CUBE", "TEX_RECT", "TEX_SHADOW1D",
@@ -836,15 +844,16 @@ static const char *const yytname[] =
   "stateMatrixRows", "optMatrixRows", "stateMatrixItem",
   "stateOptMatModifier", "stateMatModifier", "stateMatrixRowNum",
   "stateMatrixName", "stateOptModMatNum", "stateModMatNum",
-  "statePaletteMatNum", "stateProgramMatNum", "programSingleItem",
-  "programMultipleItem", "progEnvParams", "progEnvParamNums",
-  "progEnvParam", "progLocalParams", "progLocalParamNums",
-  "progLocalParam", "progEnvParamNum", "progLocalParamNum",
-  "paramConstDecl", "paramConstUse", "paramConstScalarDecl",
-  "paramConstScalarUse", "paramConstVector", "signedFloatConstant",
-  "optionalSign", "TEMP_statement", "@1", "ADDRESS_statement", "@2",
-  "varNameList", "OUTPUT_statement", "resultBinding", "resultColBinding",
-  "optResultFaceType", "optResultColorType", "optFaceType", "optColorType",
+  "statePaletteMatNum", "stateProgramMatNum", "stateDepthItem",
+  "programSingleItem", "programMultipleItem", "progEnvParams",
+  "progEnvParamNums", "progEnvParam", "progLocalParams",
+  "progLocalParamNums", "progLocalParam", "progEnvParamNum",
+  "progLocalParamNum", "paramConstDecl", "paramConstUse",
+  "paramConstScalarDecl", "paramConstScalarUse", "paramConstVector",
+  "signedFloatConstant", "optionalSign", "TEMP_statement", "@1",
+  "ADDRESS_statement", "@2", "varNameList", "OUTPUT_statement",
+  "resultBinding", "resultColBinding", "optResultFaceType",
+  "optResultColorType", "optFaceType", "optColorType",
   "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
   "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
   "ALIAS_statement", 0
@@ -887,20 +896,20 @@ static const yytype_uint8 yyr1[] =
      163,   163,   164,   165,   165,   165,   165,   166,   166,   167,
      168,   169,   169,   170,   171,   172,   172,   173,   173,   173,
      174,   174,   174,   175,   175,   175,   176,   176,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   178,   179,
-     179,   179,   180,   181,   181,   181,   181,   181,   182,   183,
-     184,   184,   185,   186,   187,   188,   189,   189,   189,   190,
-     191,   192,   192,   193,   193,   193,   193,   194,   195,   195,
-     196,   197,   198,   199,   199,   200,   201,   202,   202,   203,
-     204,   204,   205,   205,   205,   206,   207,   207,   207,   207,
-     207,   207,   208,   208,   209,   210,   211,   212,   212,   213,
-     213,   214,   215,   215,   216,   217,   218,   218,   219,   220,
-     221,   222,   222,   223,   223,   224,   225,   225,   226,   226,
-     226,   226,   227,   227,   228,   228,   228,   230,   229,   232,
-     231,   233,   233,   234,   235,   235,   235,   235,   235,   235,
-     236,   237,   237,   237,   238,   238,   238,   239,   239,   239,
-     240,   240,   240,   241,   241,   242,   242,   243,   243,   244,
-     245,   246,   247
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   178,
+     179,   179,   179,   180,   181,   181,   181,   181,   181,   182,
+     183,   184,   184,   185,   186,   187,   188,   189,   189,   189,
+     190,   191,   192,   192,   193,   193,   193,   193,   194,   195,
+     195,   196,   197,   198,   199,   199,   200,   201,   202,   202,
+     203,   204,   204,   205,   205,   205,   206,   207,   207,   207,
+     207,   207,   207,   208,   208,   209,   210,   211,   212,   213,
+     213,   214,   214,   215,   216,   216,   217,   218,   219,   219,
+     220,   221,   222,   223,   223,   224,   224,   225,   226,   226,
+     227,   227,   227,   227,   228,   228,   229,   229,   229,   231,
+     230,   233,   232,   234,   234,   235,   236,   236,   236,   236,
+     236,   236,   237,   238,   238,   238,   239,   239,   239,   240,
+     240,   240,   241,   241,   241,   242,   242,   243,   243,   244,
+     244,   245,   246,   247,   248
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -919,20 +928,20 @@ static const yytype_uint8 yyr2[] =
        0,     3,     1,     1,     2,     1,     2,     1,     1,     3,
        6,     0,     1,     2,     4,     1,     3,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     1,
-       1,     1,     5,     1,     1,     1,     2,     1,     1,     2,
-       1,     2,     6,     1,     3,     1,     1,     1,     1,     1,
-       4,     1,     1,     1,     1,     1,     1,     2,     1,     1,
-       5,     1,     2,     1,     1,     5,     2,     0,     6,     3,
-       0,     1,     1,     1,     1,     1,     2,     1,     1,     2,
-       4,     4,     0,     1,     1,     1,     1,     1,     1,     1,
-       1,     5,     1,     3,     5,     5,     1,     3,     5,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     5,
-       7,     9,     2,     2,     1,     1,     0,     0,     3,     0,
-       3,     3,     1,     4,     2,     2,     2,     2,     3,     2,
-       3,     0,     1,     1,     0,     1,     1,     0,     1,     1,
-       0,     1,     1,     0,     3,     0,     3,     0,     3,     1,
-       1,     1,     4
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
+       1,     1,     1,     5,     1,     1,     1,     2,     1,     1,
+       2,     1,     2,     6,     1,     3,     1,     1,     1,     1,
+       1,     4,     1,     1,     1,     1,     1,     1,     2,     1,
+       1,     5,     1,     2,     1,     1,     5,     2,     0,     6,
+       3,     0,     1,     1,     1,     1,     1,     2,     1,     1,
+       2,     4,     4,     0,     3,     1,     1,     1,     2,     1,
+       1,     1,     1,     5,     1,     3,     5,     5,     1,     3,
+       5,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     5,     7,     9,     2,     2,     1,     1,     0,     0,
+       3,     0,     3,     3,     1,     4,     2,     2,     2,     2,
+       3,     2,     3,     0,     1,     1,     0,     1,     1,     0,
+       1,     1,     0,     1,     1,     0,     3,     0,     3,     0,
+       3,     1,     1,     1,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -941,138 +950,138 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint16 yydefact[] =
 {
        0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
-       0,   229,     0,     0,     0,     0,   227,     2,     0,     0,
-       0,     0,     0,     0,     0,   226,     0,     8,     0,    12,
+       0,   231,     0,     0,     0,     0,   229,     2,     0,     0,
+       0,     0,     0,     0,     0,   228,     0,     8,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    21,    22,    20,
        0,    82,    83,   107,   108,    84,    85,    86,    87,     7,
        0,     0,     0,     0,     0,     0,     0,    58,     0,    81,
-      57,     0,     0,     0,     0,     0,    69,     0,     0,   224,
-     225,    30,     0,     0,    10,    11,   232,   230,     0,     0,
-       0,   111,   226,   109,   228,   241,   239,   235,   237,   234,
-     253,   236,   226,    77,    78,    79,    80,    47,   226,   226,
-     226,   226,   226,   226,    71,    48,   217,   216,     0,     0,
-       0,     0,    53,   226,    76,     0,    54,    56,   120,   121,
-     197,   198,   122,   213,   214,     0,     0,   262,    88,   233,
-     112,     0,   113,   117,   118,   119,   211,   212,   215,     0,
-     243,   242,   244,     0,   238,     0,     0,     0,     0,    25,
-       0,    24,    23,   250,   105,   103,   253,    90,     0,     0,
-       0,     0,     0,   247,     0,   247,     0,     0,   257,   253,
-     128,   129,   130,   131,   133,   132,   134,   135,   136,   137,
-       0,   250,    95,     0,    93,    91,   253,     0,   100,    89,
-       0,    74,    73,    75,    46,     0,     0,   231,     0,   223,
-     222,   245,   246,   240,   259,     0,   226,   226,     0,     0,
-     226,   251,   252,   104,   106,     0,     0,     0,   168,   169,
-     167,     0,   150,   249,   248,   149,     0,     0,     0,     0,
-     192,   188,     0,   187,   253,   180,   174,   173,   172,     0,
-       0,     0,     0,    94,     0,    96,     0,     0,    92,   226,
-     218,    62,     0,    60,    61,     0,   226,     0,   110,   254,
-      27,    26,    72,    45,   255,     0,     0,   209,     0,   210,
-       0,   171,     0,   159,     0,   151,     0,   156,   157,   140,
-     141,   158,   138,   139,     0,   194,   186,   193,     0,   189,
-     182,   184,   183,   179,   181,   261,     0,   155,   154,   161,
-     162,     0,     0,   102,     0,    99,     0,     0,     0,    55,
-      70,    64,    44,     0,     0,   226,     0,    31,     0,   226,
-     204,   208,     0,     0,   247,   196,     0,   195,     0,   258,
-     166,   165,   163,   164,   160,   185,     0,    97,    98,   101,
-     226,   219,     0,     0,    63,   226,    51,    52,    50,     0,
-       0,     0,   115,   123,   126,   124,   199,   200,   125,   260,
-       0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    29,    28,   170,   145,   147,   144,     0,
-     142,   143,     0,   191,   190,   175,     0,    67,    65,    68,
-      66,     0,     0,     0,   127,   177,   226,   114,   256,   148,
-     146,   152,   153,   226,   220,   226,     0,     0,     0,   176,
-     116,     0,     0,     0,   202,     0,   206,     0,   221,   226,
-     201,     0,   205,     0,     0,    49,   203,   207,     0,     0,
-     178
+      57,     0,     0,     0,     0,     0,    69,     0,     0,   226,
+     227,    30,     0,     0,    10,    11,   234,   232,     0,     0,
+       0,   111,   228,   109,   230,   243,   241,   237,   239,   236,
+     255,   238,   228,    77,    78,    79,    80,    47,   228,   228,
+     228,   228,   228,   228,    71,    48,   219,   218,     0,     0,
+       0,     0,    53,   228,    76,     0,    54,    56,   120,   121,
+     199,   200,   122,   215,   216,     0,     0,   264,    88,   235,
+     112,     0,   113,   117,   118,   119,   213,   214,   217,     0,
+     245,   244,   246,     0,   240,     0,     0,     0,     0,    25,
+       0,    24,    23,   252,   105,   103,   255,    90,     0,     0,
+       0,     0,     0,     0,   249,     0,   249,     0,     0,   259,
+     255,   128,   129,   130,   131,   133,   132,   134,   135,   136,
+     137,     0,   138,   252,    95,     0,    93,    91,   255,     0,
+     100,    89,     0,    74,    73,    75,    46,     0,     0,   233,
+       0,   225,   224,   247,   248,   242,   261,     0,   228,   228,
+       0,     0,   228,   253,   254,   104,   106,     0,     0,     0,
+     198,   169,   170,   168,     0,   151,   251,   250,   150,     0,
+       0,     0,     0,   193,   189,     0,   188,   255,   181,   175,
+     174,   173,     0,     0,     0,     0,    94,     0,    96,     0,
+       0,    92,   228,   220,    62,     0,    60,    61,     0,   228,
+       0,   110,   256,    27,    26,    72,    45,   257,     0,     0,
+     211,     0,   212,     0,   172,     0,   160,     0,   152,     0,
+     157,   158,   141,   142,   159,   139,   140,     0,     0,   187,
+       0,   190,   183,   185,   184,   180,   182,   263,     0,   156,
+     155,   162,   163,     0,     0,   102,     0,    99,     0,     0,
+       0,    55,    70,    64,    44,     0,     0,   228,     0,    31,
+       0,   228,   206,   210,     0,     0,   249,   197,     0,   195,
+       0,   196,     0,   260,   167,   166,   164,   165,   161,   186,
+       0,    97,    98,   101,   228,   221,     0,     0,    63,   228,
+      51,    52,    50,     0,     0,     0,   115,   123,   126,   124,
+     201,   202,   125,   262,     0,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    29,    28,   171,
+     146,   148,   145,     0,   143,   144,     0,   192,   194,   191,
+     176,     0,    67,    65,    68,    66,     0,     0,     0,   127,
+     178,   228,   114,   258,   149,   147,   153,   154,   228,   222,
+     228,     0,     0,     0,   177,   116,     0,     0,     0,   204,
+       0,   208,     0,   223,   228,   203,     0,   207,     0,     0,
+      49,   205,   209,     0,     0,   179
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     3,     4,     6,     8,     9,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,   265,   373,
-      39,   146,    71,    58,    67,   312,   313,   348,   114,    59,
-     115,   252,   253,   254,   344,   388,   390,    68,   311,   105,
-     263,   194,    97,    40,    41,   116,   189,   306,   248,   304,
-     157,    42,    43,    44,   131,    83,   258,   351,   132,   117,
-     352,   353,   118,   170,   282,   171,   380,   400,   172,   225,
-     173,   401,   174,   298,   283,   274,   175,   301,   334,   176,
-     220,   177,   272,   178,   238,   179,   394,   409,   180,   293,
-     294,   336,   235,   286,   287,   328,   326,   119,   355,   356,
-     413,   120,   357,   415,   121,   268,   270,   358,   122,   136,
-     123,   124,   138,    72,    45,    55,    46,    50,    77,    47,
-      60,    91,   142,   203,   226,   213,   144,   317,   240,   205,
-     360,   296,    48
+      31,    32,    33,    34,    35,    36,    37,    38,   268,   377,
+      39,   146,    71,    58,    67,   314,   315,   352,   114,    59,
+     115,   255,   256,   257,   348,   393,   395,    68,   313,   105,
+     266,   196,    97,    40,    41,   116,   191,   308,   251,   306,
+     157,    42,    43,    44,   131,    83,   261,   355,   132,   117,
+     356,   357,   118,   171,   285,   172,   384,   405,   173,   228,
+     174,   406,   175,   300,   286,   277,   176,   303,   338,   177,
+     223,   178,   275,   179,   241,   180,   399,   414,   181,   295,
+     296,   340,   238,   289,   330,   332,   328,   182,   119,   359,
+     360,   418,   120,   361,   420,   121,   271,   273,   362,   122,
+     136,   123,   124,   138,    72,    45,    55,    46,    50,    77,
+      47,    60,    91,   142,   205,   229,   215,   144,   319,   243,
+     207,   364,   298,    48
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -377
+#define YYPACT_NINF -369
 static const yytype_int16 yypact[] =
 {
-     205,  -377,  -377,    34,  -377,  -377,    50,   -17,  -377,   166,
-     -16,  -377,    12,    26,    36,    65,  -377,  -377,   -31,   -31,
-     -31,   -31,   -31,   -31,    72,   -67,   -31,  -377,   108,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-     109,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-     118,    28,   106,   107,    54,   118,    78,  -377,   110,   101,
-    -377,   113,   114,   115,   116,   117,  -377,   119,   123,  -377,
-    -377,  -377,   -15,   120,  -377,  -377,  -377,   121,   131,   -13,
-     168,   214,   -34,  -377,   121,    27,  -377,  -377,  -377,  -377,
-     129,  -377,   -67,  -377,  -377,  -377,  -377,  -377,   -67,   -67,
-     -67,   -67,   -67,   -67,  -377,  -377,  -377,  -377,     1,    88,
-      84,     0,   130,   -67,    66,   132,  -377,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,   -15,   141,  -377,  -377,  -377,
-    -377,   133,  -377,  -377,  -377,  -377,  -377,  -377,  -377,   188,
-    -377,  -377,   -25,   219,  -377,   136,   137,   -15,   138,  -377,
-     139,  -377,  -377,     4,  -377,  -377,   129,  -377,   140,   142,
-     143,    40,   144,    63,   145,    91,    58,    16,   146,   129,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-     182,     4,  -377,   147,  -377,  -377,   129,   148,   149,  -377,
-      41,  -377,  -377,  -377,  -377,    -7,   152,  -377,   150,  -377,
-    -377,  -377,  -377,  -377,  -377,   151,   -67,   -67,   159,   167,
-     -67,  -377,  -377,  -377,  -377,   242,   243,   244,  -377,  -377,
-    -377,   245,  -377,  -377,  -377,  -377,   202,   245,    24,   161,
-     248,  -377,   163,  -377,   129,    22,  -377,  -377,  -377,   250,
-     246,    -2,   165,  -377,   253,  -377,   254,   253,  -377,   -67,
-    -377,  -377,   169,  -377,  -377,   175,   -67,   170,  -377,  -377,
-    -377,  -377,  -377,  -377,   171,   173,   174,  -377,   176,  -377,
-     177,  -377,   178,  -377,   179,  -377,   180,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,   260,  -377,  -377,  -377,   262,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,   181,  -377,  -377,  -377,
-    -377,   128,   269,  -377,   183,  -377,   185,   186,    42,  -377,
-    -377,   102,  -377,   189,    -5,   -11,   275,  -377,   105,   -67,
-    -377,  -377,   247,    45,    91,  -377,   190,  -377,   191,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,   192,  -377,  -377,  -377,
-     -67,  -377,   276,   280,  -377,   -67,  -377,  -377,  -377,    90,
-      84,    46,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-     195,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,   274,
-    -377,  -377,    -4,  -377,  -377,  -377,    47,  -377,  -377,  -377,
-    -377,   199,   200,   201,  -377,   252,   -11,  -377,  -377,  -377,
-    -377,  -377,  -377,   -67,  -377,   -67,   242,   243,   203,  -377,
-    -377,   193,   206,   209,   208,   210,   216,   269,  -377,   -67,
-    -377,   242,  -377,   243,    48,  -377,  -377,  -377,   269,   213,
-    -377
+     143,  -369,  -369,    36,  -369,  -369,    45,   -39,  -369,   169,
+     -33,  -369,   -19,    -6,    -4,    12,  -369,  -369,   -34,   -34,
+     -34,   -34,   -34,   -34,    15,    62,   -34,  -369,    26,  -369,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+      60,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+      20,    56,   107,   110,    37,    20,    -3,  -369,   111,   109,
+    -369,   113,   114,   116,   117,   118,  -369,   119,   125,  -369,
+    -369,  -369,   -15,   121,  -369,  -369,  -369,   122,   132,   -18,
+     167,   210,   -11,  -369,   122,    63,  -369,  -369,  -369,  -369,
+     130,  -369,    62,  -369,  -369,  -369,  -369,  -369,    62,    62,
+      62,    62,    62,    62,  -369,  -369,  -369,  -369,     9,    72,
+      87,    -1,   131,    62,   104,   134,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,  -369,  -369,   -15,   142,  -369,  -369,  -369,
+    -369,   135,  -369,  -369,  -369,  -369,  -369,  -369,  -369,   182,
+    -369,  -369,    52,   219,  -369,   138,   139,   -15,   140,  -369,
+     141,  -369,  -369,    61,  -369,  -369,   130,  -369,   144,   145,
+     146,   180,    11,   147,    85,   148,    99,    89,    -2,   149,
+     130,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+    -369,   184,  -369,    61,  -369,   150,  -369,  -369,   130,   151,
+     152,  -369,    27,  -369,  -369,  -369,  -369,   -10,   154,  -369,
+     153,  -369,  -369,  -369,  -369,  -369,  -369,   155,    62,    62,
+     161,   168,    62,  -369,  -369,  -369,  -369,   229,   244,   246,
+    -369,  -369,  -369,  -369,   247,  -369,  -369,  -369,  -369,   204,
+     247,    17,   163,   164,  -369,   165,  -369,   130,    67,  -369,
+    -369,  -369,   252,   248,    18,   170,  -369,   253,  -369,   255,
+     253,  -369,    62,  -369,  -369,   171,  -369,  -369,   177,    62,
+     172,  -369,  -369,  -369,  -369,  -369,  -369,   173,   175,   176,
+    -369,   178,  -369,   179,  -369,   181,  -369,   183,  -369,   185,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,   262,   264,  -369,
+     267,  -369,  -369,  -369,  -369,  -369,  -369,  -369,   186,  -369,
+    -369,  -369,  -369,   136,   269,  -369,   187,  -369,   188,   190,
+      43,  -369,  -369,   106,  -369,   193,    -5,    -7,   271,  -369,
+     108,    62,  -369,  -369,   245,     4,    99,  -369,   194,  -369,
+     195,  -369,   196,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+     197,  -369,  -369,  -369,    62,  -369,   280,   285,  -369,    62,
+    -369,  -369,  -369,    93,    87,    53,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,  -369,   199,  -369,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,   278,  -369,  -369,     8,  -369,  -369,  -369,
+    -369,    57,  -369,  -369,  -369,  -369,   203,   205,   206,  -369,
+     250,    -7,  -369,  -369,  -369,  -369,  -369,  -369,    62,  -369,
+      62,   229,   244,   208,  -369,  -369,   198,   211,   202,   213,
+     214,   218,   269,  -369,    62,  -369,   229,  -369,   244,    54,
+    -369,  -369,  -369,   269,   215,  -369
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,   -94,   -88,   124,  -377,  -377,  -333,  -377,  -100,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,   134,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,   231,  -377,  -377,  -377,    77,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-     -71,  -377,   -81,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,  -304,    99,  -377,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,   -23,  -377,
-    -377,  -286,  -377,  -377,  -377,  -377,  -377,   249,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,  -376,  -368,   251,  -377,  -377,
-    -377,   -80,  -110,   -82,  -377,  -377,  -377,  -377,   273,  -377,
-     255,  -377,  -377,  -377,  -160,   153,  -146,  -377,  -377,  -377,
-    -377,  -377,  -377
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+    -369,   -94,   -88,   133,  -369,  -369,  -334,  -369,   -85,  -369,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,   128,  -369,  -369,
+    -369,  -369,  -369,  -369,  -369,   251,  -369,  -369,  -369,    77,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+     -72,  -369,   -81,  -369,  -369,  -369,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,  -369,  -305,   101,  -369,  -369,  -369,  -369,
+    -369,  -369,  -369,  -369,  -369,  -369,  -369,  -369,   -22,  -369,
+    -369,  -336,  -369,  -369,  -369,  -369,  -369,  -369,   254,  -369,
+    -369,  -369,  -369,  -369,  -369,  -369,  -342,  -368,   256,  -369,
+    -369,  -369,   -80,  -110,   -82,  -369,  -369,  -369,  -369,   279,
+    -369,   257,  -369,  -369,  -369,  -161,   156,  -146,  -369,  -369,
+    -369,  -369,  -369,  -369
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1082,78 +1091,80 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -60
 static const yytype_int16 yytable[] =
 {
-     139,   133,   137,   190,   145,   228,   149,   106,   107,   152,
-     214,   148,   391,   150,   151,   251,   147,   346,   147,   381,
-     277,   147,   108,   241,   108,   196,   278,   109,   181,   153,
-     414,   139,   299,    56,     5,   201,   182,   154,   110,   416,
-     245,   236,   202,    69,    70,   426,   109,   208,   277,   183,
-     349,   300,   184,   140,   278,   427,   279,   110,     7,   185,
-     155,   350,   290,   291,   211,   141,   281,    57,   218,   277,
-     376,   212,   412,   186,   156,   278,    69,    70,   402,   113,
-     111,    10,   111,   112,   377,   237,   425,   222,   289,   223,
-      49,    66,   280,   347,   281,   219,   187,   188,   113,    69,
-      70,   224,   113,   292,   378,   229,    85,    86,   230,   231,
-      51,   160,   232,   261,    87,   281,   379,   223,   260,   161,
-     233,   158,   266,   392,    52,   147,   162,   163,   164,   224,
-     165,   424,   166,   159,    53,   393,    88,    89,   234,   308,
-      78,   167,   429,    61,    62,    63,    64,    65,   249,   340,
-      73,    90,   428,   396,   403,   250,   341,   385,   168,   169,
-     397,   404,    81,    54,   382,   191,    82,   139,   192,   193,
-      66,    11,    12,    13,   314,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-      93,    94,    95,    96,   330,   331,   332,   333,     1,     2,
-     199,   200,   342,   343,    74,    75,    76,    92,    79,    80,
-      98,    99,   100,   101,   102,   104,   103,   125,   126,   127,
-     386,   374,    56,   139,   354,   137,   130,   143,   -59,   197,
-     195,   204,   198,   206,   207,   209,   210,   242,   215,   264,
-     216,   217,   221,   227,   239,   244,   246,   247,   139,   256,
-     259,   262,   257,   314,   267,   269,   271,   273,   275,   284,
-     285,   288,   295,   302,   297,   303,   305,   310,   309,   316,
-     318,   319,   325,   315,   327,   320,   321,   322,   323,   324,
-     329,   335,   337,   411,   338,   339,   345,   359,   387,   383,
-     384,   385,   389,   375,   398,   399,   405,   418,   406,   407,
-     128,   417,   421,   419,   139,   354,   137,   408,   420,   422,
-     423,   139,   430,   314,   307,   410,   276,   395,    84,   255,
-       0,   134,     0,   135,   243,   129,     0,   314
+     139,   133,   137,   192,   145,   231,   149,   106,   107,   152,
+     216,   148,   254,   150,   151,   396,   147,   350,   147,   108,
+     385,   147,   108,   239,   244,    85,    86,   183,   280,   380,
+      56,   139,   280,    87,   281,   184,     5,   153,   281,   221,
+     198,   280,   248,   381,   421,   154,   109,   281,   185,   282,
+     109,   186,   301,     7,   353,    88,    89,   110,   187,    10,
+     432,   110,   210,   382,    57,   354,   222,   240,   155,   419,
+      90,   302,   188,    49,   284,   383,   417,   111,   284,    51,
+     111,   407,   156,   112,   431,   283,   429,   284,    66,   140,
+     430,   291,    52,   351,    53,   189,   190,   434,   113,    69,
+      70,   141,   113,    69,    70,   158,   113,   292,   293,   225,
+      54,   226,   203,    66,   160,   264,   161,   159,    76,   204,
+     263,   213,   162,   227,   269,   226,   397,   147,   214,   163,
+     164,   165,    74,   166,   252,   167,   232,   227,   398,   233,
+     234,   253,   310,   235,   168,    81,     1,     2,   294,    82,
+     344,   236,    61,    62,    63,    64,    65,   345,   433,    73,
+     401,   169,   170,   390,   408,   386,    75,   402,    78,   237,
+     139,   409,    69,    70,    11,    12,    13,   316,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,   193,   201,   202,   194,   195,    93,    94,
+      95,    96,   334,   335,   336,   337,   346,   347,    92,    79,
+      98,    99,    80,   100,   101,   102,   103,   104,   125,   126,
+     127,    56,   130,   378,   391,   139,   358,   137,   143,   -59,
+     199,   206,   197,   220,   200,   208,   209,   211,   212,   245,
+     267,   270,   217,   218,   219,   224,   230,   242,   247,   249,
+     250,   259,   139,   265,   262,   260,   272,   316,   274,   276,
+     278,   287,   288,   290,   297,   305,   299,   307,   304,   312,
+     311,   318,   320,   321,   327,   317,   329,   322,   323,   331,
+     324,   339,   325,   363,   326,   333,   341,   342,   416,   343,
+     349,   379,   392,   387,   388,   389,   390,   394,   403,   404,
+     410,   425,   423,   411,   412,   413,   422,   426,   424,   139,
+     358,   137,   428,   427,   435,   258,   139,   309,   316,   415,
+     128,   279,   400,     0,    84,     0,   134,   129,   135,   246,
+       0,     0,   316
 };
 
 static const yytype_int16 yycheck[] =
 {
-      82,    82,    82,   113,    92,   165,   100,    22,    23,   103,
-     156,    99,   345,   101,   102,    22,    98,    22,   100,   323,
-      24,   103,    37,   169,    37,   125,    30,    61,    28,    28,
-     406,   113,    34,    64,     0,    60,    36,    36,    72,   407,
-     186,    25,    67,   110,   111,   421,    61,   147,    24,    49,
-      61,    53,    52,    26,    30,   423,    32,    72,     8,    59,
-      59,    72,    40,    41,    60,    38,    70,    98,    28,    24,
-      25,    67,   405,    73,    73,    30,   110,   111,   382,   113,
-      95,    98,    95,    98,    39,    69,   419,    24,   234,    26,
-     106,    98,    68,    98,    70,    55,    96,    97,   113,   110,
-     111,    38,   113,    81,    59,    47,    28,    29,    50,    51,
-      98,    27,    54,   207,    36,    70,    71,    26,   206,    35,
-      62,    33,   210,    33,    98,   207,    42,    43,    44,    38,
-      46,   417,    48,    45,    98,    45,    58,    59,    80,   249,
-     112,    57,   428,    19,    20,    21,    22,    23,   107,   107,
-      26,    73,   104,   107,   107,   114,   114,   109,    74,    75,
-     114,   114,   108,    98,   324,    99,   112,   249,   102,   103,
-      98,     5,     6,     7,   256,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      99,   100,   101,   102,    76,    77,    78,    79,     3,     4,
-      22,    23,   110,   111,   106,   106,    98,   107,   112,   112,
-     107,   107,   107,   107,   107,   102,   107,   107,   107,    98,
-     340,   319,    64,   315,   315,   315,    22,   108,   108,    98,
-     108,    22,   109,   107,   107,   107,   107,    65,   108,    82,
-     108,   108,   108,   108,   108,   108,   108,   108,   340,   107,
-     109,   102,   112,   345,    22,    22,    22,    22,    66,   108,
-      22,   108,    22,   108,    28,    22,    22,   102,   109,   108,
-     107,   107,    22,   113,    22,   109,   109,   109,   109,   109,
-     109,    22,   109,   403,   109,   109,   107,    22,    22,   109,
-     109,   109,    22,    56,   109,    31,   107,   114,   108,   108,
-      79,   108,   104,   107,   396,   396,   396,    65,   109,   109,
-     104,   403,   109,   405,   247,   396,   227,   350,    55,   195,
-      -1,    82,    -1,    82,   181,    80,    -1,   419
+      82,    82,    82,   113,    92,   166,   100,    22,    23,   103,
+     156,    99,    22,   101,   102,   349,    98,    22,   100,    37,
+     325,   103,    37,    25,   170,    28,    29,    28,    24,    25,
+      64,   113,    24,    36,    30,    36,     0,    28,    30,    28,
+     125,    24,   188,    39,   412,    36,    61,    30,    49,    32,
+      61,    52,    34,     8,    61,    58,    59,    72,    59,    98,
+     428,    72,   147,    59,    98,    72,    55,    69,    59,   411,
+      73,    53,    73,   106,    70,    71,   410,    95,    70,    98,
+      95,   386,    73,    98,   426,    68,   422,    70,    98,    26,
+     424,   237,    98,    98,    98,    96,    97,   433,   113,   110,
+     111,    38,   113,   110,   111,    33,   113,    40,    41,    24,
+      98,    26,    60,    98,    27,   209,    29,    45,    98,    67,
+     208,    60,    35,    38,   212,    26,    33,   209,    67,    42,
+      43,    44,   106,    46,   107,    48,    47,    38,    45,    50,
+      51,   114,   252,    54,    57,   108,     3,     4,    81,   112,
+     107,    62,    19,    20,    21,    22,    23,   114,   104,    26,
+     107,    74,    75,   109,   107,   326,   106,   114,   112,    80,
+     252,   114,   110,   111,     5,     6,     7,   259,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    99,    22,    23,   102,   103,    99,   100,
+     101,   102,    76,    77,    78,    79,   110,   111,   107,   112,
+     107,   107,   112,   107,   107,   107,   107,   102,   107,   107,
+      98,    64,    22,   321,   344,   317,   317,   317,   108,   108,
+      98,    22,   108,    63,   109,   107,   107,   107,   107,    65,
+      82,    22,   108,   108,   108,   108,   108,   108,   108,   108,
+     108,   107,   344,   102,   109,   112,    22,   349,    22,    22,
+      66,   108,   108,   108,    22,    22,    28,    22,   108,   102,
+     109,   108,   107,   107,    22,   113,    22,   109,   109,    22,
+     109,    22,   109,    22,   109,   109,   109,   109,   408,   109,
+     107,    56,    22,   109,   109,   109,   109,    22,   109,    31,
+     107,   109,   114,   108,   108,    65,   108,   104,   107,   401,
+     401,   401,   104,   109,   109,   197,   408,   250,   410,   401,
+      79,   230,   354,    -1,    55,    -1,    82,    80,    82,   183,
+      -1,    -1,   424
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1164,46 +1175,46 @@ static const yytype_uint8 yystos[] =
       98,     5,     6,     7,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,   121,   122,   123,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   135,
-     158,   159,   166,   167,   168,   229,   231,   234,   247,   106,
-     232,    98,    98,    98,    98,   230,    64,    98,   138,   144,
-     235,   138,   138,   138,   138,   138,    98,   139,   152,   110,
-     111,   137,   228,   138,   106,   106,    98,   233,   112,   112,
-     112,   108,   112,   170,   233,    28,    29,    36,    58,    59,
-      73,   236,   107,    99,   100,   101,   102,   157,   107,   107,
+     158,   159,   166,   167,   168,   230,   232,   235,   248,   106,
+     233,    98,    98,    98,    98,   231,    64,    98,   138,   144,
+     236,   138,   138,   138,   138,   138,    98,   139,   152,   110,
+     111,   137,   229,   138,   106,   106,    98,   234,   112,   112,
+     112,   108,   112,   170,   234,    28,    29,    36,    58,    59,
+      73,   237,   107,    99,   100,   101,   102,   157,   107,   107,
      107,   107,   107,   107,   102,   154,    22,    23,    37,    61,
-      72,    95,    98,   113,   143,   145,   160,   174,   177,   212,
-     216,   219,   223,   225,   226,   107,   107,    98,   160,   235,
-      22,   169,   173,   177,   212,   222,   224,   226,   227,   228,
-      26,    38,   237,   108,   241,   137,   136,   228,   137,   136,
+      72,    95,    98,   113,   143,   145,   160,   174,   177,   213,
+     217,   220,   224,   226,   227,   107,   107,    98,   160,   236,
+      22,   169,   173,   177,   213,   223,   225,   227,   228,   229,
+      26,    38,   238,   108,   242,   137,   136,   229,   137,   136,
      137,   137,   136,    28,    36,    59,    73,   165,    33,    45,
-      27,    35,    42,    43,    44,    46,    48,    57,    74,    75,
-     178,   180,   183,   185,   187,   191,   194,   196,   198,   200,
-     203,    28,    36,    49,    52,    59,    73,    96,    97,   161,
-     227,    99,   102,   103,   156,   108,   143,    98,   109,    22,
-      23,    60,    67,   238,    22,   244,   107,   107,   143,   107,
-     107,    60,    67,   240,   241,   108,   108,   108,    28,    55,
-     195,   108,    24,    26,    38,   184,   239,   108,   239,    47,
-      50,    51,    54,    62,    80,   207,    25,    69,   199,   108,
-     243,   241,    65,   240,   108,   241,   108,   108,   163,   107,
-     114,    22,   146,   147,   148,   152,   107,   112,   171,   109,
-     137,   136,   102,   155,    82,   133,   137,    22,   220,    22,
-     221,    22,   197,    22,   190,    66,   190,    24,    30,    32,
-      68,    70,   179,   189,   108,    22,   208,   209,   108,   241,
-      40,    41,    81,   204,   205,    22,   246,    28,   188,    34,
-      53,   192,   108,    22,   164,    22,   162,   164,   227,   109,
-     102,   153,   140,   141,   228,   113,   108,   242,   107,   107,
-     109,   109,   109,   109,   109,    22,   211,    22,   210,   109,
-      76,    77,    78,    79,   193,    22,   206,   109,   109,   109,
-     107,   114,   110,   111,   149,   107,    22,    98,   142,    61,
-      72,   172,   175,   176,   177,   213,   214,   217,   222,    22,
-     245,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,   134,   137,    56,    25,    39,    59,    71,
-     181,   189,   239,   109,   109,   109,   227,    22,   150,    22,
-     151,   141,    33,    45,   201,   203,   107,   114,   109,    31,
-     182,   186,   189,   107,   114,   107,   108,   108,    65,   202,
-     175,   227,   141,   215,   220,   218,   221,   108,   114,   107,
-     109,   104,   109,   104,   206,   141,   220,   221,   104,   206,
-     109
+      27,    29,    35,    42,    43,    44,    46,    48,    57,    74,
+      75,   178,   180,   183,   185,   187,   191,   194,   196,   198,
+     200,   203,   212,    28,    36,    49,    52,    59,    73,    96,
+      97,   161,   228,    99,   102,   103,   156,   108,   143,    98,
+     109,    22,    23,    60,    67,   239,    22,   245,   107,   107,
+     143,   107,   107,    60,    67,   241,   242,   108,   108,   108,
+      63,    28,    55,   195,   108,    24,    26,    38,   184,   240,
+     108,   240,    47,    50,    51,    54,    62,    80,   207,    25,
+      69,   199,   108,   244,   242,    65,   241,   108,   242,   108,
+     108,   163,   107,   114,    22,   146,   147,   148,   152,   107,
+     112,   171,   109,   137,   136,   102,   155,    82,   133,   137,
+      22,   221,    22,   222,    22,   197,    22,   190,    66,   190,
+      24,    30,    32,    68,    70,   179,   189,   108,   108,   208,
+     108,   242,    40,    41,    81,   204,   205,    22,   247,    28,
+     188,    34,    53,   192,   108,    22,   164,    22,   162,   164,
+     228,   109,   102,   153,   140,   141,   229,   113,   108,   243,
+     107,   107,   109,   109,   109,   109,   109,    22,   211,    22,
+     209,    22,   210,   109,    76,    77,    78,    79,   193,    22,
+     206,   109,   109,   109,   107,   114,   110,   111,   149,   107,
+      22,    98,   142,    61,    72,   172,   175,   176,   177,   214,
+     215,   218,   223,    22,   246,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,   134,   137,    56,
+      25,    39,    59,    71,   181,   189,   240,   109,   109,   109,
+     109,   228,    22,   150,    22,   151,   141,    33,    45,   201,
+     203,   107,   114,   109,    31,   182,   186,   189,   107,   114,
+     107,   108,   108,    65,   202,   175,   228,   141,   216,   221,
+     219,   222,   108,   114,   107,   109,   104,   109,   104,   206,
+     141,   221,   222,   104,   206,   109
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2057,7 +2068,7 @@ yyreduce:
         case 3:
 
 /* Line 1455 of yacc.c  */
-#line 253 "program_parse.y"
+#line 260 "program_parse.y"
     {
           if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
@@ -2070,7 +2081,7 @@ yyreduce:
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 261 "program_parse.y"
+#line 268 "program_parse.y"
     {
           if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
@@ -2085,7 +2096,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 277 "program_parse.y"
+#line 284 "program_parse.y"
     {
           int valid = 0;
 
@@ -2110,7 +2121,7 @@ yyreduce:
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 303 "program_parse.y"
+#line 310 "program_parse.y"
     {
           if ((yyvsp[(1) - (2)].inst) != NULL) {
              if (state->inst_tail == NULL) {
@@ -2130,7 +2141,7 @@ yyreduce:
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 321 "program_parse.y"
+#line 328 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumAluInstructions++;
@@ -2140,7 +2151,7 @@ yyreduce:
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 326 "program_parse.y"
+#line 333 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumTexInstructions++;
@@ -2150,7 +2161,7 @@ yyreduce:
   case 23:
 
 /* Line 1455 of yacc.c  */
-#line 346 "program_parse.y"
+#line 353 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2159,7 +2170,7 @@ yyreduce:
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 352 "program_parse.y"
+#line 359 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (4)].temp_inst).Opcode, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (4)].temp_inst).SaturateMode;
@@ -2169,7 +2180,7 @@ yyreduce:
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 359 "program_parse.y"
+#line 366 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (4)].temp_inst).Opcode, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (4)].temp_inst).SaturateMode;
@@ -2179,7 +2190,7 @@ yyreduce:
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 366 "program_parse.y"
+#line 373 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (6)].temp_inst).Opcode, & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (6)].temp_inst).SaturateMode;
@@ -2189,7 +2200,7 @@ yyreduce:
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 374 "program_parse.y"
+#line 381 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (6)].temp_inst).Opcode, & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (6)].temp_inst).SaturateMode;
@@ -2199,7 +2210,7 @@ yyreduce:
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 382 "program_parse.y"
+#line 389 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (8)].temp_inst).Opcode, & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg));
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (8)].temp_inst).SaturateMode;
@@ -2209,7 +2220,7 @@ yyreduce:
   case 29:
 
 /* Line 1455 of yacc.c  */
-#line 389 "program_parse.y"
+#line 396 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (8)].temp_inst).Opcode, & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL);
           if ((yyval.inst) != NULL) {
@@ -2257,7 +2268,7 @@ yyreduce:
   case 30:
 
 /* Line 1455 of yacc.c  */
-#line 434 "program_parse.y"
+#line 441 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
           state->fragment.UsesKill = 1;
@@ -2267,7 +2278,7 @@ yyreduce:
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 441 "program_parse.y"
+#line 448 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
@@ -2276,96 +2287,97 @@ yyreduce:
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 446 "program_parse.y"
+#line 453 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_INDEX; ;}
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 447 "program_parse.y"
+#line 454 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_INDEX; ;}
     break;
 
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 448 "program_parse.y"
+#line 455 "program_parse.y"
     { (yyval.integer) = TEXTURE_3D_INDEX; ;}
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 449 "program_parse.y"
+#line 456 "program_parse.y"
     { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 450 "program_parse.y"
+#line 457 "program_parse.y"
     { (yyval.integer) = TEXTURE_RECT_INDEX; ;}
     break;
 
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 451 "program_parse.y"
+#line 458 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_INDEX; ;}
     break;
 
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 452 "program_parse.y"
+#line 459 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_INDEX; ;}
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 453 "program_parse.y"
+#line 460 "program_parse.y"
     { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
     break;
 
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 454 "program_parse.y"
+#line 461 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
   case 41:
 
 /* Line 1455 of yacc.c  */
-#line 455 "program_parse.y"
+#line 462 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
   case 42:
 
 /* Line 1455 of yacc.c  */
-#line 456 "program_parse.y"
+#line 463 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
   case 43:
 
 /* Line 1455 of yacc.c  */
-#line 457 "program_parse.y"
+#line 464 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 461 "program_parse.y"
+#line 468 "program_parse.y"
     {
           /* FIXME: Is this correct?  Should the extenedSwizzle be applied
            * FIXME: to the existing swizzle?
            */
           (yyvsp[(4) - (6)].src_reg).Base.Swizzle = (yyvsp[(6) - (6)].swiz_mask).swizzle;
+          (yyvsp[(4) - (6)].src_reg).Base.Negate = (yyvsp[(6) - (6)].swiz_mask).mask;
 
           (yyval.inst) = asm_instruction_ctor(OPCODE_SWZ, & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), NULL, NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (6)].temp_inst).SaturateMode;
@@ -2375,7 +2387,7 @@ yyreduce:
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 473 "program_parse.y"
+#line 481 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2391,7 +2403,7 @@ yyreduce:
   case 46:
 
 /* Line 1455 of yacc.c  */
-#line 486 "program_parse.y"
+#line 494 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2407,7 +2419,7 @@ yyreduce:
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 499 "program_parse.y"
+#line 507 "program_parse.y"
     {
           (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
           (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
@@ -2432,7 +2444,7 @@ yyreduce:
   case 48:
 
 /* Line 1455 of yacc.c  */
-#line 521 "program_parse.y"
+#line 529 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2444,43 +2456,73 @@ yyreduce:
   case 49:
 
 /* Line 1455 of yacc.c  */
-#line 530 "program_parse.y"
-    {
-          (yyval.swiz_mask).swizzle = MAKE_SWIZZLE4((yyvsp[(1) - (7)].swiz_mask).swizzle, (yyvsp[(3) - (7)].swiz_mask).swizzle,
-                                     (yyvsp[(5) - (7)].swiz_mask).swizzle, (yyvsp[(7) - (7)].swiz_mask).swizzle);
-          (yyval.swiz_mask).mask = ((yyvsp[(1) - (7)].swiz_mask).mask) | ((yyvsp[(3) - (7)].swiz_mask).mask << 1) | ((yyvsp[(5) - (7)].swiz_mask).mask << 2)
-             | ((yyvsp[(7) - (7)].swiz_mask).mask << 3);
+#line 538 "program_parse.y"
+    {
+          const unsigned xyzw_valid =
+             ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
+             | ((yyvsp[(3) - (7)].ext_swizzle).xyzw_valid << 1)
+             | ((yyvsp[(5) - (7)].ext_swizzle).xyzw_valid << 2)
+             | ((yyvsp[(7) - (7)].ext_swizzle).xyzw_valid << 3);
+          const unsigned rgba_valid =
+             ((yyvsp[(1) - (7)].ext_swizzle).rgba_valid << 0)
+             | ((yyvsp[(3) - (7)].ext_swizzle).rgba_valid << 1)
+             | ((yyvsp[(5) - (7)].ext_swizzle).rgba_valid << 2)
+             | ((yyvsp[(7) - (7)].ext_swizzle).rgba_valid << 3);
+
+          /* All of the swizzle components have to be valid in either RGBA
+           * or XYZW.  Note that 0 and 1 are valid in both, so both masks
+           * can have some bits set.
+           *
+           * We somewhat deviate from the spec here.  It would be really hard
+           * to figure out which component is the error, and there probably
+           * isn't a lot of benefit.
+           */
+          if ((rgba_valid != 0x0f) && (xyzw_valid != 0x0f)) {
+             yyerror(& (yylsp[(1) - (7)]), state, "cannot combine RGBA and XYZW swizzle "
+                     "components");
+             YYERROR;
+          }
+
+          (yyval.swiz_mask).swizzle = MAKE_SWIZZLE4((yyvsp[(1) - (7)].ext_swizzle).swz, (yyvsp[(3) - (7)].ext_swizzle).swz, (yyvsp[(5) - (7)].ext_swizzle).swz, (yyvsp[(7) - (7)].ext_swizzle).swz);
+          (yyval.swiz_mask).mask = ((yyvsp[(1) - (7)].ext_swizzle).negate) | ((yyvsp[(3) - (7)].ext_swizzle).negate << 1) | ((yyvsp[(5) - (7)].ext_swizzle).negate << 2)
+             | ((yyvsp[(7) - (7)].ext_swizzle).negate << 3);
        ;}
     break;
 
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 539 "program_parse.y"
+#line 571 "program_parse.y"
     {
-          (yyval.swiz_mask).swizzle = (yyvsp[(2) - (2)].integer);
-          (yyval.swiz_mask).mask = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
+          (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
+          (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
        ;}
     break;
 
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 546 "program_parse.y"
+#line 578 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
              YYERROR;
           }
 
-          (yyval.integer) = ((yyvsp[(1) - (1)].integer) == 0) ? SWIZZLE_ZERO : SWIZZLE_ONE;
+          (yyval.ext_swizzle).swz = ((yyvsp[(1) - (1)].integer) == 0) ? SWIZZLE_ZERO : SWIZZLE_ONE;
+
+          /* 0 and 1 are valid for both RGBA swizzle names and XYZW
+           * swizzle names.
+           */
+          (yyval.ext_swizzle).xyzw_valid = 1;
+          (yyval.ext_swizzle).rgba_valid = 1;
        ;}
     break;
 
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 555 "program_parse.y"
+#line 593 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2489,17 +2531,39 @@ yyreduce:
 
           switch ((yyvsp[(1) - (1)].string)[0]) {
           case 'x':
-             (yyval.integer) = SWIZZLE_X;
+             (yyval.ext_swizzle).swz = SWIZZLE_X;
+             (yyval.ext_swizzle).xyzw_valid = 1;
              break;
           case 'y':
-             (yyval.integer) = SWIZZLE_Y;
+             (yyval.ext_swizzle).swz = SWIZZLE_Y;
+             (yyval.ext_swizzle).xyzw_valid = 1;
              break;
           case 'z':
-             (yyval.integer) = SWIZZLE_Z;
+             (yyval.ext_swizzle).swz = SWIZZLE_Z;
+             (yyval.ext_swizzle).xyzw_valid = 1;
              break;
           case 'w':
-             (yyval.integer) = SWIZZLE_W;
+             (yyval.ext_swizzle).swz = SWIZZLE_W;
+             (yyval.ext_swizzle).xyzw_valid = 1;
              break;
+
+          case 'r':
+             (yyval.ext_swizzle).swz = SWIZZLE_X;
+             (yyval.ext_swizzle).rgba_valid = 1;
+             break;
+          case 'g':
+             (yyval.ext_swizzle).swz = SWIZZLE_Y;
+             (yyval.ext_swizzle).rgba_valid = 1;
+             break;
+          case 'b':
+             (yyval.ext_swizzle).swz = SWIZZLE_Z;
+             (yyval.ext_swizzle).rgba_valid = 1;
+             break;
+          case 'a':
+             (yyval.ext_swizzle).swz = SWIZZLE_W;
+             (yyval.ext_swizzle).rgba_valid = 1;
+             break;
+
           default:
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
              YYERROR;
@@ -2511,7 +2575,7 @@ yyreduce:
   case 53:
 
 /* Line 1455 of yacc.c  */
-#line 583 "program_parse.y"
+#line 643 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2539,14 +2603,14 @@ yyreduce:
              (yyval.src_reg).Base.Index = s->param_binding_begin;
              break;
           case at_attrib:
-            (yyval.src_reg).Base.File = PROGRAM_INPUT;
-            (yyval.src_reg).Base.Index = s->attrib_binding;
-            state->prog->InputsRead |= (1U << (yyval.src_reg).Base.Index);
+             (yyval.src_reg).Base.File = PROGRAM_INPUT;
+             (yyval.src_reg).Base.Index = s->attrib_binding;
+             state->prog->InputsRead |= (1U << (yyval.src_reg).Base.Index);
 
-            if (!validate_inputs(& (yylsp[(1) - (1)]), state)) {
-               YYERROR;
-            }
-            break;
+             if (!validate_inputs(& (yylsp[(1) - (1)]), state)) {
+                YYERROR;
+             }
+             break;
 
           default:
              YYERROR;
@@ -2558,7 +2622,7 @@ yyreduce:
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 625 "program_parse.y"
+#line 685 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2574,7 +2638,7 @@ yyreduce:
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 636 "program_parse.y"
+#line 696 "program_parse.y"
     {
           if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr
               && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) {
@@ -2600,7 +2664,7 @@ yyreduce:
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 657 "program_parse.y"
+#line 717 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2613,7 +2677,7 @@ yyreduce:
   case 57:
 
 /* Line 1455 of yacc.c  */
-#line 667 "program_parse.y"
+#line 727 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2624,7 +2688,7 @@ yyreduce:
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 673 "program_parse.y"
+#line 733 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2638,12 +2702,19 @@ yyreduce:
           }
 
           init_dst_reg(& (yyval.dst_reg));
-          if (s->type == at_temp) {
+          switch (s->type) {
+          case at_temp:
              (yyval.dst_reg).File = PROGRAM_TEMPORARY;
              (yyval.dst_reg).Index = s->temp_binding;
-          } else {
+             break;
+          case at_output:
+             (yyval.dst_reg).File = PROGRAM_OUTPUT;
+             (yyval.dst_reg).Index = s->output_binding;
+             break;
+          default:
              (yyval.dst_reg).File = s->param_binding_type;
              (yyval.dst_reg).Index = s->param_binding_begin;
+             break;
           }
        ;}
     break;
@@ -2651,7 +2722,7 @@ yyreduce:
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 697 "program_parse.y"
+#line 764 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2671,7 +2742,7 @@ yyreduce:
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 716 "program_parse.y"
+#line 783 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
@@ -2681,7 +2752,7 @@ yyreduce:
   case 63:
 
 /* Line 1455 of yacc.c  */
-#line 723 "program_parse.y"
+#line 790 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2696,28 +2767,28 @@ yyreduce:
   case 64:
 
 /* Line 1455 of yacc.c  */
-#line 734 "program_parse.y"
+#line 801 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 65:
 
 /* Line 1455 of yacc.c  */
-#line 735 "program_parse.y"
+#line 802 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
   case 66:
 
 /* Line 1455 of yacc.c  */
-#line 736 "program_parse.y"
+#line 803 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
   case 67:
 
 /* Line 1455 of yacc.c  */
-#line 740 "program_parse.y"
+#line 807 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2732,7 +2803,7 @@ yyreduce:
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 752 "program_parse.y"
+#line 819 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2747,7 +2818,7 @@ yyreduce:
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 764 "program_parse.y"
+#line 831 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2768,7 +2839,7 @@ yyreduce:
   case 70:
 
 /* Line 1455 of yacc.c  */
-#line 782 "program_parse.y"
+#line 849 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2782,7 +2853,7 @@ yyreduce:
   case 71:
 
 /* Line 1455 of yacc.c  */
-#line 793 "program_parse.y"
+#line 860 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2797,21 +2868,21 @@ yyreduce:
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 809 "program_parse.y"
+#line 876 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
   case 81:
 
 /* Line 1455 of yacc.c  */
-#line 813 "program_parse.y"
+#line 880 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
   case 88:
 
 /* Line 1455 of yacc.c  */
-#line 825 "program_parse.y"
+#line 892 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -2832,7 +2903,7 @@ yyreduce:
   case 89:
 
 /* Line 1455 of yacc.c  */
-#line 843 "program_parse.y"
+#line 910 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
@@ -2841,7 +2912,7 @@ yyreduce:
   case 90:
 
 /* Line 1455 of yacc.c  */
-#line 847 "program_parse.y"
+#line 914 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
@@ -2850,7 +2921,7 @@ yyreduce:
   case 91:
 
 /* Line 1455 of yacc.c  */
-#line 853 "program_parse.y"
+#line 920 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
@@ -2859,7 +2930,7 @@ yyreduce:
   case 92:
 
 /* Line 1455 of yacc.c  */
-#line 857 "program_parse.y"
+#line 924 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
@@ -2868,7 +2939,7 @@ yyreduce:
   case 93:
 
 /* Line 1455 of yacc.c  */
-#line 861 "program_parse.y"
+#line 928 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
@@ -2877,7 +2948,7 @@ yyreduce:
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 865 "program_parse.y"
+#line 932 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -2891,7 +2962,7 @@ yyreduce:
   case 95:
 
 /* Line 1455 of yacc.c  */
-#line 874 "program_parse.y"
+#line 941 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -2905,7 +2976,7 @@ yyreduce:
   case 96:
 
 /* Line 1455 of yacc.c  */
-#line 883 "program_parse.y"
+#line 950 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
@@ -2914,7 +2985,7 @@ yyreduce:
   case 97:
 
 /* Line 1455 of yacc.c  */
-#line 887 "program_parse.y"
+#line 954 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
@@ -2924,7 +2995,7 @@ yyreduce:
   case 98:
 
 /* Line 1455 of yacc.c  */
-#line 892 "program_parse.y"
+#line 959 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
@@ -2933,7 +3004,7 @@ yyreduce:
   case 99:
 
 /* Line 1455 of yacc.c  */
-#line 898 "program_parse.y"
+#line 965 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -2947,7 +3018,7 @@ yyreduce:
   case 103:
 
 /* Line 1455 of yacc.c  */
-#line 912 "program_parse.y"
+#line 979 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
@@ -2956,7 +3027,7 @@ yyreduce:
   case 104:
 
 /* Line 1455 of yacc.c  */
-#line 916 "program_parse.y"
+#line 983 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
@@ -2965,7 +3036,7 @@ yyreduce:
   case 105:
 
 /* Line 1455 of yacc.c  */
-#line 920 "program_parse.y"
+#line 987 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
@@ -2974,7 +3045,7 @@ yyreduce:
   case 106:
 
 /* Line 1455 of yacc.c  */
-#line 924 "program_parse.y"
+#line 991 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
@@ -2983,7 +3054,7 @@ yyreduce:
   case 109:
 
 /* Line 1455 of yacc.c  */
-#line 932 "program_parse.y"
+#line 999 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -3002,7 +3073,7 @@ yyreduce:
   case 110:
 
 /* Line 1455 of yacc.c  */
-#line 948 "program_parse.y"
+#line 1015 "program_parse.y"
     {
           if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) {
              yyerror(& (yylsp[(4) - (6)]), state, 
@@ -3027,7 +3098,7 @@ yyreduce:
   case 111:
 
 /* Line 1455 of yacc.c  */
-#line 970 "program_parse.y"
+#line 1037 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
@@ -3036,9 +3107,9 @@ yyreduce:
   case 112:
 
 /* Line 1455 of yacc.c  */
-#line 974 "program_parse.y"
+#line 1041 "program_parse.y"
     {
-          if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxParameters)) {
+          if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size");
              YYERROR;
           } else {
@@ -3050,7 +3121,7 @@ yyreduce:
   case 113:
 
 /* Line 1455 of yacc.c  */
-#line 985 "program_parse.y"
+#line 1052 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
@@ -3059,7 +3130,7 @@ yyreduce:
   case 114:
 
 /* Line 1455 of yacc.c  */
-#line 991 "program_parse.y"
+#line 1058 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
@@ -3068,7 +3139,7 @@ yyreduce:
   case 116:
 
 /* Line 1455 of yacc.c  */
-#line 998 "program_parse.y"
+#line 1065 "program_parse.y"
     {
           (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length;
           (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym);
@@ -3078,7 +3149,7 @@ yyreduce:
   case 117:
 
 /* Line 1455 of yacc.c  */
-#line 1005 "program_parse.y"
+#line 1072 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3089,7 +3160,7 @@ yyreduce:
   case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1011 "program_parse.y"
+#line 1078 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3100,7 +3171,7 @@ yyreduce:
   case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1017 "program_parse.y"
+#line 1084 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3111,7 +3182,7 @@ yyreduce:
   case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1025 "program_parse.y"
+#line 1092 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3122,7 +3193,7 @@ yyreduce:
   case 121:
 
 /* Line 1455 of yacc.c  */
-#line 1031 "program_parse.y"
+#line 1098 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3133,7 +3204,7 @@ yyreduce:
   case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1037 "program_parse.y"
+#line 1104 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3144,7 +3215,7 @@ yyreduce:
   case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1045 "program_parse.y"
+#line 1112 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3155,7 +3226,7 @@ yyreduce:
   case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1051 "program_parse.y"
+#line 1118 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3166,7 +3237,7 @@ yyreduce:
   case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1057 "program_parse.y"
+#line 1124 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3177,91 +3248,98 @@ yyreduce:
   case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1064 "program_parse.y"
+#line 1131 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
   case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1065 "program_parse.y"
+#line 1132 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "program_parse.y"
+#line 1135 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1069 "program_parse.y"
+#line 1136 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1070 "program_parse.y"
+#line 1137 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1071 "program_parse.y"
+#line 1138 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1072 "program_parse.y"
+#line 1139 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1073 "program_parse.y"
+#line 1140 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1074 "program_parse.y"
+#line 1141 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1075 "program_parse.y"
+#line 1142 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1076 "program_parse.y"
+#line 1143 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1077 "program_parse.y"
+#line 1144 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1081 "program_parse.y"
+#line 1145 "program_parse.y"
+    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
+    break;
+
+  case 139:
+
+/* Line 1455 of yacc.c  */
+#line 1149 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3270,37 +3348,37 @@ yyreduce:
        ;}
     break;
 
-  case 139:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1090 "program_parse.y"
+#line 1158 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 140:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1094 "program_parse.y"
+#line 1162 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
     break;
 
-  case 141:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1098 "program_parse.y"
+#line 1166 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
     break;
 
-  case 142:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1104 "program_parse.y"
+#line 1172 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3309,28 +3387,28 @@ yyreduce:
        ;}
     break;
 
-  case 143:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1113 "program_parse.y"
+#line 1181 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 144:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1117 "program_parse.y"
+#line 1185 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
     break;
 
-  case 145:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1121 "program_parse.y"
+#line 1189 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3341,57 +3419,57 @@ yyreduce:
        ;}
     break;
 
-  case 146:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1130 "program_parse.y"
+#line 1198 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 147:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1134 "program_parse.y"
+#line 1202 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
     break;
 
-  case 148:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1140 "program_parse.y"
+#line 1208 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
     break;
 
-  case 149:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1146 "program_parse.y"
+#line 1214 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
     break;
 
-  case 150:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1153 "program_parse.y"
+#line 1221 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
     break;
 
-  case 151:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1158 "program_parse.y"
+#line 1226 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3399,10 +3477,10 @@ yyreduce:
        ;}
     break;
 
-  case 152:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1166 "program_parse.y"
+#line 1234 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3412,10 +3490,10 @@ yyreduce:
        ;}
     break;
 
-  case 154:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1178 "program_parse.y"
+#line 1246 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3423,46 +3501,46 @@ yyreduce:
        ;}
     break;
 
-  case 155:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1186 "program_parse.y"
+#line 1254 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
     break;
 
-  case 156:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1192 "program_parse.y"
+#line 1260 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
     break;
 
-  case 157:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1196 "program_parse.y"
+#line 1264 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
     break;
 
-  case 158:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1200 "program_parse.y"
+#line 1268 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
     break;
 
-  case 159:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1206 "program_parse.y"
+#line 1274 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3473,10 +3551,10 @@ yyreduce:
        ;}
     break;
 
-  case 160:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1217 "program_parse.y"
+#line 1285 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3485,92 +3563,92 @@ yyreduce:
        ;}
     break;
 
-  case 161:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1226 "program_parse.y"
+#line 1294 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 162:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1230 "program_parse.y"
+#line 1298 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
     break;
 
-  case 163:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1235 "program_parse.y"
+#line 1303 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 164:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1239 "program_parse.y"
+#line 1307 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 165:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1243 "program_parse.y"
+#line 1311 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 166:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1247 "program_parse.y"
+#line 1315 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 167:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1253 "program_parse.y"
+#line 1321 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 168:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1260 "program_parse.y"
+#line 1328 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
     break;
 
-  case 169:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1264 "program_parse.y"
+#line 1332 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
     break;
 
-  case 170:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1270 "program_parse.y"
+#line 1338 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3578,10 +3656,10 @@ yyreduce:
        ;}
     break;
 
-  case 171:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1278 "program_parse.y"
+#line 1346 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3592,38 +3670,38 @@ yyreduce:
        ;}
     break;
 
-  case 172:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1289 "program_parse.y"
+#line 1357 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 173:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1296 "program_parse.y"
+#line 1364 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
     break;
 
-  case 174:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1300 "program_parse.y"
+#line 1368 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
     break;
 
-  case 175:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1306 "program_parse.y"
+#line 1374 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3633,10 +3711,10 @@ yyreduce:
        ;}
     break;
 
-  case 176:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1316 "program_parse.y"
+#line 1384 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3646,20 +3724,20 @@ yyreduce:
        ;}
     break;
 
-  case 177:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1326 "program_parse.y"
+#line 1394 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
     break;
 
-  case 178:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1331 "program_parse.y"
+#line 1399 "program_parse.y"
     {
           /* It seems logical that the matrix row range specifier would have
            * to specify a range or more than one row (i.e., $5 > $3).
@@ -3677,10 +3755,10 @@ yyreduce:
        ;}
     break;
 
-  case 179:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1349 "program_parse.y"
+#line 1417 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3688,55 +3766,55 @@ yyreduce:
        ;}
     break;
 
-  case 180:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1357 "program_parse.y"
+#line 1425 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 181:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1361 "program_parse.y"
+#line 1429 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 182:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1367 "program_parse.y"
+#line 1435 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
     break;
 
-  case 183:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1371 "program_parse.y"
+#line 1439 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
     break;
 
-  case 184:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1375 "program_parse.y"
+#line 1443 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
     break;
 
-  case 185:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1381 "program_parse.y"
+#line 1449 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3747,88 +3825,88 @@ yyreduce:
        ;}
     break;
 
-  case 186:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1392 "program_parse.y"
+#line 1460 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 187:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1397 "program_parse.y"
+#line 1465 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 188:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1402 "program_parse.y"
+#line 1470 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 189:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1407 "program_parse.y"
+#line 1475 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 190:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1412 "program_parse.y"
+#line 1480 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 191:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1417 "program_parse.y"
+#line 1485 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 192:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1424 "program_parse.y"
+#line 1492 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 193:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1428 "program_parse.y"
+#line 1496 "program_parse.y"
     {
-          (yyval.integer) = (yyvsp[(1) - (1)].integer);
+          (yyval.integer) = (yyvsp[(2) - (3)].integer);
        ;}
     break;
 
-  case 194:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1433 "program_parse.y"
+#line 1501 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -3842,10 +3920,10 @@ yyreduce:
        ;}
     break;
 
-  case 195:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1446 "program_parse.y"
+#line 1514 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -3854,10 +3932,10 @@ yyreduce:
        ;}
     break;
 
-  case 196:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1454 "program_parse.y"
+#line 1522 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -3868,10 +3946,20 @@ yyreduce:
        ;}
     break;
 
-  case 201:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1471 "program_parse.y"
+#line 1533 "program_parse.y"
+    {
+          memset((yyval.state), 0, sizeof((yyval.state)));
+          (yyval.state)[0] = STATE_DEPTH_RANGE;
+       ;}
+    break;
+
+  case 203:
+
+/* Line 1455 of yacc.c  */
+#line 1545 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3881,30 +3969,30 @@ yyreduce:
        ;}
     break;
 
-  case 202:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1481 "program_parse.y"
+#line 1555 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 203:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 1486 "program_parse.y"
+#line 1560 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 204:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 1493 "program_parse.y"
+#line 1567 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3914,10 +4002,10 @@ yyreduce:
        ;}
     break;
 
-  case 205:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 1503 "program_parse.y"
+#line 1577 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3927,30 +4015,30 @@ yyreduce:
        ;}
     break;
 
-  case 206:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 1512 "program_parse.y"
+#line 1586 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 207:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1517 "program_parse.y"
+#line 1591 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 208:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1524 "program_parse.y"
+#line 1598 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3960,10 +4048,10 @@ yyreduce:
        ;}
     break;
 
-  case 209:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1534 "program_parse.y"
+#line 1608 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -3973,10 +4061,10 @@ yyreduce:
        ;}
     break;
 
-  case 210:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1544 "program_parse.y"
+#line 1618 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -3986,79 +4074,88 @@ yyreduce:
        ;}
     break;
 
-  case 215:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1559 "program_parse.y"
+#line 1633 "program_parse.y"
     {
-          (yyval.vector).count = 1;
+          (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
+          (yyval.vector).data[1] = (yyvsp[(1) - (1)].real);
+          (yyval.vector).data[2] = (yyvsp[(1) - (1)].real);
+          (yyval.vector).data[3] = (yyvsp[(1) - (1)].real);
        ;}
     break;
 
-  case 216:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1566 "program_parse.y"
+#line 1643 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
+          (yyval.vector).data[1] = (yyvsp[(1) - (1)].real);
+          (yyval.vector).data[2] = (yyvsp[(1) - (1)].real);
+          (yyval.vector).data[3] = (yyvsp[(1) - (1)].real);
        ;}
     break;
 
-  case 217:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1571 "program_parse.y"
+#line 1651 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
+          (yyval.vector).data[1] = (float) (yyvsp[(1) - (1)].integer);
+          (yyval.vector).data[2] = (float) (yyvsp[(1) - (1)].integer);
+          (yyval.vector).data[3] = (float) (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 218:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1578 "program_parse.y"
+#line 1661 "program_parse.y"
     {
-          (yyval.vector).count = 1;
+          (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
           (yyval.vector).data[1] = 0.0f;
           (yyval.vector).data[2] = 0.0f;
-          (yyval.vector).data[3] = 0.0f;
+          (yyval.vector).data[3] = 1.0f;
        ;}
     break;
 
-  case 219:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 1586 "program_parse.y"
+#line 1669 "program_parse.y"
     {
-          (yyval.vector).count = 2;
+          (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
           (yyval.vector).data[1] = (yyvsp[(4) - (5)].real);
           (yyval.vector).data[2] = 0.0f;
-          (yyval.vector).data[3] = 0.0f;
+          (yyval.vector).data[3] = 1.0f;
        ;}
     break;
 
-  case 220:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1595 "program_parse.y"
+#line 1678 "program_parse.y"
     {
-          (yyval.vector).count = 3;
+          (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
           (yyval.vector).data[1] = (yyvsp[(4) - (7)].real);
           (yyval.vector).data[2] = (yyvsp[(6) - (7)].real);
-          (yyval.vector).data[3] = 0.0f;
+          (yyval.vector).data[3] = 1.0f;
        ;}
     break;
 
-  case 221:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1604 "program_parse.y"
+#line 1687 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4068,63 +4165,63 @@ yyreduce:
        ;}
     break;
 
-  case 222:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1614 "program_parse.y"
+#line 1697 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
     break;
 
-  case 223:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1618 "program_parse.y"
+#line 1701 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
     break;
 
-  case 224:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1623 "program_parse.y"
+#line 1706 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 225:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1624 "program_parse.y"
+#line 1707 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
-  case 226:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 1625 "program_parse.y"
+#line 1708 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 227:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1628 "program_parse.y"
+#line 1711 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 229:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1631 "program_parse.y"
+#line 1714 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 231:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1635 "program_parse.y"
+#line 1718 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4132,10 +4229,10 @@ yyreduce:
        ;}
     break;
 
-  case 232:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1641 "program_parse.y"
+#line 1724 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4143,10 +4240,10 @@ yyreduce:
        ;}
     break;
 
-  case 233:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1649 "program_parse.y"
+#line 1732 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
@@ -4159,10 +4256,10 @@ yyreduce:
        ;}
     break;
 
-  case 234:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 1662 "program_parse.y"
+#line 1745 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4173,10 +4270,10 @@ yyreduce:
        ;}
     break;
 
-  case 235:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1671 "program_parse.y"
+#line 1754 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4187,19 +4284,19 @@ yyreduce:
        ;}
     break;
 
-  case 236:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1680 "program_parse.y"
+#line 1763 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 237:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1684 "program_parse.y"
+#line 1767 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4210,10 +4307,10 @@ yyreduce:
        ;}
     break;
 
-  case 238:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1693 "program_parse.y"
+#line 1776 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4224,10 +4321,10 @@ yyreduce:
        ;}
     break;
 
-  case 239:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1702 "program_parse.y"
+#line 1785 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4238,19 +4335,19 @@ yyreduce:
        ;}
     break;
 
-  case 240:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1713 "program_parse.y"
+#line 1796 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 241:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1719 "program_parse.y"
+#line 1802 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4258,10 +4355,10 @@ yyreduce:
        ;}
     break;
 
-  case 242:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1725 "program_parse.y"
+#line 1808 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4272,10 +4369,10 @@ yyreduce:
        ;}
     break;
 
-  case 243:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1734 "program_parse.y"
+#line 1817 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4286,19 +4383,19 @@ yyreduce:
        ;}
     break;
 
-  case 244:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1745 "program_parse.y"
+#line 1828 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 245:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1749 "program_parse.y"
+#line 1832 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4309,10 +4406,10 @@ yyreduce:
        ;}
     break;
 
-  case 246:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1758 "program_parse.y"
+#line 1841 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4323,94 +4420,94 @@ yyreduce:
        ;}
     break;
 
-  case 247:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1768 "program_parse.y"
+#line 1851 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 248:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1769 "program_parse.y"
+#line 1852 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 249:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1770 "program_parse.y"
+#line 1853 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 250:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1773 "program_parse.y"
+#line 1856 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 251:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1774 "program_parse.y"
+#line 1857 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 252:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1775 "program_parse.y"
+#line 1858 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 253:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1778 "program_parse.y"
+#line 1861 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 254:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1779 "program_parse.y"
+#line 1862 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 255:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1782 "program_parse.y"
+#line 1865 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 256:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1783 "program_parse.y"
+#line 1866 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 257:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1786 "program_parse.y"
+#line 1869 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 258:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1787 "program_parse.y"
+#line 1870 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 259:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1791 "program_parse.y"
+#line 1874 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4421,10 +4518,10 @@ yyreduce:
        ;}
     break;
 
-  case 260:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1802 "program_parse.y"
+#line 1885 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4435,10 +4532,10 @@ yyreduce:
        ;}
     break;
 
-  case 261:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1813 "program_parse.y"
+#line 1896 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4449,10 +4546,10 @@ yyreduce:
        ;}
     break;
 
-  case 262:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 1824 "program_parse.y"
+#line 1907 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4476,7 +4573,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4480 "program_parse.tab.c"
+#line 4577 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4695,7 +4792,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1844 "program_parse.y"
+#line 1927 "program_parse.y"
 
 
 struct asm_instruction *
@@ -4710,7 +4807,15 @@ asm_instruction_ctor(gl_inst_opcode op,
    if (inst) {
       _mesa_init_instructions(& inst->Base, 1);
       inst->Base.Opcode = op;
-      inst->Base.DstReg = *dst;
+
+      /* In the core ARB extensions only the KIL instruction doesn't have a
+       * destination register.
+       */
+      if (dst == NULL) {
+        init_dst_reg(& inst->Base.DstReg);
+      } else {
+        inst->Base.DstReg = *dst;
+      }
 
       inst->Base.SrcReg[0] = src0->Base;
       inst->SrcReg[0] = *src0;
@@ -4841,8 +4946,7 @@ int add_state_reference(struct gl_program_parameter_list *param_list,
 
    name = _mesa_program_state_string(tokens);
    index = _mesa_add_parameter(param_list, PROGRAM_STATE_VAR, name,
-                               size, GL_NONE,
-                               NULL, (gl_state_index *) tokens, 0x0);
+                               size, GL_NONE, NULL, tokens, 0x0);
    param_list->StateFlags |= _mesa_program_state_flags(tokens);
 
    /* free name string here since we duplicated it in add_parameter() */
@@ -5022,7 +5126,6 @@ GLboolean
 _mesa_parse_arb_program(GLcontext *ctx, GLenum target, const GLubyte *str,
                        GLsizei len, struct asm_parser_state *state)
 {
-   struct gl_program_constants limits;
    struct asm_instruction *inst;
    unsigned i;
    GLubyte *strz;
@@ -5048,36 +5151,16 @@ _mesa_parse_arb_program(GLcontext *ctx, GLenum target, const GLubyte *str,
 
    state->st = _mesa_symbol_table_ctor();
 
-   /* All of these limits should come from ctx.
-    */
-   limits.MaxInstructions = 128;
-   limits.MaxAluInstructions = 128;
-   limits.MaxTexInstructions = 128;
-   limits.MaxTexIndirections = 128; 
-   limits.MaxAttribs = 16;
-   limits.MaxTemps = 128;
-   limits.MaxAddressRegs = 1;
-   limits.MaxParameters = 128;
-   limits.MaxLocalParams = 256;
-   limits.MaxEnvParams = 128;
-   limits.MaxNativeInstructions = 128;
-   limits.MaxNativeAluInstructions = 128;
-   limits.MaxNativeTexInstructions = 128;
-   limits.MaxNativeTexIndirections = 128;
-   limits.MaxNativeAttribs = 16;
-   limits.MaxNativeTemps = 128;
-   limits.MaxNativeAddressRegs = 1;
-   limits.MaxNativeParameters = 128;
-   limits.MaxUniformComponents = 0;
-
-   state->limits = & limits;
-
-   state->MaxTextureImageUnits = 16;
-   state->MaxTextureCoordUnits = 8;
-   state->MaxTextureUnits = 8;
-   state->MaxClipPlanes = 6;
-   state->MaxLights = 8;
-   state->MaxProgramMatrices = 8;
+   state->limits = (target == GL_VERTEX_PROGRAM_ARB)
+      ? & ctx->Const.VertexProgram
+      : & ctx->Const.FragmentProgram;
+
+   state->MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits;
+   state->MaxTextureCoordUnits = ctx->Const.MaxTextureCoordUnits;
+   state->MaxTextureUnits = ctx->Const.MaxTextureUnits;
+   state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
+   state->MaxLights = ctx->Const.MaxLights;
+   state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
 
    state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
       ? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
@@ -5127,6 +5210,7 @@ _mesa_parse_arb_program(GLcontext *ctx, GLenum target, const GLubyte *str,
    state->prog->NumInstructions++;
 
    state->prog->NumParameters = state->prog->Parameters->NumParameters;
+   state->prog->NumAttributes = _mesa_bitcount(state->prog->InputsRead);
 
    /*
     * Initialize native counts to logical counts.  The device driver may