ARB prog parser: Add support for GL_MESA_texture_array
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 28 Jul 2009 00:22:21 +0000 (17:22 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 28 Jul 2009 00:22:21 +0000 (17:22 -0700)
This isn't really tested yet as no drivers actually support this extension.

src/mesa/shader/lex.yy.c
src/mesa/shader/program_lexer.l
src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.tab.h
src/mesa/shader/program_parse.y
src/mesa/shader/program_parse_extra.c
src/mesa/shader/program_parser.h

index 1809d1e7f78de46263f4f983a1cea63203605524..6202ca44c811b4ad2e3198ad8c7fc6af86b55886 100644 (file)
@@ -357,8 +357,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 179
-#define YY_END_OF_BUFFER 180
+#define YY_NUM_RULES 183
+#define YY_END_OF_BUFFER 184
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -366,80 +366,82 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[658] =
+static yyconst flex_int16_t yy_accept[675] =
     {   0,
-        0,    0,  180,  178,  176,  175,  178,  178,  148,  174,
-      150,  150,  150,  150,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  176,    0,    0,  177,  148,    0,
-      149,  151,  171,  171,    0,    0,    0,    0,  171,    0,
-        0,    0,    0,    0,    0,    0,  132,  172,  133,  134,
-      162,  162,  162,  162,    0,  150,    0,  140,  141,  142,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  170,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  169,  169,    0,    0,    0,
+        0,    0,  184,  182,  180,  179,  182,  182,  152,  178,
+      154,  154,  154,  154,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  180,    0,    0,  181,  152,    0,
+      153,  155,  175,  175,    0,    0,    0,    0,  175,    0,
+        0,    0,    0,    0,    0,    0,  132,  176,  133,  134,
+      166,  166,  166,  166,    0,  154,    0,  140,  141,  142,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  174,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  173,  173,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      168,  168,  168,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  159,  159,  159,  160,  160,  161,  152,
-      151,  152,    0,  153,   11,   13,  148,   15,  148,   16,
-       18,  148,   20,   22,   24,   26,    6,   28,   30,   31,
-       33,   35,   38,   36,   40,   41,   43,   45,   47,   49,
-
-       51,  148,  148,  148,   53,   55,  148,   57,   59,   61,
-      148,   63,   65,   67,   69,  148,   71,   73,   75,   77,
-      148,  148,  148,  148,  148,  148,    0,    0,    0,    0,
-      151,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   93,   94,   96,    0,  167,    0,    0,    0,    0,
-        0,    0,  110,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  166,  165,  165,  122,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  156,  156,  157,
-      158,    0,  154,  148,  148,  148,  148,  148,  148,  148,
-      143,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  144,  148,  148,  148,  148,  148,  148,  148,  148,
-       10,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,    0,  173,    0,    0,    0,   86,   87,    0,    0,
-        0,    0,    0,    0,    0,   98,    0,    0,    0,    0,
+      172,  172,  172,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  163,  163,  163,  164,  164,  165,  156,
+      155,  156,    0,  157,   11,   13,  152,   15,  152,  152,
+       16,   18,  152,   20,   22,   24,   26,    6,   28,   30,
+       31,   33,   35,   38,   36,   40,   41,   43,   45,   47,
+
+       49,   51,  152,  152,  152,   53,   55,  152,   57,   59,
+       61,  152,   63,   65,   67,   69,  152,   71,   73,   75,
+       77,  152,  152,  152,  152,  152,  152,    0,    0,    0,
+        0,  155,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   93,   94,   96,    0,  171,    0,    0,    0,
+        0,    0,    0,  110,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  170,  169,  169,  122,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  160,  160,
+      161,  162,    0,  158,  152,  152,  152,  152,  152,  152,
+      152,  152,  143,  152,  152,  152,  152,  152,  152,  152,
+
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  144,  152,  152,  152,  152,  152,  152,
+      152,  152,   10,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,    0,  177,    0,    0,    0,   86,   87,
+        0,    0,    0,    0,    0,    0,    0,   98,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  164,    0,    0,    0,  126,    0,
-      128,    0,    0,    0,    0,    0,    0,  163,  155,  148,
-      148,  148,    4,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,    9,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,   82,  148,  148,    0,    0,    0,    0,    0,   88,
-       89,    0,    0,    0,    0,   97,    0,    0,  101,  104,
-        0,    0,    0,    0,    0,    0,    0,  115,  116,    0,
-        0,    0,    0,  121,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  148,  148,  148,    5,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,    7,    8,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,   83,  148,   79,    0,    0,    0,    0,
-      137,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      107,    0,  111,  112,    0,  114,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  130,  131,    0,    0,
-      138,   12,    3,   14,   17,   19,   21,   23,   25,   27,
-       29,   32,   34,   39,   37,   42,   44,   46,   48,   50,
-       52,   54,   56,   58,   60,   62,  148,  148,  148,   64,
-       66,   68,   70,   72,   74,   76,   78,  148,   81,  139,
-        0,    0,   84,    0,   90,    0,    0,    0,   99,    0,
-        0,    0,    0,    0,    0,  113,    0,    0,  119,  106,
-
-        0,    0,    0,    0,    0,    0,  135,    0,  145,  146,
-      148,   80,    0,    0,    0,    0,   92,   95,  100,    0,
+        0,    0,    0,    0,    0,    0,  168,    0,    0,    0,
+      126,    0,  128,    0,    0,    0,    0,    0,    0,  167,
+      159,  152,  152,  152,    4,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+
+      152,  152,  152,  152,  152,  152,    9,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,   82,  152,  152,    0,    0,    0,
+        0,    0,   88,   89,    0,    0,    0,    0,   97,    0,
+        0,  101,  104,    0,    0,    0,    0,    0,    0,    0,
+      115,  116,    0,    0,    0,    0,  121,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  152,  152,  152,
+      152,  152,  152,    5,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,    7,    8,  152,  152,  152,  152,  152,  152,  152,
+
+      152,  152,  152,  152,  152,  152,  152,  152,  152,   83,
+      152,   79,    0,    0,    0,    0,  137,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  107,    0,  111,  112,
+        0,  114,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  130,  131,    0,    0,  138,   12,    3,   14,
+      148,  149,  152,   17,   19,   21,   23,   25,   27,   29,
+       32,   34,   39,   37,   42,   44,   46,   48,   50,   52,
+       54,   56,   58,   60,   62,  152,  152,  152,   64,   66,
+       68,   70,   72,   74,   76,   78,  152,   81,  139,    0,
+        0,   84,    0,   90,    0,    0,    0,   99,    0,    0,
+
+        0,    0,    0,    0,  113,    0,    0,  119,  106,    0,
+        0,    0,    0,    0,    0,  135,    0,  152,  145,  146,
+      152,   80,    0,    0,    0,    0,   92,   95,  100,    0,
         0,  105,    0,    0,    0,  118,    0,    0,    0,    0,
-      127,  129,    0,  148,    2,    1,    0,   91,    0,  103,
-        0,  109,  117,    0,    0,  124,  125,  136,  147,    0,
-      102,    0,  120,  123,   85,  108,    0
+      127,  129,    0,  152,  152,    2,    1,    0,   91,    0,
+      103,    0,  109,  117,    0,    0,  124,  125,  136,  152,
+      147,    0,  102,    0,  120,  123,  152,   85,  108,  152,
+      152,  150,  151,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -452,12 +454,12 @@ static yyconst flex_int32_t yy_ec[256] =
        12,   13,   14,   14,   14,   14,   14,    1,    1,    1,
         1,    1,    1,    1,   15,   16,   17,   18,   19,   20,
        21,   22,   23,    6,   24,   25,   26,   27,   28,   29,
-       30,   31,   32,   33,   34,   35,   36,   37,    6,   38,
-        1,    1,    1,    1,   39,    1,   40,   41,   42,   43,
+       30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
+        1,    1,    1,    1,   40,    1,   41,   42,   43,   44,
 
-       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
-       54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
-       64,   65,    1,    1,    1,    1,    1,    1,    1,    1,
+       45,   46,   47,   48,   49,   50,   51,   52,   53,   54,
+       55,   56,   57,   58,   59,   60,   61,   62,   63,   64,
+       65,   66,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -474,284 +476,289 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[66] =
+static yyconst flex_int32_t yy_meta[67] =
     {   0,
         1,    1,    1,    1,    1,    2,    1,    3,    4,    4,
         4,    4,    4,    4,    2,    2,    2,    4,    4,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    4,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    4,    2,    2,    2,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2
+        2,    2,    2,    2,    2,    2
     } ;
 
-static yyconst flex_int16_t yy_base[662] =
+static yyconst flex_int16_t yy_base[679] =
     {   0,
-        0,    0,  917,  918,  914,  918,  911,  911,    0,   64,
-       80,   95,  117,  895,  115,   53,   38,   58,   55,  889,
-      121,  122,   67,   54,  115,  137,   65,  882,  853,  852,
-      864,  848,  862,  861,  902,  888,  899,  918,    0,  172,
-      918,  156,  136,  139,   17,  107,  134,   43,  151,  861,
-      847,  109,  149,  845,  857,  150,  918,  192,  193,   86,
-      192,  180,  188,  196,  253,  265,  276,  918,  918,  918,
-      865,  878,  872,  869,  860,  863,  859,  874,  258,  856,
-      870,  170,  856,  869,  860,  873,  850,  861,  852,  135,
-      853,  844,  853,  844,  843,  844,  838,  844,  855,  841,
-
-      838,  850,  853,  840,  833,  849,  826,  157,  189,  845,
-      822,  807,  802,  819,  795,  800,  825,  150,  815,  124,
-      810,  289,  264,  812,  793,  266,  803,  799,  794,  224,
-      800,  786,  802,  799,  790,  273,  276,  792,  781,  795,
-      798,  780,  795,  782,  779,  786,  267,  794,  163,  272,
-      288,  291,  298,  771,  788,  789,  782,  764,  238,  765,
-      787,  778,  287,  294,  298,  302,  306,  310,  314,  918,
-      371,  382,  388,  394,  786,  208,  809,    0,  792,  783,
-      782,  801,  780,  779,  778,  777,    0,  776,    0,  775,
-      774,    0,  773,  772,    0,  771,  770,  769,  768,  767,
-
-      766,  781,  774,  787,  762,  761,  766,  759,  758,  757,
-      777,  755,  754,  753,  752,  761,  750,  749,  748,  747,
-      739,  738,  723,  723,  722,  721,  763,  736,  724,  400,
-      407,  382,  728,  283,  725,  719,  719,  713,  726,  726,
-      711,  918,  918,  726,  714,  384,  721,   39,  718,  724,
-      383,  719,  918,  710,  717,  716,  719,  705,  704,  708,
-      703,   92,  708,  391,  403,  405,  918,  700,  698,  698,
-      706,  707,  689,  408,  694,  700,  371,  393,  401,  406,
-      410,  467,  473,  713,  725,  711,  710,  718,  708,  707,
-        0,  706,  705,  704,  703,  702,  701,  700,  699,  698,
-
-      697,  696,  695,  694,  693,  692,  695,  688,  695,  688,
-      687,    0,  686,  685,  684,  687,  682,  681,  680,  679,
-        0,  678,  677,  676,  675,  654,  648,  653,  659,  642,
-      657,  161,  918,  656,  646,  650,  918,  918,  640,  649,
-      635,  652,  635,  638,  632,  918,  633,  632,  629,  636,
-      629,  637,  633,  643,  640,  622,  628,  635,  619,  618,
-      636,  618,  630,  629,  918,  628,  618,  622,  918,  609,
-      918,  614,  614,  622,  605,  606,  616,  918,  918,  647,
-      629,  645,    0,  643,  643,  642,  641,  640,  639,  638,
-      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
-
-      627,  614,  607,    0,  624,  623,  622,  621,  620,  598,
-      618,  617,  616,  615,  614,  613,  612,  611,  581,  584,
-      564,    0,  565,  558,  565,  564,  565,  557,  575,  918,
-      918,  557,  555,  565,  558,  918,  553,  570,  239,  918,
-      561,  545,  546,  555,  546,  545,  545,  918,  544,  553,
-      543,  559,  556,  918,  555,  553,  542,  543,  539,  531,
-      538,  533,  534,  529,  554,  554,  552,    0,  551,  550,
-      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
-      539,  538,  537,  536,  535,    0,    0,  534,  533,  532,
-      531,  530,  478,  529,  528,  527,  526,  525,  524,  523,
-
-      522,  501,  501,    0,  508,    0,  541,  540,  490,  508,
-      918,  503,  498,  491,  487,  499,  489,  487,  483,  499,
-      490,  489,  918,  918,  492,  918,  487,  480,  469,  480,
-      472,  476,  489,  484,  487,  469,  918,  918,  481,  470,
-      918,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  935,  936,  932,  936,  929,  929,    0,   65,
+       81,   97,  119,  913,  116,   54,   39,   59,   56,  907,
+      112,  129,   68,   55,  129,  133,   66,  900,  870,  869,
+      881,  865,  879,  878,  920,  906,  917,  936,    0,  168,
+      936,  162,  136,  143,   17,  117,  126,   43,  145,  878,
+      864,   90,  174,  862,  874,  147,  936,  191,  192,  137,
+      189,  179,  193,  197,  255,  267,  278,  936,  936,  936,
+      883,  896,  890,  128,  879,  882,  878,  893,  260,  875,
+      889,  189,  875,  888,  879,  892,  869,  880,  871,  233,
+      872,  863,  872,  863,  862,  863,  857,  863,  874,  860,
+
+      857,  869,  872,  859,  852,  868,  844,  167,  190,  864,
+      840,  825,  820,  837,  813,  818,  844,  241,  833,  110,
+      828,  295,  256,  830,  811,  274,  821,  817,  812,  225,
+      818,  804,  820,  817,  808,  277,  281,  810,  799,  813,
+      816,  798,  813,  800,  797,  804,  241,  812,  149,  271,
+      289,  299,  303,  789,  806,  807,  800,  782,  282,  783,
+      805,  796,  288,  299,  303,  307,  311,  315,  319,  936,
+      377,  388,  394,  400,  804,  199,  828,    0,  827,  810,
+      800,  799,  819,  797,  796,  795,  794,    0,  793,    0,
+      792,  791,    0,  790,  789,    0,  788,  787,  786,  785,
+
+      784,  783,  799,  792,  805,  779,  778,  784,  776,  775,
+      774,  795,  772,  771,  770,  769,  779,  767,  766,  765,
+      764,  756,  755,  740,  740,  739,  738,  781,  753,  741,
+      406,  414,  388,  745,  280,  742,  736,  736,  730,  743,
+      743,  728,  936,  936,  743,  731,  390,  738,   39,  735,
+      741,  284,  736,  936,  727,  734,  733,  736,  722,  721,
+      725,  720,  200,  725,  392,  400,  402,  936,  717,  715,
+      715,  723,  724,  706,  393,  711,  717,  391,  398,  402,
+      406,  410,  468,  474,  731,  743,  729,  728,  721,  735,
+      725,  724,    0,  723,  722,  721,  720,  719,  718,  717,
+
+      716,  715,  714,  713,  712,  711,  710,  709,  712,  705,
+      712,  705,  704,    0,  703,  702,  701,  704,  699,  698,
+      697,  696,    0,  695,  694,  693,  692,  670,  664,  669,
+      675,  658,  673,  249,  936,  672,  662,  666,  936,  936,
+      656,  665,  651,  668,  651,  654,  648,  936,  649,  648,
+      645,  652,  645,  653,  649,  659,  656,  638,  644,  651,
+      635,  634,  652,  634,  646,  645,  936,  644,  634,  638,
+      936,  625,  936,  630,  630,  638,  621,  622,  632,  936,
+      936,  664,  646,  662,    0,  323,  660,  660,  659,  658,
+      657,  656,  655,  654,  653,  652,  651,  650,  649,  648,
+
+      647,  646,  645,  644,  631,  624,    0,  641,  640,  639,
+      638,  637,  615,  635,  634,  633,  632,  631,  630,  629,
+      628,  597,  600,  580,    0,  581,  574,  581,  580,  581,
+      573,  591,  936,  936,  573,  571,  581,  574,  936,  569,
+      586,  257,  936,  577,  561,  562,  571,  562,  561,  561,
+      936,  560,  569,  559,  575,  572,  936,  571,  569,  558,
+      559,  555,  547,  554,  549,  550,  545,  571,  571,  569,
+      583,  582,  577,    0,  565,  564,  563,  562,  561,  560,
+      559,  558,  557,  556,  555,  554,  553,  552,  551,  550,
+      549,    0,    0,  548,  547,  546,  545,  544,  479,  543,
+
+      542,  541,  540,  539,  538,  537,  536,  514,  514,    0,
+      521,    0,  555,  554,  503,  521,  936,  516,  511,  504,
+      500,  512,  502,  500,  496,  512,  503,  502,  936,  936,
+      505,  936,  500,  493,  482,  493,  485,  489,  502,  497,
+      500,  482,  936,  936,  494,  483,  936,    0,    0,    0,
+        0,    0,  522,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  505,  503,  496,    0,
-        0,    0,    0,    0,    0,    0,    0,  449,    0,    0,
-      499,  498,  918,  446,  918,  450,  450,  459,  918,  443,
-      457,  445,  447,  444,  452,  918,  430,  441,  918,  918,
-
-      445,  441,  434,  432,  404,  416,  918,  395,    0,    0,
-      430,    0,  433,  429,  381,  373,  918,  918,  918,  344,
-      344,  918,  343,  292,  309,  918,  293,  292,  279,  284,
-      918,  918,  292,  302,  918,  918,  271,  918,  264,  918,
-      267,  918,  918,  242,  236,  918,  918,  918,    0,  215,
-      918,  121,  918,  918,  918,  918,  918,  509,  512,  514,
-      518
+        0,    0,    0,    0,    0,  518,  517,  515,    0,    0,
+        0,    0,    0,    0,    0,    0,  473,    0,    0,  524,
+      523,  936,  470,  936,  474,  474,  483,  936,  467,  481,
+
+      469,  470,  462,  464,  936,  442,  453,  936,  936,  457,
+      453,  446,  444,  444,  457,  936,  441,  481,    0,    0,
+      481,    0,  488,  487,  446,  440,  936,  936,  936,  448,
+      448,  936,  447,  396,  407,  936,  396,  390,  356,  335,
+      936,  936,  348,  364,  327,  936,  936,  304,  936,  306,
+      936,  311,  936,  936,  242,  226,  936,  936,  936,  161,
+        0,  114,  936,   96,  936,  936,  338,  936,  936,  118,
+       86,    0,    0,  936,  510,  513,  515,  519
     } ;
 
-static yyconst flex_int16_t yy_def[662] =
+static yyconst flex_int16_t yy_def[679] =
     {   0,
-      657,    1,  657,  657,  657,  657,  657,  658,  659,  657,
-      657,  660,  660,   13,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  657,  657,  658,  657,  659,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  661,  657,  657,  657,  657,  657,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-
-      659,  659,  659,  659,  659,  659,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-
-      657,  657,  657,  657,  657,  657,  657,  657,  659,  659,
-      659,  659,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  659,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  659,  657,
-      657,  657,  657,  657,  657,  657,    0,  657,  657,  657,
-      657
+      674,    1,  674,  674,  674,  674,  674,  675,  676,  674,
+      674,  677,  677,   13,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  674,  674,  675,  674,  676,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  678,  674,  674,  674,  674,  674,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
+      676,  676,  676,  676,  676,  676,  676,  676,  676,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  676,  676,  676,
+      676,  676,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  676,  676,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  676,
+      676,  674,  674,  674,  674,  674,  676,  674,  674,  676,
+      676,  676,  676,    0,  674,  674,  674,  674
     } ;
 
-static yyconst flex_int16_t yy_nxt[984] =
+static yyconst flex_int16_t yy_nxt[1003] =
     {   0,
         4,    5,    6,    7,    8,    9,    4,   10,   11,   12,
        13,   14,   11,   11,   15,    9,   16,   17,   18,   19,
         9,    9,    9,   20,   21,   22,    9,   23,   24,    9,
        25,   26,   27,    9,    9,    9,   28,    9,    9,    9,
-        9,    9,    9,    9,   29,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,   30,    9,   31,   32,   33,    9,
-       34,    9,    9,    9,    9,   40,   79,  127,   96,   80,
-      128,   41,   42,   42,   42,   42,   42,   42,   76,   83,
-       77,   97,  347,  108,   81,   84,   78,   65,   66,   66,
-       66,   66,   66,   66,   82,   94,  134,  348,   67,  135,
-
-       95,  109,   65,   43,   44,   45,   46,   47,   48,   49,
-       50,   51,   68,   67,   52,   53,   54,   55,   56,   57,
-       58,   59,   60,   67,   65,   61,   62,   63,   64,  160,
-       71,   98,   72,   99,   69,   67,   90,  362,   67,   73,
-      363,   86,  161,   87,   91,   74,  100,   75,   88,   92,
-      129,   89,  197,  101,  130,   93,  140,  102,  103,  104,
-       67,  105,  141,  229,   42,   42,   42,   42,   42,   42,
-      106,  198,  107,   40,  122,  123,  123,  154,  126,  123,
-      188,  123,  216,  656,  123,  131,  132,  124,  142,  147,
-      136,  137,  123,  217,  125,  123,  123,  133,  189,  122,
-
-      148,  124,  143,  149,  218,  425,  150,  123,  125,  144,
-      259,  118,  119,   45,   46,   47,   48,  219,   50,   51,
-      260,  426,   52,   53,   54,   55,   56,   57,  120,   59,
-       60,  151,  152,  121,  155,  162,  156,  153,  285,  157,
-      158,  164,  163,  165,  166,  154,  286,  159,  123,  167,
-      163,  163,  168,  163,  163,  163,  163,  169,  163,  163,
-      163,  171,  171,  171,  171,  171,  171,  655,  239,  183,
-      184,  172,   65,   66,   66,   66,   66,   66,   66,  185,
-      240,  272,  173,   67,  174,  174,  174,  174,  174,  174,
-      518,  273,  654,  519,  653,  230,  172,  231,  231,  231,
-
-      231,  231,  231,  232,  232,  232,  232,  235,   67,  232,
-      652,  232,  232,  232,  651,  246,  232,  256,  232,  261,
-      232,  232,  232,  257,  650,  262,  335,  232,  232,  232,
-      264,  232,  232,  232,  649,  648,  232,  265,  266,  336,
-      263,  647,  646,  232,  232,  645,  644,  232,  277,  277,
-      277,  277,  643,  642,  232,  277,  277,  277,  277,  278,
-      277,  277,  279,  280,  277,  277,  277,  277,  277,  277,
-      277,  281,  277,  277,  277,  277,  277,  277,  277,   42,
-       42,   42,   42,   42,   42,  641,  640,  639,  282,  122,
-      283,  283,  283,  283,  283,  283,  174,  174,  174,  174,
-
-      174,  174,  174,  174,  174,  174,  174,  174,  231,  231,
-      231,  231,  231,  231,  122,  231,  231,  231,  231,  231,
-      231,  333,  333,  333,  333,  638,  351,  333,  637,  333,
-      333,  333,  378,  378,  378,  378,  333,  636,  333,  352,
-      333,  635,  333,  333,  365,  333,  634,  333,  333,  372,
-      333,  373,  633,  374,  378,  378,  378,  378,  632,  333,
-      631,  333,  379,  378,  378,  378,  375,  378,  378,  378,
-      378,  378,  378,  378,  378,  283,  283,  283,  283,  283,
-      283,  283,  283,  283,  283,  283,  283,  567,  568,  630,
-      629,  628,  627,  626,  625,  624,  623,  622,  621,  620,
-
-      619,  618,  617,  616,  615,  614,  613,  612,  569,   37,
-       37,   37,   37,   39,  611,   39,   66,   66,  170,  170,
-      610,  170,  609,  608,  607,  606,  605,  604,  603,  602,
-      601,  600,  599,  598,  597,  596,  595,  594,  593,  592,
-      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
-      581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
-      571,  570,  566,  565,  564,  563,  562,  561,  560,  559,
-      558,  557,  556,  555,  554,  553,  552,  551,  550,  549,
-      548,  547,  546,  545,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  529,
-
-      528,  527,  526,  525,  524,  523,  522,  521,  520,  517,
-      516,  515,  514,  513,  512,  511,  510,  509,  508,  507,
-      506,  505,  504,  503,  502,  501,  500,  499,  498,  497,
-      496,  495,  494,  493,  492,  491,  490,  489,  488,  487,
-      486,  485,  484,  483,  482,  481,  480,  479,  478,  477,
-      476,  475,  474,  473,  472,  471,  470,  469,  468,  467,
+        9,    9,    9,    9,    9,   29,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,   30,    9,   31,   32,   33,
+        9,   34,    9,    9,    9,    9,   40,   79,  127,   96,
+       80,  128,   41,   42,   42,   42,   42,   42,   42,   76,
+       83,   77,   97,  349,  108,   81,   84,   78,   65,   66,
+       66,   66,   66,   66,   66,   82,   94,  134,  350,   67,
+
+      135,   95,  109,  673,   65,   43,   44,   45,   46,   47,
+       48,   49,   50,   51,   68,   67,   52,   53,   54,   55,
+       56,   57,   58,   59,   60,   67,   65,   61,   62,   63,
+       64,   71,   86,   72,   87,  672,   69,   67,  140,   88,
+       73,   67,   89,   90,  141,   98,   74,   99,   75,  101,
+      230,   91,  178,  102,  103,  104,   92,  105,  179,  669,
+      100,  129,   93,   67,  154,  130,  106,  668,  107,   40,
+       42,   42,   42,   42,   42,   42,  123,  123,  131,  132,
+      122,  160,  123,  126,  123,  136,  137,  147,  124,  123,
+      133,  123,  217,  123,  161,  125,  667,  260,  148,  189,
+
+      123,  149,  123,  218,  150,  219,  122,  261,  118,  119,
+       45,   46,   47,   48,  142,   50,   51,  190,  220,   52,
+       53,   54,   55,   56,   57,  120,   59,   60,  143,  286,
+      121,  151,  152,  162,  155,  144,  156,  153,  287,  157,
+      158,  164,  163,  165,  166,  154,  364,  159,  123,  365,
+      198,  163,  163,  163,  163,  167,  163,  163,  168,  169,
+      163,  163,  163,  171,  171,  171,  171,  171,  171,  199,
+      240,  184,  185,  172,   65,   66,   66,   66,   66,   66,
+       66,  186,  241,  666,  173,   67,  174,  174,  174,  174,
+      174,  174,  257,  124,  428,  665,  233,  233,  258,  172,
+
+      125,  231,  233,  232,  232,  232,  232,  232,  232,  524,
+      429,   67,  525,  233,  233,  233,  236,  233,  233,  262,
+      233,  247,  233,  233,  337,  263,  273,  233,  353,  233,
+      233,  233,  471,  472,  233,  233,  274,  338,  233,  265,
+      233,  354,  264,  266,  267,  233,  233,  670,  671,  233,
+      278,  278,  278,  278,  473,  664,  233,  663,  662,  661,
+      233,  278,  278,  278,  278,  279,  278,  278,  280,  281,
+      278,  278,  278,  278,  278,  278,  278,  282,  278,  278,
+      278,  278,  278,  278,  278,   42,   42,   42,   42,   42,
+       42,  660,  659,  658,  283,  122,  284,  284,  284,  284,
+
+      284,  284,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  232,  232,  232,  232,  232,  232,
+      657,  122,  232,  232,  232,  232,  232,  232,  335,  335,
+      335,  335,  335,  335,  335,  374,  335,  375,  335,  376,
+      335,  335,  367,  335,  656,  335,  335,  335,  335,  335,
+      655,  654,  377,  380,  380,  380,  380,  335,  653,  335,
+      380,  380,  380,  380,  381,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  284,  284,  284,  284,
+      284,  284,  284,  284,  284,  284,  284,  284,  576,  577,
+      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
+
+      642,  641,  640,  639,  638,  637,  636,  635,  634,  578,
+       37,   37,   37,   37,   39,  633,   39,   66,   66,  170,
+      170,  632,  170,  631,  630,  629,  628,  627,  626,  625,
+      624,  623,  622,  621,  620,  619,  618,  617,  616,  615,
+      614,  613,  612,  611,  610,  609,  608,  607,  606,  605,
+      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
+      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
+      584,  583,  582,  581,  580,  579,  575,  574,  573,  572,
+      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
+      561,  560,  559,  558,  557,  556,  555,  554,  553,  552,
+
+      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
+      541,  540,  539,  538,  537,  536,  535,  534,  533,  532,
+      531,  530,  529,  528,  527,  526,  523,  522,  521,  520,
+      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  508,  507,  506,  505,  504,  503,  502,  501,  500,
+      499,  498,  497,  496,  495,  494,  493,  492,  491,  490,
+      489,  488,  487,  486,  485,  484,  483,  482,  481,  480,
+      479,  478,  477,  476,  475,  474,  470,  469,  468,  467,
       466,  465,  464,  463,  462,  461,  460,  459,  458,  457,
       456,  455,  454,  453,  452,  451,  450,  449,  448,  447,
-      446,  445,  444,  443,  442,  441,  440,  439,  438,  437,
-      436,  435,  434,  433,  432,  431,  430,  429,  428,  427,
 
+      446,  445,  444,  443,  442,  441,  440,  439,  438,  437,
+      436,  435,  434,  433,  432,  431,  430,  427,  426,  425,
       424,  423,  422,  421,  420,  419,  418,  417,  416,  415,
       414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
       404,  403,  402,  401,  400,  399,  398,  397,  396,  395,
       394,  393,  392,  391,  390,  389,  388,  387,  386,  385,
-      384,  383,  382,  381,  380,  377,  376,  371,  370,  369,
-      368,  367,  366,  364,  361,  360,  359,  358,  357,  356,
-      355,  354,  353,  350,  349,  346,  345,  344,  343,  342,
-      341,  340,  339,  338,  337,  334,  263,  235,  332,  331,
+      384,  383,  382,  379,  378,  373,  372,  371,  370,  369,
+      368,  366,  363,  362,  361,  360,  359,  358,  357,  356,
+      355,  352,  351,  348,  347,  346,  345,  344,  343,  342,
+      341,  340,  339,  336,  264,  236,  334,  333,  332,  331,
+
       330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
       320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
-
       310,  309,  308,  307,  306,  305,  304,  303,  302,  301,
       300,  299,  298,  297,  296,  295,  294,  293,  292,  291,
-      290,  289,  288,  287,  284,  276,  275,  274,  271,  270,
-      269,  268,  267,  258,  255,  254,  253,  252,  251,  250,
-      249,  248,  247,  245,  244,  243,  242,  241,  238,  237,
-      236,  234,  233,  162,  228,  227,  226,  225,  224,  223,
-      222,  221,  220,  215,  214,  213,  212,  211,  210,  209,
-      208,  207,  206,  205,  204,  203,  202,  201,  200,  199,
-      196,  195,  194,  193,  192,  191,  190,  187,  186,  182,
-      181,  180,  179,  178,  177,  176,  175,  146,  145,  139,
-
-      138,   38,  117,   35,  116,  115,  114,  113,  112,  111,
-      110,   85,   70,   38,   36,   35,  657,    3,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657
+      290,  289,  288,  285,  277,  276,  275,  272,  271,  270,
+      269,  268,  259,  256,  255,  254,  253,  252,  251,  250,
+      249,  248,  246,  245,  244,  243,  242,  239,  238,  237,
+      235,  234,  162,  229,  228,  227,  226,  225,  224,  223,
+      222,  221,  216,  215,  214,  213,  212,  211,  210,  209,
+      208,  207,  206,  205,  204,  203,  202,  201,  200,  197,
+
+      196,  195,  194,  193,  192,  191,  188,  187,  183,  182,
+      181,  180,  177,  176,  175,  146,  145,  139,  138,   38,
+      117,   35,  116,  115,  114,  113,  112,  111,  110,   85,
+       70,   38,   36,   35,  674,    3,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+
+      674,  674
     } ;
 
-static yyconst flex_int16_t yy_chk[984] =
+static yyconst flex_int16_t yy_chk[1003] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -759,108 +766,111 @@ static yyconst flex_int16_t yy_chk[984] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,   10,   17,   45,   24,   17,
-       45,   10,   10,   10,   10,   10,   10,   10,   16,   19,
-       16,   24,  248,   27,   18,   19,   16,   11,   11,   11,
-       11,   11,   11,   11,   18,   23,   48,  248,   11,   48,
-
-       23,   27,   12,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   12,   12,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   11,   13,   10,   10,   10,   10,   60,
-       15,   25,   15,   25,   13,   13,   22,  262,   12,   15,
-      262,   21,   60,   21,   22,   15,   25,   15,   21,   22,
-       46,   21,   90,   26,   46,   22,   52,   26,   26,   26,
-       13,   26,   52,  120,   42,   42,   42,   42,   42,   42,
-       26,   90,   26,   40,   42,   43,   43,  120,   44,   44,
-       82,   43,  108,  652,   44,   47,   47,   43,   53,   56,
-       49,   49,   43,  108,   43,   44,   49,   47,   82,   42,
-
-       56,  118,   53,   56,  109,  332,   56,   49,  118,   53,
-      149,   40,   40,   40,   40,   40,   40,  109,   40,   40,
-      149,  332,   40,   40,   40,   40,   40,   40,   40,   40,
-       40,   58,   58,   40,   59,   61,   59,   58,  176,   59,
-       59,   62,   62,   62,   62,   58,  176,   59,   58,   63,
-       63,   63,   63,   61,   61,   61,   61,   64,   64,   64,
-       64,   65,   65,   65,   65,   65,   65,  650,  130,   79,
-       79,   65,   66,   66,   66,   66,   66,   66,   66,   79,
-      130,  159,   67,   66,   67,   67,   67,   67,   67,   67,
-      439,  159,  645,  439,  644,  122,   65,  122,  122,  122,
-
-      122,  122,  122,  123,  123,  126,  126,  126,   66,  123,
-      641,  126,  136,  136,  639,  137,  137,  147,  136,  150,
-      123,  137,  126,  147,  637,  150,  234,  151,  151,  136,
-      152,  152,  137,  151,  634,  633,  152,  153,  153,  234,
-      151,  630,  629,  153,  151,  628,  627,  152,  163,  163,
-      163,  163,  625,  624,  153,  164,  164,  164,  164,  165,
-      165,  165,  165,  166,  166,  166,  166,  167,  167,  167,
-      167,  168,  168,  168,  168,  169,  169,  169,  169,  171,
-      171,  171,  171,  171,  171,  623,  621,  620,  172,  171,
-      172,  172,  172,  172,  172,  172,  173,  173,  173,  173,
-
-      173,  173,  174,  174,  174,  174,  174,  174,  230,  230,
-      230,  230,  230,  230,  171,  231,  231,  231,  231,  231,
-      231,  232,  232,  246,  246,  616,  251,  232,  615,  246,
-      264,  264,  277,  277,  277,  277,  264,  614,  232,  251,
-      246,  613,  265,  265,  266,  266,  611,  264,  265,  274,
-      266,  274,  608,  274,  278,  278,  278,  278,  606,  265,
-      605,  266,  279,  279,  279,  279,  274,  280,  280,  280,
-      280,  281,  281,  281,  281,  282,  282,  282,  282,  282,
-      282,  283,  283,  283,  283,  283,  283,  493,  493,  604,
-      603,  602,  601,  598,  597,  595,  594,  593,  592,  591,
-
-      590,  588,  587,  586,  584,  582,  581,  578,  493,  658,
-      658,  658,  658,  659,  569,  659,  660,  660,  661,  661,
-      568,  661,  567,  540,  539,  536,  535,  534,  533,  532,
-      531,  530,  529,  528,  527,  525,  522,  521,  520,  519,
-      518,  517,  516,  515,  514,  513,  512,  510,  509,  508,
-      507,  505,  503,  502,  501,  500,  499,  498,  497,  496,
-      495,  494,  492,  491,  490,  489,  488,  485,  484,  483,
-      482,  481,  480,  479,  478,  477,  476,  475,  474,  473,
-      472,  471,  470,  469,  467,  466,  465,  464,  463,  462,
-      461,  460,  459,  458,  457,  456,  455,  453,  452,  451,
-
-      450,  449,  447,  446,  445,  444,  443,  442,  441,  438,
-      437,  435,  434,  433,  432,  429,  428,  427,  426,  425,
-      424,  423,  421,  420,  419,  418,  417,  416,  415,  414,
-      413,  412,  411,  410,  409,  408,  407,  406,  405,  403,
+        1,    1,    1,    1,    1,    1,   10,   17,   45,   24,
+       17,   45,   10,   10,   10,   10,   10,   10,   10,   16,
+       19,   16,   24,  249,   27,   18,   19,   16,   11,   11,
+       11,   11,   11,   11,   11,   18,   23,   48,  249,   11,
+
+       48,   23,   27,  671,   12,   10,   10,   10,   10,   10,
+       10,   10,   10,   10,   12,   12,   10,   10,   10,   10,
+       10,   10,   10,   10,   10,   11,   13,   10,   10,   10,
+       10,   15,   21,   15,   21,  670,   13,   13,   52,   21,
+       15,   12,   21,   22,   52,   25,   15,   25,   15,   26,
+      120,   22,   74,   26,   26,   26,   22,   26,   74,  664,
+       25,   46,   22,   13,  120,   46,   26,  662,   26,   40,
+       42,   42,   42,   42,   42,   42,   43,   43,   47,   47,
+       42,   60,   43,   44,   44,   49,   49,   56,   43,   44,
+       47,   49,  108,   43,   60,   43,  660,  149,   56,   82,
+
+       44,   56,   49,  108,   56,  109,   42,  149,   40,   40,
+       40,   40,   40,   40,   53,   40,   40,   82,  109,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   53,  176,
+       40,   58,   58,   61,   59,   53,   59,   58,  176,   59,
+       59,   62,   62,   62,   62,   58,  263,   59,   58,  263,
+       90,   61,   61,   61,   61,   63,   63,   63,   63,   64,
+       64,   64,   64,   65,   65,   65,   65,   65,   65,   90,
+      130,   79,   79,   65,   66,   66,   66,   66,   66,   66,
+       66,   79,  130,  656,   67,   66,   67,   67,   67,   67,
+       67,   67,  147,  118,  334,  655,  123,  123,  147,   65,
+
+      118,  122,  123,  122,  122,  122,  122,  122,  122,  442,
+      334,   66,  442,  123,  126,  126,  126,  136,  136,  150,
+      126,  137,  137,  136,  235,  150,  159,  137,  252,  151,
+      151,  126,  386,  386,  136,  151,  159,  235,  137,  152,
+      152,  252,  151,  153,  153,  152,  151,  667,  667,  153,
+      163,  163,  163,  163,  386,  652,  152,  650,  648,  645,
+      153,  164,  164,  164,  164,  165,  165,  165,  165,  166,
+      166,  166,  166,  167,  167,  167,  167,  168,  168,  168,
+      168,  169,  169,  169,  169,  171,  171,  171,  171,  171,
+      171,  644,  643,  640,  172,  171,  172,  172,  172,  172,
+
+      172,  172,  173,  173,  173,  173,  173,  173,  174,  174,
+      174,  174,  174,  174,  231,  231,  231,  231,  231,  231,
+      639,  171,  232,  232,  232,  232,  232,  232,  233,  233,
+      247,  247,  265,  265,  233,  275,  247,  275,  265,  275,
+      266,  266,  267,  267,  638,  233,  266,  247,  267,  265,
+      637,  635,  275,  278,  278,  278,  278,  266,  634,  267,
+      279,  279,  279,  279,  280,  280,  280,  280,  281,  281,
+      281,  281,  282,  282,  282,  282,  283,  283,  283,  283,
+      283,  283,  284,  284,  284,  284,  284,  284,  499,  499,
+      633,  631,  630,  626,  625,  624,  623,  621,  618,  617,
+
+      615,  614,  613,  612,  611,  610,  607,  606,  604,  499,
+      675,  675,  675,  675,  676,  603,  676,  677,  677,  678,
+      678,  602,  678,  601,  600,  599,  597,  596,  595,  593,
+      591,  590,  587,  578,  577,  576,  553,  546,  545,  542,
+      541,  540,  539,  538,  537,  536,  535,  534,  533,  531,
+      528,  527,  526,  525,  524,  523,  522,  521,  520,  519,
+      518,  516,  515,  514,  513,  511,  509,  508,  507,  506,
+      505,  504,  503,  502,  501,  500,  498,  497,  496,  495,
+      494,  491,  490,  489,  488,  487,  486,  485,  484,  483,
+      482,  481,  480,  479,  478,  477,  476,  475,  473,  472,
+
+      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
+      461,  460,  459,  458,  456,  455,  454,  453,  452,  450,
+      449,  448,  447,  446,  445,  444,  441,  440,  438,  437,
+      436,  435,  432,  431,  430,  429,  428,  427,  426,  424,
+      423,  422,  421,  420,  419,  418,  417,  416,  415,  414,
+      413,  412,  411,  410,  409,  408,  406,  405,  404,  403,
       402,  401,  400,  399,  398,  397,  396,  395,  394,  393,
-      392,  391,  390,  389,  388,  387,  386,  385,  384,  382,
-      381,  380,  377,  376,  375,  374,  373,  372,  370,  368,
-      367,  366,  364,  363,  362,  361,  360,  359,  358,  357,
-      356,  355,  354,  353,  352,  351,  350,  349,  348,  347,
-      345,  344,  343,  342,  341,  340,  339,  336,  335,  334,
-
-      331,  330,  329,  328,  327,  326,  325,  324,  323,  322,
-      320,  319,  318,  317,  316,  315,  314,  313,  311,  310,
-      309,  308,  307,  306,  305,  304,  303,  302,  301,  300,
-      299,  298,  297,  296,  295,  294,  293,  292,  290,  289,
-      288,  287,  286,  285,  284,  276,  275,  273,  272,  271,
-      270,  269,  268,  263,  261,  260,  259,  258,  257,  256,
-      255,  254,  252,  250,  249,  247,  245,  244,  241,  240,
-      239,  238,  237,  236,  235,  233,  229,  228,  227,  226,
-      225,  224,  223,  222,  221,  220,  219,  218,  217,  216,
-      215,  214,  213,  212,  211,  210,  209,  208,  207,  206,
-
-      205,  204,  203,  202,  201,  200,  199,  198,  197,  196,
-      194,  193,  191,  190,  188,  186,  185,  184,  183,  182,
-      181,  180,  179,  177,  175,  162,  161,  160,  158,  157,
-      156,  155,  154,  148,  146,  145,  144,  143,  142,  141,
-      140,  139,  138,  135,  134,  133,  132,  131,  129,  128,
-      127,  125,  124,  121,  119,  117,  116,  115,  114,  113,
-      112,  111,  110,  107,  106,  105,  104,  103,  102,  101,
-      100,   99,   98,   97,   96,   95,   94,   93,   92,   91,
-       89,   88,   87,   86,   85,   84,   83,   81,   80,   78,
-       77,   76,   75,   74,   73,   72,   71,   55,   54,   51,
-
-       50,   37,   36,   35,   34,   33,   32,   31,   30,   29,
-       28,   20,   14,    8,    7,    5,    3,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
-      657,  657,  657
+      392,  391,  390,  389,  388,  387,  384,  383,  382,  379,
+      378,  377,  376,  375,  374,  372,  370,  369,  368,  366,
+      365,  364,  363,  362,  361,  360,  359,  358,  357,  356,
+
+      355,  354,  353,  352,  351,  350,  349,  347,  346,  345,
+      344,  343,  342,  341,  338,  337,  336,  333,  332,  331,
+      330,  329,  328,  327,  326,  325,  324,  322,  321,  320,
+      319,  318,  317,  316,  315,  313,  312,  311,  310,  309,
+      308,  307,  306,  305,  304,  303,  302,  301,  300,  299,
+      298,  297,  296,  295,  294,  292,  291,  290,  289,  288,
+      287,  286,  285,  277,  276,  274,  273,  272,  271,  270,
+      269,  264,  262,  261,  260,  259,  258,  257,  256,  255,
+      253,  251,  250,  248,  246,  245,  242,  241,  240,  239,
+      238,  237,  236,  234,  230,  229,  228,  227,  226,  225,
+
+      224,  223,  222,  221,  220,  219,  218,  217,  216,  215,
+      214,  213,  212,  211,  210,  209,  208,  207,  206,  205,
+      204,  203,  202,  201,  200,  199,  198,  197,  195,  194,
+      192,  191,  189,  187,  186,  185,  184,  183,  182,  181,
+      180,  179,  177,  175,  162,  161,  160,  158,  157,  156,
+      155,  154,  148,  146,  145,  144,  143,  142,  141,  140,
+      139,  138,  135,  134,  133,  132,  131,  129,  128,  127,
+      125,  124,  121,  119,  117,  116,  115,  114,  113,  112,
+      111,  110,  107,  106,  105,  104,  103,  102,  101,  100,
+       99,   98,   97,   96,   95,   94,   93,   92,   91,   89,
+
+       88,   87,   86,   85,   84,   83,   81,   80,   78,   77,
+       76,   75,   73,   72,   71,   55,   54,   51,   50,   37,
+       36,   35,   34,   33,   32,   31,   30,   29,   28,   20,
+       14,    8,    7,    5,    3,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+
+      674,  674
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -904,6 +914,7 @@ static yyconst flex_int16_t yy_chk[984] =
 #define require_ARB_fp (yyextra->mode == ARB_fragment)
 #define require_shadow (yyextra->option.Shadow)
 #define require_rect   (yyextra->option.TexRect)
+#define require_texarray        (yyextra->option.TexArray)
 
 #define return_token_or_IDENTIFIER(condition, token)   \
    do {                                                        \
@@ -996,7 +1007,7 @@ swiz_from_char(char c)
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
-#line 1000 "lex.yy.c"
+#line 1011 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -1242,10 +1253,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 134 "program_lexer.l"
+#line 135 "program_lexer.l"
 
 
-#line 1249 "lex.yy.c"
+#line 1260 "lex.yy.c"
 
     yylval = yylval_param;
 
@@ -1302,13 +1313,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 658 )
+                               if ( yy_current_state >= 675 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 918 );
+               while ( yy_base[yy_current_state] != 936 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1334,17 +1345,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 136 "program_lexer.l"
+#line 137 "program_lexer.l"
 { return ARBvp_10; }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 137 "program_lexer.l"
+#line 138 "program_lexer.l"
 { return ARBfp_10; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 138 "program_lexer.l"
+#line 139 "program_lexer.l"
 {
    yylval->integer = at_address;
    return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS);
@@ -1352,793 +1363,813 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 142 "program_lexer.l"
+#line 143 "program_lexer.l"
 { return ALIAS; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 143 "program_lexer.l"
+#line 144 "program_lexer.l"
 { return ATTRIB; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 144 "program_lexer.l"
+#line 145 "program_lexer.l"
 { return END; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 145 "program_lexer.l"
+#line 146 "program_lexer.l"
 { return OPTION; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 146 "program_lexer.l"
+#line 147 "program_lexer.l"
 { return OUTPUT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 147 "program_lexer.l"
+#line 148 "program_lexer.l"
 { return PARAM; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 148 "program_lexer.l"
+#line 149 "program_lexer.l"
 { yylval->integer = at_temp; return TEMP; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 150 "program_lexer.l"
+#line 151 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, ABS, OFF); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 151 "program_lexer.l"
+#line 152 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, ABS, ZERO_ONE); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 152 "program_lexer.l"
+#line 153 "program_lexer.l"
 { return_opcode(             1, BIN_OP, ADD, OFF); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 153 "program_lexer.l"
+#line 154 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, ADD, ZERO_ONE); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 154 "program_lexer.l"
+#line 155 "program_lexer.l"
 { return_opcode(require_ARB_vp, ARL, ARL, OFF); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 156 "program_lexer.l"
+#line 157 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, CMP, OFF); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 157 "program_lexer.l"
+#line 158 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, CMP, ZERO_ONE); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 158 "program_lexer.l"
+#line 159 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, COS, OFF); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 159 "program_lexer.l"
+#line 160 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, COS, ZERO_ONE); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 161 "program_lexer.l"
+#line 162 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP3, OFF); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 162 "program_lexer.l"
+#line 163 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DP3, ZERO_ONE); }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 163 "program_lexer.l"
+#line 164 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP4, OFF); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 164 "program_lexer.l"
+#line 165 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DP4, ZERO_ONE); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 165 "program_lexer.l"
+#line 166 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DPH, OFF); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 166 "program_lexer.l"
+#line 167 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DPH, ZERO_ONE); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 167 "program_lexer.l"
+#line 168 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DST, OFF); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 168 "program_lexer.l"
+#line 169 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DST, ZERO_ONE); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 170 "program_lexer.l"
+#line 171 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, EX2, OFF); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 171 "program_lexer.l"
+#line 172 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, EX2, ZERO_ONE); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 172 "program_lexer.l"
+#line 173 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, EXP, OFF); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 174 "program_lexer.l"
+#line 175 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FLR, OFF); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 175 "program_lexer.l"
+#line 176 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, FLR, ZERO_ONE); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 176 "program_lexer.l"
+#line 177 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FRC, OFF); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 177 "program_lexer.l"
+#line 178 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, FRC, ZERO_ONE); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 179 "program_lexer.l"
+#line 180 "program_lexer.l"
 { return_opcode(require_ARB_fp, KIL, KIL, OFF); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 181 "program_lexer.l"
+#line 182 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, LIT, OFF); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 182 "program_lexer.l"
+#line 183 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, LIT, ZERO_ONE); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 183 "program_lexer.l"
+#line 184 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, LG2, OFF); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 184 "program_lexer.l"
+#line 185 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, LG2, ZERO_ONE); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 185 "program_lexer.l"
+#line 186 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, LOG, OFF); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 186 "program_lexer.l"
+#line 187 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, LRP, OFF); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 187 "program_lexer.l"
+#line 188 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, LRP, ZERO_ONE); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 189 "program_lexer.l"
+#line 190 "program_lexer.l"
 { return_opcode(             1, TRI_OP, MAD, OFF); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 190 "program_lexer.l"
+#line 191 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, MAD, ZERO_ONE); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 191 "program_lexer.l"
+#line 192 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MAX, OFF); }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 192 "program_lexer.l"
+#line 193 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, MAX, ZERO_ONE); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 193 "program_lexer.l"
+#line 194 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MIN, OFF); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 194 "program_lexer.l"
+#line 195 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, MIN, ZERO_ONE); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 195 "program_lexer.l"
+#line 196 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, MOV, OFF); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 196 "program_lexer.l"
+#line 197 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, MOV, ZERO_ONE); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 197 "program_lexer.l"
+#line 198 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MUL, OFF); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 198 "program_lexer.l"
+#line 199 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, MUL, ZERO_ONE); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 200 "program_lexer.l"
+#line 201 "program_lexer.l"
 { return_opcode(             1, BINSC_OP, POW, OFF); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 201 "program_lexer.l"
+#line 202 "program_lexer.l"
 { return_opcode(require_ARB_fp, BINSC_OP, POW, ZERO_ONE); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 203 "program_lexer.l"
+#line 204 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RCP, OFF); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 204 "program_lexer.l"
+#line 205 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, RCP, ZERO_ONE); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 205 "program_lexer.l"
+#line 206 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RSQ, OFF); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 206 "program_lexer.l"
+#line 207 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, RSQ, ZERO_ONE); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 208 "program_lexer.l"
+#line 209 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SCS, OFF); }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 209 "program_lexer.l"
+#line 210 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SCS, ZERO_ONE); }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 210 "program_lexer.l"
+#line 211 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SGE, OFF); }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 211 "program_lexer.l"
+#line 212 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, SGE, ZERO_ONE); }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 212 "program_lexer.l"
+#line 213 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SIN, OFF); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 213 "program_lexer.l"
+#line 214 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SIN, ZERO_ONE); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 214 "program_lexer.l"
+#line 215 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SLT, OFF); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 215 "program_lexer.l"
+#line 216 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, SLT, ZERO_ONE); }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 216 "program_lexer.l"
+#line 217 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SUB, OFF); }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 217 "program_lexer.l"
+#line 218 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, SUB, ZERO_ONE); }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 218 "program_lexer.l"
+#line 219 "program_lexer.l"
 { return_opcode(             1, SWZ, SWZ, OFF); }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 219 "program_lexer.l"
+#line 220 "program_lexer.l"
 { return_opcode(require_ARB_fp, SWZ, SWZ, ZERO_ONE); }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 221 "program_lexer.l"
+#line 222 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, OFF); }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 222 "program_lexer.l"
+#line 223 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, ZERO_ONE); }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 223 "program_lexer.l"
+#line 224 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, OFF); }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 224 "program_lexer.l"
+#line 225 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, ZERO_ONE); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 225 "program_lexer.l"
+#line 226 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, OFF); }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 226 "program_lexer.l"
+#line 227 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, ZERO_ONE); }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 228 "program_lexer.l"
+#line 229 "program_lexer.l"
 { return_opcode(             1, BIN_OP, XPD, OFF); }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 229 "program_lexer.l"
+#line 230 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, XPD, ZERO_ONE); }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 231 "program_lexer.l"
+#line 232 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 232 "program_lexer.l"
+#line 233 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 233 "program_lexer.l"
+#line 234 "program_lexer.l"
 { return PROGRAM; }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 234 "program_lexer.l"
+#line 235 "program_lexer.l"
 { return STATE; }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 235 "program_lexer.l"
+#line 236 "program_lexer.l"
 { return RESULT; }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 237 "program_lexer.l"
+#line 238 "program_lexer.l"
 { return AMBIENT; }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 238 "program_lexer.l"
+#line 239 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, ATTENUATION); }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 239 "program_lexer.l"
+#line 240 "program_lexer.l"
 { return BACK; }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 240 "program_lexer.l"
+#line 241 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, CLIP); }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 241 "program_lexer.l"
+#line 242 "program_lexer.l"
 { return COLOR; }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 242 "program_lexer.l"
+#line 243 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, DEPTH); }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 243 "program_lexer.l"
+#line 244 "program_lexer.l"
 { return DIFFUSE; }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 244 "program_lexer.l"
+#line 245 "program_lexer.l"
 { return DIRECTION; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 245 "program_lexer.l"
+#line 246 "program_lexer.l"
 { return EMISSION; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 246 "program_lexer.l"
+#line 247 "program_lexer.l"
 { return ENV; }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 247 "program_lexer.l"
+#line 248 "program_lexer.l"
 { return EYE; }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 248 "program_lexer.l"
+#line 249 "program_lexer.l"
 { return FOGCOORD; }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 249 "program_lexer.l"
+#line 250 "program_lexer.l"
 { return FOG; }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 250 "program_lexer.l"
+#line 251 "program_lexer.l"
 { return FRONT; }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 251 "program_lexer.l"
+#line 252 "program_lexer.l"
 { return HALF; }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 252 "program_lexer.l"
+#line 253 "program_lexer.l"
 { return INVERSE; }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 253 "program_lexer.l"
+#line 254 "program_lexer.l"
 { return INVTRANS; }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 254 "program_lexer.l"
+#line 255 "program_lexer.l"
 { return LIGHT; }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 255 "program_lexer.l"
+#line 256 "program_lexer.l"
 { return LIGHTMODEL; }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 256 "program_lexer.l"
+#line 257 "program_lexer.l"
 { return LIGHTPROD; }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 257 "program_lexer.l"
+#line 258 "program_lexer.l"
 { return LOCAL; }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 258 "program_lexer.l"
+#line 259 "program_lexer.l"
 { return MATERIAL; }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 259 "program_lexer.l"
+#line 260 "program_lexer.l"
 { return MAT_PROGRAM; }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 260 "program_lexer.l"
+#line 261 "program_lexer.l"
 { return MATRIX; }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 261 "program_lexer.l"
+#line 262 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, MATRIXINDEX); }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 262 "program_lexer.l"
+#line 263 "program_lexer.l"
 { return MODELVIEW; }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 263 "program_lexer.l"
+#line 264 "program_lexer.l"
 { return MVP; }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 264 "program_lexer.l"
+#line 265 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, NORMAL); }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 265 "program_lexer.l"
+#line 266 "program_lexer.l"
 { return OBJECT; }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 266 "program_lexer.l"
+#line 267 "program_lexer.l"
 { return PALETTE; }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 267 "program_lexer.l"
+#line 268 "program_lexer.l"
 { return PARAMS; }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 268 "program_lexer.l"
+#line 269 "program_lexer.l"
 { return PLANE; }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 269 "program_lexer.l"
+#line 270 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINT); }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 270 "program_lexer.l"
+#line 271 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINTSIZE); }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 271 "program_lexer.l"
+#line 272 "program_lexer.l"
 { return POSITION; }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 272 "program_lexer.l"
+#line 273 "program_lexer.l"
 { return PRIMARY; }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 273 "program_lexer.l"
+#line 274 "program_lexer.l"
 { return PROJECTION; }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 274 "program_lexer.l"
+#line 275 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, RANGE); }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 275 "program_lexer.l"
+#line 276 "program_lexer.l"
 { return ROW; }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 276 "program_lexer.l"
+#line 277 "program_lexer.l"
 { return SCENECOLOR; }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 277 "program_lexer.l"
+#line 278 "program_lexer.l"
 { return SECONDARY; }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 278 "program_lexer.l"
+#line 279 "program_lexer.l"
 { return SHININESS; }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 279 "program_lexer.l"
+#line 280 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, SIZE); }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 280 "program_lexer.l"
+#line 281 "program_lexer.l"
 { return SPECULAR; }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 281 "program_lexer.l"
+#line 282 "program_lexer.l"
 { return SPOT; }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 282 "program_lexer.l"
+#line 283 "program_lexer.l"
 { return TEXCOORD; }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 283 "program_lexer.l"
+#line 284 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, TEXENV); }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 284 "program_lexer.l"
+#line 285 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 285 "program_lexer.l"
+#line 286 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 286 "program_lexer.l"
+#line 287 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 287 "program_lexer.l"
+#line 288 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 288 "program_lexer.l"
+#line 289 "program_lexer.l"
 { return TEXTURE; }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 289 "program_lexer.l"
+#line 290 "program_lexer.l"
 { return TRANSPOSE; }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 290 "program_lexer.l"
+#line 291 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 291 "program_lexer.l"
+#line 292 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 293 "program_lexer.l"
+#line 294 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 294 "program_lexer.l"
+#line 295 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 295 "program_lexer.l"
+#line 296 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 296 "program_lexer.l"
+#line 297 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 297 "program_lexer.l"
+#line 298 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 298 "program_lexer.l"
+#line 299 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 299 "program_lexer.l"
+#line 300 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 300 "program_lexer.l"
+#line 301 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 301 "program_lexer.l"
+#line 302 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 303 "program_lexer.l"
+{ return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
+       YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 304 "program_lexer.l"
+{ return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
+       YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 305 "program_lexer.l"
+{ return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
+       YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 306 "program_lexer.l"
+{ return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
+       YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 308 "program_lexer.l"
 {
    yylval->string = strdup(yytext);
    return IDENTIFIER;
 }
        YY_BREAK
-case 149:
+case 153:
 YY_RULE_SETUP
-#line 308 "program_lexer.l"
+#line 313 "program_lexer.l"
 { return DOT_DOT; }
        YY_BREAK
-case 150:
+case 154:
 YY_RULE_SETUP
-#line 310 "program_lexer.l"
+#line 315 "program_lexer.l"
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
 }
        YY_BREAK
-case 151:
+case 155:
 YY_RULE_SETUP
-#line 314 "program_lexer.l"
+#line 319 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 152:
-/* rule 152 can match eol */
+case 156:
+/* rule 156 can match eol */
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 318 "program_lexer.l"
+#line 323 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 153:
+case 157:
 YY_RULE_SETUP
-#line 322 "program_lexer.l"
+#line 327 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 154:
+case 158:
 YY_RULE_SETUP
-#line 326 "program_lexer.l"
+#line 331 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 155:
+case 159:
 YY_RULE_SETUP
-#line 331 "program_lexer.l"
+#line 336 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return MASK4;
 }
        YY_BREAK
-case 156:
+case 160:
 YY_RULE_SETUP
-#line 337 "program_lexer.l"
+#line 342 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2146,27 +2177,27 @@ YY_RULE_SETUP
    return MASK3;
 }
        YY_BREAK
-case 157:
+case 161:
 YY_RULE_SETUP
-#line 343 "program_lexer.l"
+#line 348 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return MASK3;
 }
        YY_BREAK
-case 158:
+case 162:
 YY_RULE_SETUP
-#line 348 "program_lexer.l"
+#line 353 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return MASK3;
 }
        YY_BREAK
-case 159:
+case 163:
 YY_RULE_SETUP
-#line 354 "program_lexer.l"
+#line 359 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2174,9 +2205,9 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
-case 160:
+case 164:
 YY_RULE_SETUP
-#line 360 "program_lexer.l"
+#line 365 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2184,18 +2215,18 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
-case 161:
+case 165:
 YY_RULE_SETUP
-#line 366 "program_lexer.l"
+#line 371 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return MASK2;
 }
        YY_BREAK
-case 162:
+case 166:
 YY_RULE_SETUP
-#line 372 "program_lexer.l"
+#line 377 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2203,9 +2234,9 @@ YY_RULE_SETUP
    return MASK1; 
 }
        YY_BREAK
-case 163:
+case 167:
 YY_RULE_SETUP
-#line 379 "program_lexer.l"
+#line 384 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2215,18 +2246,18 @@ YY_RULE_SETUP
    return SWIZZLE;
 }
        YY_BREAK
-case 164:
+case 168:
 YY_RULE_SETUP
-#line 388 "program_lexer.l"
+#line 393 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return_token_or_DOT(require_ARB_fp, MASK4);
 }
        YY_BREAK
-case 165:
+case 169:
 YY_RULE_SETUP
-#line 394 "program_lexer.l"
+#line 399 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2234,27 +2265,27 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 166:
+case 170:
 YY_RULE_SETUP
-#line 400 "program_lexer.l"
+#line 405 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 167:
+case 171:
 YY_RULE_SETUP
-#line 405 "program_lexer.l"
+#line 410 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 168:
+case 172:
 YY_RULE_SETUP
-#line 411 "program_lexer.l"
+#line 416 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2262,9 +2293,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 169:
+case 173:
 YY_RULE_SETUP
-#line 417 "program_lexer.l"
+#line 422 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2272,18 +2303,18 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 170:
+case 174:
 YY_RULE_SETUP
-#line 423 "program_lexer.l"
+#line 428 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 171:
+case 175:
 YY_RULE_SETUP
-#line 429 "program_lexer.l"
+#line 434 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2291,9 +2322,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK1);
 }
        YY_BREAK
-case 172:
+case 176:
 YY_RULE_SETUP
-#line 437 "program_lexer.l"
+#line 442 "program_lexer.l"
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
@@ -2305,9 +2336,9 @@ YY_RULE_SETUP
    }
 }
        YY_BREAK
-case 173:
+case 177:
 YY_RULE_SETUP
-#line 448 "program_lexer.l"
+#line 453 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2317,15 +2348,15 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, SWIZZLE);
 }
        YY_BREAK
-case 174:
+case 178:
 YY_RULE_SETUP
-#line 457 "program_lexer.l"
+#line 462 "program_lexer.l"
 { return DOT; }
        YY_BREAK
-case 175:
-/* rule 175 can match eol */
+case 179:
+/* rule 179 can match eol */
 YY_RULE_SETUP
-#line 459 "program_lexer.l"
+#line 464 "program_lexer.l"
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
@@ -2334,30 +2365,30 @@ YY_RULE_SETUP
    yylloc->position++;
 }
        YY_BREAK
-case 176:
+case 180:
 YY_RULE_SETUP
-#line 466 "program_lexer.l"
+#line 471 "program_lexer.l"
 /* eat whitespace */ ;
        YY_BREAK
-case 177:
+case 181:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 467 "program_lexer.l"
+#line 472 "program_lexer.l"
 /* eat comments */ ;
        YY_BREAK
-case 178:
+case 182:
 YY_RULE_SETUP
-#line 468 "program_lexer.l"
+#line 473 "program_lexer.l"
 { return yytext[0]; }
        YY_BREAK
-case 179:
+case 183:
 YY_RULE_SETUP
-#line 469 "program_lexer.l"
+#line 474 "program_lexer.l"
 ECHO;
        YY_BREAK
-#line 2361 "lex.yy.c"
+#line 2392 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2651,7 +2682,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 658 )
+                       if ( yy_current_state >= 675 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2680,11 +2711,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 658 )
+               if ( yy_current_state >= 675 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 657);
+       yy_is_jam = (yy_current_state == 674);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3532,7 +3563,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 469 "program_lexer.l"
+#line 474 "program_lexer.l"
 
 
 
index e4837ccb16373b49eb8de609ec9aae74cfa8627d..e1069ab4d7f5667c7ba75f1c0b0981158f6b1cd5 100644 (file)
@@ -31,6 +31,7 @@
 #define require_ARB_fp (yyextra->mode == ARB_fragment)
 #define require_shadow (yyextra->option.Shadow)
 #define require_rect   (yyextra->option.TexRect)
+#define require_texarray        (yyextra->option.TexArray)
 
 #define return_token_or_IDENTIFIER(condition, token)   \
    do {                                                        \
@@ -299,6 +300,10 @@ RECT                      { return_token_or_IDENTIFIER(require_ARB_fp && require
 SHADOW1D                  { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
 SHADOW2D                  { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
 SHADOWRECT                { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
+ARRAY1D                   { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
+ARRAY2D                   { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
+ARRAYSHADOW1D             { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
+ARRAYSHADOW2D             { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
 
 [_a-zA-Z$][_a-zA-Z0-9$]*  {
    yylval->string = strdup(yytext);
index 2842c42e645ec4fc8244b5d7a6ad07b615307b57..4a05d106be394819514098ddc420907ec3cc7878 100644 (file)
@@ -285,17 +285,21 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
      TEX_SHADOW1D = 343,
      TEX_SHADOW2D = 344,
      TEX_SHADOWRECT = 345,
-     VERTEX = 346,
-     VTXATTRIB = 347,
-     WEIGHT = 348,
-     IDENTIFIER = 349,
-     MASK4 = 350,
-     MASK3 = 351,
-     MASK2 = 352,
-     MASK1 = 353,
-     SWIZZLE = 354,
-     DOT_DOT = 355,
-     DOT = 356
+     TEX_ARRAY1D = 346,
+     TEX_ARRAY2D = 347,
+     TEX_ARRAYSHADOW1D = 348,
+     TEX_ARRAYSHADOW2D = 349,
+     VERTEX = 350,
+     VTXATTRIB = 351,
+     WEIGHT = 352,
+     IDENTIFIER = 353,
+     MASK4 = 354,
+     MASK3 = 355,
+     MASK2 = 356,
+     MASK1 = 357,
+     SWIZZLE = 358,
+     DOT_DOT = 359,
+     DOT = 360
    };
 #endif
 
@@ -328,7 +332,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 332 "program_parse.tab.c"
+#line 336 "program_parse.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -352,14 +356,14 @@ typedef struct YYLTYPE
 /* Copy the second part of user declarations.  */
 
 /* Line 264 of yacc.c  */
-#line 241 "program_parse.y"
+#line 242 "program_parse.y"
 
 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
     void *yyscanner);
 
 
 /* Line 264 of yacc.c  */
-#line 363 "program_parse.tab.c"
+#line 367 "program_parse.tab.c"
 
 #ifdef short
 # undef short
@@ -576,20 +580,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   334
+#define YYLAST   337
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  111
+#define YYNTOKENS  115
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  133
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  258
+#define YYNRULES  262
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  427
+#define YYNSTATES  431
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   356
+#define YYMAXUTOK   360
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -601,15 +605,15 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   106,   103,   107,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   102,
-       2,   108,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   110,   107,   111,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   106,
+       2,   112,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   104,     2,   105,     2,     2,     2,     2,     2,     2,
+       2,   108,     2,   109,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   109,     2,   110,     2,     2,     2,     2,
+       2,     2,     2,   113,     2,   114,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -632,7 +636,8 @@ static const yytype_uint8 yytranslate[] =
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105
 };
 
 #if YYDEBUG
@@ -644,137 +649,139 @@ static const yytype_uint16 yyprhs[] =
       24,    27,    30,    32,    34,    36,    38,    40,    42,    44,
       46,    48,    50,    52,    57,    62,    67,    74,    81,    90,
       99,   102,   105,   107,   109,   111,   113,   115,   117,   119,
-     121,   128,   132,   136,   139,   142,   150,   153,   155,   157,
-     159,   161,   166,   168,   170,   172,   174,   176,   178,   180,
-     184,   185,   188,   191,   193,   195,   197,   199,   201,   203,
-     205,   207,   209,   210,   212,   214,   216,   218,   219,   221,
-     223,   225,   227,   229,   231,   236,   239,   242,   244,   247,
-     249,   252,   254,   257,   262,   267,   269,   270,   274,   276,
-     278,   281,   283,   286,   288,   290,   294,   301,   302,   304,
-     307,   312,   314,   318,   320,   322,   324,   326,   328,   330,
-     332,   334,   336,   338,   341,   344,   347,   350,   353,   356,
-     359,   362,   365,   368,   371,   375,   377,   379,   381,   387,
-     389,   391,   393,   396,   398,   400,   403,   405,   408,   415,
-     417,   421,   423,   425,   427,   429,   431,   436,   438,   440,
-     442,   444,   446,   448,   451,   453,   455,   461,   463,   466,
-     468,   470,   476,   479,   480,   487,   491,   492,   494,   496,
-     498,   500,   502,   505,   507,   509,   512,   517,   522,   523,
-     525,   527,   529,   531,   533,   535,   537,   539,   545,   547,
-     551,   557,   563,   565,   569,   575,   577,   579,   581,   583,
-     585,   587,   589,   591,   593,   597,   603,   611,   621,   624,
-     627,   629,   631,   632,   633,   637,   638,   642,   646,   648,
-     653,   656,   659,   662,   665,   669,   672,   676,   677,   679,
-     681,   682,   684,   686,   687,   689,   691,   692,   694,   696,
-     697,   701,   702,   706,   707,   711,   713,   715,   717
+     121,   123,   125,   127,   129,   136,   140,   144,   147,   150,
+     158,   161,   163,   165,   167,   169,   174,   176,   178,   180,
+     182,   184,   186,   188,   192,   193,   196,   199,   201,   203,
+     205,   207,   209,   211,   213,   215,   217,   218,   220,   222,
+     224,   226,   227,   229,   231,   233,   235,   237,   239,   244,
+     247,   250,   252,   255,   257,   260,   262,   265,   270,   275,
+     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
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     112,     0,    -1,   113,   114,   116,    12,    -1,     3,    -1,
-       4,    -1,   114,   115,    -1,    -1,     8,    94,   102,    -1,
-     116,   117,    -1,    -1,   118,   102,    -1,   154,   102,    -1,
-     119,    -1,   120,    -1,   121,    -1,   122,    -1,   123,    -1,
-     124,    -1,   125,    -1,   126,    -1,   131,    -1,   127,    -1,
-     128,    -1,    19,   135,   103,   132,    -1,    18,   134,   103,
-     133,    -1,    16,   134,   103,   132,    -1,    14,   134,   103,
-     132,   103,   132,    -1,    13,   134,   103,   133,   103,   133,
-      -1,    17,   134,   103,   133,   103,   133,   103,   133,    -1,
-      15,   134,   103,   133,   103,   129,   103,   130,    -1,    20,
-     133,    -1,    82,   238,    -1,    83,    -1,    84,    -1,    85,
+     116,     0,    -1,   117,   118,   120,    12,    -1,     3,    -1,
+       4,    -1,   118,   119,    -1,    -1,     8,    98,   106,    -1,
+     120,   121,    -1,    -1,   122,   106,    -1,   158,   106,    -1,
+     123,    -1,   124,    -1,   125,    -1,   126,    -1,   127,    -1,
+     128,    -1,   129,    -1,   130,    -1,   135,    -1,   131,    -1,
+     132,    -1,    19,   139,   107,   136,    -1,    18,   138,   107,
+     137,    -1,    16,   138,   107,   136,    -1,    14,   138,   107,
+     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,
       -1,    86,    -1,    87,    -1,    88,    -1,    89,    -1,    90,
-      -1,    21,   134,   103,   139,   103,   136,    -1,   224,   139,
-     151,    -1,   224,   139,   152,    -1,   140,   153,    -1,   148,
-     150,    -1,   137,   103,   137,   103,   137,   103,   137,    -1,
-     224,   138,    -1,    22,    -1,    94,    -1,    94,    -1,   156,
-      -1,   141,   104,   142,   105,    -1,   170,    -1,   231,    -1,
-      94,    -1,    94,    -1,   143,    -1,   144,    -1,    22,    -1,
-     148,   149,   145,    -1,    -1,   106,   146,    -1,   107,   147,
-      -1,    22,    -1,    22,    -1,    94,    -1,    98,    -1,    98,
-      -1,    98,    -1,    98,    -1,    95,    -1,    99,    -1,    -1,
-      95,    -1,    96,    -1,    97,    -1,    98,    -1,    -1,   155,
-      -1,   162,    -1,   225,    -1,   227,    -1,   230,    -1,   243,
-      -1,     7,    94,   108,   156,    -1,    91,   157,    -1,    37,
-     161,    -1,    59,    -1,    93,   159,    -1,    52,    -1,    28,
-     236,    -1,    36,    -1,    73,   237,    -1,    49,   104,   160,
-     105,    -1,    92,   104,   158,   105,    -1,    22,    -1,    -1,
-     104,   160,   105,    -1,    22,    -1,    59,    -1,    28,   236,
-      -1,    36,    -1,    73,   237,    -1,   163,    -1,   164,    -1,
-      10,    94,   166,    -1,    10,    94,   104,   165,   105,   167,
-      -1,    -1,    22,    -1,   108,   169,    -1,   108,   109,   168,
-     110,    -1,   171,    -1,   168,   103,   171,    -1,   173,    -1,
-     208,    -1,   218,    -1,   173,    -1,   208,    -1,   219,    -1,
-     172,    -1,   209,    -1,   218,    -1,   173,    -1,    72,   197,
-      -1,    72,   174,    -1,    72,   176,    -1,    72,   179,    -1,
-      72,   181,    -1,    72,   187,    -1,    72,   183,    -1,    72,
-     190,    -1,    72,   192,    -1,    72,   194,    -1,    72,   196,
-      -1,    46,   235,   175,    -1,   185,    -1,    32,    -1,    68,
-      -1,    42,   104,   186,   105,   177,    -1,   185,    -1,    59,
-      -1,    25,    -1,    71,   178,    -1,    39,    -1,    31,    -1,
-      43,   180,    -1,    24,    -1,   235,    66,    -1,    44,   104,
-     186,   105,   235,   182,    -1,   185,    -1,    74,   239,   184,
-      -1,    28,    -1,    24,    -1,    30,    -1,    70,    -1,    22,
-      -1,    75,   237,   188,   189,    -1,    34,    -1,    53,    -1,
-      78,    -1,    79,    -1,    77,    -1,    76,    -1,    35,   191,
-      -1,    28,    -1,    55,    -1,    27,   104,   193,   105,    56,
-      -1,    22,    -1,    57,   195,    -1,    69,    -1,    25,    -1,
-     199,    65,   104,   202,   105,    -1,   199,   198,    -1,    -1,
-      65,   104,   202,   100,   202,   105,    -1,    48,   203,   200,
-      -1,    -1,   201,    -1,    40,    -1,    81,    -1,    41,    -1,
-      22,    -1,    50,   204,    -1,    62,    -1,    51,    -1,    80,
-     237,    -1,    54,   104,   206,   105,    -1,    47,   104,   207,
-     105,    -1,    -1,   205,    -1,    22,    -1,    22,    -1,    22,
-      -1,   212,    -1,   215,    -1,   210,    -1,   213,    -1,    61,
-      33,   104,   211,   105,    -1,   216,    -1,   216,   100,   216,
-      -1,    61,    33,   104,   216,   105,    -1,    61,    45,   104,
-     214,   105,    -1,   217,    -1,   217,   100,   217,    -1,    61,
-      45,   104,   217,   105,    -1,    22,    -1,    22,    -1,   220,
-      -1,   222,    -1,   221,    -1,   222,    -1,   223,    -1,    23,
-      -1,    22,    -1,   109,   223,   110,    -1,   109,   223,   103,
-     223,   110,    -1,   109,   223,   103,   223,   103,   223,   110,
-      -1,   109,   223,   103,   223,   103,   223,   103,   223,   110,
-      -1,   224,    23,    -1,   224,    22,    -1,   106,    -1,   107,
-      -1,    -1,    -1,    11,   226,   229,    -1,    -1,     5,   228,
-     229,    -1,   229,   103,    94,    -1,    94,    -1,     9,    94,
-     108,   231,    -1,    64,    59,    -1,    64,    36,    -1,    64,
-     232,    -1,    64,    58,    -1,    64,    73,   237,    -1,    64,
-      29,    -1,    28,   233,   234,    -1,    -1,    38,    -1,    26,
-      -1,    -1,    60,    -1,    67,    -1,    -1,    38,    -1,    26,
-      -1,    -1,    60,    -1,    67,    -1,    -1,   104,   240,   105,
-      -1,    -1,   104,   241,   105,    -1,    -1,   104,   242,   105,
-      -1,    22,    -1,    22,    -1,    22,    -1,     6,    94,   108,
-      94,    -1
+      -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,
+      -1,    22,    -1,    98,    -1,    98,    -1,   160,    -1,   145,
+     108,   146,   109,    -1,   174,    -1,   235,    -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,
+      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,
+      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,
+     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,
+     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
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   248,   248,   251,   259,   271,   272,   275,   297,   298,
-     301,   316,   319,   324,   331,   332,   333,   334,   335,   336,
-     337,   340,   341,   344,   350,   357,   364,   372,   379,   387,
-     432,   439,   445,   446,   447,   448,   449,   450,   451,   452,
-     455,   467,   480,   493,   515,   524,   533,   540,   549,   577,
-     619,   630,   651,   661,   667,   691,   708,   708,   710,   717,
-     729,   730,   731,   734,   746,   758,   776,   787,   799,   801,
-     802,   803,   804,   807,   807,   807,   807,   808,   811,   812,
-     813,   814,   815,   816,   819,   837,   841,   847,   851,   855,
-     859,   868,   877,   881,   886,   892,   903,   903,   904,   906,
-     910,   914,   918,   924,   924,   926,   942,   965,   968,   979,
-     985,   991,   992,   999,  1005,  1011,  1019,  1025,  1031,  1039,
-    1045,  1051,  1059,  1060,  1063,  1064,  1065,  1066,  1067,  1068,
-    1069,  1070,  1071,  1072,  1075,  1084,  1088,  1092,  1098,  1107,
-    1111,  1115,  1124,  1128,  1134,  1140,  1147,  1152,  1160,  1170,
-    1172,  1180,  1186,  1190,  1194,  1200,  1211,  1220,  1224,  1229,
-    1233,  1237,  1241,  1247,  1254,  1258,  1264,  1272,  1283,  1290,
-    1294,  1300,  1310,  1321,  1325,  1343,  1352,  1355,  1361,  1365,
-    1369,  1375,  1386,  1391,  1396,  1401,  1406,  1411,  1419,  1422,
-    1427,  1440,  1448,  1461,  1461,  1463,  1463,  1465,  1475,  1480,
-    1487,  1497,  1506,  1511,  1518,  1528,  1538,  1550,  1550,  1551,
-    1551,  1553,  1560,  1565,  1572,  1580,  1588,  1597,  1608,  1612,
-    1618,  1619,  1620,  1623,  1623,  1626,  1626,  1629,  1635,  1643,
-    1656,  1665,  1674,  1678,  1687,  1696,  1707,  1714,  1719,  1728,
-    1740,  1743,  1752,  1763,  1764,  1765,  1768,  1769,  1770,  1773,
-    1774,  1777,  1778,  1781,  1782,  1785,  1796,  1807,  1818
+       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
 };
 #endif
 
@@ -797,10 +804,11 @@ static const char *const yytname[] =
   "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",
-  "TEX_SHADOW2D", "TEX_SHADOWRECT", "VERTEX", "VTXATTRIB", "WEIGHT",
-  "IDENTIFIER", "MASK4", "MASK3", "MASK2", "MASK1", "SWIZZLE", "DOT_DOT",
-  "DOT", "';'", "','", "'['", "']'", "'+'", "'-'", "'='", "'{'", "'}'",
-  "$accept", "program", "language", "optionSequence", "option",
+  "TEX_SHADOW2D", "TEX_SHADOWRECT", "TEX_ARRAY1D", "TEX_ARRAY2D",
+  "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
+  "WEIGHT", "IDENTIFIER", "MASK4", "MASK3", "MASK2", "MASK1", "SWIZZLE",
+  "DOT_DOT", "DOT", "';'", "','", "'['", "']'", "'+'", "'-'", "'='", "'{'",
+  "'}'", "$accept", "program", "language", "optionSequence", "option",
   "statementSequence", "statement", "instruction", "ALU_instruction",
   "TexInstruction", "ARL_instruction", "VECTORop_instruction",
   "SCALARop_instruction", "BINSCop_instruction", "BINop_instruction",
@@ -858,40 +866,41 @@ static const yytype_uint16 yytoknum[] =
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,    59,    44,    91,    93,    43,    45,    61,   123,
-     125
+     355,   356,   357,   358,   359,   360,    59,    44,    91,    93,
+      43,    45,    61,   123,   125
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   111,   112,   113,   113,   114,   114,   115,   116,   116,
-     117,   117,   118,   118,   119,   119,   119,   119,   119,   119,
-     119,   120,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   130,   130,   130,   130,   130,   130,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   138,   139,
-     139,   139,   139,   140,   140,   141,   142,   142,   143,   144,
-     145,   145,   145,   146,   147,   148,   149,   150,   151,   152,
-     152,   152,   152,   153,   153,   153,   153,   153,   154,   154,
-     154,   154,   154,   154,   155,   156,   156,   157,   157,   157,
-     157,   157,   157,   157,   157,   158,   159,   159,   160,   161,
-     161,   161,   161,   162,   162,   163,   164,   165,   165,   166,
-     167,   168,   168,   169,   169,   169,   170,   170,   170,   171,
-     171,   171,   172,   172,   173,   173,   173,   173,   173,   173,
-     173,   173,   173,   173,   174,   175,   175,   175,   176,   177,
-     177,   177,   177,   177,   178,   179,   180,   180,   181,   182,
-     183,   184,   185,   185,   185,   186,   187,   188,   188,   189,
-     189,   189,   189,   190,   191,   191,   192,   193,   194,   195,
-     195,   196,   197,   198,   198,   199,   200,   200,   201,   201,
-     201,   202,   203,   203,   203,   203,   203,   203,   204,   204,
-     205,   206,   207,   208,   208,   209,   209,   210,   211,   211,
-     212,   213,   214,   214,   215,   216,   217,   218,   218,   219,
-     219,   220,   221,   221,   222,   222,   222,   222,   223,   223,
-     224,   224,   224,   226,   225,   228,   227,   229,   229,   230,
-     231,   231,   231,   231,   231,   231,   232,   233,   233,   233,
-     234,   234,   234,   235,   235,   235,   236,   236,   236,   237,
-     237,   238,   238,   239,   239,   240,   241,   242,   243
+       0,   115,   116,   117,   117,   118,   118,   119,   120,   120,
+     121,   121,   122,   122,   123,   123,   123,   123,   123,   123,
+     123,   124,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   142,   143,   143,   143,   143,   144,   144,   145,
+     146,   146,   147,   148,   149,   149,   149,   150,   151,   152,
+     153,   154,   155,   156,   156,   156,   156,   157,   157,   157,
+     157,   157,   158,   158,   158,   158,   158,   158,   159,   160,
+     160,   161,   161,   161,   161,   161,   161,   161,   161,   162,
+     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
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -901,28 +910,29 @@ static const yytype_uint8 yyr2[] =
        2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     4,     4,     4,     6,     6,     8,     8,
        2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       6,     3,     3,     2,     2,     7,     2,     1,     1,     1,
-       1,     4,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     2,     2,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     1,     1,     1,     1,     0,     1,     1,
-       1,     1,     1,     1,     4,     2,     2,     1,     2,     1,
-       2,     1,     2,     4,     4,     1,     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
+       1,     1,     1,     1,     6,     3,     3,     2,     2,     7,
+       2,     1,     1,     1,     1,     4,     1,     1,     1,     1,
+       1,     1,     1,     3,     0,     2,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     1,     1,     1,
+       1,     0,     1,     1,     1,     1,     1,     1,     4,     2,
+       2,     1,     2,     1,     2,     1,     2,     4,     4,     1,
+       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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -931,64 +941,65 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint16 yydefact[] =
 {
        0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
-       0,   225,     0,     0,     0,     0,   223,     2,     0,     0,
-       0,     0,     0,     0,     0,   222,     0,     8,     0,    12,
+       0,   229,     0,     0,     0,     0,   227,     2,     0,     0,
+       0,     0,     0,     0,     0,   226,     0,     8,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    21,    22,    20,
-       0,    78,    79,   103,   104,    80,    81,    82,    83,     7,
-       0,     0,     0,     0,     0,     0,     0,    54,     0,    77,
-      53,     0,     0,     0,     0,     0,    65,     0,     0,   220,
-     221,    30,     0,     0,    10,    11,   228,   226,     0,     0,
-       0,   107,   222,   105,   224,   237,   235,   231,   233,   230,
-     249,   232,   222,    73,    74,    75,    76,    43,   222,   222,
-     222,   222,   222,   222,    67,    44,   213,   212,     0,     0,
-       0,     0,    49,   222,    72,     0,    50,    52,   116,   117,
-     193,   194,   118,   209,   210,     0,     0,   258,    84,   229,
-     108,     0,   109,   113,   114,   115,   207,   208,   211,     0,
-     239,   238,   240,     0,   234,     0,     0,     0,     0,    25,
-       0,    24,    23,   246,   101,    99,   249,    86,     0,     0,
-       0,     0,     0,   243,     0,   243,     0,     0,   253,   249,
-     124,   125,   126,   127,   129,   128,   130,   131,   132,   133,
-       0,   246,    91,     0,    89,    87,   249,     0,    96,    85,
-       0,    70,    69,    71,    42,     0,     0,   227,     0,   219,
-     218,   241,   242,   236,   255,     0,   222,   222,     0,     0,
-     222,   247,   248,   100,   102,     0,     0,     0,   164,   165,
-     163,     0,   146,   245,   244,   145,     0,     0,     0,     0,
-     188,   184,     0,   183,   249,   176,   170,   169,   168,     0,
-       0,     0,     0,    90,     0,    92,     0,     0,    88,   222,
-     214,    58,     0,    56,    57,     0,   222,     0,   106,   250,
-      27,    26,    68,    41,   251,     0,     0,   205,     0,   206,
-       0,   167,     0,   155,     0,   147,     0,   152,   153,   136,
-     137,   154,   134,   135,     0,   190,   182,   189,     0,   185,
-     178,   180,   179,   175,   177,   257,     0,   151,   150,   157,
-     158,     0,     0,    98,     0,    95,     0,     0,     0,    51,
-      66,    60,    40,     0,     0,   222,     0,    31,     0,   222,
-     200,   204,     0,     0,   243,   192,     0,   191,     0,   254,
-     162,   161,   159,   160,   156,   181,     0,    93,    94,    97,
-     222,   215,     0,     0,    59,   222,    47,    48,    46,     0,
-       0,     0,   111,   119,   122,   120,   195,   196,   121,   256,
-       0,    32,    33,    34,    35,    36,    37,    38,    39,    29,
-      28,   166,   141,   143,   140,     0,   138,   139,     0,   187,
-     186,   171,     0,    63,    61,    64,    62,     0,     0,     0,
-     123,   173,   222,   110,   252,   144,   142,   148,   149,   222,
-     216,   222,     0,     0,     0,   172,   112,     0,     0,     0,
-     198,     0,   202,     0,   217,   222,   197,     0,   201,     0,
-       0,    45,   199,   203,     0,     0,   174
+       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
 };
 
 /* 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,   369,
+      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,   384,   386,    68,   311,   105,
+     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,   376,   396,   172,   225,
-     173,   397,   174,   298,   283,   274,   175,   301,   334,   176,
-     220,   177,   272,   178,   238,   179,   390,   405,   180,   293,
+     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,
-     409,   120,   357,   411,   121,   268,   270,   358,   122,   136,
+     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
@@ -996,201 +1007,203 @@ static const yytype_int16 yydefgoto[] =
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -374
+#define YYPACT_NINF -377
 static const yytype_int16 yypact[] =
 {
-     154,  -374,  -374,    33,  -374,  -374,    35,   -31,  -374,   166,
-      27,  -374,    55,    66,    72,    96,  -374,  -374,   -34,   -34,
-     -34,   -34,   -34,   -34,   115,    87,   -34,  -374,   108,  -374,
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-     109,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-     118,   105,   106,   107,    -5,   118,    92,  -374,   113,   102,
-    -374,   114,   116,   117,   119,   120,  -374,   121,    97,  -374,
-    -374,  -374,   -15,   122,  -374,  -374,  -374,   123,   124,   -17,
-     157,   205,   -16,  -374,   123,    13,  -374,  -374,  -374,  -374,
-     128,  -374,    87,  -374,  -374,  -374,  -374,  -374,    87,    87,
-      87,    87,    87,    87,  -374,  -374,  -374,  -374,    19,    40,
-      23,   -11,   132,    87,    93,   134,  -374,  -374,  -374,  -374,
-    -374,  -374,  -374,  -374,  -374,   -15,   135,  -374,  -374,  -374,
-    -374,   136,  -374,  -374,  -374,  -374,  -374,  -374,  -374,   183,
-    -374,  -374,    57,   206,  -374,   137,   139,   -15,   140,  -374,
-     141,  -374,  -374,    80,  -374,  -374,   128,  -374,   142,   143,
-     144,     6,   145,    85,   146,    26,    65,    -1,   147,   128,
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-     172,    80,  -374,   148,  -374,  -374,   128,   149,   150,  -374,
-      58,  -374,  -374,  -374,  -374,   -10,   152,  -374,   131,  -374,
-    -374,  -374,  -374,  -374,  -374,   151,    87,    87,   159,   163,
-      87,  -374,  -374,  -374,  -374,   237,   238,   239,  -374,  -374,
-    -374,   240,  -374,  -374,  -374,  -374,   198,   240,    76,   161,
-     244,  -374,   164,  -374,   128,    -4,  -374,  -374,  -374,   245,
-     241,     1,   167,  -374,   248,  -374,   250,   248,  -374,    87,
-    -374,  -374,   168,  -374,  -374,   176,    87,   169,  -374,  -374,
-    -374,  -374,  -374,  -374,   171,   173,   174,  -374,   175,  -374,
-     177,  -374,   178,  -374,   179,  -374,   180,  -374,  -374,  -374,
-    -374,  -374,  -374,  -374,   257,  -374,  -374,  -374,   259,  -374,
-    -374,  -374,  -374,  -374,  -374,  -374,   181,  -374,  -374,  -374,
-    -374,   125,   265,  -374,   185,  -374,   186,   187,    59,  -374,
-    -374,   101,  -374,   190,    -7,    -2,   266,  -374,    48,    87,
-    -374,  -374,   242,    71,    26,  -374,   189,  -374,   191,  -374,
-    -374,  -374,  -374,  -374,  -374,  -374,   192,  -374,  -374,  -374,
-      87,  -374,   273,   277,  -374,    87,  -374,  -374,  -374,    81,
-      23,    60,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-     195,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-    -374,  -374,  -374,  -374,  -374,   270,  -374,  -374,     2,  -374,
-    -374,  -374,    86,  -374,  -374,  -374,  -374,   199,   200,   201,
-    -374,   243,    -2,  -374,  -374,  -374,  -374,  -374,  -374,    87,
-    -374,    87,   237,   238,   202,  -374,  -374,   193,   204,   208,
-     209,   210,   214,   265,  -374,    87,  -374,   237,  -374,   238,
-      43,  -374,  -374,  -374,   265,   211,  -374
+     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
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-    -374,   -94,   -88,   133,  -374,  -374,  -326,  -374,   -98,  -374,
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,   126,  -374,  -374,
-    -374,  -374,  -374,  -374,  -374,   246,  -374,  -374,  -374,    73,
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-     -74,  -374,   -81,  -374,  -374,  -374,  -374,  -374,  -374,  -374,
-    -374,  -374,  -374,  -374,  -295,    95,  -374,  -374,  -374,  -374,
-    -374,  -374,  -374,  -374,  -374,  -374,  -374,  -374,   -27,  -374,
-    -374,  -371,  -374,  -374,  -374,  -374,  -374,   247,  -374,  -374,
-    -374,  -374,  -374,  -374,  -374,  -373,  -317,   249,  -374,  -374,
-    -374,   -80,  -110,   -82,  -374,  -374,  -374,  -374,   269,  -374,
-     252,  -374,  -374,  -374,  -160,   153,  -146,  -374,  -374,  -374,
-    -374,  -374,  -374
+    -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
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -56
+#define YYTABLE_NINF -60
 static const yytype_int16 yytable[] =
 {
      139,   133,   137,   190,   145,   228,   149,   106,   107,   152,
-     214,   148,   251,   150,   151,   346,   147,   181,   147,   387,
-     108,   147,   108,   241,   236,   182,   277,   196,   377,   410,
-      56,   139,   278,     5,   218,   299,   290,   291,   183,   140,
-     245,   184,   420,     7,   422,   109,   109,   153,   185,   208,
-     160,   141,   223,   425,   300,   154,   110,   110,   161,   349,
-      57,   219,   186,    10,   224,   162,   163,   164,   237,   165,
-     350,   166,   281,   158,   111,   408,   111,   292,   155,   112,
-     167,   187,   188,   398,    66,   159,   412,   347,   289,   421,
-      69,    70,   156,   113,   113,   277,   372,   168,   169,    81,
-     277,   278,   423,    82,    69,    70,   278,   113,   279,   222,
-     373,   223,   229,   261,   388,   230,   231,   201,   260,   232,
-      85,    86,   266,   224,   202,   147,   389,   233,    87,    49,
-     374,   361,   362,   363,   364,   365,   366,   367,   368,   308,
-     211,   281,   375,   424,   280,   234,   281,   212,   381,    51,
-      88,    89,    61,    62,    63,    64,    65,     1,     2,    73,
-      52,   249,   340,   392,   378,    90,    53,   139,   250,   341,
-     393,    11,    12,    13,   314,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,   191,   399,
-      54,   192,   193,    69,    70,   104,   400,    93,    94,    95,
-      96,   330,   331,   332,   333,   199,   200,   342,   343,    66,
-      74,    75,    76,    78,    79,    80,    92,    98,   127,    99,
-     100,    56,   101,   102,   103,   125,   126,   130,   204,   197,
-     382,   370,   143,   139,   354,   137,   -55,   242,   195,   257,
-     206,   198,   207,   209,   210,   264,   215,   216,   217,   221,
-     227,   239,   244,   246,   247,   256,   259,   262,   139,   267,
-     269,   271,   273,   314,   275,   284,   285,   295,   288,   297,
-     303,   302,   305,   309,   310,   316,   318,   319,   315,   325,
-     320,   327,   321,   322,   323,   324,   329,   335,   359,   407,
-     337,   338,   339,   345,   379,   383,   380,   381,   371,   385,
-     394,   395,   401,   414,   402,   403,   413,   415,   404,   417,
-     139,   354,   137,   416,   419,   418,   426,   139,   406,   314,
-     307,   255,   276,   391,    84,   128,     0,     0,     0,   134,
-       0,   135,   129,   314,   243
+     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
 };
 
 static const yytype_int16 yycheck[] =
 {
       82,    82,    82,   113,    92,   165,   100,    22,    23,   103,
-     156,    99,    22,   101,   102,    22,    98,    28,   100,   345,
-      37,   103,    37,   169,    25,    36,    24,   125,   323,   402,
-      64,   113,    30,     0,    28,    34,    40,    41,    49,    26,
-     186,    52,   413,     8,   417,    61,    61,    28,    59,   147,
-      27,    38,    26,   424,    53,    36,    72,    72,    35,    61,
-      94,    55,    73,    94,    38,    42,    43,    44,    69,    46,
-      72,    48,    70,    33,    91,   401,    91,    81,    59,    94,
-      57,    92,    93,   378,    94,    45,   403,    94,   234,   415,
-     106,   107,    73,   109,   109,    24,    25,    74,    75,   104,
-      24,    30,   419,   108,   106,   107,    30,   109,    32,    24,
-      39,    26,    47,   207,    33,    50,    51,    60,   206,    54,
-      28,    29,   210,    38,    67,   207,    45,    62,    36,   102,
-      59,    83,    84,    85,    86,    87,    88,    89,    90,   249,
-      60,    70,    71,   100,    68,    80,    70,    67,   105,    94,
-      58,    59,    19,    20,    21,    22,    23,     3,     4,    26,
-      94,   103,   103,   103,   324,    73,    94,   249,   110,   110,
-     110,     5,     6,     7,   256,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    95,   103,
-      94,    98,    99,   106,   107,    98,   110,    95,    96,    97,
-      98,    76,    77,    78,    79,    22,    23,   106,   107,    94,
-     102,   102,    94,   108,   108,   108,   103,   103,    94,   103,
-     103,    64,   103,   103,   103,   103,   103,    22,    22,    94,
-     340,   319,   104,   315,   315,   315,   104,    65,   104,   108,
-     103,   105,   103,   103,   103,    82,   104,   104,   104,   104,
-     104,   104,   104,   104,   104,   103,   105,    98,   340,    22,
-      22,    22,    22,   345,    66,   104,    22,    22,   104,    28,
-      22,   104,    22,   105,    98,   104,   103,   103,   109,    22,
-     105,    22,   105,   105,   105,   105,   105,    22,    22,   399,
-     105,   105,   105,   103,   105,    22,   105,   105,    56,    22,
-     105,    31,   103,   110,   104,   104,   104,   103,    65,   100,
-     392,   392,   392,   105,   100,   105,   105,   399,   392,   401,
-     247,   195,   227,   350,    55,    79,    -1,    -1,    -1,    82,
-      -1,    82,    80,   415,   181
+     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
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,   112,   113,     0,   114,     8,   115,   116,
-      94,     5,     6,     7,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   131,
-     154,   155,   162,   163,   164,   225,   227,   230,   243,   102,
-     228,    94,    94,    94,    94,   226,    64,    94,   134,   140,
-     231,   134,   134,   134,   134,   134,    94,   135,   148,   106,
-     107,   133,   224,   134,   102,   102,    94,   229,   108,   108,
-     108,   104,   108,   166,   229,    28,    29,    36,    58,    59,
-      73,   232,   103,    95,    96,    97,    98,   153,   103,   103,
-     103,   103,   103,   103,    98,   150,    22,    23,    37,    61,
-      72,    91,    94,   109,   139,   141,   156,   170,   173,   208,
-     212,   215,   219,   221,   222,   103,   103,    94,   156,   231,
-      22,   165,   169,   173,   208,   218,   220,   222,   223,   224,
-      26,    38,   233,   104,   237,   133,   132,   224,   133,   132,
-     133,   133,   132,    28,    36,    59,    73,   161,    33,    45,
+       0,     3,     4,   116,   117,     0,   118,     8,   119,   120,
+      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,
+     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,
+     137,   137,   136,    28,    36,    59,    73,   165,    33,    45,
       27,    35,    42,    43,    44,    46,    48,    57,    74,    75,
-     174,   176,   179,   181,   183,   187,   190,   192,   194,   196,
-     199,    28,    36,    49,    52,    59,    73,    92,    93,   157,
-     223,    95,    98,    99,   152,   104,   139,    94,   105,    22,
-      23,    60,    67,   234,    22,   240,   103,   103,   139,   103,
-     103,    60,    67,   236,   237,   104,   104,   104,    28,    55,
-     191,   104,    24,    26,    38,   180,   235,   104,   235,    47,
-      50,    51,    54,    62,    80,   203,    25,    69,   195,   104,
-     239,   237,    65,   236,   104,   237,   104,   104,   159,   103,
-     110,    22,   142,   143,   144,   148,   103,   108,   167,   105,
-     133,   132,    98,   151,    82,   129,   133,    22,   216,    22,
-     217,    22,   193,    22,   186,    66,   186,    24,    30,    32,
-      68,    70,   175,   185,   104,    22,   204,   205,   104,   237,
-      40,    41,    81,   200,   201,    22,   242,    28,   184,    34,
-      53,   188,   104,    22,   160,    22,   158,   160,   223,   105,
-      98,   149,   136,   137,   224,   109,   104,   238,   103,   103,
-     105,   105,   105,   105,   105,    22,   207,    22,   206,   105,
-      76,    77,    78,    79,   189,    22,   202,   105,   105,   105,
-     103,   110,   106,   107,   145,   103,    22,    94,   138,    61,
-      72,   168,   171,   172,   173,   209,   210,   213,   218,    22,
-     241,    83,    84,    85,    86,    87,    88,    89,    90,   130,
-     133,    56,    25,    39,    59,    71,   177,   185,   235,   105,
-     105,   105,   223,    22,   146,    22,   147,   137,    33,    45,
-     197,   199,   103,   110,   105,    31,   178,   182,   185,   103,
-     110,   103,   104,   104,    65,   198,   171,   223,   137,   211,
-     216,   214,   217,   104,   110,   103,   105,   100,   105,   100,
-     202,   137,   216,   217,   100,   202,   105
+     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
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2044,7 +2057,7 @@ yyreduce:
         case 3:
 
 /* Line 1455 of yacc.c  */
-#line 252 "program_parse.y"
+#line 253 "program_parse.y"
     {
           if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
@@ -2057,7 +2070,7 @@ yyreduce:
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 260 "program_parse.y"
+#line 261 "program_parse.y"
     {
           if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
@@ -2072,7 +2085,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 276 "program_parse.y"
+#line 277 "program_parse.y"
     {
           int valid = 0;
 
@@ -2097,7 +2110,7 @@ yyreduce:
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 302 "program_parse.y"
+#line 303 "program_parse.y"
     {
           if ((yyvsp[(1) - (2)].inst) != NULL) {
              if (state->inst_tail == NULL) {
@@ -2117,7 +2130,7 @@ yyreduce:
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 320 "program_parse.y"
+#line 321 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumAluInstructions++;
@@ -2127,7 +2140,7 @@ yyreduce:
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 325 "program_parse.y"
+#line 326 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumTexInstructions++;
@@ -2137,7 +2150,7 @@ yyreduce:
   case 23:
 
 /* Line 1455 of yacc.c  */
-#line 345 "program_parse.y"
+#line 346 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2146,7 +2159,7 @@ yyreduce:
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 351 "program_parse.y"
+#line 352 "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;
@@ -2156,7 +2169,7 @@ yyreduce:
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 358 "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;
@@ -2166,7 +2179,7 @@ yyreduce:
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 365 "program_parse.y"
+#line 366 "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;
@@ -2176,7 +2189,7 @@ yyreduce:
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 373 "program_parse.y"
+#line 374 "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;
@@ -2186,7 +2199,7 @@ yyreduce:
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 381 "program_parse.y"
+#line 382 "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;
@@ -2196,7 +2209,7 @@ yyreduce:
   case 29:
 
 /* Line 1455 of yacc.c  */
-#line 388 "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), NULL, NULL);
           if ((yyval.inst) != NULL) {
@@ -2244,7 +2257,7 @@ yyreduce:
   case 30:
 
 /* Line 1455 of yacc.c  */
-#line 433 "program_parse.y"
+#line 434 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
           state->fragment.UsesKill = 1;
@@ -2254,7 +2267,7 @@ yyreduce:
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 440 "program_parse.y"
+#line 441 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
@@ -2263,63 +2276,91 @@ yyreduce:
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 445 "program_parse.y"
+#line 446 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_INDEX; ;}
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 446 "program_parse.y"
+#line 447 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_INDEX; ;}
     break;
 
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 447 "program_parse.y"
+#line 448 "program_parse.y"
     { (yyval.integer) = TEXTURE_3D_INDEX; ;}
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 448 "program_parse.y"
+#line 449 "program_parse.y"
     { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 449 "program_parse.y"
+#line 450 "program_parse.y"
     { (yyval.integer) = TEXTURE_RECT_INDEX; ;}
     break;
 
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 450 "program_parse.y"
+#line 451 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_INDEX; ;}
     break;
 
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 451 "program_parse.y"
+#line 452 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_INDEX; ;}
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 452 "program_parse.y"
+#line 453 "program_parse.y"
     { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
     break;
 
   case 40:
 
+/* Line 1455 of yacc.c  */
+#line 454 "program_parse.y"
+    { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}
+    break;
+
+  case 41:
+
+/* Line 1455 of yacc.c  */
+#line 455 "program_parse.y"
+    { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}
+    break;
+
+  case 42:
+
 /* Line 1455 of yacc.c  */
 #line 456 "program_parse.y"
+    { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}
+    break;
+
+  case 43:
+
+/* Line 1455 of yacc.c  */
+#line 457 "program_parse.y"
+    { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}
+    break;
+
+  case 44:
+
+/* Line 1455 of yacc.c  */
+#line 461 "program_parse.y"
     {
           /* FIXME: Is this correct?  Should the extenedSwizzle be applied
            * FIXME: to the existing swizzle?
@@ -2331,10 +2372,10 @@ yyreduce:
        ;}
     break;
 
-  case 41:
+  case 45:
 
 /* Line 1455 of yacc.c  */
-#line 468 "program_parse.y"
+#line 473 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2347,10 +2388,10 @@ yyreduce:
        ;}
     break;
 
-  case 42:
+  case 46:
 
 /* Line 1455 of yacc.c  */
-#line 481 "program_parse.y"
+#line 486 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2363,10 +2404,10 @@ yyreduce:
        ;}
     break;
 
-  case 43:
+  case 47:
 
 /* Line 1455 of yacc.c  */
-#line 494 "program_parse.y"
+#line 499 "program_parse.y"
     {
           (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
           (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
@@ -2388,10 +2429,10 @@ yyreduce:
        ;}
     break;
 
-  case 44:
+  case 48:
 
 /* Line 1455 of yacc.c  */
-#line 516 "program_parse.y"
+#line 521 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2400,10 +2441,10 @@ yyreduce:
        ;}
     break;
 
-  case 45:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 525 "program_parse.y"
+#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);
@@ -2412,20 +2453,20 @@ yyreduce:
        ;}
     break;
 
-  case 46:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 534 "program_parse.y"
+#line 539 "program_parse.y"
     {
           (yyval.swiz_mask).swizzle = (yyvsp[(2) - (2)].integer);
           (yyval.swiz_mask).mask = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
        ;}
     break;
 
-  case 47:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 541 "program_parse.y"
+#line 546 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2436,10 +2477,10 @@ yyreduce:
        ;}
     break;
 
-  case 48:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 550 "program_parse.y"
+#line 555 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2467,10 +2508,10 @@ yyreduce:
        ;}
     break;
 
-  case 49:
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 578 "program_parse.y"
+#line 583 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2514,10 +2555,10 @@ yyreduce:
        ;}
     break;
 
-  case 50:
+  case 54:
 
 /* Line 1455 of yacc.c  */
-#line 620 "program_parse.y"
+#line 625 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2530,10 +2571,10 @@ yyreduce:
        ;}
     break;
 
-  case 51:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 631 "program_parse.y"
+#line 636 "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)) {
@@ -2556,10 +2597,10 @@ yyreduce:
        ;}
     break;
 
-  case 52:
+  case 56:
 
 /* Line 1455 of yacc.c  */
-#line 652 "program_parse.y"
+#line 657 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2569,10 +2610,10 @@ yyreduce:
        ;}
     break;
 
-  case 53:
+  case 57:
 
 /* Line 1455 of yacc.c  */
-#line 662 "program_parse.y"
+#line 667 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2580,10 +2621,10 @@ yyreduce:
        ;}
     break;
 
-  case 54:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 668 "program_parse.y"
+#line 673 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2607,10 +2648,10 @@ yyreduce:
        ;}
     break;
 
-  case 55:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 692 "program_parse.y"
+#line 697 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2627,20 +2668,20 @@ yyreduce:
        ;}
     break;
 
-  case 58:
+  case 62:
 
 /* Line 1455 of yacc.c  */
-#line 711 "program_parse.y"
+#line 716 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 59:
+  case 63:
 
 /* Line 1455 of yacc.c  */
-#line 718 "program_parse.y"
+#line 723 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2652,31 +2693,31 @@ yyreduce:
        ;}
     break;
 
-  case 60:
+  case 64:
 
 /* Line 1455 of yacc.c  */
-#line 729 "program_parse.y"
+#line 734 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 61:
+  case 65:
 
 /* Line 1455 of yacc.c  */
-#line 730 "program_parse.y"
+#line 735 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 62:
+  case 66:
 
 /* Line 1455 of yacc.c  */
-#line 731 "program_parse.y"
+#line 736 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 63:
+  case 67:
 
 /* Line 1455 of yacc.c  */
-#line 735 "program_parse.y"
+#line 740 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2688,10 +2729,10 @@ yyreduce:
        ;}
     break;
 
-  case 64:
+  case 68:
 
 /* Line 1455 of yacc.c  */
-#line 747 "program_parse.y"
+#line 752 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2703,10 +2744,10 @@ yyreduce:
        ;}
     break;
 
-  case 65:
+  case 69:
 
 /* Line 1455 of yacc.c  */
-#line 759 "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));
@@ -2724,10 +2765,10 @@ yyreduce:
        ;}
     break;
 
-  case 66:
+  case 70:
 
 /* Line 1455 of yacc.c  */
-#line 777 "program_parse.y"
+#line 782 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2738,10 +2779,10 @@ yyreduce:
        ;}
     break;
 
-  case 67:
+  case 71:
 
 /* Line 1455 of yacc.c  */
-#line 788 "program_parse.y"
+#line 793 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2753,24 +2794,24 @@ yyreduce:
        ;}
     break;
 
-  case 72:
+  case 76:
 
 /* Line 1455 of yacc.c  */
-#line 804 "program_parse.y"
+#line 809 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 77:
+  case 81:
 
 /* Line 1455 of yacc.c  */
-#line 808 "program_parse.y"
+#line 813 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 84:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 820 "program_parse.y"
+#line 825 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -2788,55 +2829,55 @@ yyreduce:
        ;}
     break;
 
-  case 85:
+  case 89:
 
 /* Line 1455 of yacc.c  */
-#line 838 "program_parse.y"
+#line 843 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 86:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 842 "program_parse.y"
+#line 847 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 87:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 848 "program_parse.y"
+#line 853 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
     break;
 
-  case 88:
+  case 92:
 
 /* Line 1455 of yacc.c  */
-#line 852 "program_parse.y"
+#line 857 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
     break;
 
-  case 89:
+  case 93:
 
 /* Line 1455 of yacc.c  */
-#line 856 "program_parse.y"
+#line 861 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
     break;
 
-  case 90:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 860 "program_parse.y"
+#line 865 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -2847,10 +2888,10 @@ yyreduce:
        ;}
     break;
 
-  case 91:
+  case 95:
 
 /* Line 1455 of yacc.c  */
-#line 869 "program_parse.y"
+#line 874 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -2861,38 +2902,38 @@ yyreduce:
        ;}
     break;
 
-  case 92:
+  case 96:
 
 /* Line 1455 of yacc.c  */
-#line 878 "program_parse.y"
+#line 883 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 93:
+  case 97:
 
 /* Line 1455 of yacc.c  */
-#line 882 "program_parse.y"
+#line 887 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 94:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 887 "program_parse.y"
+#line 892 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 95:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 893 "program_parse.y"
+#line 898 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -2903,46 +2944,46 @@ yyreduce:
        ;}
     break;
 
-  case 99:
+  case 103:
 
 /* Line 1455 of yacc.c  */
-#line 907 "program_parse.y"
+#line 912 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
     break;
 
-  case 100:
+  case 104:
 
 /* Line 1455 of yacc.c  */
-#line 911 "program_parse.y"
+#line 916 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 101:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 915 "program_parse.y"
+#line 920 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
     break;
 
-  case 102:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 919 "program_parse.y"
+#line 924 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 105:
+  case 109:
 
 /* Line 1455 of yacc.c  */
-#line 927 "program_parse.y"
+#line 932 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -2958,10 +2999,10 @@ yyreduce:
        ;}
     break;
 
-  case 106:
+  case 110:
 
 /* Line 1455 of yacc.c  */
-#line 943 "program_parse.y"
+#line 948 "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, 
@@ -2983,19 +3024,19 @@ yyreduce:
        ;}
     break;
 
-  case 107:
+  case 111:
 
 /* Line 1455 of yacc.c  */
-#line 965 "program_parse.y"
+#line 970 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 108:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 969 "program_parse.y"
+#line 974 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxParameters)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size");
@@ -3006,38 +3047,38 @@ yyreduce:
        ;}
     break;
 
-  case 109:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 980 "program_parse.y"
+#line 985 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
     break;
 
-  case 110:
+  case 114:
 
 /* Line 1455 of yacc.c  */
-#line 986 "program_parse.y"
+#line 991 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
     break;
 
-  case 112:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 993 "program_parse.y"
+#line 998 "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);
        ;}
     break;
 
-  case 113:
+  case 117:
 
 /* Line 1455 of yacc.c  */
-#line 1000 "program_parse.y"
+#line 1005 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3045,10 +3086,10 @@ yyreduce:
        ;}
     break;
 
-  case 114:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1006 "program_parse.y"
+#line 1011 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3056,10 +3097,10 @@ yyreduce:
        ;}
     break;
 
-  case 115:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1012 "program_parse.y"
+#line 1017 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3067,10 +3108,10 @@ yyreduce:
        ;}
     break;
 
-  case 116:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1020 "program_parse.y"
+#line 1025 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3078,10 +3119,10 @@ yyreduce:
        ;}
     break;
 
-  case 117:
+  case 121:
 
 /* Line 1455 of yacc.c  */
-#line 1026 "program_parse.y"
+#line 1031 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3089,10 +3130,10 @@ yyreduce:
        ;}
     break;
 
-  case 118:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1032 "program_parse.y"
+#line 1037 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3100,10 +3141,10 @@ yyreduce:
        ;}
     break;
 
-  case 119:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1040 "program_parse.y"
+#line 1045 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3111,10 +3152,10 @@ yyreduce:
        ;}
     break;
 
-  case 120:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1046 "program_parse.y"
+#line 1051 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3122,10 +3163,10 @@ yyreduce:
        ;}
     break;
 
-  case 121:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1052 "program_parse.y"
+#line 1057 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3133,94 +3174,94 @@ yyreduce:
        ;}
     break;
 
-  case 122:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1059 "program_parse.y"
+#line 1064 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 123:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1060 "program_parse.y"
+#line 1065 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 124:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1063 "program_parse.y"
+#line 1068 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 125:
+  case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1064 "program_parse.y"
+#line 1069 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 126:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1065 "program_parse.y"
+#line 1070 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 127:
+  case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1066 "program_parse.y"
+#line 1071 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 128:
+  case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1067 "program_parse.y"
+#line 1072 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 129:
+  case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "program_parse.y"
+#line 1073 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 130:
+  case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1069 "program_parse.y"
+#line 1074 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 131:
+  case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1070 "program_parse.y"
+#line 1075 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 132:
+  case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1071 "program_parse.y"
+#line 1076 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 133:
+  case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1072 "program_parse.y"
+#line 1077 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 134:
+  case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1076 "program_parse.y"
+#line 1081 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3229,37 +3270,37 @@ yyreduce:
        ;}
     break;
 
-  case 135:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1085 "program_parse.y"
+#line 1090 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 136:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1089 "program_parse.y"
+#line 1094 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
     break;
 
-  case 137:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1093 "program_parse.y"
+#line 1098 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
     break;
 
-  case 138:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1099 "program_parse.y"
+#line 1104 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3268,28 +3309,28 @@ yyreduce:
        ;}
     break;
 
-  case 139:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1108 "program_parse.y"
+#line 1113 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 140:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1112 "program_parse.y"
+#line 1117 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
     break;
 
-  case 141:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1116 "program_parse.y"
+#line 1121 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3300,57 +3341,57 @@ yyreduce:
        ;}
     break;
 
-  case 142:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1125 "program_parse.y"
+#line 1130 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 143:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1129 "program_parse.y"
+#line 1134 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
     break;
 
-  case 144:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1135 "program_parse.y"
+#line 1140 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
     break;
 
-  case 145:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1141 "program_parse.y"
+#line 1146 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
     break;
 
-  case 146:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1148 "program_parse.y"
+#line 1153 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
     break;
 
-  case 147:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1153 "program_parse.y"
+#line 1158 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3358,10 +3399,10 @@ yyreduce:
        ;}
     break;
 
-  case 148:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1161 "program_parse.y"
+#line 1166 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3371,10 +3412,10 @@ yyreduce:
        ;}
     break;
 
-  case 150:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1173 "program_parse.y"
+#line 1178 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3382,46 +3423,46 @@ yyreduce:
        ;}
     break;
 
-  case 151:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1181 "program_parse.y"
+#line 1186 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
     break;
 
-  case 152:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1187 "program_parse.y"
+#line 1192 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
     break;
 
-  case 153:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1191 "program_parse.y"
+#line 1196 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
     break;
 
-  case 154:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1195 "program_parse.y"
+#line 1200 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
     break;
 
-  case 155:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1201 "program_parse.y"
+#line 1206 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3432,10 +3473,10 @@ yyreduce:
        ;}
     break;
 
-  case 156:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1212 "program_parse.y"
+#line 1217 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3444,92 +3485,92 @@ yyreduce:
        ;}
     break;
 
-  case 157:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1221 "program_parse.y"
+#line 1226 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 158:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1225 "program_parse.y"
+#line 1230 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
     break;
 
-  case 159:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1230 "program_parse.y"
+#line 1235 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 160:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1234 "program_parse.y"
+#line 1239 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 161:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1238 "program_parse.y"
+#line 1243 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 162:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1242 "program_parse.y"
+#line 1247 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 163:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1248 "program_parse.y"
+#line 1253 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 164:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1255 "program_parse.y"
+#line 1260 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
     break;
 
-  case 165:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1259 "program_parse.y"
+#line 1264 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
     break;
 
-  case 166:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1265 "program_parse.y"
+#line 1270 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3537,10 +3578,10 @@ yyreduce:
        ;}
     break;
 
-  case 167:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1273 "program_parse.y"
+#line 1278 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3551,38 +3592,38 @@ yyreduce:
        ;}
     break;
 
-  case 168:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1284 "program_parse.y"
+#line 1289 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 169:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1291 "program_parse.y"
+#line 1296 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
     break;
 
-  case 170:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1295 "program_parse.y"
+#line 1300 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
     break;
 
-  case 171:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1301 "program_parse.y"
+#line 1306 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3592,10 +3633,10 @@ yyreduce:
        ;}
     break;
 
-  case 172:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1311 "program_parse.y"
+#line 1316 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3605,20 +3646,20 @@ yyreduce:
        ;}
     break;
 
-  case 173:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1321 "program_parse.y"
+#line 1326 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
     break;
 
-  case 174:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1326 "program_parse.y"
+#line 1331 "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).
@@ -3636,10 +3677,10 @@ yyreduce:
        ;}
     break;
 
-  case 175:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1344 "program_parse.y"
+#line 1349 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3647,55 +3688,55 @@ yyreduce:
        ;}
     break;
 
-  case 176:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1352 "program_parse.y"
+#line 1357 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 177:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1356 "program_parse.y"
+#line 1361 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 178:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1362 "program_parse.y"
+#line 1367 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
     break;
 
-  case 179:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1366 "program_parse.y"
+#line 1371 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
     break;
 
-  case 180:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1370 "program_parse.y"
+#line 1375 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
     break;
 
-  case 181:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1376 "program_parse.y"
+#line 1381 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3706,88 +3747,88 @@ yyreduce:
        ;}
     break;
 
-  case 182:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1387 "program_parse.y"
+#line 1392 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 183:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1392 "program_parse.y"
+#line 1397 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 184:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1397 "program_parse.y"
+#line 1402 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 185:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1402 "program_parse.y"
+#line 1407 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 186:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1407 "program_parse.y"
+#line 1412 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 187:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1412 "program_parse.y"
+#line 1417 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 188:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1419 "program_parse.y"
+#line 1424 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 189:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1423 "program_parse.y"
+#line 1428 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 190:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1428 "program_parse.y"
+#line 1433 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -3801,10 +3842,10 @@ yyreduce:
        ;}
     break;
 
-  case 191:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1441 "program_parse.y"
+#line 1446 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -3813,10 +3854,10 @@ yyreduce:
        ;}
     break;
 
-  case 192:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1449 "program_parse.y"
+#line 1454 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -3827,10 +3868,10 @@ yyreduce:
        ;}
     break;
 
-  case 197:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1466 "program_parse.y"
+#line 1471 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3840,30 +3881,30 @@ yyreduce:
        ;}
     break;
 
-  case 198:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1476 "program_parse.y"
+#line 1481 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 199:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1481 "program_parse.y"
+#line 1486 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 200:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1488 "program_parse.y"
+#line 1493 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3873,10 +3914,10 @@ yyreduce:
        ;}
     break;
 
-  case 201:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 1498 "program_parse.y"
+#line 1503 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3886,30 +3927,30 @@ yyreduce:
        ;}
     break;
 
-  case 202:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 1507 "program_parse.y"
+#line 1512 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 203:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 1512 "program_parse.y"
+#line 1517 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 204:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 1519 "program_parse.y"
+#line 1524 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3919,10 +3960,10 @@ yyreduce:
        ;}
     break;
 
-  case 205:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1529 "program_parse.y"
+#line 1534 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -3932,10 +3973,10 @@ yyreduce:
        ;}
     break;
 
-  case 206:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1539 "program_parse.y"
+#line 1544 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -3945,40 +3986,40 @@ yyreduce:
        ;}
     break;
 
-  case 211:
+  case 215:
 
 /* Line 1455 of yacc.c  */
-#line 1554 "program_parse.y"
+#line 1559 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
        ;}
     break;
 
-  case 212:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 1561 "program_parse.y"
+#line 1566 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
        ;}
     break;
 
-  case 213:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1566 "program_parse.y"
+#line 1571 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 214:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1573 "program_parse.y"
+#line 1578 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -3988,10 +4029,10 @@ yyreduce:
        ;}
     break;
 
-  case 215:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1581 "program_parse.y"
+#line 1586 "program_parse.y"
     {
           (yyval.vector).count = 2;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -4001,10 +4042,10 @@ yyreduce:
        ;}
     break;
 
-  case 216:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1590 "program_parse.y"
+#line 1595 "program_parse.y"
     {
           (yyval.vector).count = 3;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -4014,10 +4055,10 @@ yyreduce:
        ;}
     break;
 
-  case 217:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 1599 "program_parse.y"
+#line 1604 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4027,63 +4068,63 @@ yyreduce:
        ;}
     break;
 
-  case 218:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1609 "program_parse.y"
+#line 1614 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
     break;
 
-  case 219:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1613 "program_parse.y"
+#line 1618 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
     break;
 
-  case 220:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1618 "program_parse.y"
+#line 1623 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 221:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1619 "program_parse.y"
+#line 1624 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
-  case 222:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1620 "program_parse.y"
+#line 1625 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 223:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1623 "program_parse.y"
+#line 1628 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 225:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1626 "program_parse.y"
+#line 1631 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 227:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1630 "program_parse.y"
+#line 1635 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4091,10 +4132,10 @@ yyreduce:
        ;}
     break;
 
-  case 228:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 1636 "program_parse.y"
+#line 1641 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4102,10 +4143,10 @@ yyreduce:
        ;}
     break;
 
-  case 229:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1644 "program_parse.y"
+#line 1649 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
@@ -4118,10 +4159,10 @@ yyreduce:
        ;}
     break;
 
-  case 230:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1657 "program_parse.y"
+#line 1662 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4132,10 +4173,10 @@ yyreduce:
        ;}
     break;
 
-  case 231:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1666 "program_parse.y"
+#line 1671 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4146,19 +4187,19 @@ yyreduce:
        ;}
     break;
 
-  case 232:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 1675 "program_parse.y"
+#line 1680 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 233:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1679 "program_parse.y"
+#line 1684 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4169,10 +4210,10 @@ yyreduce:
        ;}
     break;
 
-  case 234:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1688 "program_parse.y"
+#line 1693 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4183,10 +4224,10 @@ yyreduce:
        ;}
     break;
 
-  case 235:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1697 "program_parse.y"
+#line 1702 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4197,19 +4238,19 @@ yyreduce:
        ;}
     break;
 
-  case 236:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1708 "program_parse.y"
+#line 1713 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 237:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1714 "program_parse.y"
+#line 1719 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4217,10 +4258,10 @@ yyreduce:
        ;}
     break;
 
-  case 238:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1720 "program_parse.y"
+#line 1725 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4231,10 +4272,10 @@ yyreduce:
        ;}
     break;
 
-  case 239:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1729 "program_parse.y"
+#line 1734 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4245,19 +4286,19 @@ yyreduce:
        ;}
     break;
 
-  case 240:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1740 "program_parse.y"
+#line 1745 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 241:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1744 "program_parse.y"
+#line 1749 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4268,10 +4309,10 @@ yyreduce:
        ;}
     break;
 
-  case 242:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1753 "program_parse.y"
+#line 1758 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4282,94 +4323,94 @@ yyreduce:
        ;}
     break;
 
-  case 243:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1763 "program_parse.y"
+#line 1768 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 244:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1764 "program_parse.y"
+#line 1769 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 245:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1765 "program_parse.y"
+#line 1770 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 246:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1768 "program_parse.y"
+#line 1773 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 247:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1769 "program_parse.y"
+#line 1774 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 248:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1770 "program_parse.y"
+#line 1775 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 249:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1773 "program_parse.y"
+#line 1778 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 250:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1774 "program_parse.y"
+#line 1779 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 251:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1777 "program_parse.y"
+#line 1782 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 252:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1778 "program_parse.y"
+#line 1783 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 253:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1781 "program_parse.y"
+#line 1786 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 254:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1782 "program_parse.y"
+#line 1787 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 255:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1786 "program_parse.y"
+#line 1791 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4380,10 +4421,10 @@ yyreduce:
        ;}
     break;
 
-  case 256:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1797 "program_parse.y"
+#line 1802 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4394,10 +4435,10 @@ yyreduce:
        ;}
     break;
 
-  case 257:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1808 "program_parse.y"
+#line 1813 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4408,10 +4449,10 @@ yyreduce:
        ;}
     break;
 
-  case 258:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1819 "program_parse.y"
+#line 1824 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4435,7 +4476,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4439 "program_parse.tab.c"
+#line 4480 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4654,7 +4695,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1839 "program_parse.y"
+#line 1844 "program_parse.y"
 
 
 struct asm_instruction *
index 4fd65318016123d38a3f78fc71f7eebbb1403ba1..e7264079e93ce6641e1ce2757766640e77c55f8d 100644 (file)
      TEX_SHADOW1D = 343,
      TEX_SHADOW2D = 344,
      TEX_SHADOWRECT = 345,
-     VERTEX = 346,
-     VTXATTRIB = 347,
-     WEIGHT = 348,
-     IDENTIFIER = 349,
-     MASK4 = 350,
-     MASK3 = 351,
-     MASK2 = 352,
-     MASK1 = 353,
-     SWIZZLE = 354,
-     DOT_DOT = 355,
-     DOT = 356
+     TEX_ARRAY1D = 346,
+     TEX_ARRAY2D = 347,
+     TEX_ARRAYSHADOW1D = 348,
+     TEX_ARRAYSHADOW2D = 349,
+     VERTEX = 350,
+     VTXATTRIB = 351,
+     WEIGHT = 352,
+     IDENTIFIER = 353,
+     MASK4 = 354,
+     MASK3 = 355,
+     MASK2 = 356,
+     MASK1 = 357,
+     SWIZZLE = 358,
+     DOT_DOT = 359,
+     DOT = 360
    };
 #endif
 
@@ -170,7 +174,7 @@ typedef union YYSTYPE
 
 
 /* Line 1676 of yacc.c  */
-#line 174 "program_parse.tab.h"
+#line 178 "program_parse.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 63a176dc8dae088edb53e60948ae2ddfe3fded7c..9e7c9e444d40659799f3e418b022de8d563e1379 100644 (file)
@@ -158,6 +158,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
 %token TEXCOORD TEXENV TEXGEN TEXGEN_Q TEXGEN_R TEXGEN_S TEXGEN_T TEXTURE TRANSPOSE
 %token TEXTURE_UNIT TEX_1D TEX_2D TEX_3D TEX_CUBE TEX_RECT
 %token TEX_SHADOW1D TEX_SHADOW2D TEX_SHADOWRECT
+%token TEX_ARRAY1D TEX_ARRAY2D TEX_ARRAYSHADOW1D TEX_ARRAYSHADOW2D 
 %token VERTEX VTXATTRIB
 %token WEIGHT
 
@@ -450,6 +451,10 @@ texTarget: TEX_1D  { $$ = TEXTURE_1D_INDEX; }
        | TEX_SHADOW1D   { $$ = -TEXTURE_1D_INDEX; }
        | TEX_SHADOW2D   { $$ = -TEXTURE_2D_INDEX; }
        | TEX_SHADOWRECT { $$ = -TEXTURE_RECT_INDEX; }
+       | TEX_ARRAY1D         { $$ = TEXTURE_1D_ARRAY_INDEX; }
+       | TEX_ARRAY2D         { $$ = TEXTURE_2D_ARRAY_INDEX; }
+       | TEX_ARRAYSHADOW1D   { $$ = -TEXTURE_1D_ARRAY_INDEX; }
+       | TEX_ARRAYSHADOW2D   { $$ = -TEXTURE_2D_ARRAY_INDEX; }
        ;
 
 SWZ_instruction: SWZ maskedDstReg ',' srcReg ',' extendedSwizzle
index f4643d12da0dd043d66e53305ab29a3078e9c56d..8e4be606f1695be49ecf1749e582ac448f9b0343 100644 (file)
@@ -102,6 +102,15 @@ _mesa_ARBfp_parse_option(struct asm_parser_state *state, const char *option)
            return 1;
         }
       }
+   } else if (strncmp(option, "MESA_", 5) == 0) {
+      option += 5;
+
+      if (strcmp(option, "texture_array") == 0) {
+        if (state->ctx->Extensions.MESA_texture_array) {
+           state->option.TexArray = 1;
+           return 1;
+        }
+      }
    }
 
    return 0;
index b9731439a09b166f2e7e64aaf582159ed5c79799..fa47d84565a1ad815fd321ef9e08ec7e56ee89df 100644 (file)
@@ -201,6 +201,7 @@ struct asm_parser_state {
       unsigned DrawBuffers:1;
       unsigned Shadow:1;
       unsigned TexRect:1;
+      unsigned TexArray:1;
    } option;
 
    struct {