ARB prog parser: Add support for GL_ARB_fragment_program_shadow
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jul 2009 23:24:49 +0000 (16:24 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jul 2009 23:24:49 +0000 (16:24 -0700)
Passes the piglit asmparsertest shadow-0[123].txt tests and
progs/demos/shadowtex.

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

index d5f3b09eb7c294ca7e3b75e1bf530eeeb9fe2e2b..1809d1e7f78de46263f4f983a1cea63203605524 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 176
-#define YY_END_OF_BUFFER 177
+#define YY_NUM_RULES 179
+#define YY_END_OF_BUFFER 180
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -366,79 +366,80 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[645] =
+static yyconst flex_int16_t yy_accept[658] =
     {   0,
-        0,    0,  177,  175,  173,  172,  175,  175,  145,  171,
-      147,  147,  147,  147,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  173,    0,    0,  174,  145,    0,
-      146,  148,  168,  168,    0,    0,    0,    0,  168,    0,
-        0,    0,    0,    0,    0,    0,  132,  169,  133,  134,
-      159,  159,  159,  159,    0,  147,    0,  140,  141,  142,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  167,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  166,  166,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  165,
-      165,  165,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  156,  156,  156,  157,  157,  158,  149,  148,
-      149,    0,  150,   11,   13,  145,   15,  145,   16,   18,
-      145,   20,   22,   24,   26,    6,   28,   30,   31,   33,
-       35,   38,   36,   40,   41,   43,   45,   47,   49,   51,
-
-      145,  145,  145,   53,   55,  145,   57,   59,   61,   63,
-       65,   67,   69,  145,   71,   73,   75,   77,  145,  145,
-      145,  145,  145,  145,    0,    0,    0,    0,  148,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   93,
-       94,   96,    0,  164,    0,    0,    0,    0,    0,    0,
-      110,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  163,  162,  162,  122,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  153,  153,  154,  155,    0,
-      151,  145,  145,  145,  145,  145,  145,  145,  143,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  144,
-      145,  145,  145,  145,  145,  145,  145,   10,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,    0,  170,
-        0,    0,    0,   86,   87,    0,    0,    0,    0,    0,
-        0,    0,   98,    0,    0,    0,    0,    0,    0,    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,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  161,    0,    0,    0,  126,    0,  128,    0,    0,
-        0,    0,    0,    0,  160,  152,  145,  145,  145,    4,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-
-        9,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,   82,  145,  145,
-        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,
+      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,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      145,  145,  145,    5,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,    7,    8,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,   83,  145,
-
-       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,   64,   66,   68,   70,   72,   74,   76,   78,  145,
-       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,
-
-       80,    0,    0,    0,    0,   92,   95,  100,    0,    0,
-      105,    0,    0,    0,  118,    0,    0,    0,    0,  127,
-      129,    0,    2,    1,    0,   91,    0,  103,    0,  109,
-      117,    0,    0,  124,  125,  136,    0,  102,    0,  120,
-      123,   85,  108,    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,  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
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -484,157 +485,161 @@ static yyconst flex_int32_t yy_meta[66] =
         2,    2,    2,    2,    2
     } ;
 
-static yyconst flex_int16_t yy_base[649] =
+static yyconst flex_int16_t yy_base[662] =
     {   0,
-        0,    0,  904,  905,  901,  905,  898,  898,    0,   64,
-       80,   95,  117,  882,  115,   53,   38,   58,   55,  876,
-      121,  122,   67,   54,  115,  134,   65,  869,  840,  839,
-      851,  835,  849,  848,  889,  875,  886,  905,    0,  169,
-      905,  153,  133,  136,   17,  110,  131,   43,  148,  848,
-      834,  121,  146,  832,  844,  147,  905,  189,  190,   86,
-      189,  177,  185,  193,  250,  262,  273,  905,  905,  905,
-      852,  865,  859,  856,  847,  850,  846,  861,  255,  843,
-      857,  149,  843,  856,  847,  860,  837,  848,  839,  162,
-      840,  831,  840,  831,  830,  831,  825,  831,  842,  828,
-
-      825,  837,  828,  821,  837,  814,  165,  190,  833,  810,
-      795,  790,  807,  783,  788,  813,  144,  803,  225,  798,
-      286,  261,  800,  781,  263,  791,  787,  782,   96,  788,
-      774,  790,  787,  778,  270,  273,  780,  769,  783,  786,
-      768,  783,  770,  767,  774,  264,  782,  160,  269,  285,
-      288,  295,  759,  776,  777,  770,  752,  234,  753,  775,
-      766,  227,  284,  291,  295,  299,  303,  307,  905,  364,
-      375,  381,  387,  774,  205,  797,    0,  780,  771,  770,
-      789,  768,  767,  766,  765,    0,  764,    0,  763,  762,
-        0,  761,  760,    0,  759,  758,  757,  756,  755,  754,
-
-      769,  762,  775,  750,  749,  754,  747,  746,  745,  744,
-      743,  742,  741,  750,  739,  738,  737,  736,  728,  727,
-      712,  712,  711,  710,  752,  725,  713,  393,  400,  375,
-      717,  280,  714,  708,  708,  702,  715,  715,  700,  905,
-      905,  715,  703,  377,  710,   39,  707,  713,  376,  708,
-      905,  699,  706,  705,  708,  694,  693,  697,  692,  294,
-      697,  384,  396,  398,  905,  689,  687,  687,  695,  696,
-      678,  401,  683,  689,  364,  386,  394,  399,  403,  460,
-      466,  702,  714,  700,  699,  707,  697,  696,    0,  695,
-      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
-
-      684,  683,  682,  681,  684,  677,  684,  677,  676,    0,
-      675,  674,  673,  672,  671,  670,  669,    0,  668,  667,
-      666,  665,  644,  638,  643,  649,  632,  647,  374,  905,
-      646,  636,  640,  905,  905,  630,  639,  625,  642,  625,
-      628,  622,  905,  623,  622,  619,  626,  619,  627,  623,
-      633,  630,  612,  618,  625,  609,  608,  626,  608,  620,
-      619,  905,  618,  608,  612,  905,  599,  905,  604,  604,
-      612,  595,  596,  606,  905,  905,  637,  619,  635,    0,
-      633,  633,  632,  631,  630,  629,  628,  627,  626,  625,
-      624,  623,  622,  621,  620,  619,  618,  617,  604,  597,
-
-        0,  614,  613,  612,  611,  610,  609,  608,  607,  606,
-      605,  604,  603,  602,  572,  575,  555,    0,  556,  549,
-      556,  555,  556,  548,  566,  905,  905,  548,  546,  556,
-      549,  905,  544,  561,  429,  905,  552,  536,  537,  546,
-      537,  536,  536,  905,  535,  544,  534,  550,  547,  905,
-      546,  544,  533,  534,  530,  522,  529,  524,  525,  520,
-      545,  545,  543,    0,  542,  541,  540,  539,  538,  537,
-      536,  535,  534,  533,  532,  531,  530,  529,  528,  527,
-      526,    0,    0,  525,  524,  523,  522,  521,  520,  519,
-      518,  517,  516,  515,  514,  513,  492,  492,    0,  499,
-
-        0,  532,  531,  481,  499,  905,  494,  489,  482,  478,
-      490,  480,  478,  474,  490,  481,  480,  905,  905,  483,
-      905,  478,  471,  460,  471,  463,  467,  480,  475,  478,
-      460,  905,  905,  472,  461,  905,    0,    0,    0,    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,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  455,
-        0,    0,  505,  504,  905,  452,  905,  456,  456,  465,
-      905,  449,  463,  451,  453,  450,  458,  905,  436,  447,
-      905,  905,  451,  447,  439,  432,  426,  439,  905,  396,
-
-        0,  443,  437,  392,  378,  905,  905,  905,  378,  338,
-      905,  337,  317,  307,  905,  296,  290,  275,  275,  905,
-      905,  288,  905,  905,  268,  905,  261,  905,  264,  905,
-      905,  213,  158,  905,  905,  905,  128,  905,   75,  905,
-      905,  905,  905,  905,  484,  487,  489,  493
+        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
     } ;
 
-static yyconst flex_int16_t yy_def[649] =
+static yyconst flex_int16_t yy_def[662] =
     {   0,
-      644,    1,  644,  644,  644,  644,  644,  645,  646,  644,
-      644,  647,  647,   13,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  644,  644,  645,  644,  646,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  648,  644,  644,  644,  644,  644,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-
-      646,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,    0,  644,  644,  644,  644
+      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
     } ;
 
-static yyconst flex_int16_t yy_nxt[971] =
+static yyconst flex_int16_t yy_nxt[984] =
     {   0,
         4,    5,    6,    7,    8,    9,    4,   10,   11,   12,
        13,   14,   11,   11,   15,    9,   16,   17,   18,   19,
@@ -642,109 +647,111 @@ static yyconst flex_int16_t yy_nxt[971] =
        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,  126,   96,   80,
-      127,   41,   42,   42,   42,   42,   42,   42,   76,   83,
-       77,   97,  344,  107,   81,   84,   78,   65,   66,   66,
-       66,   66,   66,   66,   82,   94,  133,  345,   67,  134,
+       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,  108,   65,   43,   44,   45,   46,   47,   48,   49,
+       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,  159,
-       71,   98,   72,   99,   69,   67,   90,  643,   67,   73,
-      237,   86,  160,   87,   91,   74,  100,   75,   88,   92,
-      101,   89,  238,  128,  102,   93,  103,  129,  104,  187,
-       67,   42,   42,   42,   42,   42,   42,  105,  139,  106,
-       40,  121,  122,  122,  140,  125,  122,  188,  122,  196,
-      642,  122,  130,  131,  123,  141,  146,  135,  136,  122,
-      214,  124,  122,  122,  132,  123,  121,  147,  197,  142,
-
-      148,  215,  124,  149,  122,  216,  143,  257,  117,  118,
-       45,   46,   47,   48,  641,   50,   51,  258,  217,   52,
-       53,   54,   55,   56,   57,  119,   59,   60,  150,  151,
-      120,  154,  161,  155,  152,  283,  156,  157,  163,  162,
-      164,  165,  153,  284,  158,  122,  166,  162,  162,  167,
-      162,  162,  162,  162,  168,  162,  162,  162,  170,  170,
-      170,  170,  170,  170,  227,  640,  182,  183,  171,   65,
-       66,   66,   66,   66,   66,   66,  184,  270,  153,  172,
-       67,  173,  173,  173,  173,  173,  173,  271,  275,  275,
-      275,  275,  228,  171,  229,  229,  229,  229,  229,  229,
-
-      230,  230,  230,  230,  233,   67,  230,  639,  230,  230,
-      230,  638,  244,  230,  254,  230,  259,  230,  230,  230,
-      255,  637,  260,  332,  230,  230,  230,  262,  230,  230,
-      230,  636,  635,  230,  263,  264,  333,  261,  634,  359,
-      230,  230,  360,  633,  230,  275,  275,  275,  275,  632,
-      631,  230,  276,  275,  275,  277,  278,  275,  275,  275,
-      275,  275,  275,  275,  279,  275,  275,  275,  275,  275,
-      275,  275,   42,   42,   42,   42,   42,   42,  630,  629,
-      628,  280,  121,  281,  281,  281,  281,  281,  281,  173,
-      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
-
-      173,  229,  229,  229,  229,  229,  229,  121,  229,  229,
-      229,  229,  229,  229,  330,  330,  330,  330,  421,  348,
-      330,  627,  330,  330,  330,  375,  375,  375,  375,  330,
-      626,  330,  349,  330,  422,  330,  330,  362,  330,  625,
-      330,  330,  369,  330,  370,  624,  371,  375,  375,  375,
-      375,  623,  330,  622,  330,  376,  375,  375,  375,  372,
-      375,  375,  375,  375,  375,  375,  375,  375,  281,  281,
-      281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
-      513,  621,  620,  514,   37,   37,   37,   37,   39,  619,
-       39,   66,   66,  169,  169,  618,  169,  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,  578,  577,  576,  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,  525,
-      524,  523,  522,  521,  520,  519,  518,  517,  516,  515,
-
-      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,  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,  426,  425,  424,  423,
-      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,  379,  378,  377,  374,  373,  368,  367,  366,  365,
-      364,  363,  361,  358,  357,  356,  355,  354,  353,  352,
-      351,  350,  347,  346,  343,  342,  341,  340,  339,  338,
-      337,  336,  335,  334,  331,  261,  233,  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,
-      286,  285,  282,  274,  273,  272,  269,  268,  267,  266,
-      265,  256,  253,  252,  251,  250,  249,  248,  247,  246,
-      245,  243,  242,  241,  240,  239,  236,  235,  234,  232,
-      231,  161,  226,  225,  224,  223,  222,  221,  220,  219,
-      218,  213,  212,  211,  210,  209,  208,  207,  206,  205,
-      204,  203,  202,  201,  200,  199,  198,  195,  194,  193,
-      192,  191,  190,  189,  186,  185,  181,  180,  179,  178,
-      177,  176,  175,  174,  145,  144,  138,  137,   38,  116,
-       35,  115,  114,  113,  112,  111,  110,  109,   85,   70,
-
-       38,   36,   35,  644,    3,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644
+       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,
+      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,
+
+      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,
+      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
     } ;
 
-static yyconst flex_int16_t yy_chk[971] =
+static yyconst flex_int16_t yy_chk[984] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -754,104 +761,106 @@ static yyconst flex_int16_t yy_chk[971] =
         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,  246,   27,   18,   19,   16,   11,   11,   11,
-       11,   11,   11,   11,   18,   23,   48,  246,   11,   48,
+       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,  639,   12,   15,
-      129,   21,   60,   21,   22,   15,   25,   15,   21,   22,
-       26,   21,  129,   46,   26,   22,   26,   46,   26,   82,
-       13,   42,   42,   42,   42,   42,   42,   26,   52,   26,
-       40,   42,   43,   43,   52,   44,   44,   82,   43,   90,
-      637,   44,   47,   47,   43,   53,   56,   49,   49,   43,
-      107,   43,   44,   49,   47,  117,   42,   56,   90,   53,
-
-       56,  107,  117,   56,   49,  108,   53,  148,   40,   40,
-       40,   40,   40,   40,  633,   40,   40,  148,  108,   40,
-       40,   40,   40,   40,   40,   40,   40,   40,   58,   58,
-       40,   59,   61,   59,   58,  175,   59,   59,   62,   62,
-       62,   62,   58,  175,   59,   58,   63,   63,   63,   63,
-       61,   61,   61,   61,   64,   64,   64,   64,   65,   65,
-       65,   65,   65,   65,  119,  632,   79,   79,   65,   66,
-       66,   66,   66,   66,   66,   66,   79,  158,  119,   67,
-       66,   67,   67,   67,   67,   67,   67,  158,  162,  162,
-      162,  162,  121,   65,  121,  121,  121,  121,  121,  121,
-
-      122,  122,  125,  125,  125,   66,  122,  629,  125,  135,
-      135,  627,  136,  136,  146,  135,  149,  122,  136,  125,
-      146,  625,  149,  232,  150,  150,  135,  151,  151,  136,
-      150,  622,  619,  151,  152,  152,  232,  150,  618,  260,
-      152,  150,  260,  617,  151,  163,  163,  163,  163,  616,
-      614,  152,  164,  164,  164,  164,  165,  165,  165,  165,
-      166,  166,  166,  166,  167,  167,  167,  167,  168,  168,
-      168,  168,  170,  170,  170,  170,  170,  170,  613,  612,
-      610,  171,  170,  171,  171,  171,  171,  171,  171,  172,
-      172,  172,  172,  172,  172,  173,  173,  173,  173,  173,
-
-      173,  228,  228,  228,  228,  228,  228,  170,  229,  229,
-      229,  229,  229,  229,  230,  230,  244,  244,  329,  249,
-      230,  609,  244,  262,  262,  275,  275,  275,  275,  262,
-      605,  230,  249,  244,  329,  263,  263,  264,  264,  604,
-      262,  263,  272,  264,  272,  603,  272,  276,  276,  276,
-      276,  602,  263,  600,  264,  277,  277,  277,  277,  272,
-      278,  278,  278,  278,  279,  279,  279,  279,  280,  280,
-      280,  280,  280,  280,  281,  281,  281,  281,  281,  281,
-      435,  598,  597,  435,  645,  645,  645,  645,  646,  596,
-      646,  647,  647,  648,  648,  595,  648,  594,  593,  590,
-
-      589,  587,  586,  585,  584,  583,  582,  580,  579,  578,
-      576,  574,  573,  570,  535,  534,  531,  530,  529,  528,
-      527,  526,  525,  524,  523,  522,  520,  517,  516,  515,
-      514,  513,  512,  511,  510,  509,  508,  507,  505,  504,
-      503,  502,  500,  498,  497,  496,  495,  494,  493,  492,
-      491,  490,  489,  488,  487,  486,  485,  484,  481,  480,
-      479,  478,  477,  476,  475,  474,  473,  472,  471,  470,
-      469,  468,  467,  466,  465,  463,  462,  461,  460,  459,
-      458,  457,  456,  455,  454,  453,  452,  451,  449,  448,
-      447,  446,  445,  443,  442,  441,  440,  439,  438,  437,
-
-      434,  433,  431,  430,  429,  428,  425,  424,  423,  422,
-      421,  420,  419,  417,  416,  415,  414,  413,  412,  411,
-      410,  409,  408,  407,  406,  405,  404,  403,  402,  400,
-      399,  398,  397,  396,  395,  394,  393,  392,  391,  390,
-      389,  388,  387,  386,  385,  384,  383,  382,  381,  379,
-      378,  377,  374,  373,  372,  371,  370,  369,  367,  365,
-      364,  363,  361,  360,  359,  358,  357,  356,  355,  354,
-      353,  352,  351,  350,  349,  348,  347,  346,  345,  344,
-      342,  341,  340,  339,  338,  337,  336,  333,  332,  331,
-      328,  327,  326,  325,  324,  323,  322,  321,  320,  319,
-
-      317,  316,  315,  314,  313,  312,  311,  309,  308,  307,
-      306,  305,  304,  303,  302,  301,  300,  299,  298,  297,
-      296,  295,  294,  293,  292,  291,  290,  288,  287,  286,
-      285,  284,  283,  282,  274,  273,  271,  270,  269,  268,
-      267,  266,  261,  259,  258,  257,  256,  255,  254,  253,
-      252,  250,  248,  247,  245,  243,  242,  239,  238,  237,
-      236,  235,  234,  233,  231,  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,  195,  193,  192,
-
-      190,  189,  187,  185,  184,  183,  182,  181,  180,  179,
-      178,  176,  174,  161,  160,  159,  157,  156,  155,  154,
-      153,  147,  145,  144,  143,  142,  141,  140,  139,  138,
-      137,  134,  133,  132,  131,  130,  128,  127,  126,  124,
-      123,  120,  118,  116,  115,  114,  113,  112,  111,  110,
-      109,  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,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
-      644,  644,  644,  644,  644,  644,  644,  644,  644,  644
+       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,
+      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
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -893,6 +902,7 @@ static yyconst flex_int16_t yy_chk[971] =
 
 #define require_ARB_vp (yyextra->mode == ARB_vertex)
 #define require_ARB_fp (yyextra->mode == ARB_fragment)
+#define require_shadow (yyextra->option.Shadow)
 #define require_rect   (yyextra->option.TexRect)
 
 #define return_token_or_IDENTIFIER(condition, token)   \
@@ -986,7 +996,7 @@ swiz_from_char(char c)
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
-#line 990 "lex.yy.c"
+#line 1000 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -1232,10 +1242,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 133 "program_lexer.l"
+#line 134 "program_lexer.l"
 
 
-#line 1239 "lex.yy.c"
+#line 1249 "lex.yy.c"
 
     yylval = yylval_param;
 
@@ -1292,13 +1302,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 >= 645 )
+                               if ( yy_current_state >= 658 )
                                        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] != 905 );
+               while ( yy_base[yy_current_state] != 918 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1324,17 +1334,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 135 "program_lexer.l"
+#line 136 "program_lexer.l"
 { return ARBvp_10; }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 136 "program_lexer.l"
+#line 137 "program_lexer.l"
 { return ARBfp_10; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 137 "program_lexer.l"
+#line 138 "program_lexer.l"
 {
    yylval->integer = at_address;
    return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS);
@@ -1342,778 +1352,793 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 141 "program_lexer.l"
+#line 142 "program_lexer.l"
 { return ALIAS; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 142 "program_lexer.l"
+#line 143 "program_lexer.l"
 { return ATTRIB; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 143 "program_lexer.l"
+#line 144 "program_lexer.l"
 { return END; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 144 "program_lexer.l"
+#line 145 "program_lexer.l"
 { return OPTION; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 145 "program_lexer.l"
+#line 146 "program_lexer.l"
 { return OUTPUT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 146 "program_lexer.l"
+#line 147 "program_lexer.l"
 { return PARAM; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 147 "program_lexer.l"
+#line 148 "program_lexer.l"
 { yylval->integer = at_temp; return TEMP; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 149 "program_lexer.l"
+#line 150 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, ABS, OFF); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 150 "program_lexer.l"
+#line 151 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, ABS, ZERO_ONE); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 151 "program_lexer.l"
+#line 152 "program_lexer.l"
 { return_opcode(             1, BIN_OP, ADD, OFF); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 152 "program_lexer.l"
+#line 153 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, ADD, ZERO_ONE); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 153 "program_lexer.l"
+#line 154 "program_lexer.l"
 { return_opcode(require_ARB_vp, ARL, ARL, OFF); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 155 "program_lexer.l"
+#line 156 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, CMP, OFF); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 156 "program_lexer.l"
+#line 157 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, CMP, ZERO_ONE); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 157 "program_lexer.l"
+#line 158 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, COS, OFF); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 158 "program_lexer.l"
+#line 159 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, COS, ZERO_ONE); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 160 "program_lexer.l"
+#line 161 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP3, OFF); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 161 "program_lexer.l"
+#line 162 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DP3, ZERO_ONE); }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 162 "program_lexer.l"
+#line 163 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP4, OFF); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 163 "program_lexer.l"
+#line 164 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DP4, ZERO_ONE); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 164 "program_lexer.l"
+#line 165 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DPH, OFF); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 165 "program_lexer.l"
+#line 166 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DPH, ZERO_ONE); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 166 "program_lexer.l"
+#line 167 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DST, OFF); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 167 "program_lexer.l"
+#line 168 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, DST, ZERO_ONE); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 169 "program_lexer.l"
+#line 170 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, EX2, OFF); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 170 "program_lexer.l"
+#line 171 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, EX2, ZERO_ONE); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 171 "program_lexer.l"
+#line 172 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, EXP, OFF); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 173 "program_lexer.l"
+#line 174 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FLR, OFF); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 174 "program_lexer.l"
+#line 175 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, FLR, ZERO_ONE); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 175 "program_lexer.l"
+#line 176 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FRC, OFF); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 176 "program_lexer.l"
+#line 177 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, FRC, ZERO_ONE); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 178 "program_lexer.l"
+#line 179 "program_lexer.l"
 { return_opcode(require_ARB_fp, KIL, KIL, OFF); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 180 "program_lexer.l"
+#line 181 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, LIT, OFF); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 181 "program_lexer.l"
+#line 182 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, LIT, ZERO_ONE); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 182 "program_lexer.l"
+#line 183 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, LG2, OFF); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 183 "program_lexer.l"
+#line 184 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, LG2, ZERO_ONE); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 184 "program_lexer.l"
+#line 185 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, LOG, OFF); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 185 "program_lexer.l"
+#line 186 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, LRP, OFF); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 186 "program_lexer.l"
+#line 187 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, LRP, ZERO_ONE); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 188 "program_lexer.l"
+#line 189 "program_lexer.l"
 { return_opcode(             1, TRI_OP, MAD, OFF); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 189 "program_lexer.l"
+#line 190 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, MAD, ZERO_ONE); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 190 "program_lexer.l"
+#line 191 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MAX, OFF); }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 191 "program_lexer.l"
+#line 192 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, MAX, ZERO_ONE); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 192 "program_lexer.l"
+#line 193 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MIN, OFF); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 193 "program_lexer.l"
+#line 194 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, MIN, ZERO_ONE); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 194 "program_lexer.l"
+#line 195 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, MOV, OFF); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 195 "program_lexer.l"
+#line 196 "program_lexer.l"
 { return_opcode(require_ARB_fp, VECTOR_OP, MOV, ZERO_ONE); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 196 "program_lexer.l"
+#line 197 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MUL, OFF); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 197 "program_lexer.l"
+#line 198 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, MUL, ZERO_ONE); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 199 "program_lexer.l"
+#line 200 "program_lexer.l"
 { return_opcode(             1, BINSC_OP, POW, OFF); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 200 "program_lexer.l"
+#line 201 "program_lexer.l"
 { return_opcode(require_ARB_fp, BINSC_OP, POW, ZERO_ONE); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 202 "program_lexer.l"
+#line 203 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RCP, OFF); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 203 "program_lexer.l"
+#line 204 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, RCP, ZERO_ONE); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 204 "program_lexer.l"
+#line 205 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RSQ, OFF); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 205 "program_lexer.l"
+#line 206 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, RSQ, ZERO_ONE); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 207 "program_lexer.l"
+#line 208 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SCS, OFF); }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 208 "program_lexer.l"
+#line 209 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SCS, ZERO_ONE); }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 209 "program_lexer.l"
+#line 210 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SGE, OFF); }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 210 "program_lexer.l"
+#line 211 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, SGE, ZERO_ONE); }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 211 "program_lexer.l"
+#line 212 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SIN, OFF); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 212 "program_lexer.l"
+#line 213 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SIN, ZERO_ONE); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 213 "program_lexer.l"
+#line 214 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SLT, OFF); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 214 "program_lexer.l"
+#line 215 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, SLT, ZERO_ONE); }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 215 "program_lexer.l"
+#line 216 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SUB, OFF); }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 216 "program_lexer.l"
+#line 217 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, SUB, ZERO_ONE); }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 217 "program_lexer.l"
+#line 218 "program_lexer.l"
 { return_opcode(             1, SWZ, SWZ, OFF); }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 218 "program_lexer.l"
+#line 219 "program_lexer.l"
 { return_opcode(require_ARB_fp, SWZ, SWZ, ZERO_ONE); }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 220 "program_lexer.l"
+#line 221 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, OFF); }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 221 "program_lexer.l"
+#line 222 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, ZERO_ONE); }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 222 "program_lexer.l"
+#line 223 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, OFF); }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 223 "program_lexer.l"
+#line 224 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, ZERO_ONE); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 224 "program_lexer.l"
+#line 225 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, OFF); }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 225 "program_lexer.l"
+#line 226 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, ZERO_ONE); }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 227 "program_lexer.l"
+#line 228 "program_lexer.l"
 { return_opcode(             1, BIN_OP, XPD, OFF); }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 228 "program_lexer.l"
+#line 229 "program_lexer.l"
 { return_opcode(require_ARB_fp, BIN_OP, XPD, ZERO_ONE); }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 230 "program_lexer.l"
+#line 231 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 231 "program_lexer.l"
+#line 232 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 232 "program_lexer.l"
+#line 233 "program_lexer.l"
 { return PROGRAM; }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 233 "program_lexer.l"
+#line 234 "program_lexer.l"
 { return STATE; }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 234 "program_lexer.l"
+#line 235 "program_lexer.l"
 { return RESULT; }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 236 "program_lexer.l"
+#line 237 "program_lexer.l"
 { return AMBIENT; }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 237 "program_lexer.l"
+#line 238 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, ATTENUATION); }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 238 "program_lexer.l"
+#line 239 "program_lexer.l"
 { return BACK; }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 239 "program_lexer.l"
+#line 240 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, CLIP); }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 240 "program_lexer.l"
+#line 241 "program_lexer.l"
 { return COLOR; }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 241 "program_lexer.l"
+#line 242 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, DEPTH); }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 242 "program_lexer.l"
+#line 243 "program_lexer.l"
 { return DIFFUSE; }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 243 "program_lexer.l"
+#line 244 "program_lexer.l"
 { return DIRECTION; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 244 "program_lexer.l"
+#line 245 "program_lexer.l"
 { return EMISSION; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 245 "program_lexer.l"
+#line 246 "program_lexer.l"
 { return ENV; }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 246 "program_lexer.l"
+#line 247 "program_lexer.l"
 { return EYE; }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 247 "program_lexer.l"
+#line 248 "program_lexer.l"
 { return FOGCOORD; }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 248 "program_lexer.l"
+#line 249 "program_lexer.l"
 { return FOG; }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 249 "program_lexer.l"
+#line 250 "program_lexer.l"
 { return FRONT; }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 250 "program_lexer.l"
+#line 251 "program_lexer.l"
 { return HALF; }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 251 "program_lexer.l"
+#line 252 "program_lexer.l"
 { return INVERSE; }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 252 "program_lexer.l"
+#line 253 "program_lexer.l"
 { return INVTRANS; }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 253 "program_lexer.l"
+#line 254 "program_lexer.l"
 { return LIGHT; }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 254 "program_lexer.l"
+#line 255 "program_lexer.l"
 { return LIGHTMODEL; }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 255 "program_lexer.l"
+#line 256 "program_lexer.l"
 { return LIGHTPROD; }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 256 "program_lexer.l"
+#line 257 "program_lexer.l"
 { return LOCAL; }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 257 "program_lexer.l"
+#line 258 "program_lexer.l"
 { return MATERIAL; }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 258 "program_lexer.l"
+#line 259 "program_lexer.l"
 { return MAT_PROGRAM; }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 259 "program_lexer.l"
+#line 260 "program_lexer.l"
 { return MATRIX; }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 260 "program_lexer.l"
+#line 261 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, MATRIXINDEX); }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 261 "program_lexer.l"
+#line 262 "program_lexer.l"
 { return MODELVIEW; }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 262 "program_lexer.l"
+#line 263 "program_lexer.l"
 { return MVP; }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 263 "program_lexer.l"
+#line 264 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, NORMAL); }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 264 "program_lexer.l"
+#line 265 "program_lexer.l"
 { return OBJECT; }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 265 "program_lexer.l"
+#line 266 "program_lexer.l"
 { return PALETTE; }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 266 "program_lexer.l"
+#line 267 "program_lexer.l"
 { return PARAMS; }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 267 "program_lexer.l"
+#line 268 "program_lexer.l"
 { return PLANE; }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 268 "program_lexer.l"
+#line 269 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINT); }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 269 "program_lexer.l"
+#line 270 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINTSIZE); }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 270 "program_lexer.l"
+#line 271 "program_lexer.l"
 { return POSITION; }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 271 "program_lexer.l"
+#line 272 "program_lexer.l"
 { return PRIMARY; }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 272 "program_lexer.l"
+#line 273 "program_lexer.l"
 { return PROJECTION; }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 273 "program_lexer.l"
+#line 274 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, RANGE); }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 274 "program_lexer.l"
+#line 275 "program_lexer.l"
 { return ROW; }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 275 "program_lexer.l"
+#line 276 "program_lexer.l"
 { return SCENECOLOR; }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 276 "program_lexer.l"
+#line 277 "program_lexer.l"
 { return SECONDARY; }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 277 "program_lexer.l"
+#line 278 "program_lexer.l"
 { return SHININESS; }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 278 "program_lexer.l"
+#line 279 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, SIZE); }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 279 "program_lexer.l"
+#line 280 "program_lexer.l"
 { return SPECULAR; }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 280 "program_lexer.l"
+#line 281 "program_lexer.l"
 { return SPOT; }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 281 "program_lexer.l"
+#line 282 "program_lexer.l"
 { return TEXCOORD; }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 282 "program_lexer.l"
+#line 283 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, TEXENV); }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 283 "program_lexer.l"
+#line 284 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 284 "program_lexer.l"
+#line 285 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 285 "program_lexer.l"
+#line 286 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 286 "program_lexer.l"
+#line 287 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 287 "program_lexer.l"
+#line 288 "program_lexer.l"
 { return TEXTURE; }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 288 "program_lexer.l"
+#line 289 "program_lexer.l"
 { return TRANSPOSE; }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 289 "program_lexer.l"
+#line 290 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 290 "program_lexer.l"
+#line 291 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 292 "program_lexer.l"
+#line 293 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 293 "program_lexer.l"
+#line 294 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 294 "program_lexer.l"
+#line 295 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 295 "program_lexer.l"
+#line 296 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 296 "program_lexer.l"
+#line 297 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 297 "program_lexer.l"
+#line 298 "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"
+{ return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
+       YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 300 "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"
+{ 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"
 {
    yylval->string = strdup(yytext);
    return IDENTIFIER;
 }
        YY_BREAK
-case 146:
+case 149:
 YY_RULE_SETUP
-#line 304 "program_lexer.l"
+#line 308 "program_lexer.l"
 { return DOT_DOT; }
        YY_BREAK
-case 147:
+case 150:
 YY_RULE_SETUP
-#line 306 "program_lexer.l"
+#line 310 "program_lexer.l"
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
 }
        YY_BREAK
-case 148:
+case 151:
 YY_RULE_SETUP
-#line 310 "program_lexer.l"
+#line 314 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 149:
-/* rule 149 can match eol */
+case 152:
+/* rule 152 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 314 "program_lexer.l"
+#line 318 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 150:
+case 153:
 YY_RULE_SETUP
-#line 318 "program_lexer.l"
+#line 322 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 151:
+case 154:
 YY_RULE_SETUP
-#line 322 "program_lexer.l"
+#line 326 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 152:
+case 155:
 YY_RULE_SETUP
-#line 327 "program_lexer.l"
+#line 331 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return MASK4;
 }
        YY_BREAK
-case 153:
+case 156:
 YY_RULE_SETUP
-#line 333 "program_lexer.l"
+#line 337 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2121,27 +2146,27 @@ YY_RULE_SETUP
    return MASK3;
 }
        YY_BREAK
-case 154:
+case 157:
 YY_RULE_SETUP
-#line 339 "program_lexer.l"
+#line 343 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return MASK3;
 }
        YY_BREAK
-case 155:
+case 158:
 YY_RULE_SETUP
-#line 344 "program_lexer.l"
+#line 348 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return MASK3;
 }
        YY_BREAK
-case 156:
+case 159:
 YY_RULE_SETUP
-#line 350 "program_lexer.l"
+#line 354 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2149,9 +2174,9 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
-case 157:
+case 160:
 YY_RULE_SETUP
-#line 356 "program_lexer.l"
+#line 360 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2159,18 +2184,18 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
-case 158:
+case 161:
 YY_RULE_SETUP
-#line 362 "program_lexer.l"
+#line 366 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return MASK2;
 }
        YY_BREAK
-case 159:
+case 162:
 YY_RULE_SETUP
-#line 368 "program_lexer.l"
+#line 372 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2178,9 +2203,9 @@ YY_RULE_SETUP
    return MASK1; 
 }
        YY_BREAK
-case 160:
+case 163:
 YY_RULE_SETUP
-#line 375 "program_lexer.l"
+#line 379 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2190,18 +2215,18 @@ YY_RULE_SETUP
    return SWIZZLE;
 }
        YY_BREAK
-case 161:
+case 164:
 YY_RULE_SETUP
-#line 384 "program_lexer.l"
+#line 388 "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 162:
+case 165:
 YY_RULE_SETUP
-#line 390 "program_lexer.l"
+#line 394 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2209,27 +2234,27 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 163:
+case 166:
 YY_RULE_SETUP
-#line 396 "program_lexer.l"
+#line 400 "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 164:
+case 167:
 YY_RULE_SETUP
-#line 401 "program_lexer.l"
+#line 405 "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 165:
+case 168:
 YY_RULE_SETUP
-#line 407 "program_lexer.l"
+#line 411 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2237,9 +2262,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 166:
+case 169:
 YY_RULE_SETUP
-#line 413 "program_lexer.l"
+#line 417 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2247,18 +2272,18 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 167:
+case 170:
 YY_RULE_SETUP
-#line 419 "program_lexer.l"
+#line 423 "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 168:
+case 171:
 YY_RULE_SETUP
-#line 425 "program_lexer.l"
+#line 429 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2266,9 +2291,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK1);
 }
        YY_BREAK
-case 169:
+case 172:
 YY_RULE_SETUP
-#line 433 "program_lexer.l"
+#line 437 "program_lexer.l"
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
@@ -2280,9 +2305,9 @@ YY_RULE_SETUP
    }
 }
        YY_BREAK
-case 170:
+case 173:
 YY_RULE_SETUP
-#line 444 "program_lexer.l"
+#line 448 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2292,15 +2317,15 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, SWIZZLE);
 }
        YY_BREAK
-case 171:
+case 174:
 YY_RULE_SETUP
-#line 453 "program_lexer.l"
+#line 457 "program_lexer.l"
 { return DOT; }
        YY_BREAK
-case 172:
-/* rule 172 can match eol */
+case 175:
+/* rule 175 can match eol */
 YY_RULE_SETUP
-#line 455 "program_lexer.l"
+#line 459 "program_lexer.l"
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
@@ -2309,30 +2334,30 @@ YY_RULE_SETUP
    yylloc->position++;
 }
        YY_BREAK
-case 173:
+case 176:
 YY_RULE_SETUP
-#line 462 "program_lexer.l"
+#line 466 "program_lexer.l"
 /* eat whitespace */ ;
        YY_BREAK
-case 174:
+case 177:
 *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 463 "program_lexer.l"
+#line 467 "program_lexer.l"
 /* eat comments */ ;
        YY_BREAK
-case 175:
+case 178:
 YY_RULE_SETUP
-#line 464 "program_lexer.l"
+#line 468 "program_lexer.l"
 { return yytext[0]; }
        YY_BREAK
-case 176:
+case 179:
 YY_RULE_SETUP
-#line 465 "program_lexer.l"
+#line 469 "program_lexer.l"
 ECHO;
        YY_BREAK
-#line 2336 "lex.yy.c"
+#line 2361 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2626,7 +2651,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 >= 645 )
+                       if ( yy_current_state >= 658 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2655,11 +2680,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 >= 645 )
+               if ( yy_current_state >= 658 )
                        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 == 644);
+       yy_is_jam = (yy_current_state == 657);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3507,7 +3532,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 465 "program_lexer.l"
+#line 469 "program_lexer.l"
 
 
 
index 2a5f0a8542025728632bf8633a929050fca93645..e4837ccb16373b49eb8de609ec9aae74cfa8627d 100644 (file)
@@ -29,6 +29,7 @@
 
 #define require_ARB_vp (yyextra->mode == ARB_vertex)
 #define require_ARB_fp (yyextra->mode == ARB_fragment)
+#define require_shadow (yyextra->option.Shadow)
 #define require_rect   (yyextra->option.TexRect)
 
 #define return_token_or_IDENTIFIER(condition, token)   \
@@ -295,6 +296,9 @@ texture                   { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_U
 3D                        { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
 CUBE                      { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
 RECT                      { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); }
+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); }
 
 [_a-zA-Z$][_a-zA-Z0-9$]*  {
    yylval->string = strdup(yytext);
index 37630863a8cf7b1839add77a52329016fbb7453d..3d8aa7707cc675c5147aca522bf0b8ceea82edd2 100644 (file)
@@ -282,17 +282,20 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
      TEX_3D = 340,
      TEX_CUBE = 341,
      TEX_RECT = 342,
-     VERTEX = 343,
-     VTXATTRIB = 344,
-     WEIGHT = 345,
-     IDENTIFIER = 346,
-     MASK4 = 347,
-     MASK3 = 348,
-     MASK2 = 349,
-     MASK1 = 350,
-     SWIZZLE = 351,
-     DOT_DOT = 352,
-     DOT = 353
+     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
    };
 #endif
 
@@ -325,7 +328,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 329 "program_parse.tab.c"
+#line 332 "program_parse.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -349,14 +352,14 @@ typedef struct YYLTYPE
 /* Copy the second part of user declarations.  */
 
 /* Line 264 of yacc.c  */
-#line 240 "program_parse.y"
+#line 241 "program_parse.y"
 
 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
     void *yyscanner);
 
 
 /* Line 264 of yacc.c  */
-#line 360 "program_parse.tab.c"
+#line 363 "program_parse.tab.c"
 
 #ifdef short
 # undef short
@@ -573,20 +576,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   335
+#define YYLAST   334
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  108
+#define YYNTOKENS  111
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  133
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  255
+#define YYNRULES  258
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  424
+#define YYNSTATES  427
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   353
+#define YYMAXUTOK   356
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -598,15 +601,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,   103,   100,   104,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,    99,
-       2,   105,     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,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   101,     2,   102,     2,     2,     2,     2,     2,     2,
+       2,   104,     2,   105,     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,     2,   107,     2,     2,     2,     2,
+       2,     2,     2,   109,     2,   110,     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,
@@ -629,7 +632,7 @@ 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
+      95,    96,    97,    98,    99,   100,   101
 };
 
 #if YYDEBUG
@@ -640,137 +643,138 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     8,    10,    12,    15,    16,    20,    23,
       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,   122,   126,
-     130,   133,   136,   144,   147,   149,   151,   153,   155,   160,
-     162,   164,   166,   168,   170,   172,   174,   178,   179,   182,
-     185,   187,   189,   191,   193,   195,   197,   199,   201,   203,
-     204,   206,   208,   210,   212,   213,   215,   217,   219,   221,
-     223,   225,   230,   233,   236,   238,   241,   243,   246,   248,
-     251,   256,   261,   263,   264,   268,   270,   272,   275,   277,
-     280,   282,   284,   288,   295,   296,   298,   301,   306,   308,
-     312,   314,   316,   318,   320,   322,   324,   326,   328,   330,
-     332,   335,   338,   341,   344,   347,   350,   353,   356,   359,
-     362,   365,   369,   371,   373,   375,   381,   383,   385,   387,
-     390,   392,   394,   397,   399,   402,   409,   411,   415,   417,
-     419,   421,   423,   425,   430,   432,   434,   436,   438,   440,
-     442,   445,   447,   449,   455,   457,   460,   462,   464,   470,
-     473,   474,   481,   485,   486,   488,   490,   492,   494,   496,
-     499,   501,   503,   506,   511,   516,   517,   519,   521,   523,
-     525,   527,   529,   531,   533,   539,   541,   545,   551,   557,
-     559,   563,   569,   571,   573,   575,   577,   579,   581,   583,
-     585,   587,   591,   597,   605,   615,   618,   621,   623,   625,
-     626,   627,   631,   632,   636,   640,   642,   647,   650,   653,
-     656,   659,   663,   666,   670,   671,   673,   675,   676,   678,
-     680,   681,   683,   685,   686,   688,   690,   691,   695,   696,
-     700,   701,   705,   707,   709,   711
+      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
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     109,     0,    -1,   110,   111,   113,    12,    -1,     3,    -1,
-       4,    -1,   111,   112,    -1,    -1,     8,    91,    99,    -1,
-     113,   114,    -1,    -1,   115,    99,    -1,   151,    99,    -1,
-     116,    -1,   117,    -1,   118,    -1,   119,    -1,   120,    -1,
-     121,    -1,   122,    -1,   123,    -1,   128,    -1,   124,    -1,
-     125,    -1,    19,   132,   100,   129,    -1,    18,   131,   100,
-     130,    -1,    16,   131,   100,   129,    -1,    14,   131,   100,
-     129,   100,   129,    -1,    13,   131,   100,   130,   100,   130,
-      -1,    17,   131,   100,   130,   100,   130,   100,   130,    -1,
-      15,   131,   100,   130,   100,   126,   100,   127,    -1,    20,
-     130,    -1,    82,   235,    -1,    83,    -1,    84,    -1,    85,
-      -1,    86,    -1,    87,    -1,    21,   131,   100,   136,   100,
-     133,    -1,   221,   136,   148,    -1,   221,   136,   149,    -1,
-     137,   150,    -1,   145,   147,    -1,   134,   100,   134,   100,
-     134,   100,   134,    -1,   221,   135,    -1,    22,    -1,    91,
-      -1,    91,    -1,   153,    -1,   138,   101,   139,   102,    -1,
-     167,    -1,   228,    -1,    91,    -1,    91,    -1,   140,    -1,
-     141,    -1,    22,    -1,   145,   146,   142,    -1,    -1,   103,
-     143,    -1,   104,   144,    -1,    22,    -1,    22,    -1,    91,
-      -1,    95,    -1,    95,    -1,    95,    -1,    95,    -1,    92,
-      -1,    96,    -1,    -1,    92,    -1,    93,    -1,    94,    -1,
-      95,    -1,    -1,   152,    -1,   159,    -1,   222,    -1,   224,
-      -1,   227,    -1,   240,    -1,     7,    91,   105,   153,    -1,
-      88,   154,    -1,    37,   158,    -1,    59,    -1,    90,   156,
-      -1,    52,    -1,    28,   233,    -1,    36,    -1,    73,   234,
-      -1,    49,   101,   157,   102,    -1,    89,   101,   155,   102,
-      -1,    22,    -1,    -1,   101,   157,   102,    -1,    22,    -1,
-      59,    -1,    28,   233,    -1,    36,    -1,    73,   234,    -1,
-     160,    -1,   161,    -1,    10,    91,   163,    -1,    10,    91,
-     101,   162,   102,   164,    -1,    -1,    22,    -1,   105,   166,
-      -1,   105,   106,   165,   107,    -1,   168,    -1,   165,   100,
-     168,    -1,   170,    -1,   205,    -1,   215,    -1,   170,    -1,
-     205,    -1,   216,    -1,   169,    -1,   206,    -1,   215,    -1,
-     170,    -1,    72,   194,    -1,    72,   171,    -1,    72,   173,
-      -1,    72,   176,    -1,    72,   178,    -1,    72,   184,    -1,
-      72,   180,    -1,    72,   187,    -1,    72,   189,    -1,    72,
-     191,    -1,    72,   193,    -1,    46,   232,   172,    -1,   182,
-      -1,    32,    -1,    68,    -1,    42,   101,   183,   102,   174,
-      -1,   182,    -1,    59,    -1,    25,    -1,    71,   175,    -1,
-      39,    -1,    31,    -1,    43,   177,    -1,    24,    -1,   232,
-      66,    -1,    44,   101,   183,   102,   232,   179,    -1,   182,
-      -1,    74,   236,   181,    -1,    28,    -1,    24,    -1,    30,
-      -1,    70,    -1,    22,    -1,    75,   234,   185,   186,    -1,
-      34,    -1,    53,    -1,    78,    -1,    79,    -1,    77,    -1,
-      76,    -1,    35,   188,    -1,    28,    -1,    55,    -1,    27,
-     101,   190,   102,    56,    -1,    22,    -1,    57,   192,    -1,
-      69,    -1,    25,    -1,   196,    65,   101,   199,   102,    -1,
-     196,   195,    -1,    -1,    65,   101,   199,    97,   199,   102,
-      -1,    48,   200,   197,    -1,    -1,   198,    -1,    40,    -1,
-      81,    -1,    41,    -1,    22,    -1,    50,   201,    -1,    62,
-      -1,    51,    -1,    80,   234,    -1,    54,   101,   203,   102,
-      -1,    47,   101,   204,   102,    -1,    -1,   202,    -1,    22,
-      -1,    22,    -1,    22,    -1,   209,    -1,   212,    -1,   207,
-      -1,   210,    -1,    61,    33,   101,   208,   102,    -1,   213,
-      -1,   213,    97,   213,    -1,    61,    33,   101,   213,   102,
-      -1,    61,    45,   101,   211,   102,    -1,   214,    -1,   214,
-      97,   214,    -1,    61,    45,   101,   214,   102,    -1,    22,
-      -1,    22,    -1,   217,    -1,   219,    -1,   218,    -1,   219,
-      -1,   220,    -1,    23,    -1,    22,    -1,   106,   220,   107,
-      -1,   106,   220,   100,   220,   107,    -1,   106,   220,   100,
-     220,   100,   220,   107,    -1,   106,   220,   100,   220,   100,
-     220,   100,   220,   107,    -1,   221,    23,    -1,   221,    22,
-      -1,   103,    -1,   104,    -1,    -1,    -1,    11,   223,   226,
-      -1,    -1,     5,   225,   226,    -1,   226,   100,    91,    -1,
-      91,    -1,     9,    91,   105,   228,    -1,    64,    59,    -1,
-      64,    36,    -1,    64,   229,    -1,    64,    58,    -1,    64,
-      73,   234,    -1,    64,    29,    -1,    28,   230,   231,    -1,
-      -1,    38,    -1,    26,    -1,    -1,    60,    -1,    67,    -1,
-      -1,    38,    -1,    26,    -1,    -1,    60,    -1,    67,    -1,
-      -1,   101,   237,   102,    -1,    -1,   101,   238,   102,    -1,
-      -1,   101,   239,   102,    -1,    22,    -1,    22,    -1,    22,
-      -1,     6,    91,   105,    91,    -1
+     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,
+      -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
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   247,   247,   250,   258,   270,   271,   274,   292,   293,
-     296,   311,   314,   319,   326,   327,   328,   329,   330,   331,
-     332,   335,   336,   339,   345,   352,   359,   367,   374,   382,
-     395,   402,   408,   409,   410,   411,   412,   415,   427,   440,
-     453,   475,   484,   493,   500,   509,   537,   579,   590,   611,
-     621,   627,   651,   668,   668,   670,   677,   689,   690,   691,
-     694,   706,   718,   736,   747,   759,   761,   762,   763,   764,
-     767,   767,   767,   767,   768,   771,   772,   773,   774,   775,
-     776,   779,   797,   801,   807,   811,   815,   819,   828,   837,
-     841,   846,   852,   863,   863,   864,   866,   870,   874,   878,
-     884,   884,   886,   902,   925,   928,   939,   945,   951,   952,
-     959,   965,   971,   979,   985,   991,   999,  1005,  1011,  1019,
-    1020,  1023,  1024,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
-    1032,  1035,  1044,  1048,  1052,  1058,  1067,  1071,  1075,  1084,
-    1088,  1094,  1100,  1107,  1112,  1120,  1130,  1132,  1140,  1146,
-    1150,  1154,  1160,  1171,  1180,  1184,  1189,  1193,  1197,  1201,
-    1207,  1214,  1218,  1224,  1232,  1243,  1250,  1254,  1260,  1270,
-    1281,  1285,  1303,  1312,  1315,  1321,  1325,  1329,  1335,  1346,
-    1351,  1356,  1361,  1366,  1371,  1379,  1382,  1387,  1400,  1408,
-    1421,  1421,  1423,  1423,  1425,  1435,  1440,  1447,  1457,  1466,
-    1471,  1478,  1488,  1498,  1510,  1510,  1511,  1511,  1513,  1520,
-    1525,  1532,  1540,  1548,  1557,  1568,  1572,  1578,  1579,  1580,
-    1583,  1583,  1586,  1586,  1589,  1595,  1603,  1616,  1625,  1634,
-    1638,  1647,  1656,  1667,  1674,  1679,  1688,  1700,  1703,  1712,
-    1723,  1724,  1725,  1728,  1729,  1730,  1733,  1734,  1737,  1738,
-    1741,  1742,  1745,  1756,  1767,  1778
+       0,   248,   248,   251,   259,   271,   272,   275,   293,   294,
+     297,   312,   315,   320,   327,   328,   329,   330,   331,   332,
+     333,   336,   337,   340,   346,   353,   360,   368,   375,   383,
+     428,   435,   441,   442,   443,   444,   445,   446,   447,   448,
+     451,   463,   476,   489,   511,   520,   529,   536,   545,   573,
+     615,   626,   647,   657,   663,   687,   704,   704,   706,   713,
+     725,   726,   727,   730,   742,   754,   772,   783,   795,   797,
+     798,   799,   800,   803,   803,   803,   803,   804,   807,   808,
+     809,   810,   811,   812,   815,   833,   837,   843,   847,   851,
+     855,   864,   873,   877,   882,   888,   899,   899,   900,   902,
+     906,   910,   914,   920,   920,   922,   938,   961,   964,   975,
+     981,   987,   988,   995,  1001,  1007,  1015,  1021,  1027,  1035,
+    1041,  1047,  1055,  1056,  1059,  1060,  1061,  1062,  1063,  1064,
+    1065,  1066,  1067,  1068,  1071,  1080,  1084,  1088,  1094,  1103,
+    1107,  1111,  1120,  1124,  1130,  1136,  1143,  1148,  1156,  1166,
+    1168,  1176,  1182,  1186,  1190,  1196,  1207,  1216,  1220,  1225,
+    1229,  1233,  1237,  1243,  1250,  1254,  1260,  1268,  1279,  1286,
+    1290,  1296,  1306,  1317,  1321,  1339,  1348,  1351,  1357,  1361,
+    1365,  1371,  1382,  1387,  1392,  1397,  1402,  1407,  1415,  1418,
+    1423,  1436,  1444,  1457,  1457,  1459,  1459,  1461,  1471,  1476,
+    1483,  1493,  1502,  1507,  1514,  1524,  1534,  1546,  1546,  1547,
+    1547,  1549,  1556,  1561,  1568,  1576,  1584,  1593,  1604,  1608,
+    1614,  1615,  1616,  1619,  1619,  1622,  1622,  1625,  1631,  1639,
+    1652,  1661,  1670,  1674,  1683,  1692,  1703,  1710,  1715,  1724,
+    1736,  1739,  1748,  1759,  1760,  1761,  1764,  1765,  1766,  1769,
+    1770,  1773,  1774,  1777,  1778,  1781,  1792,  1803,  1814
 };
 #endif
 
@@ -792,10 +796,11 @@ static const char *const yytname[] =
   "SCENECOLOR", "SECONDARY", "SHININESS", "SIZE", "SPECULAR", "SPOT",
   "STATE", "TEXCOORD", "TEXENV", "TEXGEN", "TEXGEN_Q", "TEXGEN_R",
   "TEXGEN_S", "TEXGEN_T", "TEXTURE", "TRANSPOSE", "TEXTURE_UNIT", "TEX_1D",
-  "TEX_2D", "TEX_3D", "TEX_CUBE", "TEX_RECT", "VERTEX", "VTXATTRIB",
-  "WEIGHT", "IDENTIFIER", "MASK4", "MASK3", "MASK2", "MASK1", "SWIZZLE",
-  "DOT_DOT", "DOT", "';'", "','", "'['", "']'", "'+'", "'-'", "'='", "'{'",
-  "'}'", "$accept", "program", "language", "optionSequence", "option",
+  "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",
   "statementSequence", "statement", "instruction", "ALU_instruction",
   "TexInstruction", "ARL_instruction", "VECTORop_instruction",
   "SCALARop_instruction", "BINSCop_instruction", "BINop_instruction",
@@ -852,40 +857,41 @@ static const yytype_uint16 yytoknum[] =
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      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,    59,
-      44,    91,    93,    43,    45,    61,   123,   125
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,    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,   108,   109,   110,   110,   111,   111,   112,   113,   113,
-     114,   114,   115,   115,   116,   116,   116,   116,   116,   116,
-     116,   117,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   127,   127,   127,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   135,   136,   136,   136,   136,
-     137,   137,   138,   139,   139,   140,   141,   142,   142,   142,
-     143,   144,   145,   146,   147,   148,   149,   149,   149,   149,
-     150,   150,   150,   150,   150,   151,   151,   151,   151,   151,
-     151,   152,   153,   153,   154,   154,   154,   154,   154,   154,
-     154,   154,   155,   156,   156,   157,   158,   158,   158,   158,
-     159,   159,   160,   161,   162,   162,   163,   164,   165,   165,
-     166,   166,   166,   167,   167,   167,   168,   168,   168,   169,
-     169,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   171,   172,   172,   172,   173,   174,   174,   174,   174,
-     174,   175,   176,   177,   177,   178,   179,   180,   181,   182,
-     182,   182,   183,   184,   185,   185,   186,   186,   186,   186,
-     187,   188,   188,   189,   190,   191,   192,   192,   193,   194,
-     195,   195,   196,   197,   197,   198,   198,   198,   199,   200,
-     200,   200,   200,   200,   200,   201,   201,   202,   203,   204,
-     205,   205,   206,   206,   207,   208,   208,   209,   210,   211,
-     211,   212,   213,   214,   215,   215,   216,   216,   217,   218,
-     218,   219,   219,   219,   219,   220,   220,   221,   221,   221,
-     223,   222,   225,   224,   226,   226,   227,   228,   228,   228,
-     228,   228,   228,   229,   230,   230,   230,   231,   231,   231,
-     232,   232,   232,   233,   233,   233,   234,   234,   235,   235,
-     236,   236,   237,   238,   239,   240
+       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
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -894,95 +900,95 @@ static const yytype_uint8 yyr2[] =
        0,     2,     4,     1,     1,     2,     0,     3,     2,     0,
        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,     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
+       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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
-static const yytype_uint8 yydefact[] =
+static const yytype_uint16 yydefact[] =
 {
        0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
-       0,   222,     0,     0,     0,     0,   220,     2,     0,     0,
-       0,     0,     0,     0,     0,   219,     0,     8,     0,    12,
+       0,   225,     0,     0,     0,     0,   223,     2,     0,     0,
+       0,     0,     0,     0,     0,   222,     0,     8,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    21,    22,    20,
-       0,    75,    76,   100,   101,    77,    78,    79,    80,     7,
-       0,     0,     0,     0,     0,     0,     0,    51,     0,    74,
-      50,     0,     0,     0,     0,     0,    62,     0,     0,   217,
-     218,    30,     0,     0,    10,    11,   225,   223,     0,     0,
-       0,   104,   219,   102,   221,   234,   232,   228,   230,   227,
-     246,   229,   219,    70,    71,    72,    73,    40,   219,   219,
-     219,   219,   219,   219,    64,    41,   210,   209,     0,     0,
-       0,     0,    46,   219,    69,     0,    47,    49,   113,   114,
-     190,   191,   115,   206,   207,     0,     0,   255,    81,   226,
-     105,     0,   106,   110,   111,   112,   204,   205,   208,     0,
-     236,   235,   237,     0,   231,     0,     0,     0,     0,    25,
-       0,    24,    23,   243,    98,    96,   246,    83,     0,     0,
-       0,     0,     0,   240,     0,   240,     0,     0,   250,   246,
-     121,   122,   123,   124,   126,   125,   127,   128,   129,   130,
-       0,   243,    88,     0,    86,    84,   246,     0,    93,    82,
-       0,    67,    66,    68,    39,     0,     0,   224,     0,   216,
-     215,   238,   239,   233,   252,     0,   219,   219,     0,     0,
-     219,   244,   245,    97,    99,     0,     0,     0,   161,   162,
-     160,     0,   143,   242,   241,   142,     0,     0,     0,     0,
-     185,   181,     0,   180,   246,   173,   167,   166,   165,     0,
-       0,     0,     0,    87,     0,    89,     0,     0,    85,   219,
-     211,    55,     0,    53,    54,     0,   219,     0,   103,   247,
-      27,    26,    65,    38,   248,     0,     0,   202,     0,   203,
-       0,   164,     0,   152,     0,   144,     0,   149,   150,   133,
-     134,   151,   131,   132,     0,   187,   179,   186,     0,   182,
-     175,   177,   176,   172,   174,   254,     0,   148,   147,   154,
-     155,     0,     0,    95,     0,    92,     0,     0,     0,    48,
-      63,    57,    37,     0,     0,   219,     0,    31,     0,   219,
-     197,   201,     0,     0,   240,   189,     0,   188,     0,   251,
-     159,   158,   156,   157,   153,   178,     0,    90,    91,    94,
-     219,   212,     0,     0,    56,   219,    44,    45,    43,     0,
-       0,     0,   108,   116,   119,   117,   192,   193,   118,   253,
-       0,    32,    33,    34,    35,    36,    29,    28,   163,   138,
-     140,   137,     0,   135,   136,     0,   184,   183,   168,     0,
-      60,    58,    61,    59,     0,     0,     0,   120,   170,   219,
-     107,   249,   141,   139,   145,   146,   219,   213,   219,     0,
-       0,     0,   169,   109,     0,     0,     0,   195,     0,   199,
-       0,   214,   219,   194,     0,   198,     0,     0,    42,   196,
-     200,     0,     0,   171
+       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
 };
 
 /* 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,   366,
+      31,    32,    33,    34,    35,    36,    37,    38,   265,   369,
       39,   146,    71,    58,    67,   312,   313,   348,   114,    59,
-     115,   252,   253,   254,   344,   381,   383,    68,   311,   105,
+     115,   252,   253,   254,   344,   384,   386,    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,   373,   393,   172,   225,
-     173,   394,   174,   298,   283,   274,   175,   301,   334,   176,
-     220,   177,   272,   178,   238,   179,   387,   402,   180,   293,
+     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,
      294,   336,   235,   286,   287,   328,   326,   119,   355,   356,
-     406,   120,   357,   408,   121,   268,   270,   358,   122,   136,
+     409,   120,   357,   411,   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
@@ -990,201 +996,201 @@ static const yytype_int16 yydefgoto[] =
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -371
+#define YYPACT_NINF -374
 static const yytype_int16 yypact[] =
 {
-     159,  -371,  -371,    34,  -371,  -371,    66,    11,  -371,   140,
-     -22,  -371,    25,    37,    51,    53,  -371,  -371,   -28,   -28,
-     -28,   -28,   -28,   -28,    74,   102,   -28,  -371,    80,  -371,
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-      82,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-     120,    -6,   107,   108,    91,   120,    61,  -371,    93,   105,
-    -371,   114,   115,   116,   117,   118,  -371,   119,    87,  -371,
-    -371,  -371,   -15,   121,  -371,  -371,  -371,   122,   129,   -17,
-     160,   201,    -3,  -371,   122,    21,  -371,  -371,  -371,  -371,
-     124,  -371,   102,  -371,  -371,  -371,  -371,  -371,   102,   102,
-     102,   102,   102,   102,  -371,  -371,  -371,  -371,    68,    72,
-       8,   -11,   126,   102,    99,   127,  -371,  -371,  -371,  -371,
-    -371,  -371,  -371,  -371,  -371,   -15,   135,  -371,  -371,  -371,
-    -371,   130,  -371,  -371,  -371,  -371,  -371,  -371,  -371,   185,
-    -371,  -371,    48,   207,  -371,   136,   137,   -15,   138,  -371,
-     139,  -371,  -371,    64,  -371,  -371,   124,  -371,   141,   142,
-     143,     9,   144,    88,   145,    83,    86,    24,   146,   124,
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-     175,    64,  -371,   147,  -371,  -371,   124,   148,   150,  -371,
-      73,  -371,  -371,  -371,  -371,   -10,   152,  -371,   151,  -371,
-    -371,  -371,  -371,  -371,  -371,   153,   102,   102,   155,   171,
-     102,  -371,  -371,  -371,  -371,   219,   232,   235,  -371,  -371,
-    -371,   237,  -371,  -371,  -371,  -371,   194,   237,     0,   161,
-     239,  -371,   163,  -371,   124,   -14,  -371,  -371,  -371,   243,
-     238,    58,   166,  -371,   246,  -371,   247,   246,  -371,   102,
-    -371,  -371,   168,  -371,  -371,   176,   102,   167,  -371,  -371,
-    -371,  -371,  -371,  -371,   173,   172,   177,  -371,   174,  -371,
-     178,  -371,   179,  -371,   180,  -371,   181,  -371,  -371,  -371,
-    -371,  -371,  -371,  -371,   253,  -371,  -371,  -371,   256,  -371,
-    -371,  -371,  -371,  -371,  -371,  -371,   182,  -371,  -371,  -371,
-    -371,   125,   257,  -371,   183,  -371,   186,   187,    76,  -371,
-    -371,   106,  -371,   190,    -7,    26,   265,  -371,   103,   102,
-    -371,  -371,   236,    36,    83,  -371,   189,  -371,   191,  -371,
-    -371,  -371,  -371,  -371,  -371,  -371,   192,  -371,  -371,  -371,
-     102,  -371,   273,   274,  -371,   102,  -371,  -371,  -371,    90,
-       8,    77,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-     195,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-    -371,  -371,   267,  -371,  -371,    15,  -371,  -371,  -371,    78,
-    -371,  -371,  -371,  -371,   199,   200,   202,  -371,   240,    26,
-    -371,  -371,  -371,  -371,  -371,  -371,   102,  -371,   102,   219,
-     232,   203,  -371,  -371,   193,   206,   208,   205,   209,   215,
-     257,  -371,   102,  -371,   219,  -371,   232,    41,  -371,  -371,
-    -371,   257,   211,  -371
+     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
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-    -371,   -94,   -88,   149,  -371,  -371,  -326,  -371,   -92,  -371,
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,   123,  -371,  -371,
-    -371,  -371,  -371,  -371,  -371,   241,  -371,  -371,  -371,    70,
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-     -74,  -371,   -81,  -371,  -371,  -371,  -371,  -371,  -371,  -371,
-    -371,  -371,  -371,  -371,  -295,    92,  -371,  -371,  -371,  -371,
-    -371,  -371,  -371,  -371,  -371,  -371,  -371,  -371,   -29,  -371,
-    -371,  -368,  -371,  -371,  -371,  -371,  -371,   242,  -371,  -371,
-    -371,  -371,  -371,  -371,  -371,  -370,  -306,   244,  -371,  -371,
-    -371,   -80,  -110,   -82,  -371,  -371,  -371,  -371,   268,  -371,
-     245,  -371,  -371,  -371,  -160,   154,  -146,  -371,  -371,  -371,
-    -371,  -371,  -371
+    -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
 };
 
 /* 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 -53
+#define YYTABLE_NINF -56
 static const yytype_int16 yytable[] =
 {
      139,   133,   137,   190,   145,   228,   149,   106,   107,   152,
-     214,   148,   251,   150,   151,   346,   147,   181,   147,   384,
-     108,   147,   108,   241,   277,   182,   290,   291,   374,   407,
-     278,   139,   279,   196,     5,   160,    56,   218,   183,   277,
-     245,   184,   417,   161,   419,   278,   109,   140,   185,   236,
-     162,   163,   164,   422,   165,   208,   166,   110,   109,   141,
-     277,   369,   186,    57,   219,   167,   278,   292,   280,   110,
-     281,   111,   405,   111,     7,   370,   112,    49,   187,   188,
-     395,    66,   168,   169,   347,   281,   418,   349,   289,    85,
-      86,   113,   299,   237,   409,   371,   153,    87,   350,    78,
-      69,    70,    10,   113,   154,   158,   281,   372,   201,   223,
-     420,   300,   222,   261,   223,   202,    51,   159,   260,    88,
-      89,   224,   266,   385,   211,   147,   224,   155,    52,    69,
-      70,   212,   113,   229,    90,   386,   230,   231,   421,   308,
-     232,   156,    53,   378,    54,    11,    12,    13,   233,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     1,     2,   375,    66,   234,   139,    61,    62,
-      63,    64,    65,   249,   314,    73,   340,   389,   396,    74,
-     250,    75,   104,   341,   390,   397,   361,   362,   363,   364,
-     365,   191,    81,    92,   192,   193,    82,    93,    94,    95,
-      96,   330,   331,   332,   333,    69,    70,   199,   200,   342,
-     343,    76,    79,    80,    98,    99,   100,   101,   102,   103,
-     127,   125,   126,   130,    56,   143,   197,   -52,   195,   204,
-     379,   367,   198,   139,   354,   137,   206,   207,   209,   210,
-     242,   267,   215,   216,   217,   221,   227,   239,   244,   246,
-     262,   247,   256,   264,   269,   259,   257,   271,   139,   273,
-     275,   285,   284,   314,   288,   295,   297,   302,   303,   305,
-     309,   310,   318,   315,   316,   325,   320,   319,   327,   335,
-     321,   322,   323,   324,   329,   337,   404,   359,   338,   339,
-     345,   376,   368,   377,   378,   380,   382,   391,   392,   398,
-     411,   399,   414,   400,   410,   401,   412,   139,   354,   137,
-     413,   415,   416,   423,   139,   403,   314,   307,   255,   276,
-     128,   388,     0,    84,   134,   129,   135,     0,     0,     0,
-     314,     0,     0,     0,     0,   243
+     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
 };
 
 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,    24,    36,    40,    41,   323,   399,
-      30,   113,    32,   125,     0,    27,    64,    28,    49,    24,
-     186,    52,   410,    35,   414,    30,    61,    26,    59,    25,
-      42,    43,    44,   421,    46,   147,    48,    72,    61,    38,
-      24,    25,    73,    91,    55,    57,    30,    81,    68,    72,
-      70,    88,   398,    88,     8,    39,    91,    99,    89,    90,
-     375,    91,    74,    75,    91,    70,   412,    61,   234,    28,
-      29,   106,    34,    69,   400,    59,    28,    36,    72,   105,
-     103,   104,    91,   106,    36,    33,    70,    71,    60,    26,
-     416,    53,    24,   207,    26,    67,    91,    45,   206,    58,
-      59,    38,   210,    33,    60,   207,    38,    59,    91,   103,
-     104,    67,   106,    47,    73,    45,    50,    51,    97,   249,
-      54,    73,    91,   102,    91,     5,     6,     7,    62,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,     3,     4,   324,    91,    80,   249,    19,    20,
-      21,    22,    23,   100,   256,    26,   100,   100,   100,    99,
-     107,    99,    95,   107,   107,   107,    83,    84,    85,    86,
-      87,    92,   101,   100,    95,    96,   105,    92,    93,    94,
-      95,    76,    77,    78,    79,   103,   104,    22,    23,   103,
-     104,    91,   105,   105,   100,   100,   100,   100,   100,   100,
-      91,   100,   100,    22,    64,   101,    91,   101,   101,    22,
-     340,   319,   102,   315,   315,   315,   100,   100,   100,   100,
-      65,    22,   101,   101,   101,   101,   101,   101,   101,   101,
-      95,   101,   100,    82,    22,   102,   105,    22,   340,    22,
-      66,    22,   101,   345,   101,    22,    28,   101,    22,    22,
-     102,    95,   100,   106,   101,    22,   102,   100,    22,    22,
-     102,   102,   102,   102,   102,   102,   396,    22,   102,   102,
-     100,   102,    56,   102,   102,    22,    22,   102,    31,   100,
-     107,   101,    97,   101,   101,    65,   100,   389,   389,   389,
-     102,   102,    97,   102,   396,   389,   398,   247,   195,   227,
-      79,   350,    -1,    55,    82,    80,    82,    -1,    -1,    -1,
-     412,    -1,    -1,    -1,    -1,   181
+      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
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,   109,   110,     0,   111,     8,   112,   113,
-      91,     5,     6,     7,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   128,
-     151,   152,   159,   160,   161,   222,   224,   227,   240,    99,
-     225,    91,    91,    91,    91,   223,    64,    91,   131,   137,
-     228,   131,   131,   131,   131,   131,    91,   132,   145,   103,
-     104,   130,   221,   131,    99,    99,    91,   226,   105,   105,
-     105,   101,   105,   163,   226,    28,    29,    36,    58,    59,
-      73,   229,   100,    92,    93,    94,    95,   150,   100,   100,
-     100,   100,   100,   100,    95,   147,    22,    23,    37,    61,
-      72,    88,    91,   106,   136,   138,   153,   167,   170,   205,
-     209,   212,   216,   218,   219,   100,   100,    91,   153,   228,
-      22,   162,   166,   170,   205,   215,   217,   219,   220,   221,
-      26,    38,   230,   101,   234,   130,   129,   221,   130,   129,
-     130,   130,   129,    28,    36,    59,    73,   158,    33,    45,
+       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,
       27,    35,    42,    43,    44,    46,    48,    57,    74,    75,
-     171,   173,   176,   178,   180,   184,   187,   189,   191,   193,
-     196,    28,    36,    49,    52,    59,    73,    89,    90,   154,
-     220,    92,    95,    96,   149,   101,   136,    91,   102,    22,
-      23,    60,    67,   231,    22,   237,   100,   100,   136,   100,
-     100,    60,    67,   233,   234,   101,   101,   101,    28,    55,
-     188,   101,    24,    26,    38,   177,   232,   101,   232,    47,
-      50,    51,    54,    62,    80,   200,    25,    69,   192,   101,
-     236,   234,    65,   233,   101,   234,   101,   101,   156,   100,
-     107,    22,   139,   140,   141,   145,   100,   105,   164,   102,
-     130,   129,    95,   148,    82,   126,   130,    22,   213,    22,
-     214,    22,   190,    22,   183,    66,   183,    24,    30,    32,
-      68,    70,   172,   182,   101,    22,   201,   202,   101,   234,
-      40,    41,    81,   197,   198,    22,   239,    28,   181,    34,
-      53,   185,   101,    22,   157,    22,   155,   157,   220,   102,
-      95,   146,   133,   134,   221,   106,   101,   235,   100,   100,
-     102,   102,   102,   102,   102,    22,   204,    22,   203,   102,
-      76,    77,    78,    79,   186,    22,   199,   102,   102,   102,
-     100,   107,   103,   104,   142,   100,    22,    91,   135,    61,
-      72,   165,   168,   169,   170,   206,   207,   210,   215,    22,
-     238,    83,    84,    85,    86,    87,   127,   130,    56,    25,
-      39,    59,    71,   174,   182,   232,   102,   102,   102,   220,
-      22,   143,    22,   144,   134,    33,    45,   194,   196,   100,
-     107,   102,    31,   175,   179,   182,   100,   107,   100,   101,
-     101,    65,   195,   168,   220,   134,   208,   213,   211,   214,
-     101,   107,   100,   102,    97,   102,    97,   199,   134,   213,
-     214,    97,   199,   102
+     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
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2038,7 +2044,7 @@ yyreduce:
         case 3:
 
 /* Line 1455 of yacc.c  */
-#line 251 "program_parse.y"
+#line 252 "program_parse.y"
     {
           if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
@@ -2051,7 +2057,7 @@ yyreduce:
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 259 "program_parse.y"
+#line 260 "program_parse.y"
     {
           if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
@@ -2066,7 +2072,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 275 "program_parse.y"
+#line 276 "program_parse.y"
     {
           int valid = 0;
 
@@ -2087,7 +2093,7 @@ yyreduce:
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 297 "program_parse.y"
+#line 298 "program_parse.y"
     {
           if ((yyvsp[(1) - (2)].inst) != NULL) {
              if (state->inst_tail == NULL) {
@@ -2107,7 +2113,7 @@ yyreduce:
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 315 "program_parse.y"
+#line 316 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumAluInstructions++;
@@ -2117,7 +2123,7 @@ yyreduce:
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 320 "program_parse.y"
+#line 321 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumTexInstructions++;
@@ -2127,7 +2133,7 @@ yyreduce:
   case 23:
 
 /* Line 1455 of yacc.c  */
-#line 340 "program_parse.y"
+#line 341 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2136,7 +2142,7 @@ yyreduce:
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 346 "program_parse.y"
+#line 347 "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;
@@ -2146,7 +2152,7 @@ yyreduce:
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 353 "program_parse.y"
+#line 354 "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 +2162,7 @@ yyreduce:
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 360 "program_parse.y"
+#line 361 "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;
@@ -2166,7 +2172,7 @@ yyreduce:
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 368 "program_parse.y"
+#line 369 "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 +2182,7 @@ yyreduce:
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 376 "program_parse.y"
+#line 377 "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;
@@ -2186,15 +2192,47 @@ yyreduce:
   case 29:
 
 /* Line 1455 of yacc.c  */
-#line 383 "program_parse.y"
+#line 384 "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) {
+             const GLbitfield tex_mask = (1U << (yyvsp[(6) - (8)].integer));
+             GLbitfield shadow_tex = 0;
+             GLbitfield target_mask = 0;
+
+
              (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (8)].temp_inst).SaturateMode;
              (yyval.inst)->Base.TexSrcUnit = (yyvsp[(6) - (8)].integer);
-             (yyval.inst)->Base.TexSrcTarget = (yyvsp[(8) - (8)].integer);
 
-             state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] |= (1U << (yyvsp[(8) - (8)].integer));
+             if ((yyvsp[(8) - (8)].integer) < 0) {
+                shadow_tex = tex_mask;
+
+                (yyval.inst)->Base.TexSrcTarget = -(yyvsp[(8) - (8)].integer);
+                (yyval.inst)->Base.TexShadow = 1;
+             } else {
+                (yyval.inst)->Base.TexSrcTarget = (yyvsp[(8) - (8)].integer);
+             }
+
+             target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
+
+             /* If this texture unit was previously accessed and that access
+              * had a different texture target, generate an error.
+              *
+              * If this texture unit was previously accessed and that access
+              * had a different shadow mode, generate an error.
+              */
+             if ((state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] != 0)
+                 && ((state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] != target_mask)
+                     || ((state->prog->ShadowSamplers & tex_mask)
+                         != shadow_tex))) {
+                yyerror(& (yylsp[(8) - (8)]), state,
+                        "multiple targets used on one texture image unit");
+                YYERROR;
+             }
+
+
+             state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] |= target_mask;
+             state->prog->ShadowSamplers |= shadow_tex;
           }
        ;}
     break;
@@ -2202,7 +2240,7 @@ yyreduce:
   case 30:
 
 /* Line 1455 of yacc.c  */
-#line 396 "program_parse.y"
+#line 429 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
           state->fragment.UsesKill = 1;
@@ -2212,7 +2250,7 @@ yyreduce:
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 403 "program_parse.y"
+#line 436 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
@@ -2221,42 +2259,63 @@ yyreduce:
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 408 "program_parse.y"
+#line 441 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_INDEX; ;}
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 409 "program_parse.y"
+#line 442 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_INDEX; ;}
     break;
 
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 410 "program_parse.y"
+#line 443 "program_parse.y"
     { (yyval.integer) = TEXTURE_3D_INDEX; ;}
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 411 "program_parse.y"
+#line 444 "program_parse.y"
     { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 412 "program_parse.y"
+#line 445 "program_parse.y"
     { (yyval.integer) = TEXTURE_RECT_INDEX; ;}
     break;
 
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 416 "program_parse.y"
+#line 446 "program_parse.y"
+    { (yyval.integer) = -TEXTURE_1D_INDEX; ;}
+    break;
+
+  case 38:
+
+/* Line 1455 of yacc.c  */
+#line 447 "program_parse.y"
+    { (yyval.integer) = -TEXTURE_2D_INDEX; ;}
+    break;
+
+  case 39:
+
+/* Line 1455 of yacc.c  */
+#line 448 "program_parse.y"
+    { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
+    break;
+
+  case 40:
+
+/* Line 1455 of yacc.c  */
+#line 452 "program_parse.y"
     {
           /* FIXME: Is this correct?  Should the extenedSwizzle be applied
            * FIXME: to the existing swizzle?
@@ -2268,10 +2327,10 @@ yyreduce:
        ;}
     break;
 
-  case 38:
+  case 41:
 
 /* Line 1455 of yacc.c  */
-#line 428 "program_parse.y"
+#line 464 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2284,10 +2343,10 @@ yyreduce:
        ;}
     break;
 
-  case 39:
+  case 42:
 
 /* Line 1455 of yacc.c  */
-#line 441 "program_parse.y"
+#line 477 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2300,10 +2359,10 @@ yyreduce:
        ;}
     break;
 
-  case 40:
+  case 43:
 
 /* Line 1455 of yacc.c  */
-#line 454 "program_parse.y"
+#line 490 "program_parse.y"
     {
           (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
           (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
@@ -2325,10 +2384,10 @@ yyreduce:
        ;}
     break;
 
-  case 41:
+  case 44:
 
 /* Line 1455 of yacc.c  */
-#line 476 "program_parse.y"
+#line 512 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2337,10 +2396,10 @@ yyreduce:
        ;}
     break;
 
-  case 42:
+  case 45:
 
 /* Line 1455 of yacc.c  */
-#line 485 "program_parse.y"
+#line 521 "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);
@@ -2349,20 +2408,20 @@ yyreduce:
        ;}
     break;
 
-  case 43:
+  case 46:
 
 /* Line 1455 of yacc.c  */
-#line 494 "program_parse.y"
+#line 530 "program_parse.y"
     {
           (yyval.swiz_mask).swizzle = (yyvsp[(2) - (2)].integer);
           (yyval.swiz_mask).mask = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
        ;}
     break;
 
-  case 44:
+  case 47:
 
 /* Line 1455 of yacc.c  */
-#line 501 "program_parse.y"
+#line 537 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2373,10 +2432,10 @@ yyreduce:
        ;}
     break;
 
-  case 45:
+  case 48:
 
 /* Line 1455 of yacc.c  */
-#line 510 "program_parse.y"
+#line 546 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2404,10 +2463,10 @@ yyreduce:
        ;}
     break;
 
-  case 46:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 538 "program_parse.y"
+#line 574 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2451,10 +2510,10 @@ yyreduce:
        ;}
     break;
 
-  case 47:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 580 "program_parse.y"
+#line 616 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2467,10 +2526,10 @@ yyreduce:
        ;}
     break;
 
-  case 48:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 591 "program_parse.y"
+#line 627 "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)) {
@@ -2493,10 +2552,10 @@ yyreduce:
        ;}
     break;
 
-  case 49:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 612 "program_parse.y"
+#line 648 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2506,10 +2565,10 @@ yyreduce:
        ;}
     break;
 
-  case 50:
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 622 "program_parse.y"
+#line 658 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2517,10 +2576,10 @@ yyreduce:
        ;}
     break;
 
-  case 51:
+  case 54:
 
 /* Line 1455 of yacc.c  */
-#line 628 "program_parse.y"
+#line 664 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2544,10 +2603,10 @@ yyreduce:
        ;}
     break;
 
-  case 52:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 652 "program_parse.y"
+#line 688 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2564,20 +2623,20 @@ yyreduce:
        ;}
     break;
 
-  case 55:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 671 "program_parse.y"
+#line 707 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 56:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 678 "program_parse.y"
+#line 714 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2589,31 +2648,31 @@ yyreduce:
        ;}
     break;
 
-  case 57:
+  case 60:
 
 /* Line 1455 of yacc.c  */
-#line 689 "program_parse.y"
+#line 725 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 58:
+  case 61:
 
 /* Line 1455 of yacc.c  */
-#line 690 "program_parse.y"
+#line 726 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 59:
+  case 62:
 
 /* Line 1455 of yacc.c  */
-#line 691 "program_parse.y"
+#line 727 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 60:
+  case 63:
 
 /* Line 1455 of yacc.c  */
-#line 695 "program_parse.y"
+#line 731 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2625,10 +2684,10 @@ yyreduce:
        ;}
     break;
 
-  case 61:
+  case 64:
 
 /* Line 1455 of yacc.c  */
-#line 707 "program_parse.y"
+#line 743 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2640,10 +2699,10 @@ yyreduce:
        ;}
     break;
 
-  case 62:
+  case 65:
 
 /* Line 1455 of yacc.c  */
-#line 719 "program_parse.y"
+#line 755 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2661,10 +2720,10 @@ yyreduce:
        ;}
     break;
 
-  case 63:
+  case 66:
 
 /* Line 1455 of yacc.c  */
-#line 737 "program_parse.y"
+#line 773 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2675,10 +2734,10 @@ yyreduce:
        ;}
     break;
 
-  case 64:
+  case 67:
 
 /* Line 1455 of yacc.c  */
-#line 748 "program_parse.y"
+#line 784 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2690,24 +2749,24 @@ yyreduce:
        ;}
     break;
 
-  case 69:
+  case 72:
 
 /* Line 1455 of yacc.c  */
-#line 764 "program_parse.y"
+#line 800 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 74:
+  case 77:
 
 /* Line 1455 of yacc.c  */
-#line 768 "program_parse.y"
+#line 804 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 81:
+  case 84:
 
 /* Line 1455 of yacc.c  */
-#line 780 "program_parse.y"
+#line 816 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -2725,55 +2784,55 @@ yyreduce:
        ;}
     break;
 
-  case 82:
+  case 85:
 
 /* Line 1455 of yacc.c  */
-#line 798 "program_parse.y"
+#line 834 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 83:
+  case 86:
 
 /* Line 1455 of yacc.c  */
-#line 802 "program_parse.y"
+#line 838 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 84:
+  case 87:
 
 /* Line 1455 of yacc.c  */
-#line 808 "program_parse.y"
+#line 844 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
     break;
 
-  case 85:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 812 "program_parse.y"
+#line 848 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
     break;
 
-  case 86:
+  case 89:
 
 /* Line 1455 of yacc.c  */
-#line 816 "program_parse.y"
+#line 852 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
     break;
 
-  case 87:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 820 "program_parse.y"
+#line 856 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -2784,10 +2843,10 @@ yyreduce:
        ;}
     break;
 
-  case 88:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 829 "program_parse.y"
+#line 865 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -2798,38 +2857,38 @@ yyreduce:
        ;}
     break;
 
-  case 89:
+  case 92:
 
 /* Line 1455 of yacc.c  */
-#line 838 "program_parse.y"
+#line 874 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 90:
+  case 93:
 
 /* Line 1455 of yacc.c  */
-#line 842 "program_parse.y"
+#line 878 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 91:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 847 "program_parse.y"
+#line 883 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 92:
+  case 95:
 
 /* Line 1455 of yacc.c  */
-#line 853 "program_parse.y"
+#line 889 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -2840,46 +2899,46 @@ yyreduce:
        ;}
     break;
 
-  case 96:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 867 "program_parse.y"
+#line 903 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
     break;
 
-  case 97:
+  case 100:
 
 /* Line 1455 of yacc.c  */
-#line 871 "program_parse.y"
+#line 907 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 98:
+  case 101:
 
 /* Line 1455 of yacc.c  */
-#line 875 "program_parse.y"
+#line 911 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
     break;
 
-  case 99:
+  case 102:
 
 /* Line 1455 of yacc.c  */
-#line 879 "program_parse.y"
+#line 915 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 102:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 887 "program_parse.y"
+#line 923 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -2895,10 +2954,10 @@ yyreduce:
        ;}
     break;
 
-  case 103:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 903 "program_parse.y"
+#line 939 "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, 
@@ -2920,19 +2979,19 @@ yyreduce:
        ;}
     break;
 
-  case 104:
+  case 107:
 
 /* Line 1455 of yacc.c  */
-#line 925 "program_parse.y"
+#line 961 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 105:
+  case 108:
 
 /* Line 1455 of yacc.c  */
-#line 929 "program_parse.y"
+#line 965 "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");
@@ -2943,38 +3002,38 @@ yyreduce:
        ;}
     break;
 
-  case 106:
+  case 109:
 
 /* Line 1455 of yacc.c  */
-#line 940 "program_parse.y"
+#line 976 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
     break;
 
-  case 107:
+  case 110:
 
 /* Line 1455 of yacc.c  */
-#line 946 "program_parse.y"
+#line 982 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
     break;
 
-  case 109:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 953 "program_parse.y"
+#line 989 "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 110:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 960 "program_parse.y"
+#line 996 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -2982,10 +3041,10 @@ yyreduce:
        ;}
     break;
 
-  case 111:
+  case 114:
 
 /* Line 1455 of yacc.c  */
-#line 966 "program_parse.y"
+#line 1002 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -2993,10 +3052,10 @@ yyreduce:
        ;}
     break;
 
-  case 112:
+  case 115:
 
 /* Line 1455 of yacc.c  */
-#line 972 "program_parse.y"
+#line 1008 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3004,10 +3063,10 @@ yyreduce:
        ;}
     break;
 
-  case 113:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 980 "program_parse.y"
+#line 1016 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3015,10 +3074,10 @@ yyreduce:
        ;}
     break;
 
-  case 114:
+  case 117:
 
 /* Line 1455 of yacc.c  */
-#line 986 "program_parse.y"
+#line 1022 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3026,10 +3085,10 @@ yyreduce:
        ;}
     break;
 
-  case 115:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 992 "program_parse.y"
+#line 1028 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3037,10 +3096,10 @@ yyreduce:
        ;}
     break;
 
-  case 116:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1000 "program_parse.y"
+#line 1036 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3048,10 +3107,10 @@ yyreduce:
        ;}
     break;
 
-  case 117:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1006 "program_parse.y"
+#line 1042 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3059,10 +3118,10 @@ yyreduce:
        ;}
     break;
 
-  case 118:
+  case 121:
 
 /* Line 1455 of yacc.c  */
-#line 1012 "program_parse.y"
+#line 1048 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3070,94 +3129,94 @@ yyreduce:
        ;}
     break;
 
-  case 119:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1019 "program_parse.y"
+#line 1055 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 120:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1020 "program_parse.y"
+#line 1056 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 121:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1023 "program_parse.y"
+#line 1059 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 122:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1024 "program_parse.y"
+#line 1060 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 123:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1025 "program_parse.y"
+#line 1061 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 124:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1026 "program_parse.y"
+#line 1062 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 125:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1027 "program_parse.y"
+#line 1063 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 126:
+  case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1028 "program_parse.y"
+#line 1064 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 127:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1029 "program_parse.y"
+#line 1065 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 128:
+  case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1030 "program_parse.y"
+#line 1066 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 129:
+  case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1031 "program_parse.y"
+#line 1067 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 130:
+  case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1032 "program_parse.y"
+#line 1068 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 131:
+  case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1036 "program_parse.y"
+#line 1072 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3166,37 +3225,37 @@ yyreduce:
        ;}
     break;
 
-  case 132:
+  case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1045 "program_parse.y"
+#line 1081 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 133:
+  case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1049 "program_parse.y"
+#line 1085 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
     break;
 
-  case 134:
+  case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1053 "program_parse.y"
+#line 1089 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
     break;
 
-  case 135:
+  case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1059 "program_parse.y"
+#line 1095 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3205,28 +3264,28 @@ yyreduce:
        ;}
     break;
 
-  case 136:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "program_parse.y"
+#line 1104 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 137:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1072 "program_parse.y"
+#line 1108 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
     break;
 
-  case 138:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1076 "program_parse.y"
+#line 1112 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3237,57 +3296,57 @@ yyreduce:
        ;}
     break;
 
-  case 139:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1085 "program_parse.y"
+#line 1121 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 140:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1089 "program_parse.y"
+#line 1125 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
     break;
 
-  case 141:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1095 "program_parse.y"
+#line 1131 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
     break;
 
-  case 142:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1101 "program_parse.y"
+#line 1137 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
     break;
 
-  case 143:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1108 "program_parse.y"
+#line 1144 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
     break;
 
-  case 144:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1113 "program_parse.y"
+#line 1149 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3295,10 +3354,10 @@ yyreduce:
        ;}
     break;
 
-  case 145:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1121 "program_parse.y"
+#line 1157 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3308,10 +3367,10 @@ yyreduce:
        ;}
     break;
 
-  case 147:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1133 "program_parse.y"
+#line 1169 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3319,46 +3378,46 @@ yyreduce:
        ;}
     break;
 
-  case 148:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1141 "program_parse.y"
+#line 1177 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
     break;
 
-  case 149:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1147 "program_parse.y"
+#line 1183 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
     break;
 
-  case 150:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1151 "program_parse.y"
+#line 1187 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
     break;
 
-  case 151:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1155 "program_parse.y"
+#line 1191 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
     break;
 
-  case 152:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1161 "program_parse.y"
+#line 1197 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3369,10 +3428,10 @@ yyreduce:
        ;}
     break;
 
-  case 153:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1172 "program_parse.y"
+#line 1208 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3381,92 +3440,92 @@ yyreduce:
        ;}
     break;
 
-  case 154:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1181 "program_parse.y"
+#line 1217 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 155:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1185 "program_parse.y"
+#line 1221 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
     break;
 
-  case 156:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1190 "program_parse.y"
+#line 1226 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 157:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1194 "program_parse.y"
+#line 1230 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 158:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1198 "program_parse.y"
+#line 1234 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 159:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1202 "program_parse.y"
+#line 1238 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 160:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1208 "program_parse.y"
+#line 1244 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 161:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1215 "program_parse.y"
+#line 1251 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
     break;
 
-  case 162:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1219 "program_parse.y"
+#line 1255 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
     break;
 
-  case 163:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1225 "program_parse.y"
+#line 1261 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3474,10 +3533,10 @@ yyreduce:
        ;}
     break;
 
-  case 164:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1233 "program_parse.y"
+#line 1269 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3488,38 +3547,38 @@ yyreduce:
        ;}
     break;
 
-  case 165:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1244 "program_parse.y"
+#line 1280 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 166:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1251 "program_parse.y"
+#line 1287 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
     break;
 
-  case 167:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1255 "program_parse.y"
+#line 1291 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
     break;
 
-  case 168:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1261 "program_parse.y"
+#line 1297 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3529,10 +3588,10 @@ yyreduce:
        ;}
     break;
 
-  case 169:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1271 "program_parse.y"
+#line 1307 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3542,20 +3601,20 @@ yyreduce:
        ;}
     break;
 
-  case 170:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1281 "program_parse.y"
+#line 1317 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
     break;
 
-  case 171:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1286 "program_parse.y"
+#line 1322 "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).
@@ -3573,10 +3632,10 @@ yyreduce:
        ;}
     break;
 
-  case 172:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1304 "program_parse.y"
+#line 1340 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3584,55 +3643,55 @@ yyreduce:
        ;}
     break;
 
-  case 173:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1312 "program_parse.y"
+#line 1348 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 174:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1316 "program_parse.y"
+#line 1352 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 175:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1322 "program_parse.y"
+#line 1358 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
     break;
 
-  case 176:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1326 "program_parse.y"
+#line 1362 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
     break;
 
-  case 177:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1330 "program_parse.y"
+#line 1366 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
     break;
 
-  case 178:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1336 "program_parse.y"
+#line 1372 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3643,88 +3702,88 @@ yyreduce:
        ;}
     break;
 
-  case 179:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1347 "program_parse.y"
+#line 1383 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 180:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1352 "program_parse.y"
+#line 1388 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 181:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1357 "program_parse.y"
+#line 1393 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 182:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1362 "program_parse.y"
+#line 1398 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 183:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1367 "program_parse.y"
+#line 1403 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 184:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1372 "program_parse.y"
+#line 1408 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 185:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1379 "program_parse.y"
+#line 1415 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 186:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1383 "program_parse.y"
+#line 1419 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 187:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1388 "program_parse.y"
+#line 1424 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -3738,10 +3797,10 @@ yyreduce:
        ;}
     break;
 
-  case 188:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1401 "program_parse.y"
+#line 1437 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -3750,10 +3809,10 @@ yyreduce:
        ;}
     break;
 
-  case 189:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1409 "program_parse.y"
+#line 1445 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -3764,10 +3823,10 @@ yyreduce:
        ;}
     break;
 
-  case 194:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1426 "program_parse.y"
+#line 1462 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3777,30 +3836,30 @@ yyreduce:
        ;}
     break;
 
-  case 195:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1436 "program_parse.y"
+#line 1472 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 196:
+  case 199:
 
 /* Line 1455 of yacc.c  */
-#line 1441 "program_parse.y"
+#line 1477 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 197:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1448 "program_parse.y"
+#line 1484 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3810,10 +3869,10 @@ yyreduce:
        ;}
     break;
 
-  case 198:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1458 "program_parse.y"
+#line 1494 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3823,30 +3882,30 @@ yyreduce:
        ;}
     break;
 
-  case 199:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1467 "program_parse.y"
+#line 1503 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 200:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1472 "program_parse.y"
+#line 1508 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 201:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1479 "program_parse.y"
+#line 1515 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3856,10 +3915,10 @@ yyreduce:
        ;}
     break;
 
-  case 202:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 1489 "program_parse.y"
+#line 1525 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -3869,10 +3928,10 @@ yyreduce:
        ;}
     break;
 
-  case 203:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 1499 "program_parse.y"
+#line 1535 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -3882,40 +3941,40 @@ yyreduce:
        ;}
     break;
 
-  case 208:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1514 "program_parse.y"
+#line 1550 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
        ;}
     break;
 
-  case 209:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1521 "program_parse.y"
+#line 1557 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
        ;}
     break;
 
-  case 210:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 1526 "program_parse.y"
+#line 1562 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 211:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 1533 "program_parse.y"
+#line 1569 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -3925,10 +3984,10 @@ yyreduce:
        ;}
     break;
 
-  case 212:
+  case 215:
 
 /* Line 1455 of yacc.c  */
-#line 1541 "program_parse.y"
+#line 1577 "program_parse.y"
     {
           (yyval.vector).count = 2;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -3938,10 +3997,10 @@ yyreduce:
        ;}
     break;
 
-  case 213:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 1550 "program_parse.y"
+#line 1586 "program_parse.y"
     {
           (yyval.vector).count = 3;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -3951,10 +4010,10 @@ yyreduce:
        ;}
     break;
 
-  case 214:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1559 "program_parse.y"
+#line 1595 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -3964,63 +4023,63 @@ yyreduce:
        ;}
     break;
 
-  case 215:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1569 "program_parse.y"
+#line 1605 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
     break;
 
-  case 216:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1573 "program_parse.y"
+#line 1609 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
     break;
 
-  case 217:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1578 "program_parse.y"
+#line 1614 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 218:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 1579 "program_parse.y"
+#line 1615 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
-  case 219:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1580 "program_parse.y"
+#line 1616 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 220:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1583 "program_parse.y"
+#line 1619 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 222:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1586 "program_parse.y"
+#line 1622 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 224:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1590 "program_parse.y"
+#line 1626 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4028,10 +4087,10 @@ yyreduce:
        ;}
     break;
 
-  case 225:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 1596 "program_parse.y"
+#line 1632 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4039,10 +4098,10 @@ yyreduce:
        ;}
     break;
 
-  case 226:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1604 "program_parse.y"
+#line 1640 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
@@ -4055,10 +4114,10 @@ yyreduce:
        ;}
     break;
 
-  case 227:
+  case 230:
 
 /* Line 1455 of yacc.c  */
-#line 1617 "program_parse.y"
+#line 1653 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4069,10 +4128,10 @@ yyreduce:
        ;}
     break;
 
-  case 228:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1626 "program_parse.y"
+#line 1662 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4083,19 +4142,19 @@ yyreduce:
        ;}
     break;
 
-  case 229:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 1635 "program_parse.y"
+#line 1671 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 230:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1639 "program_parse.y"
+#line 1675 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4106,10 +4165,10 @@ yyreduce:
        ;}
     break;
 
-  case 231:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1648 "program_parse.y"
+#line 1684 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4120,10 +4179,10 @@ yyreduce:
        ;}
     break;
 
-  case 232:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1657 "program_parse.y"
+#line 1693 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4134,19 +4193,19 @@ yyreduce:
        ;}
     break;
 
-  case 233:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 1668 "program_parse.y"
+#line 1704 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 234:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1674 "program_parse.y"
+#line 1710 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4154,10 +4213,10 @@ yyreduce:
        ;}
     break;
 
-  case 235:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1680 "program_parse.y"
+#line 1716 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4168,10 +4227,10 @@ yyreduce:
        ;}
     break;
 
-  case 236:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1689 "program_parse.y"
+#line 1725 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4182,19 +4241,19 @@ yyreduce:
        ;}
     break;
 
-  case 237:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1700 "program_parse.y"
+#line 1736 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 238:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1704 "program_parse.y"
+#line 1740 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4205,10 +4264,10 @@ yyreduce:
        ;}
     break;
 
-  case 239:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1713 "program_parse.y"
+#line 1749 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4219,94 +4278,94 @@ yyreduce:
        ;}
     break;
 
-  case 240:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1723 "program_parse.y"
+#line 1759 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 241:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1724 "program_parse.y"
+#line 1760 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 242:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1725 "program_parse.y"
+#line 1761 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 243:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1728 "program_parse.y"
+#line 1764 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 244:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1729 "program_parse.y"
+#line 1765 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 245:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1730 "program_parse.y"
+#line 1766 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 246:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1733 "program_parse.y"
+#line 1769 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 247:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1734 "program_parse.y"
+#line 1770 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 248:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1737 "program_parse.y"
+#line 1773 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 249:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1738 "program_parse.y"
+#line 1774 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 250:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1741 "program_parse.y"
+#line 1777 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 251:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1742 "program_parse.y"
+#line 1778 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 252:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1746 "program_parse.y"
+#line 1782 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4317,10 +4376,10 @@ yyreduce:
        ;}
     break;
 
-  case 253:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1757 "program_parse.y"
+#line 1793 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4331,10 +4390,10 @@ yyreduce:
        ;}
     break;
 
-  case 254:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1768 "program_parse.y"
+#line 1804 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4345,10 +4404,10 @@ yyreduce:
        ;}
     break;
 
-  case 255:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1779 "program_parse.y"
+#line 1815 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4372,7 +4431,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4376 "program_parse.tab.c"
+#line 4435 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4591,7 +4650,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1799 "program_parse.y"
+#line 1835 "program_parse.y"
 
 
 struct asm_instruction *
index 7dd1c02bdc8cbf712cfd52b1238b47fe44421148..4fd65318016123d38a3f78fc71f7eebbb1403ba1 100644 (file)
      TEX_3D = 340,
      TEX_CUBE = 341,
      TEX_RECT = 342,
-     VERTEX = 343,
-     VTXATTRIB = 344,
-     WEIGHT = 345,
-     IDENTIFIER = 346,
-     MASK4 = 347,
-     MASK3 = 348,
-     MASK2 = 349,
-     MASK1 = 350,
-     SWIZZLE = 351,
-     DOT_DOT = 352,
-     DOT = 353
+     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
    };
 #endif
 
@@ -167,7 +170,7 @@ typedef union YYSTYPE
 
 
 /* Line 1676 of yacc.c  */
-#line 171 "program_parse.tab.h"
+#line 174 "program_parse.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index f4a1de0487ac44537fe68ee19c848720177e5497..5008446514d544dd1e6ff64840e376cd4c335724 100644 (file)
@@ -157,6 +157,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
 %token SCENECOLOR SECONDARY SHININESS SIZE SPECULAR SPOT STATE
 %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 VERTEX VTXATTRIB
 %token WEIGHT
 
@@ -383,11 +384,43 @@ SAMPLE_instruction: SAMPLE_OP maskedDstReg ',' swizzleSrcReg ',' texImageUnit ',
        {
           $$ = asm_instruction_ctor($1.Opcode, & $2, & $4, NULL, NULL);
           if ($$ != NULL) {
+             const GLbitfield tex_mask = (1U << $6);
+             GLbitfield shadow_tex = 0;
+             GLbitfield target_mask = 0;
+
+
              $$->Base.SaturateMode = $1.SaturateMode;
              $$->Base.TexSrcUnit = $6;
-             $$->Base.TexSrcTarget = $8;
 
-             state->prog->TexturesUsed[$6] |= (1U << $8);
+             if ($8 < 0) {
+                shadow_tex = tex_mask;
+
+                $$->Base.TexSrcTarget = -$8;
+                $$->Base.TexShadow = 1;
+             } else {
+                $$->Base.TexSrcTarget = $8;
+             }
+
+             target_mask = (1U << $$->Base.TexSrcTarget);
+
+             /* If this texture unit was previously accessed and that access
+              * had a different texture target, generate an error.
+              *
+              * If this texture unit was previously accessed and that access
+              * had a different shadow mode, generate an error.
+              */
+             if ((state->prog->TexturesUsed[$6] != 0)
+                 && ((state->prog->TexturesUsed[$6] != target_mask)
+                     || ((state->prog->ShadowSamplers & tex_mask)
+                         != shadow_tex))) {
+                yyerror(& @8, state,
+                        "multiple targets used on one texture image unit");
+                YYERROR;
+             }
+
+
+             state->prog->TexturesUsed[$6] |= target_mask;
+             state->prog->ShadowSamplers |= shadow_tex;
           }
        }
        ;
@@ -410,6 +443,9 @@ texTarget: TEX_1D  { $$ = TEXTURE_1D_INDEX; }
        | TEX_3D   { $$ = TEXTURE_3D_INDEX; }
        | TEX_CUBE { $$ = TEXTURE_CUBE_INDEX; }
        | TEX_RECT { $$ = TEXTURE_RECT_INDEX; }
+       | TEX_SHADOW1D   { $$ = -TEXTURE_1D_INDEX; }
+       | TEX_SHADOW2D   { $$ = -TEXTURE_2D_INDEX; }
+       | TEX_SHADOWRECT { $$ = -TEXTURE_RECT_INDEX; }
        ;
 
 SWZ_instruction: SWZ maskedDstReg ',' srcReg ',' extendedSwizzle