#line 2 "src/chromium_gensrc/mesa/glsl_lexer.cc"

#line 4 "src/chromium_gensrc/mesa/glsl_lexer.cc"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#endif /* ! C99 */

#endif /* ! FLEXINT_H */

#ifdef __cplusplus

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)

#define YY_USE_CONST

#endif	/* defined (__STDC__) */
#endif	/* ! __cplusplus */

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)

/* An opaque pointer. */
#ifndef YY_TYPEDEF_YY_SCANNER_T
#define YY_TYPEDEF_YY_SCANNER_T
typedef void* yyscan_t;
#endif

/* For convenience, these vars (plus the bison vars far below)
   are macros in the reentrant scanner. */
#define yyin yyg->yyin_r
#define yyout yyg->yyout_r
#define yyextra yyg->yyextra_r
#define yyleng yyg->yyleng_r
#define yytext yyg->yytext_r
#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
#define yy_flex_debug yyg->yy_flex_debug_r

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN yyg->yy_start = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START ((yyg->yy_start - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE _mesa_glsl_restart(yyin ,yyscanner )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k.
 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
 * Ditto for the __ia64__ case accordingly.
 */
#define YY_BUF_SIZE 32768
#else
#define YY_BUF_SIZE 16384
#endif /* __ia64__ */
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

    #define YY_LESS_LINENO(n)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = yyg->yy_hold_char; \
		YY_RESTORE_YY_MORE_OFFSET \
		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	yy_size_t yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */
    
	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via _mesa_glsl_restart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
                          : NULL)

/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]

void _mesa_glsl_restart (FILE *input_file ,yyscan_t yyscanner );
void _mesa_glsl__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
YY_BUFFER_STATE _mesa_glsl__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
void _mesa_glsl__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void _mesa_glsl__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void _mesa_glsl_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
void _mesa_glsl_pop_buffer_state (yyscan_t yyscanner );

static void _mesa_glsl_ensure_buffer_stack (yyscan_t yyscanner );
static void _mesa_glsl__load_buffer_state (yyscan_t yyscanner );
static void _mesa_glsl__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );

#define YY_FLUSH_BUFFER _mesa_glsl__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)

YY_BUFFER_STATE _mesa_glsl__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
YY_BUFFER_STATE _mesa_glsl__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
YY_BUFFER_STATE _mesa_glsl__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );

void *_mesa_glsl_alloc (yy_size_t ,yyscan_t yyscanner );
void *_mesa_glsl_realloc (void *,yy_size_t ,yyscan_t yyscanner );
void _mesa_glsl_free (void * ,yyscan_t yyscanner );

#define yy_new_buffer _mesa_glsl__create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        _mesa_glsl_ensure_buffer_stack (yyscanner); \
		YY_CURRENT_BUFFER_LVALUE =    \
            _mesa_glsl__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        _mesa_glsl_ensure_buffer_stack (yyscanner); \
		YY_CURRENT_BUFFER_LVALUE =    \
            _mesa_glsl__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define _mesa_glsl_wrap(n) 1
#define YY_SKIP_YYWRAP

typedef unsigned char YY_CHAR;

typedef int yy_state_type;

#define yytext_ptr yytext_r

static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
static int yy_get_next_buffer (yyscan_t yyscanner );
static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	yyg->yytext_ptr = yy_bp; \
	yyleng = (size_t) (yy_cp - yy_bp); \
	yyg->yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yyg->yy_c_buf_p = yy_cp;

#define YY_NUM_RULES 215
#define YY_END_OF_BUFFER 216
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static yyconst flex_int16_t yy_accept[867] =
    {   0,
        0,    0,   16,   16,    0,    0,  216,  214,    1,   21,
      214,  214,  214,  214,  214,  214,  214,  214,  121,  119,
      214,  214,  214,  213,  214,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  214,    1,  214,  215,   16,
       20,  215,   19,   17,   18,   14,   13,    1,  103,  112,
      104,  115,  109,   98,  111,   99,  118,  123,  110,  124,
      121,    0,    0,  126,  121,    0,  119,  119,  107,  100,
      102,  101,  108,  213,  116,  106,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,   30,  213,

      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,   34,  213,  213,   61,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  117,
      105,    1,    0,    0,    2,    0,    0,    0,    0,   16,
       15,   19,   18,    0,  123,  122,    0,  124,    0,  125,
      120,  113,  114,  213,  129,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,   33,  213,  213,  213,

      213,  213,  213,  213,  213,  213,  213,   26,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,   62,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
        0,    0,    0,    0,   15,    0,  123,    0,  122,    0,
      124,  125,  120,  213,  213,   24,  213,  213,  176,  169,
      213,  213,  213,  213,  213,  213,  213,  213,  213,   32,
      132,  213,  213,  213,  213,   68,  213,  213,  137,  151,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,

      213,  213,  148,  172,   49,   50,   51,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  135,  127,  213,
      213,   27,  213,  213,  213,  213,  213,  213,  213,   46,
       47,   48,   96,  213,  213,    0,    0,    0,    0,    0,
      122,  213,  213,   28,   37,   38,   39,  213,  130,  213,
       23,  213,  213,  213,  213,  159,  160,  161,  213,  128,
      213,  152,   25,  162,  163,  164,  174,  156,  157,  158,
      213,  213,  213,   63,  154,  213,  213,  213,   40,   41,
       42,  213,  213,  213,  213,  213,  213,  213,  213,  213,

      213,  213,  213,  213,  213,  213,  213,  149,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  131,  213,
      213,  171,   43,   44,   45,  213,  213,   31,    0,    0,
        0,    0,  179,  213,  213,  177,  213,  213,  213,  150,
      145,  182,  213,  213,  213,  213,  213,  213,  140,  213,
      213,  213,   97,   52,   53,   54,   55,   56,   57,   58,
       59,   60,  213,  213,  213,  213,  155,  136,  213,  213,
      143,   36,  213,  213,  168,   69,  144,   95,  180,  138,
      213,  213,  213,  213,  213,  213,  213,  213,    0,    0,
        0,    0,  213,  213,  213,  139,   35,  213,  213,  213,

      213,  213,  213,  183,  184,  185,  213,  213,  213,  213,
      213,  173,  213,  213,  213,  213,  213,  213,  213,  213,
      133,  213,  213,  213,  213,  213,   64,  213,  213,   65,
      213,    0,    0,    0,    0,    0,  213,   66,   29,  146,
      187,  188,  189,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  141,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  134,  191,  192,  193,
      213,  213,  153,  213,  142,    0,    0,    6,    0,    0,
        0,   12,    3,   22,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  186,  147,   67,  213,  213,  213,  213,

      213,  170,  213,  178,  175,  208,   71,   72,   73,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,    0,    0,    0,    0,    0,    0,    0,  213,  213,
      213,  190,  213,  213,  213,  213,  213,   82,   83,   84,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,  213,  213,  213,  213,  194,   88,   89,   90,  213,
      213,    4,    0,    5,    0,    0,    0,    0,    0,    0,
      213,  213,  213,  213,  213,  213,  213,  205,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
      213,   74,  213,  213,  213,  213,  213,  213,  213,  213,

      213,    0,    0,    0,    0,  213,  213,  206,  195,  213,
      196,  213,  213,  213,  213,  213,   85,  213,  213,  213,
      213,  213,  213,  213,  213,  213,  213,  213,  213,  207,
      213,  213,  213,  213,   91,    0,    0,    0,  197,  198,
      213,  201,  213,  202,  213,  213,  213,  213,   70,  213,
      213,  213,  165,  213,  166,  181,  213,  213,  199,  200,
      213,  213,  213,  213,    0,    0,    0,  213,  213,  213,
      213,  209,  211,   75,  213,   76,  213,  213,  213,  213,
      213,  213,  210,  212,    0,    0,    0,    0,  213,  213,
       86,   87,  213,   77,  213,  213,   78,  213,  213,   92,

       93,    0,    0,    0,    0,  213,  213,  213,  213,  213,
      213,  213,    0,    0,    0,    0,  213,  213,  213,  213,
      213,   79,  213,    0,    0,    0,    7,    0,    0,  203,
      204,  213,  213,  213,   94,    0,    0,    8,    0,    0,
      213,  213,  167,    0,    0,    0,   80,   81,    0,    0,
        0,    9,    0,    0,   10,    0,    0,    0,    0,    0,
        0,    0,    0,    0,   11,    0
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    5,    1,    6,    1,    7,    8,    1,    9,
       10,   11,   12,    1,   13,   14,   15,   16,   17,   18,
       19,   20,   21,   21,   21,   22,   22,   23,    1,   24,
       25,   26,    1,    1,   27,   28,   29,   30,   31,   32,
       33,   34,   34,   34,   34,   35,   34,   34,   36,   34,
       34,   37,   38,   39,   40,   34,   34,   41,   34,   34,
        1,    1,    1,   42,   43,    1,   44,   45,   46,   47,

       48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
       58,   59,   34,   60,   61,   62,   63,   64,   65,   66,
       67,   68,    1,   69,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static yyconst flex_int32_t yy_meta[70] =
    {   0,
        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    3,    3,    3,    3,    3,
        3,    3,    1,    1,    1,    1,    4,    4,    4,    4,
        3,    3,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    1,    5,    4,    4,    4,    4,    3,    3,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    1
    } ;

static yyconst flex_int16_t yy_base[876] =
    {   0,
        0,   68,   74,    0, 1243, 1242, 1244, 1247,   69, 1247,
     1218, 1217,  136, 1216,  133,  134,  132, 1215,  148,  201,
      131, 1214,  146,    0,  121,  114,  123,  146,  134,  136,
      172, 1180,  161,  182,  141,  129,  151, 1174,  140,  187,
      196,  203,  205,  223, 1185,  187,  204,  270, 1247,  224,
     1247, 1220,  258, 1247,    0, 1247, 1247,  240, 1247, 1247,
     1247, 1247, 1247, 1247, 1247, 1247, 1247,  251, 1247,  253,
      224,  321,  275, 1247, 1247,    0,    0, 1247, 1209, 1247,
     1247, 1247, 1208,    0, 1247, 1247, 1170, 1175, 1168, 1171,
     1180, 1179, 1165, 1168, 1180,  247, 1174, 1161, 1158, 1172,

     1158, 1155, 1155, 1161,  243,  261, 1155, 1166, 1151, 1157,
     1161, 1162,    0, 1153, 1164,  252, 1163, 1158, 1138,  172,
     1142, 1156, 1146,  201, 1139,  260, 1152, 1154, 1136, 1132,
     1140, 1137, 1126, 1135,  264, 1133, 1139, 1134, 1137, 1125,
     1128,  256,  265,  271, 1138, 1125, 1138,  234, 1131, 1247,
     1247,  326,  319,  342, 1247, 1116, 1129, 1120, 1131,  329,
        0,  338,    0,  391, 1247,  315,  402, 1247,  409,  416,
      287, 1247, 1247, 1126,    0, 1117, 1121, 1131, 1128,  300,
     1111, 1111, 1115,  304, 1126, 1123, 1123, 1121, 1118, 1109,
     1116, 1102, 1100, 1113, 1098, 1115,    0, 1112, 1099, 1107,

     1104, 1108, 1109, 1102, 1099, 1087, 1086, 1100, 1103, 1090,
     1099, 1086, 1093, 1083,  353, 1089, 1092, 1082, 1090, 1078,
     1082, 1073, 1088, 1078, 1069, 1088, 1071, 1069, 1080, 1069,
     1064, 1062, 1076, 1061, 1063, 1060, 1072, 1071, 1074, 1055,
      319, 1064, 1059, 1057, 1067, 1045,  361, 1064, 1066, 1054,
     1046, 1050, 1062, 1045,    0,  423,  434,  451, 1247,  458,
      468, 1247, 1247, 1040, 1051,    0, 1048,  366,    0,    0,
     1041, 1039, 1041, 1036, 1045, 1033, 1051, 1039,  369,    0,
        0, 1033, 1044, 1043, 1043,    0, 1027,  373,    0,    0,
     1029,  376, 1037, 1038, 1028, 1022, 1021, 1022, 1021, 1021,

      380, 1016,    0,    0, 1012, 1011, 1010, 1012, 1013, 1018,
     1012, 1008, 1022, 1017, 1016, 1015, 1006, 1009, 1009, 1001,
     1004,  999, 1008, 1013,  998, 1011, 1001,    0,    0, 1008,
     1004,    0,  995,  995, 1001,  991,  999,  439,  996,    0,
        0,    0,    0,  985,  998,  997,  996,  993,  981,  475,
      486,  993,  995,    0,    0,    0,    0,  981,    0,  981,
        0,  980,  981,  975,  986,    0,    0,    0,  976,    0,
      972,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      983,  492,  982,    0,    0,  980,  976,  972,    0,    0,
        0,  964,  442,  494,  504,  969,  965,  971,  961,  959,

      973,  957,  957,  971,  959,  971,  966,    0,  964,  961,
      965,  948,  950,  957,  963,  958,  957,  944,    0,  946,
      947,    0,    0,    0,    0,  944,  948,    0,  942,  996,
      941,  944,    0,  932,  942,    0,  930,  930,  944,    0,
      946,    0,  508,  959,  958,  957,  923,  922,    0,  940,
      939,  934,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  922,  936,  922,  919,    0,    0,  925,  924,
        0,    0,  922,  914,    0,    0,    0,    0,    0,    0,
      911,  923,  511,  915,  922,  921,  918,  912,  905,  529,
      921,  906,  901,  915,  913,    0,    0,  905,  929,  928,

      927,  893,  892,  378,  505,    0,  905,  908,  906,  894,
      890,    0,  903,  900,  899,  888,  887,  886,  535,  895,
        0,  912,  911,  910,  876,  875,    0,  890,  876,    0,
      887,  882,  539,  565,  931,  875,  883,    0,    0,    0,
      903,  902,    0,  879,  882,  866,  874,  864,  872,  873,
      873,  872,  857,  560,  870,    0,  871,  859,  858,  854,
      883,  882,  881,  847,  846,  842,    0,  880,  879,    0,
      856,  859,    0,  573,    0,  845,  591, 1247,  601,    0,
      612,  597, 1247,    0,  842,  841,  851,  851,  838,  853,
      836,  851,  846,    0,    0,    0,  863,  862,  861,  827,

      826,    0,  826,    0,    0,    0,  506,  534,  850,  837,
      840,  822,  823,  822,  832,  832,  849,  848,  847,  813,
      812,  817,  621,  647,  373,  834,  824,  812,  810,  809,
      820,    0,  823,  819,  821,  817,  803,  835,  324,    0,
      812,  815,  807,  798,  806,  796,  807,  803,  805,  803,
      803,  802,  789,  788,  799,    0,  819,  538,    0,  796,
      799, 1247,  444, 1247,  654,    0,  674,  813,  797,  779,
      796,  795,  778,  770,  778,  768,  776,    0,  773,  772,
      783,  781,  781,  764,  767,  782,  765,  778,  779,  776,
      773,  782,  759,  774,  773,  756,  755,  754,  765,  763,

      763,  479,  777,  746,  756,  740,  739,    0,  767,  739,
      765,  737,  741,  740,  753,  750,    0,  749,  752,  748,
      750,  731,  745,  729,  730,  738,  731,  720,  719,    0,
      725,  724,  737,  734,    0,  746,  730,  723,    0,    0,
      720,    0,  704,    0,  710,  709,  689,  690,    0,  682,
      690,  680,  708,  687,    0,    0,  700,  699,    0,    0,
      698,  697,  678,  679,  736,  560,  685,  692,  691,  667,
      666,    0,    0,  694,  666,  692,  678,  663,  678,  669,
      656,    5,    0,    0,  155,  634,  568,  106,  131,  208,
        0,    0,  217,    0,  285,  305,    0,  324,  366,    0,

        0,  360,  593,  549,  401,  440,  441,  457,  471,  469,
      454,  503,  474,  524,  643,  645,  509,  511,  549,  550,
      542,    0,  578,  581,  650,  676, 1247,  679,  625,    0,
        0,  588,  590,  593,    0,  599,  687, 1247,  659,  649,
      614,  615,    0,  630,  635,  697,    0,    0,  641,  698,
      699, 1247,  645,  701, 1247,  642,  703,  711,  708,  712,
      660,  661,  716,  717, 1247, 1247,  756,  759,  762,  718,
      719,  765,  769,  772,  774
    } ;

static yyconst flex_int16_t yy_def[876] =
    {   0,
      866,    1,  866,    3,  867,  867,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  868,  866,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  869,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  870,  866,  871,
       19,  866,  866,  866,  866,  872,   20,  866,  866,  866,
      866,  866,  866,  868,  866,  866,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      873,  866,  869,  866,  866,  871,  866,  866,  866,  866,
      872,  866,  866,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      866,  866,  866,  866,  873,  866,  866,  866,  866,  866,
      866,  866,  866,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  866,  866,  866,  866,  866,
      866,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  866,  866,
      866,  866,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  866,  866,
      866,  866,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  866,  866,  866,  866,  866,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  866,  866,  866,  866,  874,
      866,  866,  866,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  866,  866,  866,  874,  866,  866,  866,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  866,  866,  866,  866,  875,  866,  866,  866,  866,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  875,  866,  866,  866,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  866,  866,  866,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  866,  866,  866,  868,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
      868,  868,  868,  868,  866,  866,  866,  866,  868,  868,
      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,

      868,  866,  866,  866,  866,  868,  868,  868,  868,  868,
      868,  868,  866,  866,  866,  866,  868,  868,  868,  868,
      868,  868,  868,  866,  866,  866,  866,  866,  866,  868,
      868,  868,  868,  868,  868,  866,  866,  866,  866,  866,
      868,  868,  868,  866,  866,  866,  868,  868,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,    0,  866,  866,  866,  866,
      866,  866,  866,  866,  866
    } ;

static yyconst flex_int16_t yy_nxt[1317] =
    {   0,
        8,    9,   10,    9,   11,    8,   12,   13,    8,    8,
       14,   15,   16,   17,   18,   19,   20,   20,   20,   20,
       20,   20,    8,   21,   22,   23,   24,   24,   24,   24,
       24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
       24,   25,   24,   26,   27,   28,   29,   30,   31,   32,
       33,   34,   24,   24,   35,   36,   37,   38,   39,   40,
       41,   42,   43,   44,   45,   24,   24,   24,   46,   47,
       58,  801,   58,   48,   49,   50,   51,   50,   49,   49,
       49,   49,   49,   49,   49,   49,   49,   49,   52,   49,
       53,   53,   53,   53,   53,   53,   54,   49,   49,   49,

       55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
       55,   55,   55,   55,   55,   49,   55,   55,   55,   55,
       55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
       55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
       55,   55,   49,   61,   64,   85,   66,   68,   68,   68,
       68,   68,   68,   68,   79,   80,  785,   65,   67,   87,
       62,   70,   86,   71,   71,   71,   71,   71,   71,   72,
       82,   83,  121,  805,   88,   89,  122,  806,   73,   74,
       90,   97,   91,  126,  119,   98,   92,   75,   76,   93,
      101,   99,  102,   94,  123,   73,   74,  100,  120,  127,

       95,  103,  128,   96,  110,  152,  802,   58,  124,  153,
       75,  150,  111,   76,   70,  104,   77,   77,   77,   77,
       77,   77,   77,  105,  112,  160,  106,  160,  213,  107,
      113,   73,   74,  114,  129,  108,  214,  115,  116,  131,
       78,   58,  117,   58,  130,  118,  132,  133,   73,   74,
      138,  134,  218,  139,  807,  151,  142,  135,  136,  219,
      137,  143,  140,   78,  866,  144,  146,  808,  145,  141,
      147,  154,  155,  162,  162,  162,  162,  162,  162,  162,
      148,  164,  165,  167,  168,  248,  169,  169,  249,  866,
      170,  170,  170,  170,  170,  170,  170,  193,  164,  165,

      167,  168,  183,  184,  195,  221,  205,  231,  194,  206,
      207,  239,  240,  208,  243,  209,  241,  156,  196,  222,
      154,  155,  244,  232,  157,  242,  263,  152,  158,   58,
      160,  153,  160,  159,   70,  809,   72,   72,   72,   72,
       72,   72,   72,  154,  155,  258,  259,  269,  810,  263,
      680,   73,   74,  162,  162,  162,  162,  162,  162,  162,
      681,  270,  258,  259,  274,  275,  156,  333,   73,   74,
      305,  306,  307,  157,  577,  578,  334,  158,  340,  341,
      342,  811,  159,  355,  356,  357,  366,  367,  368,  156,
      374,  375,  376,  378,  379,  380,  157,  389,  390,  391,

      158,  812,  256,  256,  546,  159,  257,  257,  257,  257,
      257,  257,  257,  260,  260,  547,  813,  261,  261,  261,
      261,  261,  261,  261,  170,  170,  170,  170,  170,  170,
      170,  170,  170,  170,  170,  170,  170,  170,  257,  257,
      257,  257,  257,  257,  257,  663,  664,  262,  816,  257,
      257,  257,  257,  257,  257,  257,  423,  424,  425,  454,
      455,  456,  350,  350,  262,  165,  351,  351,  351,  351,
      351,  351,  351,  261,  261,  261,  261,  261,  261,  261,
      663,  664,  165,  261,  261,  261,  261,  261,  261,  261,
      351,  351,  351,  351,  351,  351,  351,  817,  818,  168,

      819,  351,  351,  351,  351,  351,  351,  351,  444,  445,
      446,  457,  458,  459,  820,  821,  168,  259,  822,  447,
      448,  460,  461,  462,  499,  500,  501,  522,  523,  524,
      490,  548,  644,  823,  259,  502,  503,  824,  525,  526,
      577,  578,  549,  645,  533,  534,  534,  534,  534,  534,
      534,  561,  562,  563,  579,  579,  579,  579,  579,  579,
      646,  786,  564,  565,  698,  566,  577,  578,  787,  803,
      647,  648,  825,  830,  699,  831,  597,  598,  599,  580,
      581,  581,  581,  581,  581,  581,  581,  600,  601,  617,
      618,  619,  577,  578,  803,  832,  833,  814,  582,  834,

      620,  621,  577,  578,  580,  815,  623,  624,  624,  624,
      624,  624,  624,  577,  578,  835,  579,  579,  579,  579,
      579,  579,  663,  664,  836,  804,  839,  581,  581,  581,
      581,  581,  581,  581,  626,  786,  665,  665,  665,  665,
      665,  665,  787,  627,  826,  841,  828,  842,  663,  664,
      804,  837,  827,  829,  628,  663,  664,  843,  844,  838,
      839,  666,  667,  667,  667,  667,  667,  667,  667,  665,
      665,  665,  665,  665,  665,  663,  664,  826,  847,  848,
      828,  849,  840,  850,  853,  827,  666,  829,  837,  667,
      667,  667,  667,  667,  667,  667,  838,  845,  851,  854,

      851,  856,  854,  857,  858,  846,  852,  855,  852,  860,
      855,  859,  858,  860,  862,  863,  840,  864,  864,  859,
       68,  166,  800,  799,  798,  865,  865,  797,  796,  795,
      794,  793,  792,  791,  790,  789,  788,  785,  784,  783,
      782,  781,  780,  779,  778,  777,  776,  775,  774,  773,
      772,  861,  771,  770,  769,  861,   56,   56,   56,   56,
       56,   84,   84,   84,  163,  163,  163,  171,  171,  255,
      768,  255,  255,  255,  625,  625,  702,  702,  767,  766,
      765,  764,  763,  762,  761,  760,  759,  758,  757,  756,
      755,  754,  753,  752,  751,  750,  749,  748,  747,  746,

      745,  744,  743,  742,  741,  740,  739,  738,  737,  736,
      735,  734,  733,  732,  731,  730,  729,  728,  727,  726,
      725,  724,  723,  722,  721,  720,  719,  718,  717,  716,
      715,  714,  713,  712,  711,  710,  709,  708,  707,  706,
      705,  704,  703,  701,  700,  697,  696,  695,  694,  693,
      692,  691,  690,  689,  688,  687,  686,  685,  684,  683,
      682,  679,  678,  677,  676,  675,  674,  673,  672,  671,
      670,  669,  668,  662,  661,  660,  659,  658,  657,  656,
      655,  654,  653,  652,  651,  650,  649,  643,  642,  641,
      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,

      630,  629,  622,  616,  615,  614,  613,  612,  611,  610,
      609,  608,  607,  606,  605,  604,  603,  602,  596,  595,
      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
      584,  583,  582,  576,  575,  574,  573,  572,  571,  570,
      569,  568,  567,  560,  559,  558,  557,  556,  555,  554,
      553,  552,  551,  550,  545,  544,  543,  542,  541,  540,
      539,  538,  537,  536,  535,  532,  531,  530,  529,  528,
      527,  521,  520,  519,  518,  517,  516,  515,  514,  513,
      512,  511,  510,  509,  508,  507,  506,  505,  504,  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,  453,  452,  451,  450,  449,
      443,  442,  441,  440,  439,  438,  437,  436,  435,  434,
      433,  432,  431,  430,  429,  428,  427,  426,  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,  388,
      387,  386,  385,  384,  383,  382,  381,  377,  373,  372,
      371,  370,  369,  365,  364,  363,  362,  361,  360,  359,

      358,  354,  353,  352,  349,  348,  347,  346,  345,  344,
      343,  339,  338,  337,  336,  335,  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,  304,  303,  302,  301,  300,  299,  298,  297,  296,
      295,  294,  293,  292,  291,  290,  289,  288,  287,  286,
      285,  284,  283,  282,  281,  280,  279,  278,  277,  276,
      273,  272,  271,  268,  267,  266,  265,  264,  254,  253,
      252,  251,  250,  247,  246,  245,  238,  237,  236,  235,
      234,  233,  230,  229,  228,  227,  226,  225,  224,  223,

      220,  217,  216,  215,  212,  211,  210,  204,  203,  202,
      201,  200,  199,  198,  197,  192,  191,  190,  189,  188,
      187,  186,  185,  182,  181,  180,  179,  178,  177,  176,
      175,  174,  173,  172,  161,  149,  125,  109,   81,   69,
       63,   60,   59,  866,   57,   57,    7,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,

      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866
    } ;

static yyconst flex_int16_t yy_chk[1317] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
        9,  782,    9,    2,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,

        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,   13,   15,   25,   16,   17,   17,   17,
       17,   17,   17,   17,   21,   21,  785,   15,   16,   26,
       13,   19,   25,   19,   19,   19,   19,   19,   19,   19,
       23,   23,   36,  788,   26,   26,   36,  789,   19,   19,
       27,   29,   27,   39,   35,   29,   27,   19,   19,   28,
       30,   29,   30,   28,   37,   19,   19,   29,   35,   39,

       28,   30,   39,   28,   33,   47,  785,   47,   37,   47,
       19,   46,   33,   19,   20,   31,   20,   20,   20,   20,
       20,   20,   20,   31,   33,   50,   31,   50,  120,   31,
       34,   20,   20,   34,   40,   31,  120,   34,   34,   41,
       20,   58,   34,   58,   40,   34,   41,   41,   20,   20,
       42,   41,  124,   42,  790,   46,   43,   41,   41,  124,
       41,   43,   42,   20,   71,   43,   44,  793,   43,   42,
       44,   48,   48,   53,   53,   53,   53,   53,   53,   53,
       44,   68,   68,   70,   70,  148,   73,   73,  148,   71,
       73,   73,   73,   73,   73,   73,   73,  105,   68,   68,

       70,   70,   96,   96,  106,  126,  116,  135,  105,  116,
      116,  142,  142,  116,  144,  116,  143,   48,  106,  126,
      153,  153,  144,  135,   48,  143,  171,  152,   48,  152,
      160,  152,  160,   48,   72,  795,   72,   72,   72,   72,
       72,   72,   72,  154,  154,  166,  166,  180,  796,  171,
      639,   72,   72,  162,  162,  162,  162,  162,  162,  162,
      639,  180,  166,  166,  184,  184,  153,  241,   72,   72,
      215,  215,  215,  153,  625,  625,  241,  153,  247,  247,
      247,  798,  153,  268,  268,  268,  279,  279,  279,  154,
      288,  288,  288,  292,  292,  292,  154,  301,  301,  301,

      154,  799,  164,  164,  504,  154,  164,  164,  164,  164,
      164,  164,  164,  167,  167,  504,  802,  167,  167,  167,
      167,  167,  167,  167,  169,  169,  169,  169,  169,  169,
      169,  170,  170,  170,  170,  170,  170,  170,  256,  256,
      256,  256,  256,  256,  256,  663,  663,  170,  805,  257,
      257,  257,  257,  257,  257,  257,  338,  338,  338,  393,
      393,  393,  258,  258,  170,  257,  258,  258,  258,  258,
      258,  258,  258,  260,  260,  260,  260,  260,  260,  260,
      702,  702,  257,  261,  261,  261,  261,  261,  261,  261,
      350,  350,  350,  350,  350,  350,  350,  806,  807,  261,

      808,  351,  351,  351,  351,  351,  351,  351,  382,  382,
      382,  394,  394,  394,  809,  810,  261,  351,  811,  382,
      382,  395,  395,  395,  443,  443,  443,  483,  483,  483,
      490,  505,  607,  812,  351,  443,  443,  813,  483,  483,
      533,  533,  505,  607,  490,  490,  490,  490,  490,  490,
      490,  519,  519,  519,  533,  533,  533,  533,  533,  533,
      608,  766,  519,  519,  658,  519,  534,  534,  766,  787,
      608,  608,  814,  817,  658,  818,  554,  554,  554,  533,
      534,  534,  534,  534,  534,  534,  534,  554,  554,  574,
      574,  574,  577,  577,  803,  819,  820,  804,  582,  821,

      574,  574,  579,  579,  533,  804,  577,  577,  577,  577,
      577,  577,  577,  581,  581,  823,  579,  579,  579,  579,
      579,  579,  623,  623,  824,  787,  829,  581,  581,  581,
      581,  581,  581,  581,  582,  786,  623,  623,  623,  623,
      623,  623,  786,  582,  815,  832,  816,  833,  624,  624,
      803,  825,  815,  816,  582,  665,  665,  834,  836,  825,
      839,  623,  624,  624,  624,  624,  624,  624,  624,  665,
      665,  665,  665,  665,  665,  667,  667,  826,  841,  842,
      828,  844,  829,  845,  849,  826,  623,  828,  837,  667,
      667,  667,  667,  667,  667,  667,  837,  840,  846,  850,

      851,  853,  854,  856,  857,  840,  846,  850,  851,  859,
      854,  857,  858,  860,  861,  862,  839,  863,  864,  858,
      870,  871,  781,  780,  779,  863,  864,  778,  777,  776,
      775,  774,  771,  770,  769,  768,  767,  765,  764,  763,
      762,  761,  758,  757,  754,  753,  752,  751,  750,  748,
      747,  859,  746,  745,  743,  860,  867,  867,  867,  867,
      867,  868,  868,  868,  869,  869,  869,  872,  872,  873,
      741,  873,  873,  873,  874,  874,  875,  875,  738,  737,
      736,  734,  733,  732,  731,  729,  728,  727,  726,  725,
      724,  723,  722,  721,  720,  719,  718,  716,  715,  714,

      713,  712,  711,  710,  709,  707,  706,  705,  704,  703,
      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
      681,  680,  679,  677,  676,  675,  674,  673,  672,  671,
      670,  669,  668,  661,  660,  657,  655,  654,  653,  652,
      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
      641,  638,  637,  636,  635,  634,  633,  631,  630,  629,
      628,  627,  626,  622,  621,  620,  619,  618,  617,  616,
      615,  614,  613,  612,  611,  610,  609,  603,  601,  600,
      599,  598,  597,  593,  592,  591,  590,  589,  588,  587,

      586,  585,  576,  572,  571,  569,  568,  566,  565,  564,
      563,  562,  561,  560,  559,  558,  557,  555,  553,  552,
      551,  550,  549,  548,  547,  546,  545,  544,  542,  541,
      537,  536,  535,  532,  531,  529,  528,  526,  525,  524,
      523,  522,  520,  518,  517,  516,  515,  514,  513,  511,
      510,  509,  508,  507,  503,  502,  501,  500,  499,  498,
      495,  494,  493,  492,  491,  489,  488,  487,  486,  485,
      484,  482,  481,  474,  473,  470,  469,  466,  465,  464,
      463,  452,  451,  450,  448,  447,  446,  445,  444,  441,
      439,  438,  437,  435,  434,  432,  431,  430,  429,  427,

      426,  421,  420,  418,  417,  416,  415,  414,  413,  412,
      411,  410,  409,  407,  406,  405,  404,  403,  402,  401,
      400,  399,  398,  397,  396,  392,  388,  387,  386,  383,
      381,  371,  369,  365,  364,  363,  362,  360,  358,  353,
      352,  349,  348,  347,  346,  345,  344,  339,  337,  336,
      335,  334,  333,  331,  330,  327,  326,  325,  324,  323,
      322,  321,  320,  319,  318,  317,  316,  315,  314,  313,
      312,  311,  310,  309,  308,  307,  306,  305,  302,  300,
      299,  298,  297,  296,  295,  294,  293,  291,  287,  285,
      284,  283,  282,  278,  277,  276,  275,  274,  273,  272,

      271,  267,  265,  264,  254,  253,  252,  251,  250,  249,
      248,  246,  245,  244,  243,  242,  240,  239,  238,  237,
      236,  235,  234,  233,  232,  231,  230,  229,  228,  227,
      226,  225,  224,  223,  222,  221,  220,  219,  218,  217,
      216,  214,  213,  212,  211,  210,  209,  208,  207,  206,
      205,  204,  203,  202,  201,  200,  199,  198,  196,  195,
      194,  193,  192,  191,  190,  189,  188,  187,  186,  185,
      183,  182,  181,  179,  178,  177,  176,  174,  159,  158,
      157,  156,  149,  147,  146,  145,  141,  140,  139,  138,
      137,  136,  134,  133,  132,  131,  130,  129,  128,  127,

      125,  123,  122,  121,  119,  118,  117,  115,  114,  112,
      111,  110,  109,  108,  107,  104,  103,  102,  101,  100,
       99,   98,   97,   95,   94,   93,   92,   91,   90,   89,
       88,   87,   83,   79,   52,   45,   38,   32,   22,   18,
       14,   12,   11,    7,    6,    5,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,

      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
      866,  866,  866,  866,  866,  866
    } ;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
#line 1 "src/src/glsl/glsl_lexer.ll"
#line 2 "src/src/glsl/glsl_lexer.ll"
/*
 * Copyright © 2008, 2009 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */
#include <ctype.h>
#include <limits.h>
#include "strtod.h"
#include "ast.h"
#include "glsl_parser_extras.h"
#include "glsl_parser.h"

static int classify_identifier(struct _mesa_glsl_parse_state *, const char *);

#ifdef _MSC_VER
#define YY_NO_UNISTD_H
#endif

#define YY_USER_ACTION						\
   do {								\
      yylloc->source = 0;					\
      yylloc->first_column = yycolumn + 1;			\
      yylloc->first_line = yylineno + 1;			\
      yycolumn += yyleng;					\
   } while(0);

#define YY_USER_INIT yylineno = 0; yycolumn = 0;

/* A macro for handling reserved words and keywords across language versions.
 *
 * Certain words start out as identifiers, become reserved words in
 * later language revisions, and finally become language keywords.
 *
 * For example, consider the following lexer rule:
 * samplerBuffer       KEYWORD(130, 140, SAMPLERBUFFER)
 *
 * This means that "samplerBuffer" will be treated as:
 * - a keyword (SAMPLERBUFFER token)         ...in GLSL >= 1.40
 * - a reserved word - error                 ...in GLSL >= 1.30
 * - an identifier                           ...in GLSL <  1.30
 */
#define KEYWORD(reserved_version, allowed_version, token)		\
   do {									\
      if (yyextra->language_version >= allowed_version) {		\
	 return token;							\
      } else if (yyextra->language_version >= reserved_version) {	\
	 _mesa_glsl_error(yylloc, yyextra,				\
			  "Illegal use of reserved word `%s'", yytext);	\
	 return ERROR_TOK;						\
      } else {								\
	 yylval->identifier = strdup(yytext);				\
	 return classify_identifier(yyextra, yytext);			\
      }									\
   } while (0)

/* The ES macro can be used in KEYWORD checks:
 *
 *    word      KEYWORD(110 || ES, 400, TOKEN)
 * ...means the word is reserved in GLSL ES 1.00, while
 *
 *    word      KEYWORD(110, 130 || ES, TOKEN)
 * ...means the word is a legal keyword in GLSL ES 1.00.
 */
#define ES yyextra->es_shader

static int
literal_integer(char *text, int len, struct _mesa_glsl_parse_state *state,
		YYSTYPE *lval, YYLTYPE *lloc, int base)
{
   bool is_uint = (text[len - 1] == 'u' ||
		   text[len - 1] == 'U');
   const char *digits = text;

   /* Skip "0x" */
   if (base == 16)
      digits += 2;

#ifdef _MSC_VER
   unsigned __int64 value = _strtoui64(digits, NULL, base);
#else
   unsigned long long value = strtoull(digits, NULL, base);
#endif

   lval->n = (int)value;

   if (value > UINT_MAX) {
      /* Note that signed 0xffffffff is valid, not out of range! */
      if (state->language_version >= 130) {
	 _mesa_glsl_error(lloc, state,
			  "Literal value `%s' out of range", text);
      } else {
	 _mesa_glsl_warning(lloc, state,
			    "Literal value `%s' out of range", text);
      }
   } else if (base == 10 && !is_uint && (unsigned)value > (unsigned)INT_MAX + 1) {
      /* Tries to catch unintentionally providing a negative value.
       * Note that -2147483648 is parsed as -(2147483648), so we don't
       * want to warn for INT_MAX.
       */
      _mesa_glsl_warning(lloc, state,
			 "Signed literal value `%s' is interpreted as %d",
			 text, lval->n);
   }
   return is_uint ? UINTCONSTANT : INTCONSTANT;
}

#define LITERAL_INTEGER(base) \
   literal_integer(yytext, yyleng, yyextra, yylval, yylloc, base)


#line 1147 "src/chromium_gensrc/mesa/glsl_lexer.cc"

#define INITIAL 0
#define PP 1
#define PRAGMA 2

#define YY_EXTRA_TYPE struct _mesa_glsl_parse_state *

/* Holds the entire state of the reentrant scanner. */
struct yyguts_t
    {

    /* User-defined. Not touched by flex. */
    YY_EXTRA_TYPE yyextra_r;

    /* The rest are the same as the globals declared in the non-reentrant scanner. */
    FILE *yyin_r, *yyout_r;
    size_t yy_buffer_stack_top; /**< index of top of stack. */
    size_t yy_buffer_stack_max; /**< capacity of stack. */
    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
    char yy_hold_char;
    int yy_n_chars;
    int yyleng_r;
    char *yy_c_buf_p;
    int yy_init;
    int yy_start;
    int yy_did_buffer_switch_on_eof;
    int yy_start_stack_ptr;
    int yy_start_stack_depth;
    int *yy_start_stack;
    yy_state_type yy_last_accepting_state;
    char* yy_last_accepting_cpos;

    int yylineno_r;
    int yy_flex_debug_r;

    char *yytext_r;
    int yy_more_flag;
    int yy_more_len;

    YYSTYPE * yylval_r;

    YYLTYPE * yylloc_r;

    }; /* end struct yyguts_t */

static int yy_init_globals (yyscan_t yyscanner );

    /* This must go here because YYSTYPE and YYLTYPE are included
     * from bison output in section 1.*/
    #    define yylval yyg->yylval_r
    
    #    define yylloc yyg->yylloc_r
    
int _mesa_glsl_lex_init (yyscan_t* scanner);

int _mesa_glsl_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int _mesa_glsl_lex_destroy (yyscan_t yyscanner );

int _mesa_glsl_get_debug (yyscan_t yyscanner );

void _mesa_glsl_set_debug (int debug_flag ,yyscan_t yyscanner );

YY_EXTRA_TYPE _mesa_glsl_get_extra (yyscan_t yyscanner );

void _mesa_glsl_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );

FILE *_mesa_glsl_get_in (yyscan_t yyscanner );

void _mesa_glsl_set_in  (FILE * in_str ,yyscan_t yyscanner );

FILE *_mesa_glsl_get_out (yyscan_t yyscanner );

void _mesa_glsl_set_out  (FILE * out_str ,yyscan_t yyscanner );

int _mesa_glsl_get_leng (yyscan_t yyscanner );

char *_mesa_glsl_get_text (yyscan_t yyscanner );

int _mesa_glsl_get_lineno (yyscan_t yyscanner );

void _mesa_glsl_set_lineno (int line_number ,yyscan_t yyscanner );

YYSTYPE * _mesa_glsl_get_lval (yyscan_t yyscanner );

void _mesa_glsl_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );

       YYLTYPE *_mesa_glsl_get_lloc (yyscan_t yyscanner );
    
        void _mesa_glsl_set_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
    
/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int _mesa_glsl_wrap (yyscan_t yyscanner );
#else
extern int _mesa_glsl_wrap (yyscan_t yyscanner );
#endif
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
#endif

#ifndef YY_NO_INPUT

#ifdef __cplusplus
static int yyinput (yyscan_t yyscanner );
#else
static int input (yyscan_t yyscanner );
#endif

#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k */
#define YY_READ_BUF_SIZE 16384
#else
#define YY_READ_BUF_SIZE 8192
#endif /* __ia64__ */
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		size_t n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(yyin); \
			} \
		}\
\

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
#endif

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int _mesa_glsl_lex \
               (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);

#define YY_DECL int _mesa_glsl_lex \
               (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

#define YY_RULE_SETUP \
	if ( yyleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(yytext[yyleng - 1] == '\n'); \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

#line 145 "src/src/glsl/glsl_lexer.ll"


#line 1389 "src/chromium_gensrc/mesa/glsl_lexer.cc"

    yylval = yylval_param;

    yylloc = yylloc_param;

	if ( !yyg->yy_init )
		{
		yyg->yy_init = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! yyg->yy_start )
			yyg->yy_start = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			_mesa_glsl_ensure_buffer_stack (yyscanner);
			YY_CURRENT_BUFFER_LVALUE =
				_mesa_glsl__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
		}

		_mesa_glsl__load_buffer_state(yyscanner );
		}

	while ( 1 )		/* loops until end-of-file is reached */
		{
		yy_cp = yyg->yy_c_buf_p;

		/* Support of yytext. */
		*yy_cp = yyg->yy_hold_char;

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = yyg->yy_start;
		yy_current_state += YY_AT_BOL();
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			if ( yy_accept[yy_current_state] )
				{
				yyg->yy_last_accepting_state = yy_current_state;
				yyg->yy_last_accepting_cpos = yy_cp;
				}
			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 >= 867 )
					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_current_state != 866 );
		yy_cp = yyg->yy_last_accepting_cpos;
		yy_current_state = yyg->yy_last_accepting_state;

yy_find_action:
		yy_act = yy_accept[yy_current_state];

		YY_DO_BEFORE_ACTION;

do_action:	/* This label is used only to access EOF actions. */

		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = yyg->yy_hold_char;
			yy_cp = yyg->yy_last_accepting_cpos;
			yy_current_state = yyg->yy_last_accepting_state;
			goto yy_find_action;

case 1:
YY_RULE_SETUP
#line 147 "src/src/glsl/glsl_lexer.ll"
;
	YY_BREAK
/* Preprocessor tokens. */ 
case 2:
*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 150 "src/src/glsl/glsl_lexer.ll"
;
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 151 "src/src/glsl/glsl_lexer.ll"
{ BEGIN PP; return VERSION_TOK; }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 152 "src/src/glsl/glsl_lexer.ll"
{ BEGIN PP; return EXTENSION; }
	YY_BREAK
case 5:
*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 153 "src/src/glsl/glsl_lexer.ll"
{
				   /* Eat characters until the first digit is
				    * encountered
				    */
				   char *ptr = yytext;
				   while (!isdigit(*ptr))
				      ptr++;

				   /* Subtract one from the line number because
				    * yylineno is zero-based instead of
				    * one-based.
				    */
				   yylineno = strtol(ptr, &ptr, 0) - 1;
				   yylloc->source = strtol(ptr, NULL, 0);
				}
	YY_BREAK
case 6:
*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 168 "src/src/glsl/glsl_lexer.ll"
{
				   /* Eat characters until the first digit is
				    * encountered
				    */
				   char *ptr = yytext;
				   while (!isdigit(*ptr))
				      ptr++;

				   /* Subtract one from the line number because
				    * yylineno is zero-based instead of
				    * one-based.
				    */
				   yylineno = strtol(ptr, &ptr, 0) - 1;
				}
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 182 "src/src/glsl/glsl_lexer.ll"
{
				  BEGIN PP;
				  return PRAGMA_DEBUG_ON;
				}
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 186 "src/src/glsl/glsl_lexer.ll"
{
				  BEGIN PP;
				  return PRAGMA_DEBUG_OFF;
				}
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 190 "src/src/glsl/glsl_lexer.ll"
{
				  BEGIN PP;
				  return PRAGMA_OPTIMIZE_ON;
				}
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 194 "src/src/glsl/glsl_lexer.ll"
{
				  BEGIN PP;
				  return PRAGMA_OPTIMIZE_OFF;
				}
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 198 "src/src/glsl/glsl_lexer.ll"
{
				  BEGIN PP;
				  return PRAGMA_INVARIANT_ALL;
				}
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 202 "src/src/glsl/glsl_lexer.ll"
{ BEGIN PRAGMA; }
	YY_BREAK
case 13:
/* rule 13 can match eol */
YY_RULE_SETUP
#line 204 "src/src/glsl/glsl_lexer.ll"
{ BEGIN 0; yylineno++; yycolumn = 0; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 205 "src/src/glsl/glsl_lexer.ll"
{ }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 207 "src/src/glsl/glsl_lexer.ll"
{ }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 208 "src/src/glsl/glsl_lexer.ll"
{ }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 209 "src/src/glsl/glsl_lexer.ll"
return COLON;
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 210 "src/src/glsl/glsl_lexer.ll"
{
				   yylval->identifier = strdup(yytext);
				   return IDENTIFIER;
				}
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 214 "src/src/glsl/glsl_lexer.ll"
{
				    yylval->n = strtol(yytext, NULL, 10);
				    return INTCONSTANT;
				}
	YY_BREAK
case 20:
/* rule 20 can match eol */
YY_RULE_SETUP
#line 218 "src/src/glsl/glsl_lexer.ll"
{ BEGIN 0; yylineno++; yycolumn = 0; return EOL; }
	YY_BREAK
case 21:
/* rule 21 can match eol */
YY_RULE_SETUP
#line 220 "src/src/glsl/glsl_lexer.ll"
{ yylineno++; yycolumn = 0; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 222 "src/src/glsl/glsl_lexer.ll"
return ATTRIBUTE;
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 223 "src/src/glsl/glsl_lexer.ll"
return CONST_TOK;
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 224 "src/src/glsl/glsl_lexer.ll"
return BOOL_TOK;
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 225 "src/src/glsl/glsl_lexer.ll"
return FLOAT_TOK;
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 226 "src/src/glsl/glsl_lexer.ll"
return INT_TOK;
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 227 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, UINT_TOK);
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 229 "src/src/glsl/glsl_lexer.ll"
return BREAK;
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 230 "src/src/glsl/glsl_lexer.ll"
return CONTINUE;
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 231 "src/src/glsl/glsl_lexer.ll"
return DO;
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 232 "src/src/glsl/glsl_lexer.ll"
return WHILE;
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 233 "src/src/glsl/glsl_lexer.ll"
return ELSE;
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 234 "src/src/glsl/glsl_lexer.ll"
return FOR;
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 235 "src/src/glsl/glsl_lexer.ll"
return IF;
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 236 "src/src/glsl/glsl_lexer.ll"
return DISCARD;
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 237 "src/src/glsl/glsl_lexer.ll"
return RETURN;
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 239 "src/src/glsl/glsl_lexer.ll"
return BVEC2;
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 240 "src/src/glsl/glsl_lexer.ll"
return BVEC3;
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 241 "src/src/glsl/glsl_lexer.ll"
return BVEC4;
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 242 "src/src/glsl/glsl_lexer.ll"
return IVEC2;
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 243 "src/src/glsl/glsl_lexer.ll"
return IVEC3;
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 244 "src/src/glsl/glsl_lexer.ll"
return IVEC4;
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 245 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, UVEC2);
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 246 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, UVEC3);
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 247 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, UVEC4);
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 248 "src/src/glsl/glsl_lexer.ll"
return VEC2;
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 249 "src/src/glsl/glsl_lexer.ll"
return VEC3;
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 250 "src/src/glsl/glsl_lexer.ll"
return VEC4;
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 251 "src/src/glsl/glsl_lexer.ll"
return MAT2X2;
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 252 "src/src/glsl/glsl_lexer.ll"
return MAT3X3;
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 253 "src/src/glsl/glsl_lexer.ll"
return MAT4X4;
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 254 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT2X2);
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 255 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT2X3);
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 256 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT2X4);
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 257 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT3X2);
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 258 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT3X3);
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 259 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT3X4);
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 260 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT4X2);
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 261 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT4X3);
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 262 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, MAT4X4);
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 264 "src/src/glsl/glsl_lexer.ll"
return IN_TOK;
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 265 "src/src/glsl/glsl_lexer.ll"
return OUT_TOK;
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 266 "src/src/glsl/glsl_lexer.ll"
return INOUT_TOK;
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 267 "src/src/glsl/glsl_lexer.ll"
return UNIFORM;
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 268 "src/src/glsl/glsl_lexer.ll"
return VARYING;
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 269 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 120, CENTROID);
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 270 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120 || ES, 120 || ES, INVARIANT);
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 271 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130 || ES, 130, FLAT);
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 272 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, SMOOTH);
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 273 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, NOPERSPECTIVE);
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 275 "src/src/glsl/glsl_lexer.ll"
return SAMPLER1D;
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 276 "src/src/glsl/glsl_lexer.ll"
return SAMPLER2D;
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 277 "src/src/glsl/glsl_lexer.ll"
return SAMPLER3D;
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 278 "src/src/glsl/glsl_lexer.ll"
return SAMPLERCUBE;
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 279 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, SAMPLER1DARRAY);
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 280 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, SAMPLER2DARRAY);
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 281 "src/src/glsl/glsl_lexer.ll"
return SAMPLER1DSHADOW;
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 282 "src/src/glsl/glsl_lexer.ll"
return SAMPLER2DSHADOW;
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 283 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, SAMPLERCUBESHADOW);
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 284 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, SAMPLER1DARRAYSHADOW);
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 285 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, SAMPLER2DARRAYSHADOW);
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 286 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, ISAMPLER1D);
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 287 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, ISAMPLER2D);
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 288 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, ISAMPLER3D);
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 289 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, ISAMPLERCUBE);
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 290 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, ISAMPLER1DARRAY);
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 291 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, ISAMPLER2DARRAY);
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 292 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, USAMPLER1D);
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 293 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, USAMPLER2D);
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 294 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, USAMPLER3D);
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 295 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, USAMPLERCUBE);
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 296 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, USAMPLER1DARRAY);
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 297 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, USAMPLER2DARRAY);
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 299 "src/src/glsl/glsl_lexer.ll"
{
			  if (yyextra->OES_EGL_image_external_enable)
			     return SAMPLEREXTERNALOES;
			  else
			     return IDENTIFIER;
			}
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 307 "src/src/glsl/glsl_lexer.ll"
return STRUCT;
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 308 "src/src/glsl/glsl_lexer.ll"
return VOID_TOK;
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 310 "src/src/glsl/glsl_lexer.ll"
{
		  if ((yyextra->language_version >= 140)
		      || yyextra->AMD_conservative_depth_enable
		      || yyextra->ARB_conservative_depth_enable
		      || yyextra->ARB_explicit_attrib_location_enable
		      || yyextra->ARB_uniform_buffer_object_enable
		      || yyextra->ARB_fragment_coord_conventions_enable) {
		      return LAYOUT_TOK;
		   } else {
		      yylval->identifier = strdup(yytext);
		      return IDENTIFIER;
		   }
		}
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 324 "src/src/glsl/glsl_lexer.ll"
return INC_OP;
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 325 "src/src/glsl/glsl_lexer.ll"
return DEC_OP;
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 326 "src/src/glsl/glsl_lexer.ll"
return LE_OP;
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 327 "src/src/glsl/glsl_lexer.ll"
return GE_OP;
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 328 "src/src/glsl/glsl_lexer.ll"
return EQ_OP;
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 329 "src/src/glsl/glsl_lexer.ll"
return NE_OP;
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 330 "src/src/glsl/glsl_lexer.ll"
return AND_OP;
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 331 "src/src/glsl/glsl_lexer.ll"
return OR_OP;
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 332 "src/src/glsl/glsl_lexer.ll"
return XOR_OP;
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 333 "src/src/glsl/glsl_lexer.ll"
return LEFT_OP;
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 334 "src/src/glsl/glsl_lexer.ll"
return RIGHT_OP;
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 336 "src/src/glsl/glsl_lexer.ll"
return MUL_ASSIGN;
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 337 "src/src/glsl/glsl_lexer.ll"
return DIV_ASSIGN;
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 338 "src/src/glsl/glsl_lexer.ll"
return ADD_ASSIGN;
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 339 "src/src/glsl/glsl_lexer.ll"
return MOD_ASSIGN;
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 340 "src/src/glsl/glsl_lexer.ll"
return LEFT_ASSIGN;
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 341 "src/src/glsl/glsl_lexer.ll"
return RIGHT_ASSIGN;
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 342 "src/src/glsl/glsl_lexer.ll"
return AND_ASSIGN;
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 343 "src/src/glsl/glsl_lexer.ll"
return XOR_ASSIGN;
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 344 "src/src/glsl/glsl_lexer.ll"
return OR_ASSIGN;
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 345 "src/src/glsl/glsl_lexer.ll"
return SUB_ASSIGN;
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 347 "src/src/glsl/glsl_lexer.ll"
{
			    return LITERAL_INTEGER(10);
			}
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 350 "src/src/glsl/glsl_lexer.ll"
{
			    return LITERAL_INTEGER(16);
			}
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 353 "src/src/glsl/glsl_lexer.ll"
{
			    return LITERAL_INTEGER(8);
			}
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 357 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 361 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 365 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 369 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 373 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 378 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->n = 1;
			    return BOOLCONSTANT;
			}
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 382 "src/src/glsl/glsl_lexer.ll"
{
			    yylval->n = 0;
			    return BOOLCONSTANT;
			}
	YY_BREAK
/* Reserved words in GLSL 1.10. */
case 129:
YY_RULE_SETUP
#line 389 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, ASM);
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 390 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, CLASS);
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 391 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, UNION);
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 392 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, ENUM);
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 393 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, TYPEDEF);
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 394 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, TEMPLATE);
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 395 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, THIS);
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 396 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 140 || yyextra->ARB_uniform_buffer_object_enable, PACKED_TOK);
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 397 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, GOTO);
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 398 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 130, SWITCH);
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 399 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 130, DEFAULT);
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 400 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, INLINE_TOK);
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 401 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, NOINLINE);
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 402 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, VOLATILE);
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 403 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, PUBLIC_TOK);
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 404 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, STATIC);
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 405 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, EXTERN);
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 406 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, EXTERNAL);
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 407 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, INTERFACE);
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 408 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, LONG_TOK);
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 409 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, SHORT_TOK);
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 410 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 400, DOUBLE_TOK);
	YY_BREAK
case 151:
YY_RULE_SETUP
#line 411 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, HALF);
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 412 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, FIXED_TOK);
	YY_BREAK
case 153:
YY_RULE_SETUP
#line 413 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, UNSIGNED);
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 414 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, INPUT_TOK);
	YY_BREAK
case 155:
YY_RULE_SETUP
#line 415 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, OUTPUT);
	YY_BREAK
case 156:
YY_RULE_SETUP
#line 416 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, HVEC2);
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 417 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, HVEC3);
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 418 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, HVEC4);
	YY_BREAK
case 159:
YY_RULE_SETUP
#line 419 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 400, DVEC2);
	YY_BREAK
case 160:
YY_RULE_SETUP
#line 420 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 400, DVEC3);
	YY_BREAK
case 161:
YY_RULE_SETUP
#line 421 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 400, DVEC4);
	YY_BREAK
case 162:
YY_RULE_SETUP
#line 422 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, FVEC2);
	YY_BREAK
case 163:
YY_RULE_SETUP
#line 423 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, FVEC3);
	YY_BREAK
case 164:
YY_RULE_SETUP
#line 424 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, FVEC4);
	YY_BREAK
case 165:
YY_RULE_SETUP
#line 425 "src/src/glsl/glsl_lexer.ll"
return SAMPLER2DRECT;
	YY_BREAK
case 166:
YY_RULE_SETUP
#line 426 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, SAMPLER3DRECT);
	YY_BREAK
case 167:
YY_RULE_SETUP
#line 427 "src/src/glsl/glsl_lexer.ll"
return SAMPLER2DRECTSHADOW;
	YY_BREAK
case 168:
YY_RULE_SETUP
#line 428 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, SIZEOF);
	YY_BREAK
case 169:
YY_RULE_SETUP
#line 429 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, CAST);
	YY_BREAK
case 170:
YY_RULE_SETUP
#line 430 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, NAMESPACE);
	YY_BREAK
case 171:
YY_RULE_SETUP
#line 431 "src/src/glsl/glsl_lexer.ll"
KEYWORD(110 || ES, 999, USING);
	YY_BREAK
/* Additional reserved words in GLSL 1.20. */
case 172:
YY_RULE_SETUP
#line 434 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 130 || ES, LOWP);
	YY_BREAK
case 173:
YY_RULE_SETUP
#line 435 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 130 || ES, MEDIUMP);
	YY_BREAK
case 174:
YY_RULE_SETUP
#line 436 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 130 || ES, HIGHP);
	YY_BREAK
case 175:
YY_RULE_SETUP
#line 437 "src/src/glsl/glsl_lexer.ll"
KEYWORD(120, 130 || ES, PRECISION);
	YY_BREAK
/* Additional reserved words in GLSL 1.30. */
case 176:
YY_RULE_SETUP
#line 440 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 130, CASE);
	YY_BREAK
case 177:
YY_RULE_SETUP
#line 441 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, COMMON);
	YY_BREAK
case 178:
YY_RULE_SETUP
#line 442 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, PARTITION);
	YY_BREAK
case 179:
YY_RULE_SETUP
#line 443 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, ACTIVE);
	YY_BREAK
case 180:
YY_RULE_SETUP
#line 444 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130 || ES, 999, SUPERP);
	YY_BREAK
case 181:
YY_RULE_SETUP
#line 445 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 140, SAMPLERBUFFER);
	YY_BREAK
case 182:
YY_RULE_SETUP
#line 446 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, FILTER);
	YY_BREAK
case 183:
YY_RULE_SETUP
#line 447 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE1D);
	YY_BREAK
case 184:
YY_RULE_SETUP
#line 448 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE2D);
	YY_BREAK
case 185:
YY_RULE_SETUP
#line 449 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE3D);
	YY_BREAK
case 186:
YY_RULE_SETUP
#line 450 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGECUBE);
	YY_BREAK
case 187:
YY_RULE_SETUP
#line 451 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGE1D);
	YY_BREAK
case 188:
YY_RULE_SETUP
#line 452 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGE2D);
	YY_BREAK
case 189:
YY_RULE_SETUP
#line 453 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGE3D);
	YY_BREAK
case 190:
YY_RULE_SETUP
#line 454 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGECUBE);
	YY_BREAK
case 191:
YY_RULE_SETUP
#line 455 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGE1D);
	YY_BREAK
case 192:
YY_RULE_SETUP
#line 456 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGE2D);
	YY_BREAK
case 193:
YY_RULE_SETUP
#line 457 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGE3D);
	YY_BREAK
case 194:
YY_RULE_SETUP
#line 458 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGECUBE);
	YY_BREAK
case 195:
YY_RULE_SETUP
#line 459 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE1DARRAY);
	YY_BREAK
case 196:
YY_RULE_SETUP
#line 460 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE2DARRAY);
	YY_BREAK
case 197:
YY_RULE_SETUP
#line 461 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGE1DARRAY);
	YY_BREAK
case 198:
YY_RULE_SETUP
#line 462 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGE2DARRAY);
	YY_BREAK
case 199:
YY_RULE_SETUP
#line 463 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGE1DARRAY);
	YY_BREAK
case 200:
YY_RULE_SETUP
#line 464 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGE2DARRAY);
	YY_BREAK
case 201:
YY_RULE_SETUP
#line 465 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE1DSHADOW);
	YY_BREAK
case 202:
YY_RULE_SETUP
#line 466 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE2DSHADOW);
	YY_BREAK
case 203:
YY_RULE_SETUP
#line 467 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE1DARRAYSHADOW);
	YY_BREAK
case 204:
YY_RULE_SETUP
#line 468 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGE2DARRAYSHADOW);
	YY_BREAK
case 205:
YY_RULE_SETUP
#line 469 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IMAGEBUFFER);
	YY_BREAK
case 206:
YY_RULE_SETUP
#line 470 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, IIMAGEBUFFER);
	YY_BREAK
case 207:
YY_RULE_SETUP
#line 471 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 999, UIMAGEBUFFER);
	YY_BREAK
case 208:
YY_RULE_SETUP
#line 472 "src/src/glsl/glsl_lexer.ll"
KEYWORD(130, 140 || yyextra->ARB_uniform_buffer_object_enable, ROW_MAJOR);
	YY_BREAK
/* Additional reserved words in GLSL 1.40 */
case 209:
YY_RULE_SETUP
#line 475 "src/src/glsl/glsl_lexer.ll"
KEYWORD(140, 140, ISAMPLER2DRECT);
	YY_BREAK
case 210:
YY_RULE_SETUP
#line 476 "src/src/glsl/glsl_lexer.ll"
KEYWORD(140, 140, USAMPLER2DRECT);
	YY_BREAK
case 211:
YY_RULE_SETUP
#line 477 "src/src/glsl/glsl_lexer.ll"
KEYWORD(140, 140, ISAMPLERBUFFER);
	YY_BREAK
case 212:
YY_RULE_SETUP
#line 478 "src/src/glsl/glsl_lexer.ll"
KEYWORD(140, 140, USAMPLERBUFFER);
	YY_BREAK
case 213:
YY_RULE_SETUP
#line 480 "src/src/glsl/glsl_lexer.ll"
{
			    struct _mesa_glsl_parse_state *state = yyextra;
			    void *ctx = state;	
			    yylval->identifier = ralloc_strdup(ctx, yytext);
			    return classify_identifier(state, yytext);
			}
	YY_BREAK
case 214:
YY_RULE_SETUP
#line 487 "src/src/glsl/glsl_lexer.ll"
{ return yytext[0]; }
	YY_BREAK
case 215:
YY_RULE_SETUP
#line 489 "src/src/glsl/glsl_lexer.ll"
ECHO;
	YY_BREAK
#line 2662 "src/chromium_gensrc/mesa/glsl_lexer.cc"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(PP):
case YY_STATE_EOF(PRAGMA):
	yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = yyg->yy_hold_char;
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * _mesa_glsl_lex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state( yyscanner );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);

			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++yyg->yy_c_buf_p;
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = yyg->yy_last_accepting_cpos;
				yy_current_state = yyg->yy_last_accepting_state;
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer( yyscanner ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				yyg->yy_did_buffer_switch_on_eof = 0;

				if ( _mesa_glsl_wrap(yyscanner ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! yyg->yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				yyg->yy_c_buf_p =
					yyg->yytext_ptr + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state( yyscanner );

				yy_cp = yyg->yy_c_buf_p;
				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				yyg->yy_c_buf_p =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];

				yy_current_state = yy_get_previous_state( yyscanner );

				yy_cp = yyg->yy_c_buf_p;
				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
} /* end of _mesa_glsl_lex */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
static int yy_get_next_buffer (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	register char *source = yyg->yytext_ptr;
	register int number_to_move, i;
	int ret_val;

	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;

	else
		{
			int num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;

			int yy_c_buf_p_offset =
				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				int new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					_mesa_glsl_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = 0;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
						number_to_move - 1;

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			yyg->yy_n_chars, (size_t) num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
		}

	if ( yyg->yy_n_chars == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			_mesa_glsl_restart(yyin  ,yyscanner);
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) _mesa_glsl_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
	}

	yyg->yy_n_chars += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	yy_current_state = yyg->yy_start;
	yy_current_state += YY_AT_BOL();

	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			yyg->yy_last_accepting_state = yy_current_state;
			yyg->yy_last_accepting_cpos = yy_cp;
			}
		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 >= 867 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
{
	register int yy_is_jam;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
	register char *yy_cp = yyg->yy_c_buf_p;

	register YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		yyg->yy_last_accepting_state = yy_current_state;
		yyg->yy_last_accepting_cpos = yy_cp;
		}
	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 >= 867 )
			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 == 866);

	return yy_is_jam ? 0 : yy_current_state;
}

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (yyscan_t yyscanner)
#else
    static int input  (yyscan_t yyscanner)
#endif

{
	int c;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	*yyg->yy_c_buf_p = yyg->yy_hold_char;

	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
			/* This was really a NUL. */
			*yyg->yy_c_buf_p = '\0';

		else
			{ /* need more input */
			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
			++yyg->yy_c_buf_p;

			switch ( yy_get_next_buffer( yyscanner ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					_mesa_glsl_restart(yyin ,yyscanner);

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( _mesa_glsl_wrap(yyscanner ) )
						return EOF;

					if ( ! yyg->yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput(yyscanner);
#else
					return input(yyscanner);
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
	yyg->yy_hold_char = *++yyg->yy_c_buf_p;

	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * @param yyscanner The scanner object.
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void _mesa_glsl_restart  (FILE * input_file , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if ( ! YY_CURRENT_BUFFER ){
        _mesa_glsl_ensure_buffer_stack (yyscanner);
		YY_CURRENT_BUFFER_LVALUE =
            _mesa_glsl__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
	}

	_mesa_glsl__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
	_mesa_glsl__load_buffer_state(yyscanner );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * @param yyscanner The scanner object.
 */
    void _mesa_glsl__switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	/* TODO. We should be able to replace this entire function body
	 * with
	 *		_mesa_glsl_pop_buffer_state();
	 *		_mesa_glsl_push_buffer_state(new_buffer);
     */
	_mesa_glsl_ensure_buffer_stack (yyscanner);
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*yyg->yy_c_buf_p = yyg->yy_hold_char;
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	_mesa_glsl__load_buffer_state(yyscanner );

	/* We don't actually know whether we did this switch during
	 * EOF (_mesa_glsl_wrap()) processing, but the only time this flag
	 * is looked at is after _mesa_glsl_wrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	yyg->yy_did_buffer_switch_on_eof = 1;
}

static void _mesa_glsl__load_buffer_state  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	yyg->yy_hold_char = *yyg->yy_c_buf_p;
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * @param yyscanner The scanner object.
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE _mesa_glsl__create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) _mesa_glsl_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) _mesa_glsl_alloc(b->yy_buf_size + 2 ,yyscanner );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__create_buffer()" );

	b->yy_is_our_buffer = 1;

	_mesa_glsl__init_buffer(b,file ,yyscanner);

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with _mesa_glsl__create_buffer()
 * @param yyscanner The scanner object.
 */
    void _mesa_glsl__delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		_mesa_glsl_free((void *) b->yy_ch_buf ,yyscanner );

	_mesa_glsl_free((void *) b ,yyscanner );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a _mesa_glsl_restart() or at EOF.
 */
    static void _mesa_glsl__init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)

{
	int oerrno = errno;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	_mesa_glsl__flush_buffer(b ,yyscanner);

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then _mesa_glsl__init_buffer was _probably_
     * called from _mesa_glsl_restart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * @param yyscanner The scanner object.
 */
    void _mesa_glsl__flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		_mesa_glsl__load_buffer_state(yyscanner );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  @param yyscanner The scanner object.
 */
void _mesa_glsl_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if (new_buffer == NULL)
		return;

	_mesa_glsl_ensure_buffer_stack(yyscanner);

	/* This block is copied from _mesa_glsl__switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*yyg->yy_c_buf_p = yyg->yy_hold_char;
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		yyg->yy_buffer_stack_top++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from _mesa_glsl__switch_to_buffer. */
	_mesa_glsl__load_buffer_state(yyscanner );
	yyg->yy_did_buffer_switch_on_eof = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  @param yyscanner The scanner object.
 */
void _mesa_glsl_pop_buffer_state (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if (!YY_CURRENT_BUFFER)
		return;

	_mesa_glsl__delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if (yyg->yy_buffer_stack_top > 0)
		--yyg->yy_buffer_stack_top;

	if (YY_CURRENT_BUFFER) {
		_mesa_glsl__load_buffer_state(yyscanner );
		yyg->yy_did_buffer_switch_on_eof = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void _mesa_glsl_ensure_buffer_stack (yyscan_t yyscanner)
{
	int num_to_alloc;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if (!yyg->yy_buffer_stack) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
		num_to_alloc = 1;
		yyg->yy_buffer_stack = (struct yy_buffer_state**)_mesa_glsl_alloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								, yyscanner);
		if ( ! yyg->yy_buffer_stack )
			YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl_ensure_buffer_stack()" );
								  
		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
				
		yyg->yy_buffer_stack_max = num_to_alloc;
		yyg->yy_buffer_stack_top = 0;
		return;
	}

	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){

		/* Increase the buffer to prepare for a possible push. */
		int grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
		yyg->yy_buffer_stack = (struct yy_buffer_state**)_mesa_glsl_realloc
								(yyg->yy_buffer_stack,
								num_to_alloc * sizeof(struct yy_buffer_state*)
								, yyscanner);
		if ( ! yyg->yy_buffer_stack )
			YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl_ensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
		yyg->yy_buffer_stack_max = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * @param yyscanner The scanner object.
 * @return the newly allocated buffer state object. 
 */
YY_BUFFER_STATE _mesa_glsl__scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) _mesa_glsl_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__scan_buffer()" );

	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = 0;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	_mesa_glsl__switch_to_buffer(b ,yyscanner );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to _mesa_glsl_lex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * @param yyscanner The scanner object.
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       _mesa_glsl__scan_bytes() instead.
 */
YY_BUFFER_STATE _mesa_glsl__scan_string (yyconst char * yystr , yyscan_t yyscanner)
{
    
	return _mesa_glsl__scan_bytes(yystr,strlen(yystr) ,yyscanner);
}

/** Setup the input buffer state to scan the given bytes. The next call to _mesa_glsl_lex() will
 * scan from a @e copy of @a bytes.
 * @param yybytes the byte buffer to scan
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
 * @param yyscanner The scanner object.
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE _mesa_glsl__scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) _mesa_glsl_alloc(n ,yyscanner );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = _mesa_glsl__scan_buffer(buf,n ,yyscanner);
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in _mesa_glsl__scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
{
    	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		yytext[yyleng] = yyg->yy_hold_char; \
		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
		*yyg->yy_c_buf_p = '\0'; \
		yyleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the user-defined data for this scanner.
 * @param yyscanner The scanner object.
 */
YY_EXTRA_TYPE _mesa_glsl_get_extra  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyextra;
}

/** Get the current line number.
 * @param yyscanner The scanner object.
 */
int _mesa_glsl_get_lineno  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    
        if (! YY_CURRENT_BUFFER)
            return 0;
    
    return yylineno;
}

/** Get the current column number.
 * @param yyscanner The scanner object.
 */
int _mesa_glsl_get_column  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    
        if (! YY_CURRENT_BUFFER)
            return 0;
    
    return yycolumn;
}

/** Get the input stream.
 * @param yyscanner The scanner object.
 */
FILE *_mesa_glsl_get_in  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyin;
}

/** Get the output stream.
 * @param yyscanner The scanner object.
 */
FILE *_mesa_glsl_get_out  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyout;
}

/** Get the length of the current token.
 * @param yyscanner The scanner object.
 */
int _mesa_glsl_get_leng  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyleng;
}

/** Get the current token.
 * @param yyscanner The scanner object.
 */

char *_mesa_glsl_get_text  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yytext;
}

/** Set the user-defined data. This data is never touched by the scanner.
 * @param user_defined The data to be associated with this scanner.
 * @param yyscanner The scanner object.
 */
void _mesa_glsl_set_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyextra = user_defined ;
}

/** Set the current line number.
 * @param line_number
 * @param yyscanner The scanner object.
 */
void _mesa_glsl_set_lineno (int  line_number , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

        /* lineno is only valid if an input buffer exists. */
        if (! YY_CURRENT_BUFFER )
           yy_fatal_error( "_mesa_glsl_set_lineno called with no buffer" , yyscanner); 
    
    yylineno = line_number;
}

/** Set the current column.
 * @param line_number
 * @param yyscanner The scanner object.
 */
void _mesa_glsl_set_column (int  column_no , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

        /* column is only valid if an input buffer exists. */
        if (! YY_CURRENT_BUFFER )
           yy_fatal_error( "_mesa_glsl_set_column called with no buffer" , yyscanner); 
    
    yycolumn = column_no;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param in_str A readable stream.
 * @param yyscanner The scanner object.
 * @see _mesa_glsl__switch_to_buffer
 */
void _mesa_glsl_set_in (FILE *  in_str , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyin = in_str ;
}

void _mesa_glsl_set_out (FILE *  out_str , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyout = out_str ;
}

int _mesa_glsl_get_debug  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yy_flex_debug;
}

void _mesa_glsl_set_debug (int  bdebug , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yy_flex_debug = bdebug ;
}

/* Accessor methods for yylval and yylloc */

YYSTYPE * _mesa_glsl_get_lval  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yylval;
}

void _mesa_glsl_set_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yylval = yylval_param;
}

YYLTYPE *_mesa_glsl_get_lloc  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yylloc;
}
    
void _mesa_glsl_set_lloc (YYLTYPE *  yylloc_param , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yylloc = yylloc_param;
}
    
/* User-visible API */

/* _mesa_glsl_lex_init is special because it creates the scanner itself, so it is
 * the ONLY reentrant function that doesn't take the scanner as the last argument.
 * That's why we explicitly handle the declaration, instead of using our macros.
 */

int _mesa_glsl_lex_init(yyscan_t* ptr_yy_globals)

{
    if (ptr_yy_globals == NULL){
        errno = EINVAL;
        return 1;
    }

    *ptr_yy_globals = (yyscan_t) _mesa_glsl_alloc ( sizeof( struct yyguts_t ), NULL );

    if (*ptr_yy_globals == NULL){
        errno = ENOMEM;
        return 1;
    }

    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));

    return yy_init_globals ( *ptr_yy_globals );
}

/* _mesa_glsl_lex_init_extra has the same functionality as _mesa_glsl_lex_init, but follows the
 * convention of taking the scanner as the last argument. Note however, that
 * this is a *pointer* to a scanner, as it will be allocated by this call (and
 * is the reason, too, why this function also must handle its own declaration).
 * The user defined value in the first argument will be available to _mesa_glsl_alloc in
 * the yyextra field.
 */

int _mesa_glsl_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )

{
    struct yyguts_t dummy_yyguts;

    _mesa_glsl_set_extra (yy_user_defined, &dummy_yyguts);

    if (ptr_yy_globals == NULL){
        errno = EINVAL;
        return 1;
    }
	
    *ptr_yy_globals = (yyscan_t) _mesa_glsl_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
	
    if (*ptr_yy_globals == NULL){
        errno = ENOMEM;
        return 1;
    }
    
    /* By setting to 0xAA, we expose bugs in
    yy_init_globals. Leave at 0x00 for releases. */
    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
    
    _mesa_glsl_set_extra (yy_user_defined, *ptr_yy_globals);
    
    return yy_init_globals ( *ptr_yy_globals );
}

static int yy_init_globals (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from _mesa_glsl_lex_destroy(), so don't allocate here.
     */

    yyg->yy_buffer_stack = 0;
    yyg->yy_buffer_stack_top = 0;
    yyg->yy_buffer_stack_max = 0;
    yyg->yy_c_buf_p = (char *) 0;
    yyg->yy_init = 0;
    yyg->yy_start = 0;

    yyg->yy_start_stack_ptr = 0;
    yyg->yy_start_stack_depth = 0;
    yyg->yy_start_stack =  NULL;

/* Defined in main.c */
#ifdef YY_STDINIT
    yyin = stdin;
    yyout = stdout;
#else
    yyin = (FILE *) 0;
    yyout = (FILE *) 0;
#endif

    /* For future reference: Set errno on error, since we are called by
     * _mesa_glsl_lex_init()
     */
    return 0;
}

/* _mesa_glsl_lex_destroy is for both reentrant and non-reentrant scanners. */
int _mesa_glsl_lex_destroy  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		_mesa_glsl__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		_mesa_glsl_pop_buffer_state(yyscanner);
	}

	/* Destroy the stack itself. */
	_mesa_glsl_free(yyg->yy_buffer_stack ,yyscanner);
	yyg->yy_buffer_stack = NULL;

    /* Destroy the start condition stack. */
        _mesa_glsl_free(yyg->yy_start_stack ,yyscanner );
        yyg->yy_start_stack = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * _mesa_glsl_lex() is called, initialization will occur. */
    yy_init_globals( yyscanner);

    /* Destroy the main struct (reentrant only). */
    _mesa_glsl_free ( yyscanner , yyscanner );
    yyscanner = NULL;
    return 0;
}

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *_mesa_glsl_alloc (yy_size_t  size , yyscan_t yyscanner)
{
	return (void *) malloc( size );
}

void *_mesa_glsl_realloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
{
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return (void *) realloc( (char *) ptr, size );
}

void _mesa_glsl_free (void * ptr , yyscan_t yyscanner)
{
	free( (char *) ptr );	/* see _mesa_glsl_realloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 489 "src/src/glsl/glsl_lexer.ll"



int
classify_identifier(struct _mesa_glsl_parse_state *state, const char *name)
{
   if (state->symbols->get_variable(name) || state->symbols->get_function(name))
      return IDENTIFIER;
   else if (state->symbols->get_type(name))
      return TYPE_IDENTIFIER;
   else
      return NEW_IDENTIFIER;
}

void
_mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, const char *string)
{
   _mesa_glsl_lex_init_extra(state,& state->scanner);
   _mesa_glsl__scan_string(string,state->scanner);
}

void
_mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state)
{
   _mesa_glsl_lex_destroy(state->scanner);
}

